From d58600d4cbce582719de42fa26215c62e927e92f Mon Sep 17 00:00:00 2001 From: Conor Stewart Date: Mon, 30 Jun 2025 15:33:42 -0700 Subject: [PATCH 01/38] initial --- types/codegen/README.md | 0 .../modelEnumInterfaces.mustache | 26 + types/codegen/openapitools.json | 28 + types/codegen/package-lock.json | 2611 +++++++++++++++++ types/codegen/package.json | 27 + types/codegen/schema/chatTypes.json | 194 ++ types/codegen/tsconfig.json | 15 + 7 files changed, 2901 insertions(+) create mode 100644 types/codegen/README.md create mode 100644 types/codegen/custom-templates/modelEnumInterfaces.mustache create mode 100644 types/codegen/openapitools.json create mode 100644 types/codegen/package-lock.json create mode 100644 types/codegen/package.json create mode 100644 types/codegen/schema/chatTypes.json create mode 100644 types/codegen/tsconfig.json diff --git a/types/codegen/README.md b/types/codegen/README.md new file mode 100644 index 00000000..e69de29b diff --git a/types/codegen/custom-templates/modelEnumInterfaces.mustache b/types/codegen/custom-templates/modelEnumInterfaces.mustache new file mode 100644 index 00000000..5c508270 --- /dev/null +++ b/types/codegen/custom-templates/modelEnumInterfaces.mustache @@ -0,0 +1,26 @@ +{{#stringEnums}} +/** + * {{#lambda.indented_star_1}}{{{unescapedDescription}}}{{/lambda.indented_star_1}} + * @export + * @type {string} + */ +export type {{classname}} = {{#allowableValues}}{{#enumVars}}{{{value}}}{{^-last}} | {{/-last}}{{/enumVars}}{{/allowableValues}}; +{{/stringEnums}}{{^stringEnums}} +/** + * {{#lambda.indented_star_1}}{{{unescapedDescription}}}{{/lambda.indented_star_1}} + * @export + */ +export const {{classname}} = { +{{#allowableValues}} +{{#enumVars}} + {{#enumDescription}} + /** + * {{enumDescription}} + */ + {{/enumDescription}} + {{{name}}}: {{{value}}}{{^-last}},{{/-last}} +{{/enumVars}} +{{/allowableValues}} +} as const; +export type {{classname}} = typeof {{classname}}[keyof typeof {{classname}}]; +{{/stringEnums}} \ No newline at end of file diff --git a/types/codegen/openapitools.json b/types/codegen/openapitools.json new file mode 100644 index 00000000..910b49e2 --- /dev/null +++ b/types/codegen/openapitools.json @@ -0,0 +1,28 @@ +{ + "$schema": "node_modules/@openapitools/openapi-generator-cli/config.schema.json", + "spaces": 2, + "generator-cli": { + "version": "7.14.0", + "generators": { + "typescript-fetch": { + "generatorName": "typescript-fetch", + "output": "#{cwd}/generated", + "inputSpec": "#{cwd}/schema/chatTypes.json", + "templateDir": "#{cwd}/custom-templates", + "additionalProperties": { + "supportsES6": true, + "modelPropertyNaming": "original", + "enumPropertyNaming": "original", + "npmName": "@json-schema-openapi/generated", + "npmVersion": "1.0.0", + "withInterfaces": true, + "nullSafeAdditionalProps": true, + "withoutRuntimeChecks": true, + "stringEnums": true, + "disallowAdditionalPropertiesIfNotPresent": false, + "useSingleRequestParameter": true + } + } + } + } +} \ No newline at end of file diff --git a/types/codegen/package-lock.json b/types/codegen/package-lock.json new file mode 100644 index 00000000..0eaba911 --- /dev/null +++ b/types/codegen/package-lock.json @@ -0,0 +1,2611 @@ +{ + "name": "json-schema-openapi-converter", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "json-schema-openapi-converter", + "version": "0.1.0", + "license": "MIT", + "devDependencies": { + "@openapitools/openapi-generator-cli": "^2.21.0", + "@types/node": "^24.0.4", + "ts-node": "^10.9.2", + "typescript": "^5.8.3" + } + }, + "node_modules/@babel/runtime": { + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz", + "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@lukeed/csprng": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", + "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@nestjs/axios": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@nestjs/axios/-/axios-4.0.0.tgz", + "integrity": "sha512-1cB+Jyltu/uUPNQrpUimRHEQHrnQrpLzVj6dU3dgn6iDDDdahr10TgHFGTmw5VuJ9GzKZsCLDL78VSwJAs/9JQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@nestjs/common": "^10.0.0 || ^11.0.0", + "axios": "^1.3.1", + "rxjs": "^7.0.0" + } + }, + "node_modules/@nestjs/common": { + "version": "11.1.3", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-11.1.3.tgz", + "integrity": "sha512-ogEK+GriWodIwCw6buQ1rpcH4Kx+G7YQ9EwuPySI3rS05pSdtQ++UhucjusSI9apNidv+QURBztJkRecwwJQXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "file-type": "21.0.0", + "iterare": "1.2.1", + "load-esm": "1.0.2", + "tslib": "2.8.1", + "uid": "2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "class-transformer": ">=0.4.1", + "class-validator": ">=0.13.2", + "reflect-metadata": "^0.1.12 || ^0.2.0", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } + } + }, + "node_modules/@nestjs/core": { + "version": "11.1.3", + "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-11.1.3.tgz", + "integrity": "sha512-5lTni0TCh8x7bXETRD57pQFnKnEg1T6M+VLE7wAmyQRIecKQU+2inRGZD+A4v2DC1I04eA0WffP0GKLxjOKlzw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@nuxt/opencollective": "0.4.1", + "fast-safe-stringify": "2.1.1", + "iterare": "1.2.1", + "path-to-regexp": "8.2.0", + "tslib": "2.8.1", + "uid": "2.0.2" + }, + "engines": { + "node": ">= 20" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^11.0.0", + "@nestjs/microservices": "^11.0.0", + "@nestjs/platform-express": "^11.0.0", + "@nestjs/websockets": "^11.0.0", + "reflect-metadata": "^0.1.12 || ^0.2.0", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "@nestjs/microservices": { + "optional": true + }, + "@nestjs/platform-express": { + "optional": true + }, + "@nestjs/websockets": { + "optional": true + } + } + }, + "node_modules/@nuxt/opencollective": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@nuxt/opencollective/-/opencollective-0.4.1.tgz", + "integrity": "sha512-GXD3wy50qYbxCJ652bDrDzgMr3NFEkIS374+IgFQKkCvk9yiYcLvX2XDYr7UyQxf4wK0e+yqDYRubZ0DtOxnmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "consola": "^3.2.3" + }, + "bin": { + "opencollective": "bin/opencollective.js" + }, + "engines": { + "node": "^14.18.0 || >=16.10.0", + "npm": ">=5.10.0" + } + }, + "node_modules/@nuxtjs/opencollective": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz", + "integrity": "sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "consola": "^2.15.0", + "node-fetch": "^2.6.1" + }, + "bin": { + "opencollective": "bin/opencollective.js" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/@nuxtjs/opencollective/node_modules/consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@openapitools/openapi-generator-cli": { + "version": "2.21.0", + "resolved": "https://registry.npmjs.org/@openapitools/openapi-generator-cli/-/openapi-generator-cli-2.21.0.tgz", + "integrity": "sha512-NdDvCd7hya+UucxH7G94Jf6tmA6641I4CF/T3xtFhM+NQQNWAP5tpiOBN4Ub9ocU6cCgQgXdWl4EpwlEwW7JDQ==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@nestjs/axios": "4.0.0", + "@nestjs/common": "11.1.3", + "@nestjs/core": "11.1.3", + "@nuxtjs/opencollective": "0.3.2", + "axios": "1.10.0", + "chalk": "4.1.2", + "commander": "8.3.0", + "compare-versions": "4.1.4", + "concurrently": "6.5.1", + "console.table": "0.10.0", + "fs-extra": "11.3.0", + "glob": "11.0.3", + "inquirer": "8.2.6", + "lodash": "4.17.21", + "proxy-agent": "6.5.0", + "reflect-metadata": "0.2.2", + "rxjs": "7.8.2", + "tslib": "2.8.1" + }, + "bin": { + "openapi-generator-cli": "main.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/openapi_generator" + } + }, + "node_modules/@tokenizer/inflate": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.2.7.tgz", + "integrity": "sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "fflate": "^0.8.2", + "token-types": "^6.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.0.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.4.tgz", + "integrity": "sha512-ulyqAkrhnuNq9pB76DRBTkcS6YsmDALy6Ua63V8OhrOBgbcYt6IOdzpw5P1+dyRIyMerzLkeYWBeOXPpA9GMAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.8.0" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz", + "integrity": "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/basic-ftp": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", + "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true, + "license": "MIT" + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/compare-versions": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-4.1.4.tgz", + "integrity": "sha512-FemMreK9xNyL8gQevsdRMrvO4lFCkQP7qbuktn1q8ndcNk1+0mz7lgE7b/sNvbhVgY4w6tMN1FDp6aADjqw2rw==", + "dev": true, + "license": "MIT" + }, + "node_modules/concurrently": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.5.1.tgz", + "integrity": "sha512-FlSwNpGjWQfRwPLXvJ/OgysbBxPkWpiVjy1042b0U7on7S7qwwMIILRj7WTN1mTgqa582bG6NFuScOoh6Zgdag==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "date-fns": "^2.16.1", + "lodash": "^4.17.21", + "rxjs": "^6.6.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^16.2.0" + }, + "bin": { + "concurrently": "bin/concurrently.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/concurrently/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/console.table": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/console.table/-/console.table-0.10.0.tgz", + "integrity": "sha512-dPyZofqggxuvSf7WXvNjuRfnsOk1YazkVP8FdxH4tcH2c37wc79/Yl6Bhr7Lsu00KMgy2ql/qCMuNu8xctZM8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "easy-table": "1.1.0" + }, + "engines": { + "node": "> 0.10" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/easy-table": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.1.0.tgz", + "integrity": "sha512-oq33hWOSSnl2Hoh00tZWaIPi1ievrD9aFG82/IgjlycAnW9hHx5PkJiXpxPsgEE+H7BsbVQXFVFST8TEXS6/pA==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "wcwidth": ">=1.0.1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "dev": true, + "license": "MIT" + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-type": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-21.0.0.tgz", + "integrity": "sha512-ek5xNX2YBYlXhiUXui3D/BXa3LdqPmoLJ7rqEx2bKJ7EAUEfmXgW0Das7Dc6Nr9MvqaOnIqiPV0mZk/r/UpNAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tokenizer/inflate": "^0.2.7", + "strtok3": "^10.2.2", + "token-types": "^6.0.0", + "uint8array-extras": "^1.4.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz", + "integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-extra": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-uri": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.4.tgz", + "integrity": "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/glob": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", + "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.0.3", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/iterare": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", + "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=6" + } + }, + "node_modules/jackspeak": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/load-esm": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/load-esm/-/load-esm-1.0.2.tgz", + "integrity": "sha512-nVAvWk/jeyrWyXEAs84mpQCYccxRqgKY4OznLuJhJCa0XsPSfdOIr2zvBZEj3IHEHbX97jjscKRRV539bW0Gpw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + }, + { + "type": "buymeacoffee", + "url": "https://buymeacoffee.com/borewit" + } + ], + "license": "MIT", + "engines": { + "node": ">=13.2.0" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", + "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", + "dev": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true, + "license": "ISC" + }, + "node_modules/netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pac-proxy-agent": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.6", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-resolver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "dev": true, + "license": "MIT", + "dependencies": { + "degenerator": "^5.0.0", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-to-regexp": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", + "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/proxy-agent": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.6", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.1.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.5.tgz", + "integrity": "sha512-iF+tNDQla22geJdTyJB1wM/qrX9DMRwWrciEPwWLPRWAUEM8sQiyxgckLxWT1f7+9VabJS0jTGGr4QgBuvi6Ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spawn-command": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", + "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", + "dev": true + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strtok3": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.1.tgz", + "integrity": "sha512-3JWEZM6mfix/GCJBBUrkA8p2Id2pBkyTkVCJKto55w080QBKZ+8R171fGrbiSp+yMO/u6F8/yUh7K4V9K+YCnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tokenizer/token": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/token-types": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.0.0.tgz", + "integrity": "sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uid": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz", + "integrity": "sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lukeed/csprng": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/uint8array-extras": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.4.0.tgz", + "integrity": "sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/undici-types": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", + "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", + "dev": true, + "license": "MIT" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + } + } +} diff --git a/types/codegen/package.json b/types/codegen/package.json new file mode 100644 index 00000000..ff41fca0 --- /dev/null +++ b/types/codegen/package.json @@ -0,0 +1,27 @@ +{ + "name": "json-schema-openapi-converter", + "version": "0.1.0", + "description": "Convert TypeScript interfaces to JSON Schema and generate TypeScript using OpenAPI Generator", + "main": "src/validate-generated.ts", + "scripts": { + "build": "tsc", + "test": "echo \"Error: no test specified\" && exit 1", + "generate": "openapi-generator-cli generate", + "generate:direct": "openapi-generator-cli generate -g typescript-fetch -i schema/chatTypes.json -o generated -t custom-templates --additional-properties=supportsES6=true,modelPropertyNaming=original,enumPropertyNaming=original,npmName=@json-schema-openapi/generated,npmVersion=1.0.0,withInterfaces=true,nullSafeAdditionalProps=true,withoutRuntimeChecks=true,stringEnums=true,disallowAdditionalPropertiesIfNotPresent=false,useSingleRequestParameter=true", + "validate": "ts-node src/validate-generated.ts" + }, + "keywords": [ + "openapi", + "json-schema", + "typescript", + "generator" + ], + "author": "", + "license": "MIT", + "devDependencies": { + "@openapitools/openapi-generator-cli": "^2.21.0", + "@types/node": "^24.0.4", + "ts-node": "^10.9.2", + "typescript": "^5.8.3" + } +} diff --git a/types/codegen/schema/chatTypes.json b/types/codegen/schema/chatTypes.json new file mode 100644 index 00000000..f038553c --- /dev/null +++ b/types/codegen/schema/chatTypes.json @@ -0,0 +1,194 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "ChatItemAction API", + "version": "1.0.0", + "description": "API definition for ChatItemAction interface", + "x-constants": [ + { + "name": "OPEN_WORKSPACE_INDEX_SETTINGS_BUTTON_ID", + "value": "open-settings-for-ws-index" + } + ] + }, + "paths": {}, + "components": { + "schemas": { + "ChatItemAction": { + "type": "object", + "required": [ + "pillText" + ], + "properties": { + "pillText": { + "type": "string", + "description": "The text to display in the pill" + }, + "prompt": { + "type": "string", + "description": "This is a test of the documentation. How much documentation can I add? What else can I put here?" + }, + "disabled": { + "type": "boolean", + "description": "Whether the action is disabled" + }, + "description": { + "type": "string", + "description": "Optional description of the action" + }, + "type": { + "type": "string", + "description": "Optional type of the action" + } + }, + "additionalProperties": false + }, + "SourceLink": { + "type": "object", + "required": [ + "title", + "url" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the source link" + }, + "url": { + "type": "string", + "description": "The URL of the source link" + }, + "body": { + "type": "string", + "description": "Optional body text for the source link" + } + }, + "additionalProperties": false + }, + "ContentSpan": { + "type": "object", + "required": [ + "start", + "end" + ], + "properties": { + "start": { + "type": "number", + "description": "Start position of the content span" + }, + "end": { + "type": "number", + "description": "End position of the content span" + } + }, + "description": "Content span information" + }, + "ReferenceTrackerInformation": { + "type": "object", + "required": [ + "information" + ], + "properties": { + "licenseName": { + "type": "string", + "description": "Optional name of the license" + }, + "repository": { + "type": "string", + "description": "Optional repository information" + }, + "url": { + "type": "string", + "description": "Optional URL reference" + }, + "recommendationContentSpan": { + "$ref": "#/components/schemas/ContentSpan", + "description": "Optional content span information" + }, + "information": { + "type": "string", + "description": "Required information about the reference" + } + }, + "additionalProperties": false + }, + "ChatPrompt": { + "type": "object", + "properties": { + "prompt": { + "type": "string", + "description": "Optional prompt text" + }, + "escapedPrompt": { + "type": "string", + "description": "Optional escaped prompt text" + }, + "command": { + "type": "string", + "description": "Optional command" + } + }, + "additionalProperties": false + }, + "FeedbackPayload": { + "type": "object", + "required": [ + "messageId", + "tabId", + "selectedOption" + ], + "properties": { + "messageId": { + "type": "string", + "description": "ID of the message" + }, + "tabId": { + "type": "string", + "description": "ID of the tab" + }, + "selectedOption": { + "type": "string", + "description": "Selected feedback option" + }, + "comment": { + "type": "string", + "description": "Optional comment" + } + }, + "additionalProperties": false + }, + "CodeSelectionType": { + "type": "string", + "enum": [ + "selection", + "block" + ], + "description": "Type of code selection" + }, + "PositionCursor": { + "type": "object", + "properties": { + "position": { + "type": "Position" + } + }, + "required": ["position"] +}, +"RangeCursor": { + "type": "object", + "properties": { + "range": { + "type": "Range" + } + }, + "required": ["range"] +}, +"CursorState": { + "oneOf": [ + { "$ref": "#/components/schemas/PositionCursor" }, + { "$ref": "#/components/schemas/RangeCursor" } + ] +} + } + } +} \ No newline at end of file diff --git a/types/codegen/tsconfig.json b/types/codegen/tsconfig.json new file mode 100644 index 00000000..1f7fcb3c --- /dev/null +++ b/types/codegen/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "es2018", + "module": "commonjs", + "outDir": "./dist", + "rootDir": "./src", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "**/*.test.ts"] +} \ No newline at end of file From 939650799bd2f8d5ff2346ffe2a47553dcbb00df Mon Sep 17 00:00:00 2001 From: Conor Stewart Date: Mon, 30 Jun 2025 16:42:06 -0700 Subject: [PATCH 02/38] external definitions allowed --- types/codegen/.gitignore | 2 + .../custom-templates/models.index.mustache | 31 ++++++++++ types/codegen/openapitools.json | 8 +++ types/codegen/schema/chatTypes.json | 62 +++++++++---------- 4 files changed, 72 insertions(+), 31 deletions(-) create mode 100644 types/codegen/.gitignore create mode 100644 types/codegen/custom-templates/models.index.mustache diff --git a/types/codegen/.gitignore b/types/codegen/.gitignore new file mode 100644 index 00000000..20fdc282 --- /dev/null +++ b/types/codegen/.gitignore @@ -0,0 +1,2 @@ +generated/ +typescript-template-bank/ \ No newline at end of file diff --git a/types/codegen/custom-templates/models.index.mustache b/types/codegen/custom-templates/models.index.mustache new file mode 100644 index 00000000..b0eedaad --- /dev/null +++ b/types/codegen/custom-templates/models.index.mustache @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +import { Position, Range, TextDocumentIdentifier } from './lsp' + +{{#models}} +{{#model}} +{{^withoutRuntimeChecks}} +export * from './{{{ classFilename }}}{{importFileExtension}}'; +{{#useSagaAndRecords}} +{{^isEnum}} +export * from './{{{ classFilename }}}Record{{importFileExtension}}'; +{{/isEnum}} +{{/useSagaAndRecords}} +{{/withoutRuntimeChecks}} +{{#withoutRuntimeChecks}} +{{#isEnum}} +{{>modelEnumInterfaces}} +{{/isEnum}} +{{^isEnum}} +{{#oneOf}} +{{#-first}} +{{>modelOneOfInterfaces}} +{{/-first}} +{{/oneOf}} +{{^oneOf}} +{{>modelGenericInterfaces}} +{{/oneOf}} +{{/isEnum}} +{{/withoutRuntimeChecks}} +{{/model}} +{{/models}} diff --git a/types/codegen/openapitools.json b/types/codegen/openapitools.json index 910b49e2..653f5a7a 100644 --- a/types/codegen/openapitools.json +++ b/types/codegen/openapitools.json @@ -9,6 +9,14 @@ "output": "#{cwd}/generated", "inputSpec": "#{cwd}/schema/chatTypes.json", "templateDir": "#{cwd}/custom-templates", + "typeMappings": { + "Position": "Position", + "Range": "Range" + }, + "importMappings": { + "Position": "../../lsp", + "Range": "../../lsp" + }, "additionalProperties": { "supportsES6": true, "modelPropertyNaming": "original", diff --git a/types/codegen/schema/chatTypes.json b/types/codegen/schema/chatTypes.json index f038553c..ce0bce07 100644 --- a/types/codegen/schema/chatTypes.json +++ b/types/codegen/schema/chatTypes.json @@ -3,13 +3,7 @@ "info": { "title": "ChatItemAction API", "version": "1.0.0", - "description": "API definition for ChatItemAction interface", - "x-constants": [ - { - "name": "OPEN_WORKSPACE_INDEX_SETTINGS_BUTTON_ID", - "value": "open-settings-for-ws-index" - } - ] + "description": "API definition for ChatItemAction interface" }, "paths": {}, "components": { @@ -26,7 +20,7 @@ }, "prompt": { "type": "string", - "description": "This is a test of the documentation. How much documentation can I add? What else can I put here?" + "description": "Optional prompt text for the action" }, "disabled": { "type": "boolean", @@ -166,29 +160,35 @@ "description": "Type of code selection" }, "PositionCursor": { - "type": "object", - "properties": { - "position": { - "type": "Position" - } - }, - "required": ["position"] -}, -"RangeCursor": { - "type": "object", - "properties": { - "range": { - "type": "Range" - } - }, - "required": ["range"] -}, -"CursorState": { - "oneOf": [ - { "$ref": "#/components/schemas/PositionCursor" }, - { "$ref": "#/components/schemas/RangeCursor" } - ] -} + "type": "object", + "required": ["position"], + "properties": { + "position": { + "type": "Position" + } + }, + "additionalProperties": false + }, + "RangeCursor": { + "type": "object", + "required": ["range"], + "properties": { + "range": { + "type": "Range" + } + }, + "additionalProperties": false + }, + "CursorState": { + "oneOf": [ + { + "$ref": "#/components/schemas/PositionCursor" + }, + { + "$ref": "#/components/schemas/RangeCursor" + } + ] + } } } } \ No newline at end of file From b5b753d34471563a19a8baa0b15cf090eba4b493 Mon Sep 17 00:00:00 2001 From: Conor Stewart Date: Mon, 30 Jun 2025 17:53:16 -0700 Subject: [PATCH 03/38] added inheritance --- types/codegen/openapitools.json | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/types/codegen/openapitools.json b/types/codegen/openapitools.json index 653f5a7a..5bb9be39 100644 --- a/types/codegen/openapitools.json +++ b/types/codegen/openapitools.json @@ -11,11 +11,13 @@ "templateDir": "#{cwd}/custom-templates", "typeMappings": { "Position": "Position", - "Range": "Range" + "Range": "Range", + "TextDocumentIdentifier": "TextDocumentIdentifier" }, "importMappings": { "Position": "../../lsp", - "Range": "../../lsp" + "Range": "../../lsp", + "TextDocumentIdentifier": "../../lsp" }, "additionalProperties": { "supportsES6": true, @@ -29,7 +31,8 @@ "stringEnums": true, "disallowAdditionalPropertiesIfNotPresent": false, "useSingleRequestParameter": true - } + }, + "openapi-normalizer": "REF_AS_PARENT_IN_ALLOF=true" } } } From ff5abb55d0c80c8da94b1f2a95dec017bc3cda8b Mon Sep 17 00:00:00 2001 From: Conor Stewart Date: Tue, 1 Jul 2025 17:02:33 -0700 Subject: [PATCH 04/38] feat: inheritance added to relevant definitions --- .../custom-templates/models.index.mustache | 2 +- types/codegen/openapitools.json | 75 +- types/codegen/schema/chatTypes.json | 1299 ++++++++++++++++- types/codegen/tsconfig.json | 31 +- 4 files changed, 1311 insertions(+), 96 deletions(-) diff --git a/types/codegen/custom-templates/models.index.mustache b/types/codegen/custom-templates/models.index.mustache index b0eedaad..43e1bf00 100644 --- a/types/codegen/custom-templates/models.index.mustache +++ b/types/codegen/custom-templates/models.index.mustache @@ -1,6 +1,6 @@ /* tslint:disable */ /* eslint-disable */ -import { Position, Range, TextDocumentIdentifier } from './lsp' +import { Position, Range, TextDocumentIdentifier } from '../../../../lsp' {{#models}} {{#model}} diff --git a/types/codegen/openapitools.json b/types/codegen/openapitools.json index 5bb9be39..6127d1be 100644 --- a/types/codegen/openapitools.json +++ b/types/codegen/openapitools.json @@ -1,39 +1,40 @@ { - "$schema": "node_modules/@openapitools/openapi-generator-cli/config.schema.json", - "spaces": 2, - "generator-cli": { - "version": "7.14.0", - "generators": { - "typescript-fetch": { - "generatorName": "typescript-fetch", - "output": "#{cwd}/generated", - "inputSpec": "#{cwd}/schema/chatTypes.json", - "templateDir": "#{cwd}/custom-templates", - "typeMappings": { - "Position": "Position", - "Range": "Range", - "TextDocumentIdentifier": "TextDocumentIdentifier" - }, - "importMappings": { - "Position": "../../lsp", - "Range": "../../lsp", - "TextDocumentIdentifier": "../../lsp" - }, - "additionalProperties": { - "supportsES6": true, - "modelPropertyNaming": "original", - "enumPropertyNaming": "original", - "npmName": "@json-schema-openapi/generated", - "npmVersion": "1.0.0", - "withInterfaces": true, - "nullSafeAdditionalProps": true, - "withoutRuntimeChecks": true, - "stringEnums": true, - "disallowAdditionalPropertiesIfNotPresent": false, - "useSingleRequestParameter": true - }, - "openapi-normalizer": "REF_AS_PARENT_IN_ALLOF=true" - } + "$schema": "node_modules/@openapitools/openapi-generator-cli/config.schema.json", + "spaces": 2, + "generator-cli": { + "version": "7.14.0", + "generators": { + "typescript-fetch": { + "generatorName": "typescript-fetch", + "output": "#{cwd}/generated", + "inputSpec": "#{cwd}/schema/chatTypes.json", + "templateDir": "#{cwd}/custom-templates", + "typeMappings": { + "Position": "Position", + "Range": "Range", + "TextDocumentIdentifier": "TextDocumentIdentifier" + }, + "importMappings": { + "Position": "../../lsp", + "Range": "../../lsp", + "TextDocumentIdentifier": "../../lsp" + }, + "additionalProperties": { + "supportsES6": true, + "modelPropertyNaming": "original", + "enumPropertyNaming": "original", + "npmName": "@json-schema-openapi/generated", + "npmVersion": "1.0.0", + "withInterfaces": true, + "nullSafeAdditionalProps": false, + "withoutRuntimeChecks": true, + "stringEnums": true, + "disallowAdditionalPropertiesIfNotPresent": false, + "useSingleRequestParameter": true, + "hasImports": true + }, + "openapi-normalizer": "REF_AS_PARENT_IN_ALLOF=true" + } + } } - } -} \ No newline at end of file +} diff --git a/types/codegen/schema/chatTypes.json b/types/codegen/schema/chatTypes.json index ce0bce07..c8f421cc 100644 --- a/types/codegen/schema/chatTypes.json +++ b/types/codegen/schema/chatTypes.json @@ -10,39 +10,29 @@ "schemas": { "ChatItemAction": { "type": "object", - "required": [ - "pillText" - ], + "required": ["pillText"], "properties": { "pillText": { - "type": "string", - "description": "The text to display in the pill" + "type": "string" }, "prompt": { - "type": "string", - "description": "Optional prompt text for the action" + "type": "string" }, "disabled": { - "type": "boolean", - "description": "Whether the action is disabled" + "type": "boolean" }, "description": { - "type": "string", - "description": "Optional description of the action" + "type": "string" }, "type": { - "type": "string", - "description": "Optional type of the action" + "type": "string" } }, "additionalProperties": false }, "SourceLink": { "type": "object", - "required": [ - "title", - "url" - ], + "required": ["title", "url"], "properties": { "title": { "type": "string", @@ -61,10 +51,7 @@ }, "ContentSpan": { "type": "object", - "required": [ - "start", - "end" - ], + "required": ["start", "end"], "properties": { "start": { "type": "number", @@ -79,29 +66,22 @@ }, "ReferenceTrackerInformation": { "type": "object", - "required": [ - "information" - ], + "required": ["information"], "properties": { "licenseName": { - "type": "string", - "description": "Optional name of the license" + "type": "string" }, "repository": { - "type": "string", - "description": "Optional repository information" + "type": "string" }, "url": { - "type": "string", - "description": "Optional URL reference" + "type": "string" }, "recommendationContentSpan": { - "$ref": "#/components/schemas/ContentSpan", - "description": "Optional content span information" + "$ref": "#/components/schemas/ContentSpan" }, "information": { - "type": "string", - "description": "Required information about the reference" + "type": "string" } }, "additionalProperties": false @@ -126,11 +106,7 @@ }, "FeedbackPayload": { "type": "object", - "required": [ - "messageId", - "tabId", - "selectedOption" - ], + "required": ["messageId", "tabId", "selectedOption"], "properties": { "messageId": { "type": "string", @@ -153,10 +129,7 @@ }, "CodeSelectionType": { "type": "string", - "enum": [ - "selection", - "block" - ], + "enum": ["selection", "block"], "description": "Type of code selection" }, "PositionCursor": { @@ -188,7 +161,1245 @@ "$ref": "#/components/schemas/RangeCursor" } ] + }, + "PartialResultToken": { + "oneOf": [{ "type": "number" }, { "type": "string" }] + }, + "PartialResultParams": { + "type": "object", + "properties": { + "token": { "$ref": "#/components/schemas/PartialResultToken" } + }, + "additionalProperties": false + }, + "ChatParams": { + "allOf": [ + { "$ref": "#/components/schemas/PartialResultParams" }, + { + "type": "object", + "required": ["tabId", "prompt"], + "properties": { + "tabId": { "type": "string" }, + "prompt": { "$ref": "#/components/schemas/ChatPrompt" }, + "cursorState": { + "type": "array", + "items": { "$ref": "#/components/schemas/CursorState" } + }, + "textDocument": { "type": "TextDocumentIdentifier" }, + "context": { + "type": "array", + "items": { "$ref": "#/components/schemas/QuickActionCommand" }, + "description": "Context of the current chat message to be handled by the servers. Context can be added through QuickActionCommand triggered by `@`." + } + }, + "additionalProperties": false + } + ] + }, + "InlineChatParams": { + "allOf": [ + { "$ref": "#/components/schemas/PartialResultParams" }, + { + "type": "object", + "required": ["prompt"], + "properties": { + "prompt": { "$ref": "#/components/schemas/ChatPrompt" }, + "cursorState": { + "type": "array", + "items": { "$ref": "#/components/schemas/CursorState" } + }, + "textDocument": { "type": "TextDocumentIdentifier" } + }, + "additionalProperties": false + } + ] + }, + "EncryptedChatParams": { + "allOf": [ + { "$ref": "#/components/schemas/PartialResultParams" }, + { + "type": "object", + "required": ["message"], + "properties": { + "message": { "type": "string" } + }, + "additionalProperties": false + } + ] + }, + "FileDetails": { + "type": "object", + "properties": { + "description": { "type": "string" }, + "fullPath": { "type": "string" }, + "lineRanges": { + "type": "array", + "items": { + "type": "object", + "required": ["first", "second"], + "properties": { + "first": { "type": "number" }, + "second": { "type": "number" } + }, + "additionalProperties": false + } + }, + "changes": { + "type": "object", + "properties": { + "added": { "type": "number" }, + "deleted": { "type": "number" }, + "total": { "type": "number" } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "FileList": { + "type": "object", + "properties": { + "rootFolderTitle": { "type": "string" }, + "filePaths": { + "type": "array", + "items": { "type": "string" } + }, + "deletedFiles": { + "type": "array", + "items": { "type": "string" } + }, + "details": { + "type": "object", + "additionalProperties": { "$ref": "#/components/schemas/FileDetails" } + } + }, + "additionalProperties": false + }, + "Status": { + "type": "string", + "enum": ["info", "success", "warning", "error"] + }, + "ContextCommandIconType": { + "type": "string", + "enum": ["file", "folder", "code-block", "list-add", "magic"] + }, + "IconType": { + "oneOf": [{ "$ref": "#/components/schemas/ContextCommandIconType" }, { "type": "string" }], + "description": "Can be ContextCommandIconType or other values like 'help', 'trash', 'search', 'calendar', or any string" + }, + "ButtonPartialStatus": { + "type": "string", + "enum": ["main", "primary", "clear"] + }, + "ButtonStatus": { + "oneOf": [ + { "$ref": "#/components/schemas/ButtonPartialStatus" }, + { "$ref": "#/components/schemas/Status" } + ] + }, + "Button": { + "type": "object", + "required": ["id"], + "properties": { + "id": { "type": "string" }, + "text": { "type": "string" }, + "description": { "type": "string" }, + "icon": { "$ref": "#/components/schemas/IconType" }, + "disabled": { "type": "boolean" }, + "keepCardAfterClick": { "type": "boolean" }, + "status": { "$ref": "#/components/schemas/ButtonStatus" } + }, + "additionalProperties": false + }, + "ChatMessage": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["answer", "prompt", "system-prompt", "directive", "tool"], + "description": "will default to 'answer'" + }, + "header": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["answer", "prompt", "system-prompt", "directive", "tool"] + }, + "buttons": { + "type": "array", + "items": { "$ref": "#/components/schemas/Button" } + }, + "body": { "type": "string" }, + "messageId": { "type": "string" }, + "canBeVoted": { "type": "boolean" }, + "relatedContent": { + "type": "object", + "properties": { + "title": { "type": "string" }, + "content": { + "type": "array", + "items": { "$ref": "#/components/schemas/SourceLink" } + } + }, + "required": ["content"], + "additionalProperties": false + }, + "summary": { + "type": "object", + "properties": { + "content": { "$ref": "#/components/schemas/ChatMessage" }, + "collapsedContent": { + "type": "array", + "items": { "$ref": "#/components/schemas/ChatMessage" } + } + }, + "additionalProperties": false + }, + "followUp": { + "type": "object", + "properties": { + "text": { "type": "string" }, + "options": { + "type": "array", + "items": { "$ref": "#/components/schemas/ChatItemAction" } + } + }, + "additionalProperties": false + }, + "codeReference": { + "type": "array", + "items": { "$ref": "#/components/schemas/ReferenceTrackerInformation" } + }, + "fileList": { "$ref": "#/components/schemas/FileList" }, + "contextList": { "$ref": "#/components/schemas/FileList" }, + "icon": { "$ref": "#/components/schemas/IconType" }, + "status": { + "type": "object", + "properties": { + "status": { "$ref": "#/components/schemas/Status" }, + "icon": { "$ref": "#/components/schemas/IconType" }, + "text": { "type": "string" } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "buttons": { + "type": "array", + "items": { "$ref": "#/components/schemas/Button" } + }, + "body": { "type": "string" }, + "messageId": { "type": "string" }, + "canBeVoted": { "type": "boolean" }, + "relatedContent": { + "type": "object", + "properties": { + "title": { "type": "string" }, + "content": { + "type": "array", + "items": { "$ref": "#/components/schemas/SourceLink" } + } + }, + "required": ["content"], + "additionalProperties": false + }, + "summary": { + "type": "object", + "properties": { + "content": { "$ref": "#/components/schemas/ChatMessage" }, + "collapsedContent": { + "type": "array", + "items": { "$ref": "#/components/schemas/ChatMessage" } + } + }, + "additionalProperties": false + }, + "followUp": { + "type": "object", + "properties": { + "text": { "type": "string" }, + "options": { + "type": "array", + "items": { "$ref": "#/components/schemas/ChatItemAction" } + } + }, + "additionalProperties": false + }, + "codeReference": { + "type": "array", + "items": { "$ref": "#/components/schemas/ReferenceTrackerInformation" } + }, + "fileList": { "$ref": "#/components/schemas/FileList" }, + "contextList": { "$ref": "#/components/schemas/FileList" } + }, + "additionalProperties": false + }, + "ChatResult": { + "description": "Represents the result of a chat interaction. A ChatResult extends ChatMessage and can optionally include additional messages that provide context, reasoning, or intermediate steps that led to the final response. Response for chat prompt request can be empty, if server chooses to handle the request and push updates asynchronously.", + "allOf": [ + { "$ref": "#/components/schemas/ChatMessage" }, + { + "type": "object", + "properties": { + "additionalMessages": { + "type": "array", + "items": { "$ref": "#/components/schemas/ChatMessage" }, + "description": "Optional array of supporting messages that provide additional context for the primary message. These can include: - Reasoning steps that led to the final answer - Tool usage and outputs during processing - Intermediate calculations or decision points - Status updates about the processing - Human interactions that influenced the response. The primary message (this ChatResult itself) should contain the final, complete response, while additionalMessages provides transparency into how that response was generated. UI implementations should typically display the primary message prominently, with additionalMessages shown as supporting information when relevant." + } + }, + "additionalProperties": false + } + ] + }, + "InlineChatResult": { + "allOf": [ + { "$ref": "#/components/schemas/ChatMessage" }, + { + "type": "object", + "properties": { + "requestId": { "type": "string" } + }, + "additionalProperties": false + } + ] + }, + "EndChatParams": { + "type": "object", + "required": ["tabId"], + "properties": { + "tabId": { "type": "string" } + }, + "additionalProperties": false + }, + "QuickActionCommand": { + "type": "object", + "description": "Configuration object for chat quick action.", + "required": ["command"], + "properties": { + "command": { "type": "string" }, + "description": { "type": "string" }, + "placeholder": { "type": "string" }, + "icon": { "$ref": "#/components/schemas/IconType" } + }, + "additionalProperties": false + }, + "QuickActionCommandGroup": { + "type": "object", + "description": "Configuration object for registering chat quick actions groups.", + "required": ["commands"], + "properties": { + "groupName": { "type": "string" }, + "commands": { + "type": "array", + "items": { "$ref": "#/components/schemas/QuickActionCommand" } + } + }, + "additionalProperties": false + }, + "QuickActions": { + "type": "object", + "description": "Registration options for a Chat QuickActionRequest.", + "required": ["quickActionsCommandGroups"], + "properties": { + "quickActionsCommandGroups": { + "type": "array", + "items": { "$ref": "#/components/schemas/QuickActionCommandGroup" }, + "description": "The chat quick actions groups and commands to be executed on server." + } + }, + "additionalProperties": false + }, + "TabData": { + "type": "object", + "required": ["messages"], + "properties": { + "placeholderText": { "type": "string" }, + "messages": { + "type": "array", + "items": { "$ref": "#/components/schemas/ChatMessage" } + } + }, + "additionalProperties": false + }, + "ChatOptions": { + "type": "object", + "description": "Registration options regarding chat data. Currently contains the available quick actions provided by a server and the default tab data to be shown to the user in the chat UI.", + "properties": { + "quickActions": { "$ref": "#/components/schemas/QuickActions" }, + "mcpServers": { "type": "boolean" }, + "modelSelection": { "type": "boolean" }, + "history": { "type": "boolean" }, + "export": { "type": "boolean" }, + "chatNotifications": { + "type": "array", + "items": { "$ref": "#/components/schemas/ChatMessage" } + } + }, + "additionalProperties": false + }, + "QuickActionParams": { + "allOf": [ + { "$ref": "#/components/schemas/PartialResultParams" }, + { + "type": "object", + "required": ["tabId", "quickAction"], + "properties": { + "tabId": { "type": "string" }, + "quickAction": { "type": "string" }, + "prompt": { "type": "string" }, + "cursorState": { + "type": "array", + "items": { "$ref": "#/components/schemas/CursorState" } + }, + "textDocument": { "type": "TextDocumentIdentifier" } + }, + "additionalProperties": false + } + ] + }, + "EncryptedQuickActionParams": { + "allOf": [ + { "$ref": "#/components/schemas/PartialResultParams" }, + { + "type": "object", + "required": ["message"], + "properties": { + "message": { "type": "string" } + }, + "additionalProperties": false + } + ] + }, + "QuickActionResult": { + "allOf": [{ "$ref": "#/components/schemas/ChatMessage" }], + "description": "Currently the QuickActionResult and ChatResult share the same shape. Response for quick actions request can be empty, if server chooses to handle the request and push updates asynchronously." + }, + "FeedbackParams": { + "type": "object", + "required": ["tabId", "feedbackPayload"], + "properties": { + "tabId": { "type": "string" }, + "feedbackPayload": { "$ref": "#/components/schemas/FeedbackPayload" }, + "eventId": { "type": "string" } + }, + "additionalProperties": false + }, + "TabEventParams": { + "type": "object", + "required": ["tabId"], + "properties": { + "tabId": { "type": "string" } + }, + "additionalProperties": false + }, + "TabAddParams": { + "type": "object", + "allOf": [{ "$ref": "#/components/schemas/TabEventParams" }], + "properties": { + "restoredTab": { "type": "boolean" } + }, + "additionalProperties": false + }, + "TabChangeParams": { + "allOf": [{ "$ref": "#/components/schemas/TabEventParams" }] + }, + "TabRemoveParams": { + "allOf": [{ "$ref": "#/components/schemas/TabEventParams" }] + }, + "InsertToCursorPositionParams": { + "type": "object", + "required": ["tabId", "messageId"], + "properties": { + "tabId": { "type": "string" }, + "messageId": { "type": "string" }, + "cursorPosition": { "type": "Position" }, + "textDocument": { "type": "TextDocumentIdentifier" }, + "code": { "type": "string" }, + "type": { "$ref": "#/components/schemas/CodeSelectionType" }, + "referenceTrackerInformation": { + "type": "array", + "items": { "$ref": "#/components/schemas/ReferenceTrackerInformation" } + }, + "eventId": { "type": "string" }, + "codeBlockIndex": { "type": "number" }, + "totalCodeBlocks": { "type": "number" } + }, + "additionalProperties": false + }, + "InfoLinkClickParams": { + "type": "object", + "required": ["tabId", "link"], + "properties": { + "tabId": { "type": "string" }, + "link": { "type": "string" }, + "eventId": { "type": "string" } + }, + "additionalProperties": false + }, + "LinkClickParams": { + "allOf": [ + { "$ref": "#/components/schemas/InfoLinkClickParams" }, + { + "type": "object", + "required": ["messageId"], + "properties": { + "messageId": { "type": "string" } + }, + "additionalProperties": false + } + ] + }, + "SourceLinkClickParams": { + "allOf": [ + { "$ref": "#/components/schemas/InfoLinkClickParams" }, + { + "type": "object", + "required": ["messageId"], + "properties": { + "messageId": { "type": "string" } + }, + "additionalProperties": false + } + ] + }, + "FollowUpClickParams": { + "type": "object", + "required": ["tabId", "messageId", "followUp"], + "properties": { + "tabId": { "type": "string" }, + "messageId": { "type": "string" }, + "followUp": { "$ref": "#/components/schemas/ChatItemAction" } + }, + "additionalProperties": false + }, + "OpenTabParams": { + "type": "object", + "description": "Defines parameters for opening a tab. Opens existing tab if `tabId` is provided, otherwise creates a new tab with options provided in `options` parameter and opens it.", + "properties": { + "tabId": { "type": "string" }, + "newTabOptions": { + "type": "object", + "properties": { + "state": { "$ref": "#/components/schemas/TabState" }, + "data": { "$ref": "#/components/schemas/TabData" } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "OpenTabResult": { + "allOf": [{ "$ref": "#/components/schemas/TabEventParams" }] + }, + "ButtonClickParams": { + "type": "object", + "required": ["tabId", "messageId", "buttonId"], + "properties": { + "tabId": { "type": "string" }, + "messageId": { "type": "string" }, + "buttonId": { "type": "string" } + }, + "additionalProperties": false + }, + "ButtonClickResult": { + "type": "object", + "required": ["success"], + "properties": { + "success": { "type": "boolean" }, + "failureReason": { "type": "string" } + }, + "additionalProperties": false + }, + "TabState": { + "type": "object", + "properties": { + "inProgress": { "type": "boolean" }, + "cancellable": { "type": "boolean" } + }, + "additionalProperties": false + }, + "ChatUpdateParams": { + "type": "object", + "required": ["tabId"], + "properties": { + "tabId": { "type": "string" }, + "state": { "$ref": "#/components/schemas/TabState" }, + "data": { "$ref": "#/components/schemas/TabData" } + }, + "additionalProperties": false + }, + "ChatOptionsUpdateParams": { + "type": "object", + "required": ["tabId"], + "description": "Server-initiated chat metadata updates.", + "properties": { + "tabId": { "type": "string" }, + "chatNotifications": { + "type": "array", + "items": { "$ref": "#/components/schemas/ChatMessage" }, + "description": "Processes changes of developer profiles." + }, + "modelId": { + "type": "string", + "description": "The last selected modelId for the conversation. This is used to allow the server to programmatically update the selected model for persistance across sessions." + } + }, + "additionalProperties": false + }, + "FileAction": { + "type": "string", + "enum": ["accept-change", "reject-change"] + }, + "FileClickParams": { + "type": "object", + "required": ["tabId", "filePath"], + "properties": { + "tabId": { "type": "string" }, + "filePath": { "type": "string" }, + "action": { "$ref": "#/components/schemas/FileAction" }, + "messageId": { "type": "string" }, + "fullPath": { "type": "string" } + }, + "additionalProperties": false + }, + "ContextCommandGroup": { + "type": "object", + "required": ["commands"], + "properties": { + "groupName": { "type": "string" }, + "commands": { + "type": "array", + "items": { "$ref": "#/components/schemas/ContextCommand" } + } + }, + "additionalProperties": false + }, + "ContextCommand": { + "allOf": [ + { "$ref": "#/components/schemas/QuickActionCommand" }, + { + "type": "object", + "properties": { + "id": { "type": "string" }, + "route": { + "type": "array", + "items": { "type": "string" } + }, + "label": { + "type": "string", + "enum": ["file", "folder", "code", "image"] + }, + "children": { + "type": "array", + "items": { "$ref": "#/components/schemas/ContextCommandGroup" } + }, + "content": { + "type": "string", + "format": "byte" + } + }, + "additionalProperties": false + } + ] + }, + "ContextCommandParams": { + "type": "object", + "required": ["contextCommandGroups"], + "properties": { + "contextCommandGroups": { + "type": "array", + "items": { "$ref": "#/components/schemas/ContextCommandGroup" } + } + }, + "additionalProperties": false + }, + "PinnedContextParams": { + "allOf": [ + { "$ref": "#/components/schemas/ContextCommandParams" }, + { + "type": "object", + "required": ["tabId"], + "properties": { + "tabId": { "type": "string" }, + "textDocument": { "type": "TextDocumentIdentifier" }, + "showRules": { "type": "boolean" } + }, + "additionalProperties": false + } + ] + }, + "CreatePromptParams": { + "type": "object", + "required": ["promptName"], + "properties": { + "promptName": { "type": "string" }, + "isRule": { "type": "boolean" } + }, + "additionalProperties": false + }, + "OpenFileDialogParams": { + "type": "object", + "required": ["tabId", "fileType"], + "properties": { + "tabId": { "type": "string" }, + "fileType": { "$ref": "#/components/schemas/FileDialogType" }, + "insertPosition": { "type": "number" } + }, + "additionalProperties": false + }, + "OpenFileDialogResult": { + "type": "object", + "required": ["tabId", "fileType", "filePaths"], + "properties": { + "tabId": { "type": "string" }, + "fileType": { "$ref": "#/components/schemas/FileDialogType" }, + "filePaths": { + "type": "array", + "items": { "type": "string" } + }, + "errorMessage": { "type": "string" }, + "insertPosition": { "type": "number" } + }, + "additionalProperties": false + }, + "DropFilesParams": { + "type": "object", + "required": ["tabId", "files", "insertPosition"], + "properties": { + "tabId": { "type": "string" }, + "files": { "$ref": "#/components/schemas/FileList" }, + "insertPosition": { "type": "number" }, + "errorMessage": { "type": "string" } + }, + "additionalProperties": false + }, + "ProgrammingLanguage": { + "type": "object", + "required": ["languageName"], + "properties": { + "languageName": { "type": "string" } + }, + "additionalProperties": false + }, + "InlineChatUserDecision": { + "type": "string", + "enum": ["ACCEPT", "REJECT", "DISMISS"] + }, + "TextBasedFilterType": { + "type": "string", + "enum": ["textarea", "textinput", "numericinput"] + }, + "OptionBasedFilterType": { + "type": "string", + "enum": ["select", "radiogroup"] + }, + "FileDialogType": { + "type": "string", + "enum": ["image", ""] + }, + "RuleType": { + "type": "string", + "enum": ["folder", "rule"] + }, + "RuleActiveState": { + "oneOf": [{ "type": "boolean" }, { "type": "string", "enum": ["indeterminate"] }] + }, + "InlineChatResultParams": { + "type": "object", + "required": ["requestId"], + "properties": { + "requestId": { "type": "string" }, + "inputLength": { "type": "number" }, + "selectedLines": { "type": "number" }, + "suggestionAddedChars": { "type": "number" }, + "suggestionAddedLines": { "type": "number" }, + "suggestionDeletedChars": { "type": "number" }, + "suggestionDeletedLines": { "type": "number" }, + "codeIntent": { "type": "boolean" }, + "userDecision": { "$ref": "#/components/schemas/InlineChatUserDecision" }, + "responseStartLatency": { "type": "number" }, + "responseEndLatency": { "type": "number" }, + "programmingLanguage": { "$ref": "#/components/schemas/ProgrammingLanguage" } + }, + "additionalProperties": false + }, + + "FilterValue": { + "type": "string" + }, + "BaseProperties": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "placeholder": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "icon": { + "$ref": "#/components/schemas/IconType" + } + }, + "required": ["id"], + "additionalProperties": false + }, + "SelectOption": { + "type": "object", + "properties": { + "value": { + "type": "string" + }, + "label": { + "type": "string" + } + }, + "required": ["value", "label"] + }, + "TextBasedFilter": { + "allOf": [ + { "$ref": "#/components/schemas/BaseProperties" }, + { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/TextBasedFilterType" + } + }, + "required": ["type"] + } + ] + }, + "OptionBasedFilter": { + "allOf": [ + { "$ref": "#/components/schemas/BaseProperties" }, + { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/OptionBasedFilterType" + }, + "options": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SelectOption" + } + } + }, + "required": ["type", "options"] + } + ] + }, + "FilterOption": { + "oneOf": [ + { "$ref": "#/components/schemas/TextBasedFilter" }, + { "$ref": "#/components/schemas/OptionBasedFilter" } + ] + }, + "Action": { + "type": "object", + "required": ["id", "text"], + "properties": { + "id": { "type": "string" }, + "icon": { "$ref": "#/components/schemas/IconType" }, + "text": { "type": "string" } + }, + "additionalProperties": false + }, + "ConversationItem": { + "type": "object", + "required": ["id"], + "properties": { + "id": { "type": "string" }, + "icon": { "$ref": "#/components/schemas/IconType" }, + "description": { "type": "string" }, + "actions": { + "type": "array", + "items": { "$ref": "#/components/schemas/Action" } + } + }, + "additionalProperties": false + }, + "ConversationItemGroup": { + "type": "object", + "properties": { + "groupName": { "type": "string" }, + "icon": { "$ref": "#/components/schemas/IconType" }, + "items": { + "type": "array", + "items": { "$ref": "#/components/schemas/ConversationItem" } + } + }, + "additionalProperties": false + }, + "ListConversationsParams": { + "type": "object", + "properties": { + "filter": { + "type": "object", + "additionalProperties": { "$ref": "#/components/schemas/FilterValue" } + } + }, + "additionalProperties": false + }, + "ListMcpServersParams": { + "type": "object", + "properties": { + "filter": { + "type": "object", + "additionalProperties": { "$ref": "#/components/schemas/FilterValue" } + } + }, + "additionalProperties": false + }, + "ListRulesParams": { + "type": "object", + "required": ["tabId"], + "properties": { + "tabId": { "type": "string" } + }, + "additionalProperties": false + }, + "ListRulesResult": { + "type": "object", + "required": ["tabId", "rules"], + "properties": { + "tabId": { "type": "string" }, + "header": { + "type": "object", + "required": ["title"], + "properties": { + "title": { "type": "string" } + }, + "additionalProperties": false + }, + "filterOptions": { + "type": "array", + "items": { "$ref": "#/components/schemas/FilterOption" } + }, + "rules": { + "type": "array", + "items": { "$ref": "#/components/schemas/RulesFolder" } + } + }, + "additionalProperties": false + }, + "RulesFolder": { + "type": "object", + "required": ["active", "rules"], + "properties": { + "folderName": { "type": "string" }, + "active": { + "$ref": "#/components/schemas/RuleActiveState", + "description": "Represents the active state of the folder: - true: all rules in the folder are active - false: all rules in the folder are inactive - 'indeterminate': rules inside the folder have mixed active states (some active, some inactive), similar to a parent checkbox in a nested checkbox list having an indeterminate state" + }, + "rules": { + "type": "array", + "items": { "$ref": "#/components/schemas/Rule" } + } + }, + "additionalProperties": false + }, + "Rule": { + "type": "object", + "required": ["active", "name", "id"], + "properties": { + "active": { "type": "boolean" }, + "name": { "type": "string" }, + "id": { "type": "string" } + }, + "additionalProperties": false + }, + "RuleClickParams": { + "type": "object", + "required": ["tabId", "type", "id"], + "properties": { + "tabId": { "type": "string" }, + "type": { "$ref": "#/components/schemas/RuleType" }, + "id": { "type": "string" } + }, + "additionalProperties": false + }, + "RuleClickResult": { + "allOf": [ + { "$ref": "#/components/schemas/RuleClickParams" }, + { + "type": "object", + "required": ["success"], + "properties": { + "success": { "type": "boolean" } + }, + "additionalProperties": false + } + ] + }, + "ActiveEditorChangedParams": { + "type": "object", + "properties": { + "cursorState": { + "type": "array", + "items": { "$ref": "#/components/schemas/CursorState" } + }, + "textDocument": { "type": "TextDocumentIdentifier" } + }, + "additionalProperties": false + }, + "ConversationsList": { + "type": "object", + "required": ["list"], + "properties": { + "header": { + "type": "object", + "required": ["title"], + "properties": { + "title": { "type": "string" } + }, + "additionalProperties": false + }, + "filterOptions": { + "type": "array", + "items": { "$ref": "#/components/schemas/FilterOption" } + }, + "list": { + "type": "array", + "items": { "$ref": "#/components/schemas/ConversationItemGroup" } + } + }, + "additionalProperties": false + }, + "ListConversationsResult": { + "allOf": [ + { "$ref": "#/components/schemas/ConversationsList" }, + { + "type": "object", + "properties": {}, + "additionalProperties": false + } + ] + }, + "McpServerStatus": { + "type": "string", + "enum": ["INITIALIZING", "ENABLED", "FAILED", "DISABLED"] + }, + "DetailedListItem": { + "type": "object", + "required": ["title"], + "properties": { + "title": { "type": "string" }, + "description": { "type": "string" }, + "groupActions": { "type": "boolean" }, + "children": { + "type": "array", + "items": { "$ref": "#/components/schemas/DetailedListGroup" } + } + }, + "additionalProperties": false + }, + "DetailedListGroup": { + "type": "object", + "properties": { + "groupName": { "type": "string" }, + "children": { + "type": "array", + "items": { "$ref": "#/components/schemas/DetailedListItem" } + }, + "actions": { + "type": "array", + "items": { "$ref": "#/components/schemas/Action" } + }, + "icon": { "$ref": "#/components/schemas/IconType" } + }, + "additionalProperties": false + }, + "ListMcpServersResultHeaderStatus": { + "type": "object", + "properties": { + "icon": { "$ref": "#/components/schemas/IconType" }, + "title": { "type": "string" }, + "status": { "$ref": "#/components/schemas/Status" } + }, + "additionalProperties": false + }, + "ListMcpServersResultHeader": { + "type": "object", + "properties": { + "title": { "type": "string" }, + "description": { "type": "string" }, + "status": { "$ref": "#/components/schemas/ListMcpServersResultHeaderStatus" } + }, + "additionalProperties": false + }, + "ListMcpServersResult": { + "type": "object", + "required": ["list"], + "properties": { + "header": { "$ref": "#/components/schemas/ListMcpServersResultHeader" }, + "list": { + "type": "array", + "items": { "$ref": "#/components/schemas/DetailedListGroup" } + }, + "filterOptions": { + "type": "array", + "items": { "$ref": "#/components/schemas/FilterOption" } + } + }, + "additionalProperties": false + }, + "ConversationAction": { + "type": "string", + "enum": ["delete", "export"] + }, + "ConversationClickParams": { + "type": "object", + "required": ["id"], + "properties": { + "id": { "type": "string" }, + "action": { "$ref": "#/components/schemas/ConversationAction" } + }, + "additionalProperties": false + }, + "ConversationClickResult": { + "allOf": [ + { "$ref": "#/components/schemas/ConversationClickParams" }, + { + "type": "object", + "required": ["success"], + "properties": { + "success": { "type": "boolean" } + }, + "additionalProperties": false + } + ] + }, + "McpServerClickParams": { + "type": "object", + "required": ["id"], + "properties": { + "id": { "type": "string" }, + "title": { "type": "string" }, + "optionsValues": { + "type": "object", + "additionalProperties": { "type": "string" } + } + }, + "additionalProperties": false + }, + "McpServerClickResult": { + "allOf": [ + { "$ref": "#/components/schemas/McpServerClickParams" }, + { + "type": "object", + "properties": { + "filterOptions": { + "type": "array", + "items": { "$ref": "#/components/schemas/FilterOption" } + }, + "filterActions": { + "type": "array", + "items": { "$ref": "#/components/schemas/Button" } + }, + "list": { + "type": "array", + "items": { "$ref": "#/components/schemas/DetailedListGroup" } + }, + "header": { + "type": "object", + "properties": { + "title": { "type": "string" }, + "icon": { "$ref": "#/components/schemas/IconType" }, + "status": { + "type": "object", + "properties": { + "icon": { "$ref": "#/components/schemas/IconType" }, + "title": { "type": "string" }, + "description": { "type": "string" }, + "status": { "$ref": "#/components/schemas/Status" } + }, + "additionalProperties": false + }, + "description": { "type": "string" }, + "actions": { + "type": "array", + "items": { "$ref": "#/components/schemas/Action" } + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + ] + }, + "TabBarAction": { + "type": "string", + "enum": ["export"] + }, + "TabBarActionParams": { + "type": "object", + "required": ["action"], + "properties": { + "tabId": { "type": "string" }, + "action": { "$ref": "#/components/schemas/TabBarAction" } + }, + "additionalProperties": false + }, + "TabBarActionResult": { + "allOf": [ + { "$ref": "#/components/schemas/TabBarActionParams" }, + { + "type": "object", + "required": ["success"], + "properties": { + "success": { "type": "boolean" } + }, + "additionalProperties": false + } + ] + }, + "GetSerializedChatParams": { + "allOf": [ + { "$ref": "#/components/schemas/TabEventParams" }, + { + "type": "object", + "required": ["format"], + "properties": { + "format": { + "type": "string", + "enum": ["html", "markdown"] + } + }, + "additionalProperties": false + } + ] + }, + "GetSerializedChatResult": { + "type": "object", + "required": ["content"], + "properties": { + "content": { "type": "string" } + }, + "additionalProperties": false + }, + "PromptInputOptionChangeParams": { + "type": "object", + "required": ["tabId", "optionsValues"], + "properties": { + "tabId": { "type": "string" }, + "optionsValues": { + "type": "object", + "additionalProperties": { "type": "string" } + }, + "eventId": { "type": "string" } + }, + "additionalProperties": false } } } -} \ No newline at end of file +} diff --git a/types/codegen/tsconfig.json b/types/codegen/tsconfig.json index 1f7fcb3c..d7baf496 100644 --- a/types/codegen/tsconfig.json +++ b/types/codegen/tsconfig.json @@ -1,15 +1,18 @@ { - "compilerOptions": { - "target": "es2018", - "module": "commonjs", - "outDir": "./dist", - "rootDir": "./src", - "strict": true, - "esModuleInterop": true, - "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true - }, - "include": ["src/**/*"], - "exclude": ["node_modules", "**/*.test.ts"] -} \ No newline at end of file + "compilerOptions": { + "target": "ES2018", + "module": "CommonJS", + "moduleResolution": "node", + "esModuleInterop": true, + "resolveJsonModule": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "types": ["node"], + "baseUrl": ".", + "paths": { + "*": ["node_modules/*"] + } + }, + "include": ["*.ts"], + "exclude": ["node_modules"] +} From 7d68a302a62ce620e8913b3d720b2facac99b9b7 Mon Sep 17 00:00:00 2001 From: Conor Stewart Date: Wed, 2 Jul 2025 16:11:29 -0700 Subject: [PATCH 05/38] feat: renamed generated output package, included post processing --- types/codegen/constants.ts | 1 + types/codegen/openapitools.json | 2 +- types/codegen/package.json | 50 ++++++++++++++++----------------- types/codegen/post-generate.js | 37 ++++++++++++++++++++++++ 4 files changed, 64 insertions(+), 26 deletions(-) create mode 100644 types/codegen/constants.ts create mode 100755 types/codegen/post-generate.js diff --git a/types/codegen/constants.ts b/types/codegen/constants.ts new file mode 100644 index 00000000..c727504a --- /dev/null +++ b/types/codegen/constants.ts @@ -0,0 +1 @@ +export type EndChatResult = boolean diff --git a/types/codegen/openapitools.json b/types/codegen/openapitools.json index 6127d1be..6c33ee0f 100644 --- a/types/codegen/openapitools.json +++ b/types/codegen/openapitools.json @@ -23,7 +23,7 @@ "supportsES6": true, "modelPropertyNaming": "original", "enumPropertyNaming": "original", - "npmName": "@json-schema-openapi/generated", + "npmName": "@aws/language-server-runtimes-generated-types", "npmVersion": "1.0.0", "withInterfaces": true, "nullSafeAdditionalProps": false, diff --git a/types/codegen/package.json b/types/codegen/package.json index ff41fca0..ecd683c2 100644 --- a/types/codegen/package.json +++ b/types/codegen/package.json @@ -1,27 +1,27 @@ { - "name": "json-schema-openapi-converter", - "version": "0.1.0", - "description": "Convert TypeScript interfaces to JSON Schema and generate TypeScript using OpenAPI Generator", - "main": "src/validate-generated.ts", - "scripts": { - "build": "tsc", - "test": "echo \"Error: no test specified\" && exit 1", - "generate": "openapi-generator-cli generate", - "generate:direct": "openapi-generator-cli generate -g typescript-fetch -i schema/chatTypes.json -o generated -t custom-templates --additional-properties=supportsES6=true,modelPropertyNaming=original,enumPropertyNaming=original,npmName=@json-schema-openapi/generated,npmVersion=1.0.0,withInterfaces=true,nullSafeAdditionalProps=true,withoutRuntimeChecks=true,stringEnums=true,disallowAdditionalPropertiesIfNotPresent=false,useSingleRequestParameter=true", - "validate": "ts-node src/validate-generated.ts" - }, - "keywords": [ - "openapi", - "json-schema", - "typescript", - "generator" - ], - "author": "", - "license": "MIT", - "devDependencies": { - "@openapitools/openapi-generator-cli": "^2.21.0", - "@types/node": "^24.0.4", - "ts-node": "^10.9.2", - "typescript": "^5.8.3" - } + "name": "json-schema-openapi-converter", + "version": "0.1.0", + "description": "Convert TypeScript interfaces to JSON Schema and generate TypeScript using OpenAPI Generator", + "main": "src/validate-generated.ts", + "scripts": { + "build": "tsc", + "test": "echo \"Error: no test specified\" && exit 1", + "generate": "openapi-generator-cli generate && node post-generate.js", + "generate:direct": "openapi-generator-cli generate -g typescript-fetch -i schema/chatTypes.json -o generated -t custom-templates --additional-properties=supportsES6=true,modelPropertyNaming=original,enumPropertyNaming=original,npmName=@json-schema-openapi/generated,npmVersion=1.0.0,withInterfaces=true,nullSafeAdditionalProps=true,withoutRuntimeChecks=true,stringEnums=true,disallowAdditionalPropertiesIfNotPresent=false,useSingleRequestParameter=true && node post-generate.js", + "validate": "ts-node src/validate-generated.ts" + }, + "keywords": [ + "openapi", + "json-schema", + "typescript", + "generator" + ], + "author": "", + "license": "MIT", + "devDependencies": { + "@openapitools/openapi-generator-cli": "^2.21.0", + "@types/node": "^24.0.4", + "ts-node": "^10.9.2", + "typescript": "^5.8.3" + } } diff --git a/types/codegen/post-generate.js b/types/codegen/post-generate.js new file mode 100755 index 00000000..9b7bb70f --- /dev/null +++ b/types/codegen/post-generate.js @@ -0,0 +1,37 @@ +#!/usr/bin/env node + +const fs = require('fs') +const path = require('path') + +// Path to the generated index.ts file +const indexPath = path.join(__dirname, 'generated/src/models/index.ts') + +// Read the constants file +const constants = fs.readFileSync(path.join(__dirname, 'constants.ts'), 'utf8') + +// Read the generated index.ts file +let indexContent = fs.readFileSync(indexPath, 'utf8') + +// Find the position after the imports +const importEndPos = indexContent.lastIndexOf('import') +const importEndLinePos = indexContent.indexOf('\n', importEndPos) + 1 + +// Insert the constants after the imports +const newContent = + indexContent.substring(0, importEndLinePos) + + '\n// Constants\n' + + constants + + '\n' + + indexContent.substring(importEndLinePos) + +// Modify PartialResultParams interface +let modifiedContent = newContent.replace( + /export\s+interface\s+PartialResultParams\s*\{/g, + 'interface PartialResultParams {' +) + +// Write the updated content back to the file +fs.writeFileSync(indexPath, modifiedContent) + +console.log('Constants added to generated index.ts file') +console.log('PartialResultParams interface modified') From 2c0bde7b9ff32a86e9aebde74d573f87ead551c9 Mon Sep 17 00:00:00 2001 From: Conor Stewart Date: Wed, 9 Jul 2025 13:41:19 -0700 Subject: [PATCH 06/38] feat: generated types integrated in LSR --- chat-client-ui-types/package.json | 3 +- chat-client-ui-types/src/uiContracts.ts | 7 +- package-lock.json | 21 +- package.json | 4 +- runtimes/package.json | 1 + runtimes/protocol/chat.ts | 83 ++--- runtimes/protocol/lsp.ts | 5 +- types/codegen/constants.ts | 1 + .../custom-templates/models.index.mustache | 2 +- types/codegen/package.json | 3 +- types/codegen/post-generate.js | 4 + types/codegen/schema/chatTypes.json | 295 ++++++------------ types/index.ts | 40 ++- 13 files changed, 224 insertions(+), 245 deletions(-) diff --git a/chat-client-ui-types/package.json b/chat-client-ui-types/package.json index 3a1b1da4..0cc34855 100644 --- a/chat-client-ui-types/package.json +++ b/chat-client-ui-types/package.json @@ -18,6 +18,7 @@ "author": "Amazon Web Services", "license": "Apache-2.0", "dependencies": { - "@aws/language-server-runtimes-types": "^0.1.56" + "@aws/language-server-runtimes-types": "^0.1.56", + "@local/language-server-runtimes-generated-types": "file:/Users/conorstw/Desktop/language-server-runtimes/types/codegen/generated" } } diff --git a/chat-client-ui-types/src/uiContracts.ts b/chat-client-ui-types/src/uiContracts.ts index e7962c2b..4ef84ea2 100644 --- a/chat-client-ui-types/src/uiContracts.ts +++ b/chat-client-ui-types/src/uiContracts.ts @@ -1,17 +1,16 @@ +import { OPEN_TAB_REQUEST_METHOD, GET_SERIALIZED_CHAT_REQUEST_METHOD } from '@aws/language-server-runtimes-types' import { InsertToCursorPositionParams, ChatOptions, CodeSelectionType, ReferenceTrackerInformation, - OPEN_TAB_REQUEST_METHOD, OpenTabResult, - GET_SERIALIZED_CHAT_REQUEST_METHOD, GetSerializedChatResult, ChatPrompt, OpenFileDialogParams, DropFilesParams, -} from '@aws/language-server-runtimes-types' -export { InsertToCursorPositionParams } from '@aws/language-server-runtimes-types' +} from '@local/language-server-runtimes-generated-types' +export { InsertToCursorPositionParams } from '@local/language-server-runtimes-generated-types' export type AuthFollowUpType = 'full-auth' | 're-auth' | 'missing_scopes' | 'use-supported-auth' export function isValidAuthFollowUpType(value: string): value is AuthFollowUpType { diff --git a/package-lock.json b/package-lock.json index 3d6e7f65..c2cf062e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "license": "Apache-2.0", "workspaces": [ "types", + "types/codegen/generated", "runtimes", "chat-client-ui-types" ], @@ -41,7 +42,8 @@ "version": "0.1.62", "license": "Apache-2.0", "dependencies": { - "@aws/language-server-runtimes-types": "^0.1.56" + "@aws/language-server-runtimes-types": "^0.1.56", + "@local/language-server-runtimes-generated-types": "file:/Users/conorstw/Desktop/language-server-runtimes/types/codegen/generated" } }, "node_modules/@apidevtools/json-schema-ref-parser": { @@ -70,6 +72,10 @@ "resolved": "runtimes", "link": true }, + "node_modules/@aws/language-server-runtimes-generated-types": { + "resolved": "types/codegen/generated", + "link": true + }, "node_modules/@aws/language-server-runtimes-types": { "resolved": "types", "link": true @@ -550,6 +556,10 @@ "dev": true, "license": "MIT" }, + "node_modules/@local/language-server-runtimes-generated-types": { + "resolved": "types/codegen/generated", + "link": true + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -4687,7 +4697,7 @@ "version": "0.2.125", "license": "Apache-2.0", "dependencies": { - "@aws/language-server-runtimes-types": "^0.1.56", + "@aws/language-server-runtimes-types": "^0.1.42", "@opentelemetry/api": "^1.9.0", "@opentelemetry/api-logs": "^0.200.0", "@opentelemetry/core": "^2.0.0", @@ -4747,6 +4757,13 @@ "vscode-languageserver-textdocument": "^1.0.12", "vscode-languageserver-types": "^3.17.5" } + }, + "types/codegen/generated": { + "name": "@aws/language-server-runtimes-generated-types", + "version": "1.0.0", + "devDependencies": { + "typescript": "^4.0 || ^5.0" + } } } } diff --git a/package.json b/package.json index fd98c3fb..f3a6536d 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ ], "workspaces": [ "types", + "types/codegen/generated", "runtimes", "chat-client-ui-types" ], @@ -36,7 +37,8 @@ "test": "npm run test --workspaces --if-present", "preversion": "npm run test", "version": "npm run compile && git add -A .", - "watch": "tsc --build --watch" + "watch": "tsc --build --watch", + "gen-comp": "cd ./types/codegen/ && npm run generate && cd ./generated && npm run build && cd ../../../ && npm run compile" }, "devDependencies": { "@commitlint/cli": "^19.8.1", diff --git a/runtimes/package.json b/runtimes/package.json index 9858afe5..fb7ab08c 100644 --- a/runtimes/package.json +++ b/runtimes/package.json @@ -31,6 +31,7 @@ }, "dependencies": { "@aws/language-server-runtimes-types": "^0.1.56", + "@local/language-server-runtimes-generated-types": "file:/Users/conorstw/Desktop/language-server-runtimes/types/codegen/generated", "@opentelemetry/api": "^1.9.0", "@opentelemetry/api-logs": "^0.200.0", "@opentelemetry/core": "^2.0.0", diff --git a/runtimes/protocol/chat.ts b/runtimes/protocol/chat.ts index 1de86416..28fdbc3e 100644 --- a/runtimes/protocol/chat.ts +++ b/runtimes/protocol/chat.ts @@ -1,18 +1,4 @@ import { - ChatParams, - ChatResult, - EndChatParams, - EndChatResult, - FeedbackParams, - FollowUpClickParams, - InfoLinkClickParams, - InsertToCursorPositionParams, - LinkClickParams, - QuickActionParams, - SourceLinkClickParams, - TabAddParams, - TabChangeParams, - TabRemoveParams, ProtocolNotificationType, ProtocolRequestType, CHAT_REQUEST_METHOD, @@ -29,63 +15,80 @@ import { TAB_CHANGE_NOTIFICATION_METHOD, TAB_REMOVE_NOTIFICATION_METHOD, AutoParameterStructuresProtocolRequestType, + OPEN_TAB_REQUEST_METHOD, + CHAT_UPDATE_NOTIFICATION_METHOD, + FILE_CLICK_NOTIFICATION_METHOD, + INLINE_CHAT_REQUEST_METHOD, + CONTEXT_COMMAND_NOTIFICATION_METHOD, + CREATE_PROMPT_NOTIFICATION_METHOD, + INLINE_CHAT_RESULT_NOTIFICATION_METHOD, + PINNED_CONTEXT_NOTIFICATION_METHOD, + LIST_CONVERSATIONS_REQUEST_METHOD, + CONVERSATION_CLICK_REQUEST_METHOD, + GET_SERIALIZED_CHAT_REQUEST_METHOD, + TAB_BAR_ACTION_REQUEST_METHOD, + CHAT_OPTIONS_UPDATE_NOTIFICATION_METHOD, + PROMPT_INPUT_OPTION_CHANGE_METHOD, + BUTTON_CLICK_REQUEST_METHOD, + LIST_MCP_SERVERS_REQUEST_METHOD, + MCP_SERVER_CLICK_REQUEST_METHOD, + RULE_CLICK_REQUEST_METHOD, + LIST_RULES_REQUEST_METHOD, + PINNED_CONTEXT_ADD_NOTIFICATION_METHOD, + PINNED_CONTEXT_REMOVE_NOTIFICATION_METHOD, + ACTIVE_EDITOR_CHANGED_NOTIFICATION_METHOD, + OPEN_FILE_DIALOG_METHOD, +} from './lsp' + +import { + ChatParams, + ChatResult, + EndChatParams, + EndChatResult, + FeedbackParams, + FollowUpClickParams, + InfoLinkClickParams, + InsertToCursorPositionParams, + LinkClickParams, + QuickActionParams, + SourceLinkClickParams, + TabAddParams, + TabChangeParams, + TabRemoveParams, EncryptedChatParams, EncryptedQuickActionParams, QuickActionResult, - OPEN_TAB_REQUEST_METHOD, OpenTabParams, OpenTabResult, - CHAT_UPDATE_NOTIFICATION_METHOD, - FILE_CLICK_NOTIFICATION_METHOD, ChatUpdateParams, FileClickParams, - INLINE_CHAT_REQUEST_METHOD, InlineChatParams, InlineChatResult, - CONTEXT_COMMAND_NOTIFICATION_METHOD, ContextCommandParams, - CREATE_PROMPT_NOTIFICATION_METHOD, CreatePromptParams, - INLINE_CHAT_RESULT_NOTIFICATION_METHOD, - PINNED_CONTEXT_NOTIFICATION_METHOD, InlineChatResultParams, ListConversationsParams, ListConversationsResult, - LIST_CONVERSATIONS_REQUEST_METHOD, ConversationClickParams, ConversationClickResult, - CONVERSATION_CLICK_REQUEST_METHOD, GetSerializedChatParams, GetSerializedChatResult, - GET_SERIALIZED_CHAT_REQUEST_METHOD, TabBarActionParams, TabBarActionResult, - TAB_BAR_ACTION_REQUEST_METHOD, ChatOptionsUpdateParams, - CHAT_OPTIONS_UPDATE_NOTIFICATION_METHOD, PromptInputOptionChangeParams, - PROMPT_INPUT_OPTION_CHANGE_METHOD, ButtonClickParams, ButtonClickResult, - BUTTON_CLICK_REQUEST_METHOD, ListMcpServersParams, ListMcpServersResult, - LIST_MCP_SERVERS_REQUEST_METHOD, + ListRulesResult, + RuleClickResult, + PinnedContextParams, McpServerClickParams, McpServerClickResult, - MCP_SERVER_CLICK_REQUEST_METHOD, ListRulesParams, RuleClickParams, - RULE_CLICK_REQUEST_METHOD, - LIST_RULES_REQUEST_METHOD, - ListRulesResult, - RuleClickResult, - PinnedContextParams, - PINNED_CONTEXT_ADD_NOTIFICATION_METHOD, - PINNED_CONTEXT_REMOVE_NOTIFICATION_METHOD, ActiveEditorChangedParams, - ACTIVE_EDITOR_CHANGED_NOTIFICATION_METHOD, - OPEN_FILE_DIALOG_METHOD, OpenFileDialogParams, OpenFileDialogResult, LIST_AVAILABLE_MODELS_REQUEST_METHOD, diff --git a/runtimes/protocol/lsp.ts b/runtimes/protocol/lsp.ts index c5d20534..f5c54705 100644 --- a/runtimes/protocol/lsp.ts +++ b/runtimes/protocol/lsp.ts @@ -12,10 +12,13 @@ import { RegistrationType, RequestType, } from 'vscode-languageserver-protocol' -import { ChatOptions } from '@aws/language-server-runtimes-types' +import { ChatOptions } from '@local/language-server-runtimes-generated-types' import { LogLevel } from '../runtimes/util/loggingUtil' +//Changed so only METHODS are exported from ./chat export * from '@aws/language-server-runtimes-types' + +export * from '@local/language-server-runtimes-generated-types' export { TextDocument } from 'vscode-languageserver-textdocument' // LSP protocol is a core dependency for LSP feature provided by runtimes. diff --git a/types/codegen/constants.ts b/types/codegen/constants.ts index c727504a..370945b7 100644 --- a/types/codegen/constants.ts +++ b/types/codegen/constants.ts @@ -1 +1,2 @@ export type EndChatResult = boolean +export type FilterValue = string diff --git a/types/codegen/custom-templates/models.index.mustache b/types/codegen/custom-templates/models.index.mustache index 43e1bf00..434c6b19 100644 --- a/types/codegen/custom-templates/models.index.mustache +++ b/types/codegen/custom-templates/models.index.mustache @@ -1,6 +1,6 @@ /* tslint:disable */ /* eslint-disable */ -import { Position, Range, TextDocumentIdentifier } from '../../../../lsp' +import { Position, Range, TextDocumentIdentifier } from 'vscode-languageserver-types' {{#models}} {{#model}} diff --git a/types/codegen/package.json b/types/codegen/package.json index ecd683c2..2c2d3b6a 100644 --- a/types/codegen/package.json +++ b/types/codegen/package.json @@ -7,8 +7,9 @@ "build": "tsc", "test": "echo \"Error: no test specified\" && exit 1", "generate": "openapi-generator-cli generate && node post-generate.js", + "generate:build": "npm run generate", "generate:direct": "openapi-generator-cli generate -g typescript-fetch -i schema/chatTypes.json -o generated -t custom-templates --additional-properties=supportsES6=true,modelPropertyNaming=original,enumPropertyNaming=original,npmName=@json-schema-openapi/generated,npmVersion=1.0.0,withInterfaces=true,nullSafeAdditionalProps=true,withoutRuntimeChecks=true,stringEnums=true,disallowAdditionalPropertiesIfNotPresent=false,useSingleRequestParameter=true && node post-generate.js", - "validate": "ts-node src/validate-generated.ts" + "validate": "ts-node validate.ts" }, "keywords": [ "openapi", diff --git a/types/codegen/post-generate.js b/types/codegen/post-generate.js index 9b7bb70f..1a15cab4 100755 --- a/types/codegen/post-generate.js +++ b/types/codegen/post-generate.js @@ -30,8 +30,12 @@ let modifiedContent = newContent.replace( 'interface PartialResultParams {' ) +// Replace any fields named "_export" with "export" +modifiedContent = modifiedContent.replace(/\b_export\??\s*:/g, 'export?:') // For TypeScript interface properties + // Write the updated content back to the file fs.writeFileSync(indexPath, modifiedContent) console.log('Constants added to generated index.ts file') console.log('PartialResultParams interface modified') +console.log('Renamed "_export" fields to "export"') diff --git a/types/codegen/schema/chatTypes.json b/types/codegen/schema/chatTypes.json index c8f421cc..929969fb 100644 --- a/types/codegen/schema/chatTypes.json +++ b/types/codegen/schema/chatTypes.json @@ -27,8 +27,7 @@ "type": { "type": "string" } - }, - "additionalProperties": false + } }, "SourceLink": { "type": "object", @@ -46,8 +45,7 @@ "type": "string", "description": "Optional body text for the source link" } - }, - "additionalProperties": false + } }, "ContentSpan": { "type": "object", @@ -83,8 +81,7 @@ "information": { "type": "string" } - }, - "additionalProperties": false + } }, "ChatPrompt": { "type": "object", @@ -101,8 +98,7 @@ "type": "string", "description": "Optional command" } - }, - "additionalProperties": false + } }, "FeedbackPayload": { "type": "object", @@ -124,8 +120,7 @@ "type": "string", "description": "Optional comment" } - }, - "additionalProperties": false + } }, "CodeSelectionType": { "type": "string", @@ -134,13 +129,12 @@ }, "PositionCursor": { "type": "object", - "required": ["position"], + "required": ["position", "TEST"], "properties": { "position": { "type": "Position" } - }, - "additionalProperties": false + } }, "RangeCursor": { "type": "object", @@ -149,8 +143,7 @@ "range": { "type": "Range" } - }, - "additionalProperties": false + } }, "CursorState": { "oneOf": [ @@ -168,9 +161,8 @@ "PartialResultParams": { "type": "object", "properties": { - "token": { "$ref": "#/components/schemas/PartialResultToken" } - }, - "additionalProperties": false + "partialResultToken": { "$ref": "#/components/schemas/PartialResultToken" } + } }, "ChatParams": { "allOf": [ @@ -191,8 +183,7 @@ "items": { "$ref": "#/components/schemas/QuickActionCommand" }, "description": "Context of the current chat message to be handled by the servers. Context can be added through QuickActionCommand triggered by `@`." } - }, - "additionalProperties": false + } } ] }, @@ -209,8 +200,7 @@ "items": { "$ref": "#/components/schemas/CursorState" } }, "textDocument": { "type": "TextDocumentIdentifier" } - }, - "additionalProperties": false + } } ] }, @@ -222,8 +212,7 @@ "required": ["message"], "properties": { "message": { "type": "string" } - }, - "additionalProperties": false + } } ] }, @@ -240,8 +229,7 @@ "properties": { "first": { "type": "number" }, "second": { "type": "number" } - }, - "additionalProperties": false + } } }, "changes": { @@ -250,11 +238,9 @@ "added": { "type": "number" }, "deleted": { "type": "number" }, "total": { "type": "number" } - }, - "additionalProperties": false + } } - }, - "additionalProperties": false + } }, "FileList": { "type": "object", @@ -272,8 +258,7 @@ "type": "object", "additionalProperties": { "$ref": "#/components/schemas/FileDetails" } } - }, - "additionalProperties": false + } }, "Status": { "type": "string", @@ -308,8 +293,7 @@ "disabled": { "type": "boolean" }, "keepCardAfterClick": { "type": "boolean" }, "status": { "$ref": "#/components/schemas/ButtonStatus" } - }, - "additionalProperties": false + } }, "ChatMessage": { "type": "object", @@ -342,8 +326,7 @@ "items": { "$ref": "#/components/schemas/SourceLink" } } }, - "required": ["content"], - "additionalProperties": false + "required": ["content"] }, "summary": { "type": "object", @@ -353,8 +336,7 @@ "type": "array", "items": { "$ref": "#/components/schemas/ChatMessage" } } - }, - "additionalProperties": false + } }, "followUp": { "type": "object", @@ -364,8 +346,7 @@ "type": "array", "items": { "$ref": "#/components/schemas/ChatItemAction" } } - }, - "additionalProperties": false + } }, "codeReference": { "type": "array", @@ -380,11 +361,9 @@ "status": { "$ref": "#/components/schemas/Status" }, "icon": { "$ref": "#/components/schemas/IconType" }, "text": { "type": "string" } - }, - "additionalProperties": false + } } - }, - "additionalProperties": false + } }, "buttons": { "type": "array", @@ -402,8 +381,7 @@ "items": { "$ref": "#/components/schemas/SourceLink" } } }, - "required": ["content"], - "additionalProperties": false + "required": ["content"] }, "summary": { "type": "object", @@ -413,8 +391,7 @@ "type": "array", "items": { "$ref": "#/components/schemas/ChatMessage" } } - }, - "additionalProperties": false + } }, "followUp": { "type": "object", @@ -424,8 +401,7 @@ "type": "array", "items": { "$ref": "#/components/schemas/ChatItemAction" } } - }, - "additionalProperties": false + } }, "codeReference": { "type": "array", @@ -433,8 +409,7 @@ }, "fileList": { "$ref": "#/components/schemas/FileList" }, "contextList": { "$ref": "#/components/schemas/FileList" } - }, - "additionalProperties": false + } }, "ChatResult": { "description": "Represents the result of a chat interaction. A ChatResult extends ChatMessage and can optionally include additional messages that provide context, reasoning, or intermediate steps that led to the final response. Response for chat prompt request can be empty, if server chooses to handle the request and push updates asynchronously.", @@ -448,8 +423,7 @@ "items": { "$ref": "#/components/schemas/ChatMessage" }, "description": "Optional array of supporting messages that provide additional context for the primary message. These can include: - Reasoning steps that led to the final answer - Tool usage and outputs during processing - Intermediate calculations or decision points - Status updates about the processing - Human interactions that influenced the response. The primary message (this ChatResult itself) should contain the final, complete response, while additionalMessages provides transparency into how that response was generated. UI implementations should typically display the primary message prominently, with additionalMessages shown as supporting information when relevant." } - }, - "additionalProperties": false + } } ] }, @@ -460,8 +434,7 @@ "type": "object", "properties": { "requestId": { "type": "string" } - }, - "additionalProperties": false + } } ] }, @@ -470,8 +443,7 @@ "required": ["tabId"], "properties": { "tabId": { "type": "string" } - }, - "additionalProperties": false + } }, "QuickActionCommand": { "type": "object", @@ -482,8 +454,7 @@ "description": { "type": "string" }, "placeholder": { "type": "string" }, "icon": { "$ref": "#/components/schemas/IconType" } - }, - "additionalProperties": false + } }, "QuickActionCommandGroup": { "type": "object", @@ -495,8 +466,7 @@ "type": "array", "items": { "$ref": "#/components/schemas/QuickActionCommand" } } - }, - "additionalProperties": false + } }, "QuickActions": { "type": "object", @@ -508,8 +478,7 @@ "items": { "$ref": "#/components/schemas/QuickActionCommandGroup" }, "description": "The chat quick actions groups and commands to be executed on server." } - }, - "additionalProperties": false + } }, "TabData": { "type": "object", @@ -520,8 +489,7 @@ "type": "array", "items": { "$ref": "#/components/schemas/ChatMessage" } } - }, - "additionalProperties": false + } }, "ChatOptions": { "type": "object", @@ -536,8 +504,7 @@ "type": "array", "items": { "$ref": "#/components/schemas/ChatMessage" } } - }, - "additionalProperties": false + } }, "QuickActionParams": { "allOf": [ @@ -554,8 +521,7 @@ "items": { "$ref": "#/components/schemas/CursorState" } }, "textDocument": { "type": "TextDocumentIdentifier" } - }, - "additionalProperties": false + } } ] }, @@ -567,8 +533,7 @@ "required": ["message"], "properties": { "message": { "type": "string" } - }, - "additionalProperties": false + } } ] }, @@ -583,24 +548,21 @@ "tabId": { "type": "string" }, "feedbackPayload": { "$ref": "#/components/schemas/FeedbackPayload" }, "eventId": { "type": "string" } - }, - "additionalProperties": false + } }, "TabEventParams": { "type": "object", "required": ["tabId"], "properties": { "tabId": { "type": "string" } - }, - "additionalProperties": false + } }, "TabAddParams": { "type": "object", "allOf": [{ "$ref": "#/components/schemas/TabEventParams" }], "properties": { "restoredTab": { "type": "boolean" } - }, - "additionalProperties": false + } }, "TabChangeParams": { "allOf": [{ "$ref": "#/components/schemas/TabEventParams" }] @@ -625,8 +587,7 @@ "eventId": { "type": "string" }, "codeBlockIndex": { "type": "number" }, "totalCodeBlocks": { "type": "number" } - }, - "additionalProperties": false + } }, "InfoLinkClickParams": { "type": "object", @@ -635,8 +596,7 @@ "tabId": { "type": "string" }, "link": { "type": "string" }, "eventId": { "type": "string" } - }, - "additionalProperties": false + } }, "LinkClickParams": { "allOf": [ @@ -646,8 +606,7 @@ "required": ["messageId"], "properties": { "messageId": { "type": "string" } - }, - "additionalProperties": false + } } ] }, @@ -659,8 +618,7 @@ "required": ["messageId"], "properties": { "messageId": { "type": "string" } - }, - "additionalProperties": false + } } ] }, @@ -671,8 +629,7 @@ "tabId": { "type": "string" }, "messageId": { "type": "string" }, "followUp": { "$ref": "#/components/schemas/ChatItemAction" } - }, - "additionalProperties": false + } }, "OpenTabParams": { "type": "object", @@ -684,11 +641,9 @@ "properties": { "state": { "$ref": "#/components/schemas/TabState" }, "data": { "$ref": "#/components/schemas/TabData" } - }, - "additionalProperties": false + } } - }, - "additionalProperties": false + } }, "OpenTabResult": { "allOf": [{ "$ref": "#/components/schemas/TabEventParams" }] @@ -700,8 +655,7 @@ "tabId": { "type": "string" }, "messageId": { "type": "string" }, "buttonId": { "type": "string" } - }, - "additionalProperties": false + } }, "ButtonClickResult": { "type": "object", @@ -709,16 +663,14 @@ "properties": { "success": { "type": "boolean" }, "failureReason": { "type": "string" } - }, - "additionalProperties": false + } }, "TabState": { "type": "object", "properties": { "inProgress": { "type": "boolean" }, "cancellable": { "type": "boolean" } - }, - "additionalProperties": false + } }, "ChatUpdateParams": { "type": "object", @@ -727,8 +679,7 @@ "tabId": { "type": "string" }, "state": { "$ref": "#/components/schemas/TabState" }, "data": { "$ref": "#/components/schemas/TabData" } - }, - "additionalProperties": false + } }, "ChatOptionsUpdateParams": { "type": "object", @@ -745,8 +696,7 @@ "type": "string", "description": "The last selected modelId for the conversation. This is used to allow the server to programmatically update the selected model for persistance across sessions." } - }, - "additionalProperties": false + } }, "FileAction": { "type": "string", @@ -761,8 +711,7 @@ "action": { "$ref": "#/components/schemas/FileAction" }, "messageId": { "type": "string" }, "fullPath": { "type": "string" } - }, - "additionalProperties": false + } }, "ContextCommandGroup": { "type": "object", @@ -773,8 +722,7 @@ "type": "array", "items": { "$ref": "#/components/schemas/ContextCommand" } } - }, - "additionalProperties": false + } }, "ContextCommand": { "allOf": [ @@ -796,11 +744,9 @@ "items": { "$ref": "#/components/schemas/ContextCommandGroup" } }, "content": { - "type": "string", - "format": "byte" + "type": "Uint8Array" } - }, - "additionalProperties": false + } } ] }, @@ -812,8 +758,7 @@ "type": "array", "items": { "$ref": "#/components/schemas/ContextCommandGroup" } } - }, - "additionalProperties": false + } }, "PinnedContextParams": { "allOf": [ @@ -825,8 +770,7 @@ "tabId": { "type": "string" }, "textDocument": { "type": "TextDocumentIdentifier" }, "showRules": { "type": "boolean" } - }, - "additionalProperties": false + } } ] }, @@ -836,8 +780,7 @@ "properties": { "promptName": { "type": "string" }, "isRule": { "type": "boolean" } - }, - "additionalProperties": false + } }, "OpenFileDialogParams": { "type": "object", @@ -846,8 +789,7 @@ "tabId": { "type": "string" }, "fileType": { "$ref": "#/components/schemas/FileDialogType" }, "insertPosition": { "type": "number" } - }, - "additionalProperties": false + } }, "OpenFileDialogResult": { "type": "object", @@ -861,8 +803,7 @@ }, "errorMessage": { "type": "string" }, "insertPosition": { "type": "number" } - }, - "additionalProperties": false + } }, "DropFilesParams": { "type": "object", @@ -872,16 +813,14 @@ "files": { "$ref": "#/components/schemas/FileList" }, "insertPosition": { "type": "number" }, "errorMessage": { "type": "string" } - }, - "additionalProperties": false + } }, "ProgrammingLanguage": { "type": "object", "required": ["languageName"], "properties": { "languageName": { "type": "string" } - }, - "additionalProperties": false + } }, "InlineChatUserDecision": { "type": "string", @@ -904,7 +843,11 @@ "enum": ["folder", "rule"] }, "RuleActiveState": { - "oneOf": [{ "type": "boolean" }, { "type": "string", "enum": ["indeterminate"] }] + "oneOf": [{ "type": "boolean" }, { "$ref": "#/components/schemas/RuleActiveStateString" }] + }, + "RuleActiveStateString": { + "type": "string", + "enum": ["indeterminate"] }, "InlineChatResultParams": { "type": "object", @@ -922,8 +865,7 @@ "responseStartLatency": { "type": "number" }, "responseEndLatency": { "type": "number" }, "programmingLanguage": { "$ref": "#/components/schemas/ProgrammingLanguage" } - }, - "additionalProperties": false + } }, "FilterValue": { @@ -948,8 +890,7 @@ "$ref": "#/components/schemas/IconType" } }, - "required": ["id"], - "additionalProperties": false + "required": ["id"] }, "SelectOption": { "type": "object", @@ -1010,8 +951,7 @@ "id": { "type": "string" }, "icon": { "$ref": "#/components/schemas/IconType" }, "text": { "type": "string" } - }, - "additionalProperties": false + } }, "ConversationItem": { "type": "object", @@ -1024,8 +964,7 @@ "type": "array", "items": { "$ref": "#/components/schemas/Action" } } - }, - "additionalProperties": false + } }, "ConversationItemGroup": { "type": "object", @@ -1036,8 +975,7 @@ "type": "array", "items": { "$ref": "#/components/schemas/ConversationItem" } } - }, - "additionalProperties": false + } }, "ListConversationsParams": { "type": "object", @@ -1046,8 +984,7 @@ "type": "object", "additionalProperties": { "$ref": "#/components/schemas/FilterValue" } } - }, - "additionalProperties": false + } }, "ListMcpServersParams": { "type": "object", @@ -1056,16 +993,14 @@ "type": "object", "additionalProperties": { "$ref": "#/components/schemas/FilterValue" } } - }, - "additionalProperties": false + } }, "ListRulesParams": { "type": "object", "required": ["tabId"], "properties": { "tabId": { "type": "string" } - }, - "additionalProperties": false + } }, "ListRulesResult": { "type": "object", @@ -1077,8 +1012,7 @@ "required": ["title"], "properties": { "title": { "type": "string" } - }, - "additionalProperties": false + } }, "filterOptions": { "type": "array", @@ -1088,8 +1022,7 @@ "type": "array", "items": { "$ref": "#/components/schemas/RulesFolder" } } - }, - "additionalProperties": false + } }, "RulesFolder": { "type": "object", @@ -1104,8 +1037,7 @@ "type": "array", "items": { "$ref": "#/components/schemas/Rule" } } - }, - "additionalProperties": false + } }, "Rule": { "type": "object", @@ -1114,8 +1046,7 @@ "active": { "type": "boolean" }, "name": { "type": "string" }, "id": { "type": "string" } - }, - "additionalProperties": false + } }, "RuleClickParams": { "type": "object", @@ -1124,8 +1055,7 @@ "tabId": { "type": "string" }, "type": { "$ref": "#/components/schemas/RuleType" }, "id": { "type": "string" } - }, - "additionalProperties": false + } }, "RuleClickResult": { "allOf": [ @@ -1135,8 +1065,7 @@ "required": ["success"], "properties": { "success": { "type": "boolean" } - }, - "additionalProperties": false + } } ] }, @@ -1148,8 +1077,7 @@ "items": { "$ref": "#/components/schemas/CursorState" } }, "textDocument": { "type": "TextDocumentIdentifier" } - }, - "additionalProperties": false + } }, "ConversationsList": { "type": "object", @@ -1160,8 +1088,7 @@ "required": ["title"], "properties": { "title": { "type": "string" } - }, - "additionalProperties": false + } }, "filterOptions": { "type": "array", @@ -1171,16 +1098,14 @@ "type": "array", "items": { "$ref": "#/components/schemas/ConversationItemGroup" } } - }, - "additionalProperties": false + } }, "ListConversationsResult": { "allOf": [ { "$ref": "#/components/schemas/ConversationsList" }, { "type": "object", - "properties": {}, - "additionalProperties": false + "properties": {} } ] }, @@ -1199,8 +1124,7 @@ "type": "array", "items": { "$ref": "#/components/schemas/DetailedListGroup" } } - }, - "additionalProperties": false + } }, "DetailedListGroup": { "type": "object", @@ -1215,8 +1139,7 @@ "items": { "$ref": "#/components/schemas/Action" } }, "icon": { "$ref": "#/components/schemas/IconType" } - }, - "additionalProperties": false + } }, "ListMcpServersResultHeaderStatus": { "type": "object", @@ -1224,8 +1147,7 @@ "icon": { "$ref": "#/components/schemas/IconType" }, "title": { "type": "string" }, "status": { "$ref": "#/components/schemas/Status" } - }, - "additionalProperties": false + } }, "ListMcpServersResultHeader": { "type": "object", @@ -1233,8 +1155,7 @@ "title": { "type": "string" }, "description": { "type": "string" }, "status": { "$ref": "#/components/schemas/ListMcpServersResultHeaderStatus" } - }, - "additionalProperties": false + } }, "ListMcpServersResult": { "type": "object", @@ -1249,8 +1170,7 @@ "type": "array", "items": { "$ref": "#/components/schemas/FilterOption" } } - }, - "additionalProperties": false + } }, "ConversationAction": { "type": "string", @@ -1262,8 +1182,7 @@ "properties": { "id": { "type": "string" }, "action": { "$ref": "#/components/schemas/ConversationAction" } - }, - "additionalProperties": false + } }, "ConversationClickResult": { "allOf": [ @@ -1273,8 +1192,7 @@ "required": ["success"], "properties": { "success": { "type": "boolean" } - }, - "additionalProperties": false + } } ] }, @@ -1288,8 +1206,7 @@ "type": "object", "additionalProperties": { "type": "string" } } - }, - "additionalProperties": false + } }, "McpServerClickResult": { "allOf": [ @@ -1321,19 +1238,16 @@ "title": { "type": "string" }, "description": { "type": "string" }, "status": { "$ref": "#/components/schemas/Status" } - }, - "additionalProperties": false + } }, "description": { "type": "string" }, "actions": { "type": "array", "items": { "$ref": "#/components/schemas/Action" } } - }, - "additionalProperties": false + } } - }, - "additionalProperties": false + } } ] }, @@ -1347,8 +1261,7 @@ "properties": { "tabId": { "type": "string" }, "action": { "$ref": "#/components/schemas/TabBarAction" } - }, - "additionalProperties": false + } }, "TabBarActionResult": { "allOf": [ @@ -1358,8 +1271,7 @@ "required": ["success"], "properties": { "success": { "type": "boolean" } - }, - "additionalProperties": false + } } ] }, @@ -1374,8 +1286,7 @@ "type": "string", "enum": ["html", "markdown"] } - }, - "additionalProperties": false + } } ] }, @@ -1384,8 +1295,7 @@ "required": ["content"], "properties": { "content": { "type": "string" } - }, - "additionalProperties": false + } }, "PromptInputOptionChangeParams": { "type": "object", @@ -1397,8 +1307,7 @@ "additionalProperties": { "type": "string" } }, "eventId": { "type": "string" } - }, - "additionalProperties": false + } } } } diff --git a/types/index.ts b/types/index.ts index 47a239fe..0664cc06 100644 --- a/types/index.ts +++ b/types/index.ts @@ -1,5 +1,43 @@ export * from './auth' -export * from './chat' +export { + CHAT_REQUEST_METHOD, + END_CHAT_REQUEST_METHOD, + QUICK_ACTION_REQUEST_METHOD, + READY_NOTIFICATION_METHOD, + FEEDBACK_NOTIFICATION_METHOD, + TAB_ADD_NOTIFICATION_METHOD, + TAB_CHANGE_NOTIFICATION_METHOD, + TAB_REMOVE_NOTIFICATION_METHOD, + INSERT_TO_CURSOR_POSITION_NOTIFICATION_METHOD, + LINK_CLICK_NOTIFICATION_METHOD, + INFO_LINK_CLICK_NOTIFICATION_METHOD, + SOURCE_LINK_CLICK_NOTIFICATION_METHOD, + FOLLOW_UP_CLICK_NOTIFICATION_METHOD, + OPEN_TAB_REQUEST_METHOD, + BUTTON_CLICK_REQUEST_METHOD, + CHAT_UPDATE_NOTIFICATION_METHOD, + FILE_CLICK_NOTIFICATION_METHOD, + INLINE_CHAT_REQUEST_METHOD, + TAB_BAR_ACTION_REQUEST_METHOD, + CHAT_OPTIONS_UPDATE_NOTIFICATION_METHOD, + PROMPT_INPUT_OPTION_CHANGE_METHOD, + OPEN_FILE_DIALOG_METHOD, + CONTEXT_COMMAND_NOTIFICATION_METHOD, + CREATE_PROMPT_NOTIFICATION_METHOD, + INLINE_CHAT_RESULT_NOTIFICATION_METHOD, + PINNED_CONTEXT_ADD_NOTIFICATION_METHOD, + PINNED_CONTEXT_REMOVE_NOTIFICATION_METHOD, + RULE_CLICK_REQUEST_METHOD, + PINNED_CONTEXT_NOTIFICATION_METHOD, + LIST_RULES_REQUEST_METHOD, + ACTIVE_EDITOR_CHANGED_NOTIFICATION_METHOD, + LIST_CONVERSATIONS_REQUEST_METHOD, + CONVERSATION_CLICK_REQUEST_METHOD, + LIST_MCP_SERVERS_REQUEST_METHOD, + MCP_SERVER_CLICK_REQUEST_METHOD, + GET_SERIALIZED_CHAT_REQUEST_METHOD, + OPEN_WORKSPACE_INDEX_SETTINGS_BUTTON_ID, +} from './chat' export * from './didChangeDependencyPaths' export * from './inlineCompletionWithReferences' export * from './lsp' From 277801db4d1693a2d9825990937b67a6379c50d4 Mon Sep 17 00:00:00 2001 From: Conor Stewart Date: Fri, 11 Jul 2025 14:58:45 -0700 Subject: [PATCH 07/38] feat: removed unncessary flags, cleaned up package.json --- types/codegen/custom-templates/index.mustache | 8 + .../modelGenericInterfaces.mustache | 46 + .../generated/.openapi-generator-ignore | 25 + types/codegen/openapitools.json | 33 +- types/codegen/package-lock.json | 4813 ++++++++--------- types/codegen/package.json | 22 +- types/codegen/post-generate.js | 4 +- types/codegen/schema/chatTypes.json | 15 +- 8 files changed, 2316 insertions(+), 2650 deletions(-) create mode 100644 types/codegen/custom-templates/index.mustache create mode 100644 types/codegen/custom-templates/modelGenericInterfaces.mustache create mode 100644 types/codegen/generated/.openapi-generator-ignore diff --git a/types/codegen/custom-templates/index.mustache b/types/codegen/custom-templates/index.mustache new file mode 100644 index 00000000..9590110f --- /dev/null +++ b/types/codegen/custom-templates/index.mustache @@ -0,0 +1,8 @@ +/* tslint:disable */ +/* eslint-disable */ +{{!This is a comment. Removed the export of runtimes because we do not need +those functions. Was causing error because exported a def called ResponseError +which is also used by vscode LSP}} +{{#models.0}} +export * from './models/index{{importFileExtension}}'; +{{/models.0}} diff --git a/types/codegen/custom-templates/modelGenericInterfaces.mustache b/types/codegen/custom-templates/modelGenericInterfaces.mustache new file mode 100644 index 00000000..e96ea996 --- /dev/null +++ b/types/codegen/custom-templates/modelGenericInterfaces.mustache @@ -0,0 +1,46 @@ +/** + * {{#lambda.indented_star_1}}{{{unescapedDescription}}}{{/lambda.indented_star_1}} + * @export + * @interface {{classname}} + */ +export interface {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{ +{{#additionalPropertiesType}} + [key: string]: {{{additionalPropertiesType}}}{{#hasVars}} | any{{/hasVars}}; +{{/additionalPropertiesType}} +{{#vars}} + /** + * {{#lambda.indented_star_4}}{{{unescapedDescription}}}{{/lambda.indented_star_4}} + * @type {{=<% %>=}}{<%&datatype%>}<%={{ }}=%> + * @memberof {{classname}} + {{#deprecated}} + * @deprecated + {{/deprecated}} + */ + {{#isReadOnly}}readonly {{/isReadOnly}}{{name}}{{^required}}?{{/required}}: {{#isEnum}}{{{datatypeWithEnum}}}{{#isNullable}} | null{{/isNullable}}{{/isEnum}}{{^isEnum}}{{{datatype}}}{{#isNullable}} | null{{/isNullable}}{{/isEnum}}; +{{/vars}} +}{{#hasEnums}} + +{{#vars}} +{{!Changed to make actual string enum}} +{{#isEnum}} +{{#stringEnums}} +/** +* @export +* @type {string} +*/ +export type {{classname}}{{enumName}} = {{#allowableValues}} {{#enumVars}}{{{value}}}{{^-last}} | {{/-last}}{{/enumVars}}{{/allowableValues}}; + +{{/stringEnums}}{{^stringEnums}} +/** + * @export + */ +export const {{classname}}{{enumName}} = { +{{#allowableValues}} + {{#enumVars}} + {{{name}}}: {{{value}}}{{^-last}},{{/-last}} + {{/enumVars}} +{{/allowableValues}} +} as const; +export type {{classname}}{{enumName}} = typeof {{classname}}{{enumName}}[keyof typeof {{classname}}{{enumName}}]; +{{/stringEnums}} +{{/isEnum}}{{/vars}}{{/hasEnums}} \ No newline at end of file diff --git a/types/codegen/generated/.openapi-generator-ignore b/types/codegen/generated/.openapi-generator-ignore new file mode 100644 index 00000000..56fcb0c0 --- /dev/null +++ b/types/codegen/generated/.openapi-generator-ignore @@ -0,0 +1,25 @@ +# OpenAPI Generator Ignore +# Generated by openapi-generator https://github.com/openapitools/openapi-generator + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md + +/src/runtime.ts \ No newline at end of file diff --git a/types/codegen/openapitools.json b/types/codegen/openapitools.json index 6c33ee0f..4aad035f 100644 --- a/types/codegen/openapitools.json +++ b/types/codegen/openapitools.json @@ -9,31 +9,26 @@ "output": "#{cwd}/generated", "inputSpec": "#{cwd}/schema/chatTypes.json", "templateDir": "#{cwd}/custom-templates", - "typeMappings": { - "Position": "Position", - "Range": "Range", - "TextDocumentIdentifier": "TextDocumentIdentifier" - }, - "importMappings": { - "Position": "../../lsp", - "Range": "../../lsp", - "TextDocumentIdentifier": "../../lsp" - }, "additionalProperties": { "supportsES6": true, - "modelPropertyNaming": "original", - "enumPropertyNaming": "original", - "npmName": "@aws/language-server-runtimes-generated-types", - "npmVersion": "1.0.0", - "withInterfaces": true, + "modelPropertyNaming": "camelCase", + "enumPropertyNaming": "camelCase", + "npmName": "@local/language-server-runtimes-generated-types", + "npmVersion": "0.0.1", "nullSafeAdditionalProps": false, "withoutRuntimeChecks": true, "stringEnums": true, - "disallowAdditionalPropertiesIfNotPresent": false, - "useSingleRequestParameter": true, - "hasImports": true + "disallowAdditionalPropertiesIfNotPresent": false + }, + "global-property": { + "generateAliasAsModel": true + }, + "openapi-normalizer": { + "REF_AS_PARENT_IN_ALLOF": true }, - "openapi-normalizer": "REF_AS_PARENT_IN_ALLOF=true" + "reservedWordsMappings": { + "export": "export" + } } } } diff --git a/types/codegen/package-lock.json b/types/codegen/package-lock.json index 0eaba911..b29afec7 100644 --- a/types/codegen/package-lock.json +++ b/types/codegen/package-lock.json @@ -1,2611 +1,2210 @@ { - "name": "json-schema-openapi-converter", - "version": "0.0.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "json-schema-openapi-converter", - "version": "0.1.0", - "license": "MIT", - "devDependencies": { - "@openapitools/openapi-generator-cli": "^2.21.0", - "@types/node": "^24.0.4", - "ts-node": "^10.9.2", - "typescript": "^5.8.3" - } - }, - "node_modules/@babel/runtime": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz", - "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@lukeed/csprng": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", - "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@nestjs/axios": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@nestjs/axios/-/axios-4.0.0.tgz", - "integrity": "sha512-1cB+Jyltu/uUPNQrpUimRHEQHrnQrpLzVj6dU3dgn6iDDDdahr10TgHFGTmw5VuJ9GzKZsCLDL78VSwJAs/9JQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@nestjs/common": "^10.0.0 || ^11.0.0", - "axios": "^1.3.1", - "rxjs": "^7.0.0" - } - }, - "node_modules/@nestjs/common": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-11.1.3.tgz", - "integrity": "sha512-ogEK+GriWodIwCw6buQ1rpcH4Kx+G7YQ9EwuPySI3rS05pSdtQ++UhucjusSI9apNidv+QURBztJkRecwwJQXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "file-type": "21.0.0", - "iterare": "1.2.1", - "load-esm": "1.0.2", - "tslib": "2.8.1", - "uid": "2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "class-transformer": ">=0.4.1", - "class-validator": ">=0.13.2", - "reflect-metadata": "^0.1.12 || ^0.2.0", - "rxjs": "^7.1.0" - }, - "peerDependenciesMeta": { - "class-transformer": { - "optional": true - }, - "class-validator": { - "optional": true - } - } - }, - "node_modules/@nestjs/core": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-11.1.3.tgz", - "integrity": "sha512-5lTni0TCh8x7bXETRD57pQFnKnEg1T6M+VLE7wAmyQRIecKQU+2inRGZD+A4v2DC1I04eA0WffP0GKLxjOKlzw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@nuxt/opencollective": "0.4.1", - "fast-safe-stringify": "2.1.1", - "iterare": "1.2.1", - "path-to-regexp": "8.2.0", - "tslib": "2.8.1", - "uid": "2.0.2" - }, - "engines": { - "node": ">= 20" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "@nestjs/common": "^11.0.0", - "@nestjs/microservices": "^11.0.0", - "@nestjs/platform-express": "^11.0.0", - "@nestjs/websockets": "^11.0.0", - "reflect-metadata": "^0.1.12 || ^0.2.0", - "rxjs": "^7.1.0" - }, - "peerDependenciesMeta": { - "@nestjs/microservices": { - "optional": true - }, - "@nestjs/platform-express": { - "optional": true - }, - "@nestjs/websockets": { - "optional": true - } - } - }, - "node_modules/@nuxt/opencollective": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@nuxt/opencollective/-/opencollective-0.4.1.tgz", - "integrity": "sha512-GXD3wy50qYbxCJ652bDrDzgMr3NFEkIS374+IgFQKkCvk9yiYcLvX2XDYr7UyQxf4wK0e+yqDYRubZ0DtOxnmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "consola": "^3.2.3" - }, - "bin": { - "opencollective": "bin/opencollective.js" - }, - "engines": { - "node": "^14.18.0 || >=16.10.0", - "npm": ">=5.10.0" - } - }, - "node_modules/@nuxtjs/opencollective": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz", - "integrity": "sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "consola": "^2.15.0", - "node-fetch": "^2.6.1" - }, - "bin": { - "opencollective": "bin/opencollective.js" - }, - "engines": { - "node": ">=8.0.0", - "npm": ">=5.0.0" - } - }, - "node_modules/@nuxtjs/opencollective/node_modules/consola": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@openapitools/openapi-generator-cli": { - "version": "2.21.0", - "resolved": "https://registry.npmjs.org/@openapitools/openapi-generator-cli/-/openapi-generator-cli-2.21.0.tgz", - "integrity": "sha512-NdDvCd7hya+UucxH7G94Jf6tmA6641I4CF/T3xtFhM+NQQNWAP5tpiOBN4Ub9ocU6cCgQgXdWl4EpwlEwW7JDQ==", - "dev": true, - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "@nestjs/axios": "4.0.0", - "@nestjs/common": "11.1.3", - "@nestjs/core": "11.1.3", - "@nuxtjs/opencollective": "0.3.2", - "axios": "1.10.0", - "chalk": "4.1.2", - "commander": "8.3.0", - "compare-versions": "4.1.4", - "concurrently": "6.5.1", - "console.table": "0.10.0", - "fs-extra": "11.3.0", - "glob": "11.0.3", - "inquirer": "8.2.6", - "lodash": "4.17.21", - "proxy-agent": "6.5.0", - "reflect-metadata": "0.2.2", - "rxjs": "7.8.2", - "tslib": "2.8.1" - }, - "bin": { - "openapi-generator-cli": "main.js" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/openapi_generator" - } - }, - "node_modules/@tokenizer/inflate": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.2.7.tgz", - "integrity": "sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "fflate": "^0.8.2", - "token-types": "^6.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/@tokenizer/token": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tootallnate/quickjs-emscripten": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", - "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "24.0.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.4.tgz", - "integrity": "sha512-ulyqAkrhnuNq9pB76DRBTkcS6YsmDALy6Ua63V8OhrOBgbcYt6IOdzpw5P1+dyRIyMerzLkeYWBeOXPpA9GMAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.8.0" - } - }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", - "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true, - "license": "MIT" - }, - "node_modules/ast-types": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", - "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/axios": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz", - "integrity": "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/basic-ftp": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", - "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true, - "license": "MIT" - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 10" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/compare-versions": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-4.1.4.tgz", - "integrity": "sha512-FemMreK9xNyL8gQevsdRMrvO4lFCkQP7qbuktn1q8ndcNk1+0mz7lgE7b/sNvbhVgY4w6tMN1FDp6aADjqw2rw==", - "dev": true, - "license": "MIT" - }, - "node_modules/concurrently": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.5.1.tgz", - "integrity": "sha512-FlSwNpGjWQfRwPLXvJ/OgysbBxPkWpiVjy1042b0U7on7S7qwwMIILRj7WTN1mTgqa582bG6NFuScOoh6Zgdag==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "date-fns": "^2.16.1", - "lodash": "^4.17.21", - "rxjs": "^6.6.3", - "spawn-command": "^0.0.2-1", - "supports-color": "^8.1.0", - "tree-kill": "^1.2.2", - "yargs": "^16.2.0" - }, - "bin": { - "concurrently": "bin/concurrently.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/concurrently/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/concurrently/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/concurrently/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, - "node_modules/consola": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", - "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.18.0 || >=16.10.0" - } - }, - "node_modules/console.table": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/console.table/-/console.table-0.10.0.tgz", - "integrity": "sha512-dPyZofqggxuvSf7WXvNjuRfnsOk1YazkVP8FdxH4tcH2c37wc79/Yl6Bhr7Lsu00KMgy2ql/qCMuNu8xctZM8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "easy-table": "1.1.0" - }, - "engines": { - "node": "> 0.10" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/data-uri-to-buffer": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", - "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/date-fns": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", - "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.21.0" - }, - "engines": { - "node": ">=0.11" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" - } - }, - "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/degenerator": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", - "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ast-types": "^0.13.4", - "escodegen": "^2.1.0", - "esprima": "^4.0.1" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, - "node_modules/easy-table": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.1.0.tgz", - "integrity": "sha512-oq33hWOSSnl2Hoh00tZWaIPi1ievrD9aFG82/IgjlycAnW9hHx5PkJiXpxPsgEE+H7BsbVQXFVFST8TEXS6/pA==", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "wcwidth": ">=1.0.1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "license": "MIT", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "dev": true, - "license": "MIT" - }, - "node_modules/fflate": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", - "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", - "dev": true, - "license": "MIT" - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/file-type": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-21.0.0.tgz", - "integrity": "sha512-ek5xNX2YBYlXhiUXui3D/BXa3LdqPmoLJ7rqEx2bKJ7EAUEfmXgW0Das7Dc6Nr9MvqaOnIqiPV0mZk/r/UpNAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tokenizer/inflate": "^0.2.7", - "strtok3": "^10.2.2", - "token-types": "^6.0.0", - "uint8array-extras": "^1.4.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sindresorhus/file-type?sponsor=1" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/form-data": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz", - "integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fs-extra": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", - "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-uri": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.4.tgz", - "integrity": "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^6.0.2", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/glob": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", - "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.3.1", - "jackspeak": "^4.1.1", - "minimatch": "^10.0.3", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/inquirer": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", - "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/iterare": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", - "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=6" - } - }, - "node_modules/jackspeak": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", - "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/load-esm": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/load-esm/-/load-esm-1.0.2.tgz", - "integrity": "sha512-nVAvWk/jeyrWyXEAs84mpQCYccxRqgKY4OznLuJhJCa0XsPSfdOIr2zvBZEj3IHEHbX97jjscKRRV539bW0Gpw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - }, - { - "type": "buymeacoffee", - "url": "https://buymeacoffee.com/borewit" - } - ], - "license": "MIT", - "engines": { - "node": ">=13.2.0" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, - "license": "MIT" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", - "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", - "dev": true, - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true, - "license": "ISC" - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", - "dev": true, - "license": "ISC", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true, - "license": "ISC" - }, - "node_modules/netmask": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pac-proxy-agent": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", - "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tootallnate/quickjs-emscripten": "^0.23.0", - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "get-uri": "^6.0.1", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.6", - "pac-resolver": "^7.0.1", - "socks-proxy-agent": "^8.0.5" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/pac-resolver": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", - "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", - "dev": true, - "license": "MIT", - "dependencies": { - "degenerator": "^5.0.0", - "netmask": "^2.0.2" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-to-regexp": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", - "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - } - }, - "node_modules/proxy-agent": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", - "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "http-proxy-agent": "^7.0.1", - "https-proxy-agent": "^7.0.6", - "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.1.0", - "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.5" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/proxy-agent/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true, - "license": "MIT" - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/reflect-metadata": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", - "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/restore-cursor/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/rxjs": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "license": "MIT" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.5.tgz", - "integrity": "sha512-iF+tNDQla22geJdTyJB1wM/qrX9DMRwWrciEPwWLPRWAUEM8sQiyxgckLxWT1f7+9VabJS0jTGGr4QgBuvi6Ww==", - "dev": true, - "license": "MIT", - "dependencies": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", - "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "socks": "^2.8.3" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/spawn-command": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", - "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", - "dev": true - }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strtok3": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.1.tgz", - "integrity": "sha512-3JWEZM6mfix/GCJBBUrkA8p2Id2pBkyTkVCJKto55w080QBKZ+8R171fGrbiSp+yMO/u6F8/yUh7K4V9K+YCnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tokenizer/token": "^0.3.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/token-types": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.0.0.tgz", - "integrity": "sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tokenizer/token": "^0.3.0", - "ieee754": "^1.2.1" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true, - "license": "MIT" - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "license": "MIT", - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true + "name": "chat-types-generator", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "chat-types-generator", + "version": "0.0.1", + "devDependencies": { + "@openapitools/openapi-generator-cli": "^2.21.0", + "@types/node": "^24.0.4", + "ts-node": "^10.9.2", + "typescript": "^5.8.3" + } + }, + "node_modules/@babel/runtime": { + "version": "7.27.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@lukeed/csprng": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@nestjs/axios": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@nestjs/common": "^10.0.0 || ^11.0.0", + "axios": "^1.3.1", + "rxjs": "^7.0.0" + } + }, + "node_modules/@nestjs/common": { + "version": "11.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "file-type": "21.0.0", + "iterare": "1.2.1", + "load-esm": "1.0.2", + "tslib": "2.8.1", + "uid": "2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "class-transformer": ">=0.4.1", + "class-validator": ">=0.13.2", + "reflect-metadata": "^0.1.12 || ^0.2.0", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } + } + }, + "node_modules/@nestjs/core": { + "version": "11.1.3", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@nuxt/opencollective": "0.4.1", + "fast-safe-stringify": "2.1.1", + "iterare": "1.2.1", + "path-to-regexp": "8.2.0", + "tslib": "2.8.1", + "uid": "2.0.2" + }, + "engines": { + "node": ">= 20" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^11.0.0", + "@nestjs/microservices": "^11.0.0", + "@nestjs/platform-express": "^11.0.0", + "@nestjs/websockets": "^11.0.0", + "reflect-metadata": "^0.1.12 || ^0.2.0", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "@nestjs/microservices": { + "optional": true + }, + "@nestjs/platform-express": { + "optional": true + }, + "@nestjs/websockets": { + "optional": true + } + } + }, + "node_modules/@nuxt/opencollective": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "consola": "^3.2.3" + }, + "bin": { + "opencollective": "bin/opencollective.js" + }, + "engines": { + "node": "^14.18.0 || >=16.10.0", + "npm": ">=5.10.0" + } + }, + "node_modules/@nuxtjs/opencollective": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "consola": "^2.15.0", + "node-fetch": "^2.6.1" + }, + "bin": { + "opencollective": "bin/opencollective.js" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/@nuxtjs/opencollective/node_modules/consola": { + "version": "2.15.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@openapitools/openapi-generator-cli": { + "version": "2.21.0", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@nestjs/axios": "4.0.0", + "@nestjs/common": "11.1.3", + "@nestjs/core": "11.1.3", + "@nuxtjs/opencollective": "0.3.2", + "axios": "1.10.0", + "chalk": "4.1.2", + "commander": "8.3.0", + "compare-versions": "4.1.4", + "concurrently": "6.5.1", + "console.table": "0.10.0", + "fs-extra": "11.3.0", + "glob": "11.0.3", + "inquirer": "8.2.6", + "lodash": "4.17.21", + "proxy-agent": "6.5.0", + "reflect-metadata": "0.2.2", + "rxjs": "7.8.2", + "tslib": "2.8.1" + }, + "bin": { + "openapi-generator-cli": "main.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/openapi_generator" + } + }, + "node_modules/@tokenizer/inflate": { + "version": "0.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "fflate": "^0.8.2", + "token-types": "^6.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.8.0" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/ast-types": { + "version": "0.13.4", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.10.0", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/basic-ftp": { + "version": "5.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "dev": true, + "license": "MIT" + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/compare-versions": { + "version": "4.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/concurrently": { + "version": "6.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "date-fns": "^2.16.1", + "lodash": "^4.17.21", + "rxjs": "^6.6.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^16.2.0" + }, + "bin": { + "concurrently": "bin/concurrently.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/concurrently/node_modules/rxjs": { + "version": "6.6.7", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" + }, + "node_modules/consola": { + "version": "3.4.2", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/console.table": { + "version": "0.10.0", + "dev": true, + "license": "MIT", + "dependencies": { + "easy-table": "1.1.0" + }, + "engines": { + "node": "> 0.10" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/date-fns": { + "version": "2.30.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/debug": { + "version": "4.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/degenerator": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/easy-table": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "wcwidth": ">=1.0.1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/fflate": { + "version": "0.8.2", + "dev": true, + "license": "MIT" + }, + "node_modules/figures": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-type": { + "version": "21.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@tokenizer/inflate": "^0.2.7", + "strtok3": "^10.2.2", + "token-types": "^6.0.0", + "uint8array-extras": "^1.4.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-extra": { + "version": "11.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-uri": { + "version": "6.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/glob": { + "version": "11.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.0.3", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "dev": true, + "license": "ISC" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/inherits": { + "version": "2.0.4", + "dev": true, + "license": "ISC" + }, + "node_modules/inquirer": { + "version": "8.2.6", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/ip-address": { + "version": "9.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/iterare": { + "version": "1.2.1", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=6" + } + }, + "node_modules/jackspeak": { + "version": "4.1.1", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jsbn": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/load-esm": { + "version": "1.0.2", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + }, + { + "type": "buymeacoffee", + "url": "https://buymeacoffee.com/borewit" + } + ], + "license": "MIT", + "engines": { + "node": ">=13.2.0" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "11.1.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "dev": true, + "license": "ISC" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "10.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "dev": true, + "license": "ISC" + }, + "node_modules/netmask": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pac-proxy-agent": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.6", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-resolver": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "degenerator": "^5.0.0", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "2.0.0", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-to-regexp": { + "version": "8.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/proxy-agent": { + "version": "6.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.6", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.1.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/lru-cache": { + "version": "7.18.3", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/require-directory": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "dev": true, + "license": "ISC" + }, + "node_modules/run-async": { + "version": "2.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.5", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spawn-command": { + "version": "0.0.2", + "dev": true + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strtok3": { + "version": "10.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@tokenizer/token": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/through": { + "version": "2.3.8", + "dev": true, + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.0.33", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/token-types": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "dev": true, + "license": "0BSD" + }, + "node_modules/type-fest": { + "version": "0.21.3", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uid": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@lukeed/csprng": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/uint8array-extras": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/undici-types": { + "version": "7.8.0", + "dev": true, + "license": "MIT" + }, + "node_modules/universalify": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } } - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/uid": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz", - "integrity": "sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@lukeed/csprng": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/uint8array-extras": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.4.0.tgz", - "integrity": "sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/undici-types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", - "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", - "dev": true, - "license": "MIT" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, - "license": "MIT" - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true, - "license": "MIT" - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } } - } } diff --git a/types/codegen/package.json b/types/codegen/package.json index 2c2d3b6a..84317569 100644 --- a/types/codegen/package.json +++ b/types/codegen/package.json @@ -1,24 +1,12 @@ { - "name": "json-schema-openapi-converter", - "version": "0.1.0", - "description": "Convert TypeScript interfaces to JSON Schema and generate TypeScript using OpenAPI Generator", - "main": "src/validate-generated.ts", + "name": "chat-types-generator", + "version": "0.0.1", + "description": "Generate TypeScript defintiinons from JSON Schema using OpenAPI Generator", + "main": "generated/src/index.ts", "scripts": { - "build": "tsc", - "test": "echo \"Error: no test specified\" && exit 1", "generate": "openapi-generator-cli generate && node post-generate.js", - "generate:build": "npm run generate", - "generate:direct": "openapi-generator-cli generate -g typescript-fetch -i schema/chatTypes.json -o generated -t custom-templates --additional-properties=supportsES6=true,modelPropertyNaming=original,enumPropertyNaming=original,npmName=@json-schema-openapi/generated,npmVersion=1.0.0,withInterfaces=true,nullSafeAdditionalProps=true,withoutRuntimeChecks=true,stringEnums=true,disallowAdditionalPropertiesIfNotPresent=false,useSingleRequestParameter=true && node post-generate.js", - "validate": "ts-node validate.ts" + "generate:no-post": "openapi-generator-cli generate" }, - "keywords": [ - "openapi", - "json-schema", - "typescript", - "generator" - ], - "author": "", - "license": "MIT", "devDependencies": { "@openapitools/openapi-generator-cli": "^2.21.0", "@types/node": "^24.0.4", diff --git a/types/codegen/post-generate.js b/types/codegen/post-generate.js index 1a15cab4..0ea28299 100755 --- a/types/codegen/post-generate.js +++ b/types/codegen/post-generate.js @@ -31,11 +31,11 @@ let modifiedContent = newContent.replace( ) // Replace any fields named "_export" with "export" -modifiedContent = modifiedContent.replace(/\b_export\??\s*:/g, 'export?:') // For TypeScript interface properties +//modifiedContent = modifiedContent.replace(/\b_export\??\s*:/g, 'export?:') // For TypeScript interface properties // Write the updated content back to the file fs.writeFileSync(indexPath, modifiedContent) console.log('Constants added to generated index.ts file') console.log('PartialResultParams interface modified') -console.log('Renamed "_export" fields to "export"') +//console.log('Renamed "_export" fields to "export"') diff --git a/types/codegen/schema/chatTypes.json b/types/codegen/schema/chatTypes.json index 929969fb..0dfd2215 100644 --- a/types/codegen/schema/chatTypes.json +++ b/types/codegen/schema/chatTypes.json @@ -1,9 +1,9 @@ { "openapi": "3.0.0", "info": { - "title": "ChatItemAction API", + "title": "Chat Types", "version": "1.0.0", - "description": "API definition for ChatItemAction interface" + "description": "Chat Types Definitions for FLARE" }, "paths": {}, "components": { @@ -129,7 +129,7 @@ }, "PositionCursor": { "type": "object", - "required": ["position", "TEST"], + "required": ["position"], "properties": { "position": { "type": "Position" @@ -1215,8 +1215,13 @@ "type": "object", "properties": { "filterOptions": { - "type": "array", - "items": { "$ref": "#/components/schemas/FilterOption" } + "oneOf": [ + { + "type": "array", + "items": { "$ref": "#/components/schemas/FilterOption" } + }, + { "type": "null" } + ] }, "filterActions": { "type": "array", From 7e8065e46871557bad8382bd20c2aa4deb14bbea Mon Sep 17 00:00:00 2001 From: Conor Stewart Date: Wed, 16 Jul 2025 10:43:42 -0700 Subject: [PATCH 08/38] fix: more git issues fixed --- package-lock.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index c2cf062e..a8b83ff6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4697,7 +4697,8 @@ "version": "0.2.125", "license": "Apache-2.0", "dependencies": { - "@aws/language-server-runtimes-types": "^0.1.42", + "@aws/language-server-runtimes-types": "^0.1.45", + "@local/language-server-runtimes-generated-types": "file:/Users/conorstw/Desktop/language-server-runtimes/types/codegen/generated", "@opentelemetry/api": "^1.9.0", "@opentelemetry/api-logs": "^0.200.0", "@opentelemetry/core": "^2.0.0", From 03cad90f946d0ed7ef97250244d115ac822bd9a6 Mon Sep 17 00:00:00 2001 From: Conor Stewart Date: Mon, 21 Jul 2025 14:48:29 -0700 Subject: [PATCH 09/38] feat: added java definition codegen --- .github/workflows/types-codegen-merge.yaml | 17 + .github/workflows/types-codegen-pr.yaml | 49 ++ package-lock.json | 18 +- types/codegen/.gitignore | 2 +- types/codegen/README.md | 0 types/codegen/custom-templates/index.mustache | 8 - .../java/.template_metadata.json | 23 + .../custom-templates/java/model.mustache | 17 + .../custom-templates/java/pojo.mustache | 616 ++++++++++++++++++ .../custom-templates/java/record.mustache | 12 + .../modelEnumInterfaces.mustache | 26 - .../modelGenericInterfaces.mustache | 46 -- .../custom-templates/models.index.mustache | 31 - .../generated/.openapi-generator-ignore | 25 - types/index.ts | 19 +- 15 files changed, 763 insertions(+), 146 deletions(-) create mode 100644 .github/workflows/types-codegen-merge.yaml create mode 100644 .github/workflows/types-codegen-pr.yaml delete mode 100644 types/codegen/README.md delete mode 100644 types/codegen/custom-templates/index.mustache create mode 100644 types/codegen/custom-templates/java/.template_metadata.json create mode 100644 types/codegen/custom-templates/java/model.mustache create mode 100644 types/codegen/custom-templates/java/pojo.mustache create mode 100644 types/codegen/custom-templates/java/record.mustache delete mode 100644 types/codegen/custom-templates/modelEnumInterfaces.mustache delete mode 100644 types/codegen/custom-templates/modelGenericInterfaces.mustache delete mode 100644 types/codegen/custom-templates/models.index.mustache delete mode 100644 types/codegen/generated/.openapi-generator-ignore diff --git a/.github/workflows/types-codegen-merge.yaml b/.github/workflows/types-codegen-merge.yaml new file mode 100644 index 00000000..a837fb28 --- /dev/null +++ b/.github/workflows/types-codegen-merge.yaml @@ -0,0 +1,17 @@ +name: Chat Types Merge Processing + +on: + push: + branches: + - feature/flareProtocolCodeGen + paths: + - '**/chatTypes.json' + +jobs: + process-merge: + name: Process Merge with chatTypes.json changes + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v3 \ No newline at end of file diff --git a/.github/workflows/types-codegen-pr.yaml b/.github/workflows/types-codegen-pr.yaml new file mode 100644 index 00000000..92d288a3 --- /dev/null +++ b/.github/workflows/types-codegen-pr.yaml @@ -0,0 +1,49 @@ +name: Chat Types PR Validation + +on: + workflow_dispatch: # Allows manual triggering + pull_request: + branches: + - feature/flareProtocolCodeGen + paths: + - 'types/codegen/schemas/chatTypes.json' + +jobs: + validate-pr: + name: Validate PR with chatTypes.json changes + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20.x' + #should we cache: 'npm' + + - name: Install dependencies + working-directory: types/codegen + run: npm ci + + - name: Generate types + working-directory: types/codegen + run: npm run generate + + - name: Build TypeScript + working-directory: types/codegen/generated/typescript + run: | + npm ci + npm run build + + - name: Setup Java + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '21' + #should we cache: 'gradle' + + - name: Build Java + working-directory: types/codegen/generated/java + run: ./gradlew build \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index a8b83ff6..5bacc4ef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -46,6 +46,10 @@ "@local/language-server-runtimes-generated-types": "file:/Users/conorstw/Desktop/language-server-runtimes/types/codegen/generated" } }, + "chat-client-ui-types/node_modules/@local/language-server-runtimes-generated-types": { + "resolved": "types/codegen/generated/typescript", + "link": true + }, "node_modules/@apidevtools/json-schema-ref-parser": { "version": "11.9.3", "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.9.3.tgz", @@ -556,10 +560,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@local/language-server-runtimes-generated-types": { - "resolved": "types/codegen/generated", - "link": true - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -4698,7 +4698,7 @@ "license": "Apache-2.0", "dependencies": { "@aws/language-server-runtimes-types": "^0.1.45", - "@local/language-server-runtimes-generated-types": "file:/Users/conorstw/Desktop/language-server-runtimes/types/codegen/generated", + "@local/language-server-runtimes-generated-types": "file:/Users/conorstw/Desktop/language-server-runtimes/types/codegen/generated/typescript", "@opentelemetry/api": "^1.9.0", "@opentelemetry/api-logs": "^0.200.0", "@opentelemetry/core": "^2.0.0", @@ -4741,6 +4741,10 @@ "node": ">=18.0.0" } }, + "runtimes/node_modules/@local/language-server-runtimes-generated-types": { + "resolved": "types/codegen/generated/typescript", + "link": true + }, "runtimes/node_modules/jose": { "version": "5.10.0", "resolved": "https://registry.npmjs.org/jose/-/jose-5.10.0.tgz", @@ -4760,8 +4764,8 @@ } }, "types/codegen/generated": { - "name": "@aws/language-server-runtimes-generated-types", - "version": "1.0.0", + "name": "@local/language-server-runtimes-generated-types", + "version": "0.0.1", "devDependencies": { "typescript": "^4.0 || ^5.0" } diff --git a/types/codegen/.gitignore b/types/codegen/.gitignore index 20fdc282..4c8b5ebd 100644 --- a/types/codegen/.gitignore +++ b/types/codegen/.gitignore @@ -1,2 +1,2 @@ generated/ -typescript-template-bank/ \ No newline at end of file +typescript-template-bank diff --git a/types/codegen/README.md b/types/codegen/README.md deleted file mode 100644 index e69de29b..00000000 diff --git a/types/codegen/custom-templates/index.mustache b/types/codegen/custom-templates/index.mustache deleted file mode 100644 index 9590110f..00000000 --- a/types/codegen/custom-templates/index.mustache +++ /dev/null @@ -1,8 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -{{!This is a comment. Removed the export of runtimes because we do not need -those functions. Was causing error because exported a def called ResponseError -which is also used by vscode LSP}} -{{#models.0}} -export * from './models/index{{importFileExtension}}'; -{{/models.0}} diff --git a/types/codegen/custom-templates/java/.template_metadata.json b/types/codegen/custom-templates/java/.template_metadata.json new file mode 100644 index 00000000..5e88f5d9 --- /dev/null +++ b/types/codegen/custom-templates/java/.template_metadata.json @@ -0,0 +1,23 @@ +{ + "templates": { + "model.mustache": { + "source_path": "java-template-bank/out/model.mustache", + "target_path": "custom-templates/model.mustache", + "source_hash": "496bf6c76363f2102086d2a7020ffa105ae6572e4355f0f45fa00bac1884bcf3", + "target_hash": "496bf6c76363f2102086d2a7020ffa105ae6572e4355f0f45fa00bac1884bcf3", + "copied_at": "2025-07-10T11:17:30.085023", + "modified": true, + "current_hash": "39ef4b764b19778863a9e12722f9d9de33793114d56e5fbf463234374f27d9ed" + }, + "pojo.mustache": { + "source_path": "java-template-bank/out/pojo.mustache", + "target_path": "custom-templates/pojo.mustache", + "source_hash": "aa28b136f03ed415f596d37c69293e3e4bb9f2b7a0ccae66f4e7ff5dbe6c5d1f", + "target_hash": "aa28b136f03ed415f596d37c69293e3e4bb9f2b7a0ccae66f4e7ff5dbe6c5d1f", + "copied_at": "2025-07-10T11:21:17.951238", + "modified": false + } + }, + "last_updated": "2025-07-10T12:01:06.511098", + "version": "1.0" +} diff --git a/types/codegen/custom-templates/java/model.mustache b/types/codegen/custom-templates/java/model.mustache new file mode 100644 index 00000000..a9eaedaa --- /dev/null +++ b/types/codegen/custom-templates/java/model.mustache @@ -0,0 +1,17 @@ +{{>licenseInfo}} + +package {{package}}; + +// Selective imports for records +import com.fasterxml.jackson.annotation.JsonProperty; +import javax.annotation.Nullable; +import javax.annotation.Nonnull; +{{#imports}} +import {{import}}; +{{/imports}} + +{{#models}} +{{#model}} +{{#isEnum}}{{>modelEnum}}{{/isEnum}}{{^isEnum}}{{#vendorExtensions.x-is-one-of-interface}}{{>oneof_interface}}{{/vendorExtensions.x-is-one-of-interface}}{{^vendorExtensions.x-is-one-of-interface}}{{>record}}{{/vendorExtensions.x-is-one-of-interface}}{{/isEnum}} +{{/model}} +{{/models}} diff --git a/types/codegen/custom-templates/java/pojo.mustache b/types/codegen/custom-templates/java/pojo.mustache new file mode 100644 index 00000000..c03e531b --- /dev/null +++ b/types/codegen/custom-templates/java/pojo.mustache @@ -0,0 +1,616 @@ +/** + * {{description}}{{^description}}{{classname}}{{/description}}{{#isDeprecated}} + * @deprecated{{/isDeprecated}} + */{{#isDeprecated}} +@Deprecated{{/isDeprecated}} +{{#swagger1AnnotationLibrary}} +{{#description}} +@ApiModel(description = "{{{.}}}") +{{/description}} +{{/swagger1AnnotationLibrary}} +{{#swagger2AnnotationLibrary}} +{{#description}} +@Schema(description = "{{{.}}}") +{{/description}} +{{/swagger2AnnotationLibrary}} +{{#jackson}} +@JsonPropertyOrder({ +{{#vars}} + {{classname}}.JSON_PROPERTY_{{nameInSnakeCase}}{{^-last}},{{/-last}} +{{/vars}} +}) +{{#isClassnameSanitized}} +{{^hasDiscriminatorWithNonEmptyMapping}} +@JsonTypeName("{{name}}") +{{/hasDiscriminatorWithNonEmptyMapping}} +{{/isClassnameSanitized}} +{{/jackson}} +{{>additionalModelTypeAnnotations}}{{>generatedAnnotation}}{{#discriminator}}{{>typeInfoAnnotation}}{{/discriminator}}{{>xmlAnnotation}} +{{#vendorExtensions.x-class-extra-annotation}} +{{{vendorExtensions.x-class-extra-annotation}}} +{{/vendorExtensions.x-class-extra-annotation}} +public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtensions.x-implements}}{{#-first}}implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{#-last}} {{/-last}}{{/vendorExtensions.x-implements}}{ +{{#serializableModel}} + private static final long serialVersionUID = 1L; + +{{/serializableModel}} + {{#vars}} + {{#isEnum}} + {{^isContainer}} +{{>modelInnerEnum}} + {{/isContainer}} + {{#isContainer}} + {{#mostInnerItems}} +{{>modelInnerEnum}} + {{/mostInnerItems}} + {{/isContainer}} + {{/isEnum}} + {{#gson}} + public static final String SERIALIZED_NAME_{{nameInSnakeCase}} = "{{baseName}}"; + {{/gson}} + {{#jackson}} + public static final String JSON_PROPERTY_{{nameInSnakeCase}} = "{{baseName}}"; + {{/jackson}} + {{#withXml}} + @Xml{{#isXmlAttribute}}Attribute{{/isXmlAttribute}}{{^isXmlAttribute}}Element{{/isXmlAttribute}}(name = "{{items.xmlName}}{{^items.xmlName}}{{xmlName}}{{^xmlName}}{{baseName}}{{/xmlName}}{{/items.xmlName}}"{{#xmlNamespace}}, namespace = "{{.}}"{{/xmlNamespace}}) + {{#isXmlWrapped}} + @XmlElementWrapper(name = "{{xmlName}}{{^xmlName}}{{baseName}}{{/xmlName}}"{{#xmlNamespace}}, namespace = "{{.}}"{{/xmlNamespace}}) + {{/isXmlWrapped}} + {{^isXmlAttribute}} + {{#isDateTime}} + @XmlJavaTypeAdapter(OffsetDateTimeXmlAdapter.class) + {{/isDateTime}} + {{/isXmlAttribute}} + {{/withXml}} + {{#gson}} + @SerializedName(SERIALIZED_NAME_{{nameInSnakeCase}}) + {{/gson}} + {{>nullable_var_annotations}} + {{#vendorExtensions.x-field-extra-annotation}} + {{{vendorExtensions.x-field-extra-annotation}}} + {{/vendorExtensions.x-field-extra-annotation}} + {{#vendorExtensions.x-is-jackson-optional-nullable}} + {{#isContainer}} + {{#hasChildren}}protected{{/hasChildren}}{{^hasChildren}}private{{/hasChildren}} JsonNullable<{{{datatypeWithEnum}}}> {{name}} = JsonNullable.<{{{datatypeWithEnum}}}>undefined(); + {{/isContainer}} + {{^isContainer}} + {{#hasChildren}}protected{{/hasChildren}}{{^hasChildren}}private{{/hasChildren}} JsonNullable<{{{datatypeWithEnum}}}> {{name}} = JsonNullable.<{{{datatypeWithEnum}}}>{{#defaultValue}}of({{{.}}}){{/defaultValue}}{{^defaultValue}}undefined(){{/defaultValue}}; + {{/isContainer}} + {{/vendorExtensions.x-is-jackson-optional-nullable}} + {{^vendorExtensions.x-is-jackson-optional-nullable}} + {{#isContainer}} + {{#hasChildren}}protected{{/hasChildren}}{{^hasChildren}}private{{/hasChildren}} {{{datatypeWithEnum}}} {{name}}{{#defaultValue}} = {{{.}}}{{/defaultValue}}; + {{/isContainer}} + {{^isContainer}} + {{#hasChildren}}protected{{/hasChildren}}{{^hasChildren}}private{{/hasChildren}} {{{datatypeWithEnum}}} {{name}}{{#defaultValue}} = {{{.}}}{{/defaultValue}}; + {{/isContainer}} + {{/vendorExtensions.x-is-jackson-optional-nullable}} + + {{/vars}} + public {{classname}}() { + {{#parent}} + {{#parcelableModel}} + super();{{/parcelableModel}} + {{/parent}} + {{#gson}} + {{#discriminator}} + {{#discriminator.isEnum}} + this.{{{discriminatorName}}} = this.getClass().getSimpleName(); + {{/discriminator.isEnum}} + {{/discriminator}} + {{/gson}} + } + {{#vendorExtensions.x-has-readonly-properties}} + {{^withXml}} + /** + * Constructor with only readonly parameters{{#generateConstructorWithAllArgs}}{{^vendorExtensions.x-java-all-args-constructor}} and all parameters{{/vendorExtensions.x-java-all-args-constructor}}{{/generateConstructorWithAllArgs}} + */ + {{#jsonb}}@JsonbCreator{{/jsonb}}{{#jackson}}@JsonCreator{{/jackson}} + public {{classname}}( + {{#readOnlyVars}} + {{#jsonb}}@JsonbProperty(value = "{{baseName}}"{{^required}}, nullable = true{{/required}}){{/jsonb}}{{#jackson}}@JsonProperty(JSON_PROPERTY_{{nameInSnakeCase}}){{/jackson}} {{{datatypeWithEnum}}} {{name}}{{^-last}}, {{/-last}} + {{/readOnlyVars}} + ) { + this(); + {{#readOnlyVars}} + this.{{name}} = {{#vendorExtensions.x-is-jackson-optional-nullable}}{{name}} == null ? JsonNullable.<{{{datatypeWithEnum}}}>undefined() : JsonNullable.of({{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}{{name}}{{/vendorExtensions.x-is-jackson-optional-nullable}}; + {{/readOnlyVars}} + } + {{/withXml}} + {{/vendorExtensions.x-has-readonly-properties}} +{{#vendorExtensions.x-java-all-args-constructor}} + + /** + * Constructor with all args parameters + */ + public {{classname}}({{#vendorExtensions.x-java-all-args-constructor-vars}}{{#jsonb}}@JsonbProperty(value = "{{baseName}}"{{^required}}, nullable = true{{/required}}){{/jsonb}}{{#jackson}}@JsonProperty(JSON_PROPERTY_{{nameInSnakeCase}}){{/jackson}} {{{datatypeWithEnum}}} {{name}}{{^-last}}, {{/-last}}{{/vendorExtensions.x-java-all-args-constructor-vars}}) { +{{#parent}} + super({{#parentVars}}{{name}}{{^-last}}, {{/-last}}{{/parentVars}}); +{{/parent}} + {{#vars}} + this.{{name}} = {{#vendorExtensions.x-is-jackson-optional-nullable}}{{name}} == null ? JsonNullable.<{{{datatypeWithEnum}}}>undefined() : JsonNullable.of({{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}{{name}}{{/vendorExtensions.x-is-jackson-optional-nullable}}; +{{/vars}} + } +{{/vendorExtensions.x-java-all-args-constructor}} + +{{#vars}} + {{^isReadOnly}} + public {{classname}} {{name}}({{#required}}@Nonnull{{/required}}{{^required}}@Nullable{{/required}} {{>nullable_var_annotations}} {{{datatypeWithEnum}}} {{name}}) { + {{#vendorExtensions.x-is-jackson-optional-nullable}}this.{{name}} = JsonNullable.<{{{datatypeWithEnum}}}>of({{name}});{{/vendorExtensions.x-is-jackson-optional-nullable}} + {{^vendorExtensions.x-is-jackson-optional-nullable}}this.{{name}} = {{name}};{{/vendorExtensions.x-is-jackson-optional-nullable}} + return this; + } + {{#isArray}} + + public {{classname}} add{{nameInPascalCase}}Item({{{items.datatypeWithEnum}}} {{name}}Item) { + {{#vendorExtensions.x-is-jackson-optional-nullable}} + if (this.{{name}} == null || !this.{{name}}.isPresent()) { + this.{{name}} = JsonNullable.<{{{datatypeWithEnum}}}>of({{{defaultValue}}}{{^defaultValue}}new {{#uniqueItems}}LinkedHashSet{{/uniqueItems}}{{^uniqueItems}}ArrayList{{/uniqueItems}}<>(){{/defaultValue}}); + } + try { + this.{{name}}.get().add({{name}}Item); + } catch (java.util.NoSuchElementException e) { + // this can never happen, as we make sure above that the value is present + } + return this; + {{/vendorExtensions.x-is-jackson-optional-nullable}} + {{^vendorExtensions.x-is-jackson-optional-nullable}} + if (this.{{name}} == null) { + this.{{name}} = {{{defaultValue}}}{{^defaultValue}}new {{#uniqueItems}}LinkedHashSet{{/uniqueItems}}{{^uniqueItems}}ArrayList{{/uniqueItems}}<>(){{/defaultValue}}; + } + this.{{name}}.add({{name}}Item); + return this; + {{/vendorExtensions.x-is-jackson-optional-nullable}} + } + {{/isArray}} + {{#isMap}} + + public {{classname}} put{{nameInPascalCase}}Item(String key, {{{items.datatypeWithEnum}}} {{name}}Item) { + {{#vendorExtensions.x-is-jackson-optional-nullable}} + if (this.{{name}} == null || !this.{{name}}.isPresent()) { + this.{{name}} = JsonNullable.<{{{datatypeWithEnum}}}>of({{{defaultValue}}}{{^defaultValue}}new HashMap<>(){{/defaultValue}}); + } + try { + this.{{name}}.get().put(key, {{name}}Item); + } catch (java.util.NoSuchElementException e) { + // this can never happen, as we make sure above that the value is present + } + return this; + {{/vendorExtensions.x-is-jackson-optional-nullable}} + {{^vendorExtensions.x-is-jackson-optional-nullable}} + {{^required}} + if (this.{{name}} == null) { + this.{{name}} = {{{defaultValue}}}{{^defaultValue}}new HashMap<>(){{/defaultValue}}; + } + {{/required}} + this.{{name}}.put(key, {{name}}Item); + return this; + {{/vendorExtensions.x-is-jackson-optional-nullable}} + } + {{/isMap}} + + {{/isReadOnly}} + /** + {{#description}} + * {{.}} + {{/description}} + {{^description}} + * Get {{name}} + {{/description}} + {{#minimum}} + * minimum: {{.}} + {{/minimum}} + {{#maximum}} + * maximum: {{.}} + {{/maximum}} + * @return {{name}} + {{#deprecated}} + * @deprecated + {{/deprecated}} + */ +{{#deprecated}} + @Deprecated +{{/deprecated}} + {{#required}}@Nonnull{{/required}}{{^required}}@Nullable{{/required}} + {{>nullable_var_annotations}} +{{#jsonb}} + @JsonbProperty("{{baseName}}") +{{/jsonb}} +{{#useBeanValidation}} +{{>beanValidation}} +{{/useBeanValidation}} +{{#swagger1AnnotationLibrary}} + @ApiModelProperty({{#example}}example = "{{{.}}}", {{/example}}{{#required}}required = {{required}}, {{/required}}value = "{{{description}}}") +{{/swagger1AnnotationLibrary}} +{{#swagger2AnnotationLibrary}} + @Schema({{#example}}example = "{{{.}}}", {{/example}}requiredMode = {{#required}}Schema.RequiredMode.REQUIRED{{/required}}{{^required}}Schema.RequiredMode.NOT_REQUIRED{{/required}}, description = "{{{description}}}") +{{/swagger2AnnotationLibrary}} +{{#vendorExtensions.x-extra-annotation}} + {{{vendorExtensions.x-extra-annotation}}} +{{/vendorExtensions.x-extra-annotation}} +{{#vendorExtensions.x-is-jackson-optional-nullable}} + {{!unannotated, Jackson would pick this up automatically and add it *in addition* to the _JsonNullable getter field}} + @JsonIgnore +{{/vendorExtensions.x-is-jackson-optional-nullable}} +{{^vendorExtensions.x-is-jackson-optional-nullable}}{{#jackson}}{{> jackson_annotations}}{{/jackson}}{{/vendorExtensions.x-is-jackson-optional-nullable}} + public {{{datatypeWithEnum}}} {{getter}}() { + {{#vendorExtensions.x-is-jackson-optional-nullable}} + {{#isReadOnly}}{{! A readonly attribute doesn't have setter => jackson will set null directly if explicitly returned by API, so make sure we have an empty JsonNullable}} + if ({{name}} == null) { + {{name}} = JsonNullable.<{{{datatypeWithEnum}}}>{{#defaultValue}}of({{{.}}}){{/defaultValue}}{{^defaultValue}}undefined(){{/defaultValue}}; + } + {{/isReadOnly}} + return {{name}}.orElse(null); + {{/vendorExtensions.x-is-jackson-optional-nullable}} + {{^vendorExtensions.x-is-jackson-optional-nullable}} + return {{name}}; + {{/vendorExtensions.x-is-jackson-optional-nullable}} + } + + {{#vendorExtensions.x-is-jackson-optional-nullable}} +{{> jackson_annotations}} + public JsonNullable<{{{datatypeWithEnum}}}> {{getter}}_JsonNullable() { + return {{name}}; + } + {{/vendorExtensions.x-is-jackson-optional-nullable}}{{#vendorExtensions.x-is-jackson-optional-nullable}} + @JsonProperty(JSON_PROPERTY_{{nameInSnakeCase}}) + {{#isReadOnly}}private{{/isReadOnly}}{{^isReadOnly}}public{{/isReadOnly}} void {{setter}}_JsonNullable(JsonNullable<{{{datatypeWithEnum}}}> {{name}}) { + {{! For getters/setters that have name differing from attribute name, we must include setter (albeit private) for jackson to be able to set the attribute}} + this.{{name}} = {{name}}; + } + {{/vendorExtensions.x-is-jackson-optional-nullable}} + + {{^isReadOnly}} +{{#vendorExtensions.x-setter-extra-annotation}} {{{vendorExtensions.x-setter-extra-annotation}}} +{{/vendorExtensions.x-setter-extra-annotation}}{{#jackson}}{{^vendorExtensions.x-is-jackson-optional-nullable}}{{> jackson_annotations}}{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/jackson}} public void {{setter}}({{#required}}@Nonnull{{/required}}{{^required}}@Nullable{{/required}} {{>nullable_var_annotations}} {{{datatypeWithEnum}}} {{name}}) { + {{#vendorExtensions.x-is-jackson-optional-nullable}} + this.{{name}} = JsonNullable.<{{{datatypeWithEnum}}}>of({{name}}); + {{/vendorExtensions.x-is-jackson-optional-nullable}} + {{^vendorExtensions.x-is-jackson-optional-nullable}} + this.{{name}} = {{name}}; + {{/vendorExtensions.x-is-jackson-optional-nullable}} + } + {{/isReadOnly}} + + {{/vars}} + {{#parent}} + {{#readWriteVars}} + {{#isOverridden}} + @Override + public {{classname}} {{name}}({{>nullable_var_annotations}} {{{datatypeWithEnum}}} {{name}}) { + {{#vendorExtensions.x-is-jackson-optional-nullable}} + this.{{setter}}(JsonNullable.<{{{datatypeWithEnum}}}>of({{name}})); + {{/vendorExtensions.x-is-jackson-optional-nullable}} + {{^vendorExtensions.x-is-jackson-optional-nullable}} + this.{{setter}}({{name}}); + {{/vendorExtensions.x-is-jackson-optional-nullable}} + return this; + } + + {{/isOverridden}} + {{/readWriteVars}} + {{/parent}} + @Override + public boolean equals(Object o) { + {{#useReflectionEqualsHashCode}} + return EqualsBuilder.reflectionEquals(this, o, false, null, true); + {{/useReflectionEqualsHashCode}} + {{^useReflectionEqualsHashCode}} + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + }{{#hasVars}} + {{classname}} {{classVarName}} = ({{classname}}) o; + return {{#vars}}{{#vendorExtensions.x-is-jackson-optional-nullable}}equalsNullable(this.{{name}}, {{classVarName}}.{{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}{{#isByteArray}}Arrays{{/isByteArray}}{{^isByteArray}}Objects{{/isByteArray}}.equals(this.{{name}}, {{classVarName}}.{{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^-last}} && + {{/-last}}{{/vars}}{{#parent}} && + super.equals(o){{/parent}};{{/hasVars}}{{^hasVars}} + return {{#parent}}super.equals(o){{/parent}}{{^parent}}true{{/parent}};{{/hasVars}} + {{/useReflectionEqualsHashCode}} + }{{#vendorExtensions.x-jackson-optional-nullable-helpers}} + + private static boolean equalsNullable(JsonNullable a, JsonNullable b) { + return a == b || (a != null && b != null && a.isPresent() && b.isPresent() && Objects.deepEquals(a.get(), b.get())); + }{{/vendorExtensions.x-jackson-optional-nullable-helpers}} + + @Override + public int hashCode() { + {{#useReflectionEqualsHashCode}} + return HashCodeBuilder.reflectionHashCode(this); + {{/useReflectionEqualsHashCode}} + {{^useReflectionEqualsHashCode}} + return Objects.hash({{#vars}}{{#vendorExtensions.x-is-jackson-optional-nullable}}hashCodeNullable({{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}{{^isByteArray}}{{name}}{{/isByteArray}}{{#isByteArray}}Arrays.hashCode({{name}}){{/isByteArray}}{{/vendorExtensions.x-is-jackson-optional-nullable}}{{^-last}}, {{/-last}}{{/vars}}{{#parent}}{{#hasVars}}, {{/hasVars}}super.hashCode(){{/parent}}); + {{/useReflectionEqualsHashCode}} + }{{#vendorExtensions.x-jackson-optional-nullable-helpers}} + + private static int hashCodeNullable(JsonNullable a) { + if (a == null) { + return 1; + } + return a.isPresent() ? Arrays.deepHashCode(new Object[]{a.get()}) : 31; + }{{/vendorExtensions.x-jackson-optional-nullable-helpers}} + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class {{classname}} {\n"); + {{#parent}} + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + {{/parent}} + {{#vars}} + sb.append(" {{name}}: ").append({{#isPassword}}"*"{{/isPassword}}{{^isPassword}}toIndentedString({{name}}){{/isPassword}}).append("\n"); + {{/vars}} + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private{{#jsonb}} static{{/jsonb}} String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +{{#supportUrlQuery}} + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + {{#allVars}} + // add `{{baseName}}` to the URL query string + {{#isArray}} + {{#items.isPrimitiveType}} + {{#uniqueItems}} + if ({{getter}}() != null) { + int i = 0; + for ({{{items.datatypeWithEnum}}} _item : {{getter}}()) { + try { + joiner.add(String.format("%s{{baseName}}%s%s=%s", prefix, suffix, + "".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, i, containerSuffix), + URLEncoder.encode(String.valueOf(_item), "UTF-8").replaceAll("\\+", "%20"))); + } catch (UnsupportedEncodingException e) { + // Should never happen, UTF-8 is always supported + throw new RuntimeException(e); + } + } + i++; + } + {{/uniqueItems}} + {{^uniqueItems}} + if ({{getter}}() != null) { + for (int i = 0; i < {{getter}}().size(); i++) { + try { + joiner.add(String.format("%s{{baseName}}%s%s=%s", prefix, suffix, + "".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, i, containerSuffix), + URLEncoder.encode(String.valueOf({{getter}}().get(i)), "UTF-8").replaceAll("\\+", "%20"))); + } catch (UnsupportedEncodingException e) { + // Should never happen, UTF-8 is always supported + throw new RuntimeException(e); + } + } + } + {{/uniqueItems}} + {{/items.isPrimitiveType}} + {{^items.isPrimitiveType}} + {{#items.isModel}} + {{#uniqueItems}} + if ({{getter}}() != null) { + int i = 0; + for ({{{items.dataType}}} _item : {{getter}}()) { + if (_item != null) { + joiner.add(_item.toUrlQueryString(String.format("%s{{baseName}}%s%s", prefix, suffix, + "".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + i++; + } + {{/uniqueItems}} + {{^uniqueItems}} + if ({{getter}}() != null) { + for (int i = 0; i < {{getter}}().size(); i++) { + if ({{getter}}().get(i) != null) { + joiner.add({{getter}}().get(i).toUrlQueryString(String.format("%s{{baseName}}%s%s", prefix, suffix, + "".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + {{/uniqueItems}} + {{/items.isModel}} + {{^items.isModel}} + {{#uniqueItems}} + if ({{getter}}() != null) { + int i = 0; + for ({{{items.dataType}}} _item : {{getter}}()) { + if (_item != null) { + try { + joiner.add(String.format("%s{{baseName}}%s%s=%s", prefix, suffix, + "".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, i, containerSuffix), + URLEncoder.encode(String.valueOf(_item), "UTF-8").replaceAll("\\+", "%20"))); + } catch (UnsupportedEncodingException e) { + // Should never happen, UTF-8 is always supported + throw new RuntimeException(e); + } + } + i++; + } + } + {{/uniqueItems}} + {{^uniqueItems}} + if ({{getter}}() != null) { + for (int i = 0; i < {{getter}}().size(); i++) { + if ({{getter}}().get(i) != null) { + try { + joiner.add(String.format("%s{{baseName}}%s%s=%s", prefix, suffix, + "".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, i, containerSuffix), + URLEncoder.encode(String.valueOf({{getter}}().get(i)), "UTF-8").replaceAll("\\+", "%20"))); + } catch (UnsupportedEncodingException e) { + // Should never happen, UTF-8 is always supported + throw new RuntimeException(e); + } + } + } + } + {{/uniqueItems}} + {{/items.isModel}} + {{/items.isPrimitiveType}} + {{/isArray}} + {{^isArray}} + {{#isMap}} + {{^items.isModel}} + if ({{getter}}() != null) { + for (String _key : {{getter}}().keySet()) { + try { + joiner.add(String.format("%s{{baseName}}%s%s=%s", prefix, suffix, + "".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, _key, containerSuffix), + {{getter}}().get(_key), URLEncoder.encode(String.valueOf({{getter}}().get(_key)), "UTF-8").replaceAll("\\+", "%20"))); + } catch (UnsupportedEncodingException e) { + // Should never happen, UTF-8 is always supported + throw new RuntimeException(e); + } + } + } + {{/items.isModel}} + {{#items.isModel}} + if ({{getter}}() != null) { + for (String _key : {{getter}}().keySet()) { + if ({{getter}}().get(_key) != null) { + joiner.add({{getter}}().get(_key).toUrlQueryString(String.format("%s{{baseName}}%s%s", prefix, suffix, + "".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, _key, containerSuffix)))); + } + } + } + {{/items.isModel}} + {{/isMap}} + {{^isMap}} + {{#isPrimitiveType}} + if ({{getter}}() != null) { + try { + joiner.add(String.format("%s{{{baseName}}}%s=%s", prefix, suffix, URLEncoder.encode(String.valueOf({{{getter}}}()), "UTF-8").replaceAll("\\+", "%20"))); + } catch (UnsupportedEncodingException e) { + // Should never happen, UTF-8 is always supported + throw new RuntimeException(e); + } + } + {{/isPrimitiveType}} + {{^isPrimitiveType}} + {{#isModel}} + if ({{getter}}() != null) { + joiner.add({{getter}}().toUrlQueryString(prefix + "{{{baseName}}}" + suffix)); + } + {{/isModel}} + {{^isModel}} + if ({{getter}}() != null) { + try { + joiner.add(String.format("%s{{{baseName}}}%s=%s", prefix, suffix, URLEncoder.encode(String.valueOf({{{getter}}}()), "UTF-8").replaceAll("\\+", "%20"))); + } catch (UnsupportedEncodingException e) { + // Should never happen, UTF-8 is always supported + throw new RuntimeException(e); + } + } + {{/isModel}} + {{/isPrimitiveType}} + {{/isMap}} + {{/isArray}} + + {{/allVars}} + return joiner.toString(); + } +{{/supportUrlQuery}} +{{#parcelableModel}} + + public void writeToParcel(Parcel out, int flags) { +{{#model}} +{{#isArray}} + out.writeList(this); +{{/isArray}} +{{^isArray}} +{{#parent}} + super.writeToParcel(out, flags); +{{/parent}} +{{#vars}} + out.writeValue({{name}}); +{{/vars}} +{{/isArray}} +{{/model}} + } + + {{classname}}(Parcel in) { +{{#isArray}} + in.readTypedList(this, {{arrayModelType}}.CREATOR); +{{/isArray}} +{{^isArray}} +{{#parent}} + super(in); +{{/parent}} +{{#vars}} +{{#isPrimitiveType}} + {{name}} = ({{{datatypeWithEnum}}})in.readValue(null); +{{/isPrimitiveType}} +{{^isPrimitiveType}} + {{name}} = ({{{datatypeWithEnum}}})in.readValue({{complexType}}.class.getClassLoader()); +{{/isPrimitiveType}} +{{/vars}} +{{/isArray}} + } + + public int describeContents() { + return 0; + } + + public static final Parcelable.Creator<{{classname}}> CREATOR = new Parcelable.Creator<{{classname}}>() { + public {{classname}} createFromParcel(Parcel in) { +{{#model}} +{{#isArray}} + {{classname}} result = new {{classname}}(); + result.addAll(in.readArrayList({{arrayModelType}}.class.getClassLoader())); + return result; +{{/isArray}} +{{^isArray}} + return new {{classname}}(in); +{{/isArray}} +{{/model}} + } + public {{classname}}[] newArray(int size) { + return new {{classname}}[size]; + } + }; +{{/parcelableModel}} +{{#generateBuilders}} + + {{>javaBuilder}} +{{/generateBuilders}} + +} diff --git a/types/codegen/custom-templates/java/record.mustache b/types/codegen/custom-templates/java/record.mustache new file mode 100644 index 00000000..d4328371 --- /dev/null +++ b/types/codegen/custom-templates/java/record.mustache @@ -0,0 +1,12 @@ +/** + * {{description}}{{^description}}{{classname}}{{/description}} + */ +{{>generatedAnnotation}} +public record {{classname}}( +{{#vars}} + @JsonProperty("{{baseName}}") + {{#required}}@Nonnull{{/required}}{{^required}}@Nullable{{/required}} {{{datatypeWithEnum}}} {{name}}{{^-last}},{{/-last}} +{{/vars}} +) {{#parent}}implements {{{.}}} {{/parent}}{{#vendorExtensions.x-implements}}{{#-first}}implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{#-last}} {{/-last}}{{/vendorExtensions.x-implements}}{ + +} \ No newline at end of file diff --git a/types/codegen/custom-templates/modelEnumInterfaces.mustache b/types/codegen/custom-templates/modelEnumInterfaces.mustache deleted file mode 100644 index 5c508270..00000000 --- a/types/codegen/custom-templates/modelEnumInterfaces.mustache +++ /dev/null @@ -1,26 +0,0 @@ -{{#stringEnums}} -/** - * {{#lambda.indented_star_1}}{{{unescapedDescription}}}{{/lambda.indented_star_1}} - * @export - * @type {string} - */ -export type {{classname}} = {{#allowableValues}}{{#enumVars}}{{{value}}}{{^-last}} | {{/-last}}{{/enumVars}}{{/allowableValues}}; -{{/stringEnums}}{{^stringEnums}} -/** - * {{#lambda.indented_star_1}}{{{unescapedDescription}}}{{/lambda.indented_star_1}} - * @export - */ -export const {{classname}} = { -{{#allowableValues}} -{{#enumVars}} - {{#enumDescription}} - /** - * {{enumDescription}} - */ - {{/enumDescription}} - {{{name}}}: {{{value}}}{{^-last}},{{/-last}} -{{/enumVars}} -{{/allowableValues}} -} as const; -export type {{classname}} = typeof {{classname}}[keyof typeof {{classname}}]; -{{/stringEnums}} \ No newline at end of file diff --git a/types/codegen/custom-templates/modelGenericInterfaces.mustache b/types/codegen/custom-templates/modelGenericInterfaces.mustache deleted file mode 100644 index e96ea996..00000000 --- a/types/codegen/custom-templates/modelGenericInterfaces.mustache +++ /dev/null @@ -1,46 +0,0 @@ -/** - * {{#lambda.indented_star_1}}{{{unescapedDescription}}}{{/lambda.indented_star_1}} - * @export - * @interface {{classname}} - */ -export interface {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{ -{{#additionalPropertiesType}} - [key: string]: {{{additionalPropertiesType}}}{{#hasVars}} | any{{/hasVars}}; -{{/additionalPropertiesType}} -{{#vars}} - /** - * {{#lambda.indented_star_4}}{{{unescapedDescription}}}{{/lambda.indented_star_4}} - * @type {{=<% %>=}}{<%&datatype%>}<%={{ }}=%> - * @memberof {{classname}} - {{#deprecated}} - * @deprecated - {{/deprecated}} - */ - {{#isReadOnly}}readonly {{/isReadOnly}}{{name}}{{^required}}?{{/required}}: {{#isEnum}}{{{datatypeWithEnum}}}{{#isNullable}} | null{{/isNullable}}{{/isEnum}}{{^isEnum}}{{{datatype}}}{{#isNullable}} | null{{/isNullable}}{{/isEnum}}; -{{/vars}} -}{{#hasEnums}} - -{{#vars}} -{{!Changed to make actual string enum}} -{{#isEnum}} -{{#stringEnums}} -/** -* @export -* @type {string} -*/ -export type {{classname}}{{enumName}} = {{#allowableValues}} {{#enumVars}}{{{value}}}{{^-last}} | {{/-last}}{{/enumVars}}{{/allowableValues}}; - -{{/stringEnums}}{{^stringEnums}} -/** - * @export - */ -export const {{classname}}{{enumName}} = { -{{#allowableValues}} - {{#enumVars}} - {{{name}}}: {{{value}}}{{^-last}},{{/-last}} - {{/enumVars}} -{{/allowableValues}} -} as const; -export type {{classname}}{{enumName}} = typeof {{classname}}{{enumName}}[keyof typeof {{classname}}{{enumName}}]; -{{/stringEnums}} -{{/isEnum}}{{/vars}}{{/hasEnums}} \ No newline at end of file diff --git a/types/codegen/custom-templates/models.index.mustache b/types/codegen/custom-templates/models.index.mustache deleted file mode 100644 index 434c6b19..00000000 --- a/types/codegen/custom-templates/models.index.mustache +++ /dev/null @@ -1,31 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -import { Position, Range, TextDocumentIdentifier } from 'vscode-languageserver-types' - -{{#models}} -{{#model}} -{{^withoutRuntimeChecks}} -export * from './{{{ classFilename }}}{{importFileExtension}}'; -{{#useSagaAndRecords}} -{{^isEnum}} -export * from './{{{ classFilename }}}Record{{importFileExtension}}'; -{{/isEnum}} -{{/useSagaAndRecords}} -{{/withoutRuntimeChecks}} -{{#withoutRuntimeChecks}} -{{#isEnum}} -{{>modelEnumInterfaces}} -{{/isEnum}} -{{^isEnum}} -{{#oneOf}} -{{#-first}} -{{>modelOneOfInterfaces}} -{{/-first}} -{{/oneOf}} -{{^oneOf}} -{{>modelGenericInterfaces}} -{{/oneOf}} -{{/isEnum}} -{{/withoutRuntimeChecks}} -{{/model}} -{{/models}} diff --git a/types/codegen/generated/.openapi-generator-ignore b/types/codegen/generated/.openapi-generator-ignore deleted file mode 100644 index 56fcb0c0..00000000 --- a/types/codegen/generated/.openapi-generator-ignore +++ /dev/null @@ -1,25 +0,0 @@ -# OpenAPI Generator Ignore -# Generated by openapi-generator https://github.com/openapitools/openapi-generator - -# Use this file to prevent files from being overwritten by the generator. -# The patterns follow closely to .gitignore or .dockerignore. - -# As an example, the C# client generator defines ApiClient.cs. -# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: -#ApiClient.cs - -# You can match any string of characters against a directory, file or extension with a single asterisk (*): -#foo/*/qux -# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux - -# You can recursively match patterns against a directory, file or extension with a double asterisk (**): -#foo/**/qux -# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux - -# You can also negate patterns with an exclamation (!). -# For example, you can ignore all files in a docs folder with the file extension .md: -#docs/*.md -# Then explicitly reverse the ignore rule for a single file: -#!docs/README.md - -/src/runtime.ts \ No newline at end of file diff --git a/types/index.ts b/types/index.ts index 0664cc06..92cd65f0 100644 --- a/types/index.ts +++ b/types/index.ts @@ -41,5 +41,20 @@ export { export * from './didChangeDependencyPaths' export * from './inlineCompletionWithReferences' export * from './lsp' -export * from './window' -export * from './workspace' +export { + ShowOpenDialogResult, + SHOW_SAVE_FILE_DIALOG_REQUEST_METHOD, + SHOW_OPEN_FILE_DIALOG_REQUEST_METHOD, +} from './window' +export { + SelectWorkspaceItemParams, + WorkspaceItem, + SelectWorkspaceItemResult, + DID_CREATE_DIRECTORY_NOTIFICATION_METHOD, + DID_REMOVE_FILE_OR_DIRECTORY_NOTIFICATION_METHOD, + SELECT_WORKSPACE_ITEM_REQUEST_METHOD, + OPEN_FILE_DIFF_NOTIFICATION_METHOD, + DID_COPY_FILE_NOTIFICATION_METHOD, + DID_APPEND_FILE_NOTIFICATION_METHOD, + DID_WRITE_FILE_NOTIFICATION_METHOD, +} from './workspace' From 27743343653cbf1f3d0d83b9717ce4f57319285b Mon Sep 17 00:00:00 2001 From: Conor Stewart Date: Mon, 21 Jul 2025 15:18:45 -0700 Subject: [PATCH 10/38] feat: java generation config in openapitools and templates changed dirs --- .github/workflows/types-codegen-pr.yaml | 8 +- types/codegen/.gitignore | 14 ++- .../java/.template_metadata.json | 23 ---- .../typescript/index.mustache | 8 ++ .../typescript/modelEnumInterfaces.mustache | 26 +++++ .../modelGenericInterfaces.mustache | 46 ++++++++ .../typescript/models.index.mustache | 31 ++++++ types/codegen/openapitools.json | 37 +++++-- types/codegen/post-generate.js | 2 +- types/codegen/schema/chatTypes.json | 102 ++++++++++++++---- types/codegen/tsconfig.json | 18 ++-- 11 files changed, 247 insertions(+), 68 deletions(-) delete mode 100644 types/codegen/custom-templates/java/.template_metadata.json create mode 100644 types/codegen/custom-templates/typescript/index.mustache create mode 100644 types/codegen/custom-templates/typescript/modelEnumInterfaces.mustache create mode 100644 types/codegen/custom-templates/typescript/modelGenericInterfaces.mustache create mode 100644 types/codegen/custom-templates/typescript/models.index.mustache diff --git a/.github/workflows/types-codegen-pr.yaml b/.github/workflows/types-codegen-pr.yaml index 92d288a3..4265a961 100644 --- a/.github/workflows/types-codegen-pr.yaml +++ b/.github/workflows/types-codegen-pr.yaml @@ -40,10 +40,10 @@ jobs: - name: Setup Java uses: actions/setup-java@v4 with: - distribution: 'temurin' + distribution: 'corretto' java-version: '21' - #should we cache: 'gradle' + cache: 'maven' - - name: Build Java + - name: Build Java with Maven working-directory: types/codegen/generated/java - run: ./gradlew build \ No newline at end of file + run: mvn clean verify \ No newline at end of file diff --git a/types/codegen/.gitignore b/types/codegen/.gitignore index 4c8b5ebd..65afc6bc 100644 --- a/types/codegen/.gitignore +++ b/types/codegen/.gitignore @@ -1,2 +1,14 @@ +# Generated code generated/ -typescript-template-bank + +# Template bank +typescript-template-bank/ + +# OpenAPI generator metadata +.openapi-generator/ + +# Node.js dependencies +node_modules/ + +# Build outputs +dist/ diff --git a/types/codegen/custom-templates/java/.template_metadata.json b/types/codegen/custom-templates/java/.template_metadata.json deleted file mode 100644 index 5e88f5d9..00000000 --- a/types/codegen/custom-templates/java/.template_metadata.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "templates": { - "model.mustache": { - "source_path": "java-template-bank/out/model.mustache", - "target_path": "custom-templates/model.mustache", - "source_hash": "496bf6c76363f2102086d2a7020ffa105ae6572e4355f0f45fa00bac1884bcf3", - "target_hash": "496bf6c76363f2102086d2a7020ffa105ae6572e4355f0f45fa00bac1884bcf3", - "copied_at": "2025-07-10T11:17:30.085023", - "modified": true, - "current_hash": "39ef4b764b19778863a9e12722f9d9de33793114d56e5fbf463234374f27d9ed" - }, - "pojo.mustache": { - "source_path": "java-template-bank/out/pojo.mustache", - "target_path": "custom-templates/pojo.mustache", - "source_hash": "aa28b136f03ed415f596d37c69293e3e4bb9f2b7a0ccae66f4e7ff5dbe6c5d1f", - "target_hash": "aa28b136f03ed415f596d37c69293e3e4bb9f2b7a0ccae66f4e7ff5dbe6c5d1f", - "copied_at": "2025-07-10T11:21:17.951238", - "modified": false - } - }, - "last_updated": "2025-07-10T12:01:06.511098", - "version": "1.0" -} diff --git a/types/codegen/custom-templates/typescript/index.mustache b/types/codegen/custom-templates/typescript/index.mustache new file mode 100644 index 00000000..9590110f --- /dev/null +++ b/types/codegen/custom-templates/typescript/index.mustache @@ -0,0 +1,8 @@ +/* tslint:disable */ +/* eslint-disable */ +{{!This is a comment. Removed the export of runtimes because we do not need +those functions. Was causing error because exported a def called ResponseError +which is also used by vscode LSP}} +{{#models.0}} +export * from './models/index{{importFileExtension}}'; +{{/models.0}} diff --git a/types/codegen/custom-templates/typescript/modelEnumInterfaces.mustache b/types/codegen/custom-templates/typescript/modelEnumInterfaces.mustache new file mode 100644 index 00000000..5c508270 --- /dev/null +++ b/types/codegen/custom-templates/typescript/modelEnumInterfaces.mustache @@ -0,0 +1,26 @@ +{{#stringEnums}} +/** + * {{#lambda.indented_star_1}}{{{unescapedDescription}}}{{/lambda.indented_star_1}} + * @export + * @type {string} + */ +export type {{classname}} = {{#allowableValues}}{{#enumVars}}{{{value}}}{{^-last}} | {{/-last}}{{/enumVars}}{{/allowableValues}}; +{{/stringEnums}}{{^stringEnums}} +/** + * {{#lambda.indented_star_1}}{{{unescapedDescription}}}{{/lambda.indented_star_1}} + * @export + */ +export const {{classname}} = { +{{#allowableValues}} +{{#enumVars}} + {{#enumDescription}} + /** + * {{enumDescription}} + */ + {{/enumDescription}} + {{{name}}}: {{{value}}}{{^-last}},{{/-last}} +{{/enumVars}} +{{/allowableValues}} +} as const; +export type {{classname}} = typeof {{classname}}[keyof typeof {{classname}}]; +{{/stringEnums}} \ No newline at end of file diff --git a/types/codegen/custom-templates/typescript/modelGenericInterfaces.mustache b/types/codegen/custom-templates/typescript/modelGenericInterfaces.mustache new file mode 100644 index 00000000..e96ea996 --- /dev/null +++ b/types/codegen/custom-templates/typescript/modelGenericInterfaces.mustache @@ -0,0 +1,46 @@ +/** + * {{#lambda.indented_star_1}}{{{unescapedDescription}}}{{/lambda.indented_star_1}} + * @export + * @interface {{classname}} + */ +export interface {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{ +{{#additionalPropertiesType}} + [key: string]: {{{additionalPropertiesType}}}{{#hasVars}} | any{{/hasVars}}; +{{/additionalPropertiesType}} +{{#vars}} + /** + * {{#lambda.indented_star_4}}{{{unescapedDescription}}}{{/lambda.indented_star_4}} + * @type {{=<% %>=}}{<%&datatype%>}<%={{ }}=%> + * @memberof {{classname}} + {{#deprecated}} + * @deprecated + {{/deprecated}} + */ + {{#isReadOnly}}readonly {{/isReadOnly}}{{name}}{{^required}}?{{/required}}: {{#isEnum}}{{{datatypeWithEnum}}}{{#isNullable}} | null{{/isNullable}}{{/isEnum}}{{^isEnum}}{{{datatype}}}{{#isNullable}} | null{{/isNullable}}{{/isEnum}}; +{{/vars}} +}{{#hasEnums}} + +{{#vars}} +{{!Changed to make actual string enum}} +{{#isEnum}} +{{#stringEnums}} +/** +* @export +* @type {string} +*/ +export type {{classname}}{{enumName}} = {{#allowableValues}} {{#enumVars}}{{{value}}}{{^-last}} | {{/-last}}{{/enumVars}}{{/allowableValues}}; + +{{/stringEnums}}{{^stringEnums}} +/** + * @export + */ +export const {{classname}}{{enumName}} = { +{{#allowableValues}} + {{#enumVars}} + {{{name}}}: {{{value}}}{{^-last}},{{/-last}} + {{/enumVars}} +{{/allowableValues}} +} as const; +export type {{classname}}{{enumName}} = typeof {{classname}}{{enumName}}[keyof typeof {{classname}}{{enumName}}]; +{{/stringEnums}} +{{/isEnum}}{{/vars}}{{/hasEnums}} \ No newline at end of file diff --git a/types/codegen/custom-templates/typescript/models.index.mustache b/types/codegen/custom-templates/typescript/models.index.mustache new file mode 100644 index 00000000..434c6b19 --- /dev/null +++ b/types/codegen/custom-templates/typescript/models.index.mustache @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +import { Position, Range, TextDocumentIdentifier } from 'vscode-languageserver-types' + +{{#models}} +{{#model}} +{{^withoutRuntimeChecks}} +export * from './{{{ classFilename }}}{{importFileExtension}}'; +{{#useSagaAndRecords}} +{{^isEnum}} +export * from './{{{ classFilename }}}Record{{importFileExtension}}'; +{{/isEnum}} +{{/useSagaAndRecords}} +{{/withoutRuntimeChecks}} +{{#withoutRuntimeChecks}} +{{#isEnum}} +{{>modelEnumInterfaces}} +{{/isEnum}} +{{^isEnum}} +{{#oneOf}} +{{#-first}} +{{>modelOneOfInterfaces}} +{{/-first}} +{{/oneOf}} +{{^oneOf}} +{{>modelGenericInterfaces}} +{{/oneOf}} +{{/isEnum}} +{{/withoutRuntimeChecks}} +{{/model}} +{{/models}} diff --git a/types/codegen/openapitools.json b/types/codegen/openapitools.json index 4aad035f..0c42ad71 100644 --- a/types/codegen/openapitools.json +++ b/types/codegen/openapitools.json @@ -4,11 +4,12 @@ "generator-cli": { "version": "7.14.0", "generators": { - "typescript-fetch": { + "typescript": { "generatorName": "typescript-fetch", - "output": "#{cwd}/generated", + "disabled": false, + "output": "#{cwd}/generated/typescript", "inputSpec": "#{cwd}/schema/chatTypes.json", - "templateDir": "#{cwd}/custom-templates", + "templateDir": "#{cwd}/custom-templates/typescript", "additionalProperties": { "supportsES6": true, "modelPropertyNaming": "camelCase", @@ -20,15 +21,39 @@ "stringEnums": true, "disallowAdditionalPropertiesIfNotPresent": false }, - "global-property": { - "generateAliasAsModel": true - }, + "global-property": {}, "openapi-normalizer": { "REF_AS_PARENT_IN_ALLOF": true }, "reservedWordsMappings": { "export": "export" } + }, + "java": { + "generatorName": "java", + "disabled": false, + "output": "#{cwd}/generated/java", + "inputSpec": "#{cwd}/schema/chatTypes.json", + "templateDir": "#{cwd}/custom-templates/java", + "additionalProperties": { + "useOneOfInterfaces": true, + "legacyDiscriminatorBehavior": false, + "java8": false, + "dateLibrary": "java8", + "serializableModel": false, + "useBeanValidation": false, + "performBeanValidation": false, + "sourceCompatibility": "21", + "targetCompatibility": "21" + }, + "global-property": { + "models": "CursorPosition:FileParams:CopyFileParams:OpenFileDiffParams:ShowOpenDialogParams:ShowSaveFileDialogParams:ShowSaveFileDialogResult" + }, + "importMappings": { + "Position": "org.eclipse.lsp4j.Position", + "Range": "org.eclipse.lsp4j.Range", + "TextDocumentIdentifier": "org.eclipse.lsp4j.TextDocumentIdentifier" + } } } } diff --git a/types/codegen/post-generate.js b/types/codegen/post-generate.js index 0ea28299..367499c5 100755 --- a/types/codegen/post-generate.js +++ b/types/codegen/post-generate.js @@ -4,7 +4,7 @@ const fs = require('fs') const path = require('path') // Path to the generated index.ts file -const indexPath = path.join(__dirname, 'generated/src/models/index.ts') +const indexPath = path.join(__dirname, 'generated/typescript/src/models/index.ts') // Read the constants file const constants = fs.readFileSync(path.join(__dirname, 'constants.ts'), 'utf8') diff --git a/types/codegen/schema/chatTypes.json b/types/codegen/schema/chatTypes.json index 0dfd2215..3fdea30f 100644 --- a/types/codegen/schema/chatTypes.json +++ b/types/codegen/schema/chatTypes.json @@ -2,7 +2,7 @@ "openapi": "3.0.0", "info": { "title": "Chat Types", - "version": "1.0.0", + "version": "0.0.1", "description": "Chat Types Definitions for FLARE" }, "paths": {}, @@ -47,7 +47,7 @@ } } }, - "ContentSpan": { + "RecommendationContentSpan": { "type": "object", "required": ["start", "end"], "properties": { @@ -76,7 +76,7 @@ "type": "string" }, "recommendationContentSpan": { - "$ref": "#/components/schemas/ContentSpan" + "$ref": "#/components/schemas/RecommendationContentSpan" }, "information": { "type": "string" @@ -127,7 +127,7 @@ "enum": ["selection", "block"], "description": "Type of code selection" }, - "PositionCursor": { + "CursorPosition": { "type": "object", "required": ["position"], "properties": { @@ -136,7 +136,7 @@ } } }, - "RangeCursor": { + "CursorRange": { "type": "object", "required": ["range"], "properties": { @@ -148,10 +148,10 @@ "CursorState": { "oneOf": [ { - "$ref": "#/components/schemas/PositionCursor" + "$ref": "#/components/schemas/CursorPosition" }, { - "$ref": "#/components/schemas/RangeCursor" + "$ref": "#/components/schemas/CursorRange" } ] }, @@ -438,13 +438,6 @@ } ] }, - "EndChatParams": { - "type": "object", - "required": ["tabId"], - "properties": { - "tabId": { "type": "string" } - } - }, "QuickActionCommand": { "type": "object", "description": "Configuration object for chat quick action.", @@ -631,18 +624,19 @@ "followUp": { "$ref": "#/components/schemas/ChatItemAction" } } }, + "NewTabOptions": { + "type": "object", + "properties": { + "state": { "$ref": "#/components/schemas/TabState" }, + "data": { "$ref": "#/components/schemas/TabData" } + } + }, "OpenTabParams": { "type": "object", "description": "Defines parameters for opening a tab. Opens existing tab if `tabId` is provided, otherwise creates a new tab with options provided in `options` parameter and opens it.", "properties": { "tabId": { "type": "string" }, - "newTabOptions": { - "type": "object", - "properties": { - "state": { "$ref": "#/components/schemas/TabState" }, - "data": { "$ref": "#/components/schemas/TabData" } - } - } + "newTabOptions": { "$ref": "#/components/schemas/NewTabOptions" } } }, "OpenTabResult": { @@ -1313,6 +1307,72 @@ }, "eventId": { "type": "string" } } + }, + "FileParams": { + "type": "object", + "required": ["path"], + "properties": { + "path": { "type": "string" } + } + }, + "CopyFileParams": { + "type": "object", + "required": ["oldPath", "newPath"], + "properties": { + "oldPath": { "type": "string" }, + "newPath": { "type": "string" } + } + }, + "OpenFileDiffParams": { + "type": "object", + "required": ["originalFileUri", "isDeleted"], + "properties": { + "originalFileUri": { "type": "string" }, + "originalFileContent": { "type": "string" }, + "isDeleted": { "type": "boolean" }, + "fileContent": { "type": "string" } + } + }, + "ShowOpenDialogParams": { + "type": "object", + "properties": { + "canSelectFiles": { "type": "boolean" }, + "canSelectFolders": { "type": "boolean" }, + "canSelectMany": { "type": "boolean" }, + "filters": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { "type": "string" } + } + }, + "defaultUri": { "type": "string" }, + "title": { "type": "string" } + } + }, + "ShowSaveFileDialogParams": { + "type": "object", + "properties": { + "supportedFormats": { + "type": "array", + "items": { "type": "string" } + }, + "defaultUri": { "type": "string" } + } + }, + "ShowSaveFileDialogResult": { + "type": "object", + "required": ["targetUri"], + "properties": { + "targetUri": { "type": "string" } + } + }, + "EndChatParams": { + "type": "object", + "required": ["tabId"], + "properties": { + "tabId": { "type": "string" } + } } } } diff --git a/types/codegen/tsconfig.json b/types/codegen/tsconfig.json index d7baf496..192bd06a 100644 --- a/types/codegen/tsconfig.json +++ b/types/codegen/tsconfig.json @@ -1,18 +1,12 @@ { "compilerOptions": { - "target": "ES2018", - "module": "CommonJS", + "declaration": true, + "target": "es6", + "module": "commonjs", "moduleResolution": "node", - "esModuleInterop": true, - "resolveJsonModule": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "types": ["node"], - "baseUrl": ".", - "paths": { - "*": ["node_modules/*"] - } + "outDir": "dist", + "typeRoots": ["node_modules/@types"] }, "include": ["*.ts"], - "exclude": ["node_modules"] + "exclude": ["dist", "node_modules"] } From 7b6be38fe8b398e7fa592b5f4012d99bbe9e890b Mon Sep 17 00:00:00 2001 From: Conor Stewart Date: Mon, 11 Aug 2025 16:10:40 -0700 Subject: [PATCH 11/38] fix: update with newest types --- package-lock.json | 5 +- runtimes/protocol/chat.ts | 3 - types/codegen/openapitools.json | 3 + types/codegen/package-lock.json | 484 +++++++++++++++++++++++----- types/codegen/package.json | 2 +- types/codegen/schema/chatTypes.json | 74 +++++ types/index.ts | 4 + 7 files changed, 491 insertions(+), 84 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5bacc4ef..84e2f63a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37,6 +37,9 @@ "npm": ">=7.0.0 <11.0.0" } }, + "../../../Desktop/language-server-runtimes/types/codegen/generated/typescript": { + "extraneous": true + }, "chat-client-ui-types": { "name": "@aws/chat-client-ui-types", "version": "0.1.62", @@ -4697,7 +4700,7 @@ "version": "0.2.125", "license": "Apache-2.0", "dependencies": { - "@aws/language-server-runtimes-types": "^0.1.45", + "@aws/language-server-runtimes-types": "^0.1.55", "@local/language-server-runtimes-generated-types": "file:/Users/conorstw/Desktop/language-server-runtimes/types/codegen/generated/typescript", "@opentelemetry/api": "^1.9.0", "@opentelemetry/api-logs": "^0.200.0", diff --git a/runtimes/protocol/chat.ts b/runtimes/protocol/chat.ts index 28fdbc3e..8760419f 100644 --- a/runtimes/protocol/chat.ts +++ b/runtimes/protocol/chat.ts @@ -38,9 +38,6 @@ import { PINNED_CONTEXT_REMOVE_NOTIFICATION_METHOD, ACTIVE_EDITOR_CHANGED_NOTIFICATION_METHOD, OPEN_FILE_DIALOG_METHOD, -} from './lsp' - -import { ChatParams, ChatResult, EndChatParams, diff --git a/types/codegen/openapitools.json b/types/codegen/openapitools.json index 0c42ad71..d96c4f70 100644 --- a/types/codegen/openapitools.json +++ b/types/codegen/openapitools.json @@ -27,6 +27,9 @@ }, "reservedWordsMappings": { "export": "export" + }, + "typeMappings": { + "Date": "Date" } }, "java": { diff --git a/types/codegen/package-lock.json b/types/codegen/package-lock.json index b29afec7..b82c567f 100644 --- a/types/codegen/package-lock.json +++ b/types/codegen/package-lock.json @@ -8,20 +8,12 @@ "name": "chat-types-generator", "version": "0.0.1", "devDependencies": { - "@openapitools/openapi-generator-cli": "^2.21.0", + "@openapitools/openapi-generator-cli": "^2.21.4", "@types/node": "^24.0.4", "ts-node": "^10.9.2", "typescript": "^5.8.3" } }, - "node_modules/@babel/runtime": { - "version": "7.27.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "dev": true, @@ -35,6 +27,8 @@ }, "node_modules/@isaacs/balanced-match": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", "dev": true, "license": "MIT", "engines": { @@ -43,6 +37,8 @@ }, "node_modules/@isaacs/brace-expansion": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", "dev": true, "license": "MIT", "dependencies": { @@ -54,6 +50,8 @@ }, "node_modules/@isaacs/cliui": { "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, "license": "ISC", "dependencies": { @@ -70,6 +68,8 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, "license": "MIT", "engines": { @@ -81,6 +81,8 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-styles": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, "license": "MIT", "engines": { @@ -92,11 +94,15 @@ }, "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "license": "MIT", "dependencies": { @@ -113,6 +119,8 @@ }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "license": "MIT", "dependencies": { @@ -127,6 +135,8 @@ }, "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -165,6 +175,8 @@ }, "node_modules/@lukeed/csprng": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", + "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", "dev": true, "license": "MIT", "engines": { @@ -172,7 +184,9 @@ } }, "node_modules/@nestjs/axios": { - "version": "4.0.0", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@nestjs/axios/-/axios-4.0.1.tgz", + "integrity": "sha512-68pFJgu+/AZbWkGu65Z3r55bTsCPlgyKaV4BSG8yUAD72q1PPuyVRgUwFv6BxdnibTUHlyxm06FmYWNC+bjN7A==", "dev": true, "license": "MIT", "peerDependencies": { @@ -182,7 +196,9 @@ } }, "node_modules/@nestjs/common": { - "version": "11.1.3", + "version": "11.1.5", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-11.1.5.tgz", + "integrity": "sha512-DQpWdr3ShO0BHWkHl3I4W/jR6R3pDtxyBlmrpTuZF+PXxQyBXNvsUne0Wyo6QHPEDi+pAz9XchBFoKbqOhcdTg==", "dev": true, "license": "MIT", "dependencies": { @@ -212,7 +228,9 @@ } }, "node_modules/@nestjs/core": { - "version": "11.1.3", + "version": "11.1.5", + "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-11.1.5.tgz", + "integrity": "sha512-Qr25MEY9t8VsMETy7eXQ0cNXqu0lzuFrrTr+f+1G57ABCtV5Pogm7n9bF71OU2bnkDD32Bi4hQLeFR90cku3Tw==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -253,6 +271,8 @@ }, "node_modules/@nuxt/opencollective": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@nuxt/opencollective/-/opencollective-0.4.1.tgz", + "integrity": "sha512-GXD3wy50qYbxCJ652bDrDzgMr3NFEkIS374+IgFQKkCvk9yiYcLvX2XDYr7UyQxf4wK0e+yqDYRubZ0DtOxnmQ==", "dev": true, "license": "MIT", "dependencies": { @@ -268,6 +288,8 @@ }, "node_modules/@nuxtjs/opencollective": { "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz", + "integrity": "sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==", "dev": true, "license": "MIT", "dependencies": { @@ -285,24 +307,28 @@ }, "node_modules/@nuxtjs/opencollective/node_modules/consola": { "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", "dev": true, "license": "MIT" }, "node_modules/@openapitools/openapi-generator-cli": { - "version": "2.21.0", + "version": "2.21.4", + "resolved": "https://registry.npmjs.org/@openapitools/openapi-generator-cli/-/openapi-generator-cli-2.21.4.tgz", + "integrity": "sha512-s2OBgiNml0DL0ebkvAMQxZi7c8SUQMHssTUJwWsFDv4kVtBVDV4UzsCh9gQEXlNjuEcEgZoa5BIOai2sT0sE8g==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@nestjs/axios": "4.0.0", - "@nestjs/common": "11.1.3", - "@nestjs/core": "11.1.3", + "@nestjs/axios": "4.0.1", + "@nestjs/common": "11.1.5", + "@nestjs/core": "11.1.5", "@nuxtjs/opencollective": "0.3.2", - "axios": "1.10.0", + "axios": "1.11.0", "chalk": "4.1.2", "commander": "8.3.0", "compare-versions": "4.1.4", - "concurrently": "6.5.1", + "concurrently": "9.2.0", "console.table": "0.10.0", "fs-extra": "11.3.0", "glob": "11.0.3", @@ -326,6 +352,8 @@ }, "node_modules/@tokenizer/inflate": { "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.2.7.tgz", + "integrity": "sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==", "dev": true, "license": "MIT", "dependencies": { @@ -343,11 +371,15 @@ }, "node_modules/@tokenizer/token": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", "dev": true, "license": "MIT" }, "node_modules/@tootallnate/quickjs-emscripten": { "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", "dev": true, "license": "MIT" }, @@ -402,7 +434,9 @@ } }, "node_modules/agent-base": { - "version": "7.1.3", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "dev": true, "license": "MIT", "engines": { @@ -411,6 +445,8 @@ }, "node_modules/ansi-escapes": { "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "license": "MIT", "dependencies": { @@ -425,6 +461,8 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", "engines": { @@ -433,6 +471,8 @@ }, "node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -452,6 +492,8 @@ }, "node_modules/ast-types": { "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", "dev": true, "license": "MIT", "dependencies": { @@ -463,21 +505,27 @@ }, "node_modules/asynckit": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true, "license": "MIT" }, "node_modules/axios": { - "version": "1.10.0", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", + "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", "dev": true, "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", + "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, "node_modules/base64-js": { "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true, "funding": [ { @@ -497,6 +545,8 @@ }, "node_modules/basic-ftp": { "version": "5.0.5", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", + "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", "dev": true, "license": "MIT", "engines": { @@ -505,6 +555,8 @@ }, "node_modules/bl": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, "license": "MIT", "dependencies": { @@ -515,6 +567,8 @@ }, "node_modules/buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -538,6 +592,8 @@ }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "dev": true, "license": "MIT", "dependencies": { @@ -550,6 +606,8 @@ }, "node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -565,11 +623,15 @@ }, "node_modules/chardet": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true, "license": "MIT" }, "node_modules/cli-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "license": "MIT", "dependencies": { @@ -581,6 +643,8 @@ }, "node_modules/cli-spinners": { "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, "license": "MIT", "engines": { @@ -592,6 +656,8 @@ }, "node_modules/cli-width": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true, "license": "ISC", "engines": { @@ -599,17 +665,24 @@ } }, "node_modules/cliui": { - "version": "7.0.4", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "license": "ISC", "dependencies": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, "node_modules/cliui/node_modules/wrap-ansi": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", "dependencies": { @@ -626,6 +699,8 @@ }, "node_modules/clone": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, "license": "MIT", "engines": { @@ -634,6 +709,8 @@ }, "node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -645,11 +722,15 @@ }, "node_modules/color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "license": "MIT", "dependencies": { @@ -661,6 +742,8 @@ }, "node_modules/commander": { "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, "license": "MIT", "engines": { @@ -669,43 +752,41 @@ }, "node_modules/compare-versions": { "version": "4.1.4", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-4.1.4.tgz", + "integrity": "sha512-FemMreK9xNyL8gQevsdRMrvO4lFCkQP7qbuktn1q8ndcNk1+0mz7lgE7b/sNvbhVgY4w6tMN1FDp6aADjqw2rw==", "dev": true, "license": "MIT" }, "node_modules/concurrently": { - "version": "6.5.1", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.0.tgz", + "integrity": "sha512-IsB/fiXTupmagMW4MNp2lx2cdSN2FfZq78vF90LBB+zZHArbIQZjQtzXCiXnvTxCZSvXanTqFLWBjw2UkLx1SQ==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "date-fns": "^2.16.1", + "chalk": "^4.1.2", "lodash": "^4.17.21", - "rxjs": "^6.6.3", - "spawn-command": "^0.0.2-1", - "supports-color": "^8.1.0", + "rxjs": "^7.8.1", + "shell-quote": "^1.8.1", + "supports-color": "^8.1.1", "tree-kill": "^1.2.2", - "yargs": "^16.2.0" + "yargs": "^17.7.2" }, "bin": { - "concurrently": "bin/concurrently.js" + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" }, "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/concurrently/node_modules/rxjs": { - "version": "6.6.7", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^1.9.0" + "node": ">=18" }, - "engines": { - "npm": ">=2.0.0" + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" } }, "node_modules/concurrently/node_modules/supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -718,13 +799,10 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/concurrently/node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, "node_modules/consola": { "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", "dev": true, "license": "MIT", "engines": { @@ -733,6 +811,8 @@ }, "node_modules/console.table": { "version": "0.10.0", + "resolved": "https://registry.npmjs.org/console.table/-/console.table-0.10.0.tgz", + "integrity": "sha512-dPyZofqggxuvSf7WXvNjuRfnsOk1YazkVP8FdxH4tcH2c37wc79/Yl6Bhr7Lsu00KMgy2ql/qCMuNu8xctZM8g==", "dev": true, "license": "MIT", "dependencies": { @@ -749,6 +829,8 @@ }, "node_modules/cross-spawn": { "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", "dependencies": { @@ -762,29 +844,18 @@ }, "node_modules/data-uri-to-buffer": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", "dev": true, "license": "MIT", "engines": { "node": ">= 14" } }, - "node_modules/date-fns": { - "version": "2.30.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.21.0" - }, - "engines": { - "node": ">=0.11" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" - } - }, "node_modules/debug": { "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -801,6 +872,8 @@ }, "node_modules/defaults": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, "license": "MIT", "dependencies": { @@ -812,6 +885,8 @@ }, "node_modules/degenerator": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", "dev": true, "license": "MIT", "dependencies": { @@ -825,6 +900,8 @@ }, "node_modules/delayed-stream": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, "license": "MIT", "engines": { @@ -841,6 +918,8 @@ }, "node_modules/dunder-proto": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dev": true, "license": "MIT", "dependencies": { @@ -854,11 +933,15 @@ }, "node_modules/eastasianwidth": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true, "license": "MIT" }, "node_modules/easy-table": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.1.0.tgz", + "integrity": "sha512-oq33hWOSSnl2Hoh00tZWaIPi1ievrD9aFG82/IgjlycAnW9hHx5PkJiXpxPsgEE+H7BsbVQXFVFST8TEXS6/pA==", "dev": true, "license": "MIT", "optionalDependencies": { @@ -867,11 +950,15 @@ }, "node_modules/emoji-regex": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/es-define-property": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, "license": "MIT", "engines": { @@ -880,6 +967,8 @@ }, "node_modules/es-errors": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, "license": "MIT", "engines": { @@ -888,6 +977,8 @@ }, "node_modules/es-object-atoms": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "dev": true, "license": "MIT", "dependencies": { @@ -899,6 +990,8 @@ }, "node_modules/es-set-tostringtag": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, "license": "MIT", "dependencies": { @@ -913,6 +1006,8 @@ }, "node_modules/escalade": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, "license": "MIT", "engines": { @@ -921,6 +1016,8 @@ }, "node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "license": "MIT", "engines": { @@ -929,6 +1026,8 @@ }, "node_modules/escodegen": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -949,6 +1048,8 @@ }, "node_modules/esprima": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, "license": "BSD-2-Clause", "bin": { @@ -961,6 +1062,8 @@ }, "node_modules/estraverse": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -969,6 +1072,8 @@ }, "node_modules/esutils": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -977,6 +1082,8 @@ }, "node_modules/external-editor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "license": "MIT", "dependencies": { @@ -990,16 +1097,22 @@ }, "node_modules/fast-safe-stringify": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", "dev": true, "license": "MIT" }, "node_modules/fflate": { "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", "dev": true, "license": "MIT" }, "node_modules/figures": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, "license": "MIT", "dependencies": { @@ -1014,6 +1127,8 @@ }, "node_modules/file-type": { "version": "21.0.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-21.0.0.tgz", + "integrity": "sha512-ek5xNX2YBYlXhiUXui3D/BXa3LdqPmoLJ7rqEx2bKJ7EAUEfmXgW0Das7Dc6Nr9MvqaOnIqiPV0mZk/r/UpNAg==", "dev": true, "license": "MIT", "dependencies": { @@ -1030,7 +1145,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.9", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", "dev": true, "funding": [ { @@ -1050,6 +1167,8 @@ }, "node_modules/foreground-child": { "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "dev": true, "license": "ISC", "dependencies": { @@ -1064,7 +1183,9 @@ } }, "node_modules/form-data": { - "version": "4.0.3", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", "dev": true, "license": "MIT", "dependencies": { @@ -1080,6 +1201,8 @@ }, "node_modules/fs-extra": { "version": "11.3.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", "dev": true, "license": "MIT", "dependencies": { @@ -1093,6 +1216,8 @@ }, "node_modules/function-bind": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, "license": "MIT", "funding": { @@ -1101,6 +1226,8 @@ }, "node_modules/get-caller-file": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "license": "ISC", "engines": { @@ -1109,6 +1236,8 @@ }, "node_modules/get-intrinsic": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1132,6 +1261,8 @@ }, "node_modules/get-proto": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "dev": true, "license": "MIT", "dependencies": { @@ -1143,7 +1274,9 @@ } }, "node_modules/get-uri": { - "version": "6.0.4", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", + "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", "dev": true, "license": "MIT", "dependencies": { @@ -1157,6 +1290,8 @@ }, "node_modules/glob": { "version": "11.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", + "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", "dev": true, "license": "ISC", "dependencies": { @@ -1179,6 +1314,8 @@ }, "node_modules/gopd": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, "license": "MIT", "engines": { @@ -1190,11 +1327,15 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true, "license": "ISC" }, "node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", "engines": { @@ -1203,6 +1344,8 @@ }, "node_modules/has-symbols": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, "license": "MIT", "engines": { @@ -1214,6 +1357,8 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "license": "MIT", "dependencies": { @@ -1228,6 +1373,8 @@ }, "node_modules/hasown": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1239,6 +1386,8 @@ }, "node_modules/http-proxy-agent": { "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, "license": "MIT", "dependencies": { @@ -1251,6 +1400,8 @@ }, "node_modules/https-proxy-agent": { "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, "license": "MIT", "dependencies": { @@ -1263,6 +1414,8 @@ }, "node_modules/iconv-lite": { "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "license": "MIT", "dependencies": { @@ -1274,6 +1427,8 @@ }, "node_modules/ieee754": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true, "funding": [ { @@ -1293,11 +1448,15 @@ }, "node_modules/inherits": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true, "license": "ISC" }, "node_modules/inquirer": { "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", "dev": true, "license": "MIT", "dependencies": { @@ -1323,6 +1482,8 @@ }, "node_modules/ip-address": { "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", "dev": true, "license": "MIT", "dependencies": { @@ -1335,6 +1496,8 @@ }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { @@ -1343,6 +1506,8 @@ }, "node_modules/is-interactive": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, "license": "MIT", "engines": { @@ -1351,6 +1516,8 @@ }, "node_modules/is-unicode-supported": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, "license": "MIT", "engines": { @@ -1362,11 +1529,15 @@ }, "node_modules/isexe": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true, "license": "ISC" }, "node_modules/iterare": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", + "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==", "dev": true, "license": "ISC", "engines": { @@ -1375,6 +1546,8 @@ }, "node_modules/jackspeak": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -1389,11 +1562,15 @@ }, "node_modules/jsbn": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", "dev": true, "license": "MIT" }, "node_modules/jsonfile": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1405,6 +1582,8 @@ }, "node_modules/load-esm": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/load-esm/-/load-esm-1.0.2.tgz", + "integrity": "sha512-nVAvWk/jeyrWyXEAs84mpQCYccxRqgKY4OznLuJhJCa0XsPSfdOIr2zvBZEj3IHEHbX97jjscKRRV539bW0Gpw==", "dev": true, "funding": [ { @@ -1423,11 +1602,15 @@ }, "node_modules/lodash": { "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true, "license": "MIT" }, "node_modules/log-symbols": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "license": "MIT", "dependencies": { @@ -1443,6 +1626,8 @@ }, "node_modules/lru-cache": { "version": "11.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", + "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", "dev": true, "license": "ISC", "engines": { @@ -1456,6 +1641,8 @@ }, "node_modules/math-intrinsics": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true, "license": "MIT", "engines": { @@ -1464,6 +1651,8 @@ }, "node_modules/mime-db": { "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, "license": "MIT", "engines": { @@ -1472,6 +1661,8 @@ }, "node_modules/mime-types": { "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "license": "MIT", "dependencies": { @@ -1483,6 +1674,8 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, "license": "MIT", "engines": { @@ -1491,6 +1684,8 @@ }, "node_modules/minimatch": { "version": "10.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", "dev": true, "license": "ISC", "dependencies": { @@ -1505,6 +1700,8 @@ }, "node_modules/minipass": { "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, "license": "ISC", "engines": { @@ -1513,16 +1710,22 @@ }, "node_modules/ms": { "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, "license": "MIT" }, "node_modules/mute-stream": { "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true, "license": "ISC" }, "node_modules/netmask": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", "dev": true, "license": "MIT", "engines": { @@ -1531,6 +1734,8 @@ }, "node_modules/node-fetch": { "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dev": true, "license": "MIT", "dependencies": { @@ -1550,6 +1755,8 @@ }, "node_modules/onetime": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "license": "MIT", "dependencies": { @@ -1564,6 +1771,8 @@ }, "node_modules/ora": { "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1586,6 +1795,8 @@ }, "node_modules/os-tmpdir": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, "license": "MIT", "engines": { @@ -1594,6 +1805,8 @@ }, "node_modules/pac-proxy-agent": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", "dev": true, "license": "MIT", "dependencies": { @@ -1612,6 +1825,8 @@ }, "node_modules/pac-resolver": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", "dev": true, "license": "MIT", "dependencies": { @@ -1624,11 +1839,15 @@ }, "node_modules/package-json-from-dist": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", "dev": true, "license": "BlueOak-1.0.0" }, "node_modules/path-key": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "license": "MIT", "engines": { @@ -1637,6 +1856,8 @@ }, "node_modules/path-scurry": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -1652,6 +1873,8 @@ }, "node_modules/path-to-regexp": { "version": "8.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", + "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", "dev": true, "license": "MIT", "engines": { @@ -1660,6 +1883,8 @@ }, "node_modules/proxy-agent": { "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", "dev": true, "license": "MIT", "dependencies": { @@ -1678,6 +1903,8 @@ }, "node_modules/proxy-agent/node_modules/lru-cache": { "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, "license": "ISC", "engines": { @@ -1686,11 +1913,15 @@ }, "node_modules/proxy-from-env": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true, "license": "MIT" }, "node_modules/readable-stream": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "license": "MIT", "dependencies": { @@ -1704,11 +1935,15 @@ }, "node_modules/reflect-metadata": { "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", "dev": true, "license": "Apache-2.0" }, "node_modules/require-directory": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "license": "MIT", "engines": { @@ -1717,6 +1952,8 @@ }, "node_modules/restore-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "license": "MIT", "dependencies": { @@ -1729,11 +1966,15 @@ }, "node_modules/restore-cursor/node_modules/signal-exit": { "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, "license": "ISC" }, "node_modules/run-async": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, "license": "MIT", "engines": { @@ -1742,6 +1983,8 @@ }, "node_modules/rxjs": { "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1750,6 +1993,8 @@ }, "node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -1769,11 +2014,15 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, "license": "MIT" }, "node_modules/shebang-command": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "license": "MIT", "dependencies": { @@ -1785,14 +2034,31 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/signal-exit": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "license": "ISC", "engines": { @@ -1804,6 +2070,8 @@ }, "node_modules/smart-buffer": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, "license": "MIT", "engines": { @@ -1812,7 +2080,9 @@ } }, "node_modules/socks": { - "version": "2.8.5", + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.6.tgz", + "integrity": "sha512-pe4Y2yzru68lXCb38aAqRf5gvN8YdjP1lok5o0J7BOHljkyCGKVz7H3vpVIXKD27rj2giOJ7DwVyk/GWrPHDWA==", "dev": true, "license": "MIT", "dependencies": { @@ -1826,6 +2096,8 @@ }, "node_modules/socks-proxy-agent": { "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", "dev": true, "license": "MIT", "dependencies": { @@ -1839,6 +2111,8 @@ }, "node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "license": "BSD-3-Clause", "optional": true, @@ -1846,17 +2120,17 @@ "node": ">=0.10.0" } }, - "node_modules/spawn-command": { - "version": "0.0.2", - "dev": true - }, "node_modules/sprintf-js": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/string_decoder": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "license": "MIT", "dependencies": { @@ -1865,6 +2139,8 @@ }, "node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -1879,6 +2155,8 @@ "node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -1892,6 +2170,8 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { @@ -1904,6 +2184,8 @@ "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { @@ -1914,7 +2196,9 @@ } }, "node_modules/strtok3": { - "version": "10.3.1", + "version": "10.3.4", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.4.tgz", + "integrity": "sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==", "dev": true, "license": "MIT", "dependencies": { @@ -1930,6 +2214,8 @@ }, "node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -1941,11 +2227,15 @@ }, "node_modules/through": { "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true, "license": "MIT" }, "node_modules/tmp": { "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "license": "MIT", "dependencies": { @@ -1956,7 +2246,9 @@ } }, "node_modules/token-types": { - "version": "6.0.0", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.0.4.tgz", + "integrity": "sha512-MD9MjpVNhVyH4fyd5rKphjvt/1qj+PtQUz65aFqAZA6XniWAuSFRjLk3e2VALEFlh9OwBpXUN7rfeqSnT/Fmkw==", "dev": true, "license": "MIT", "dependencies": { @@ -1973,11 +2265,15 @@ }, "node_modules/tr46": { "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true, "license": "MIT" }, "node_modules/tree-kill": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true, "license": "MIT", "bin": { @@ -2028,11 +2324,15 @@ }, "node_modules/tslib": { "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, "license": "0BSD" }, "node_modules/type-fest": { "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -2056,6 +2356,8 @@ }, "node_modules/uid": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz", + "integrity": "sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==", "dev": true, "license": "MIT", "dependencies": { @@ -2067,6 +2369,8 @@ }, "node_modules/uint8array-extras": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.4.0.tgz", + "integrity": "sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==", "dev": true, "license": "MIT", "engines": { @@ -2083,6 +2387,8 @@ }, "node_modules/universalify": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "license": "MIT", "engines": { @@ -2091,6 +2397,8 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true, "license": "MIT" }, @@ -2101,6 +2409,8 @@ }, "node_modules/wcwidth": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, "license": "MIT", "dependencies": { @@ -2109,11 +2419,15 @@ }, "node_modules/webidl-conversions": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true, "license": "BSD-2-Clause" }, "node_modules/whatwg-url": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, "license": "MIT", "dependencies": { @@ -2123,6 +2437,8 @@ }, "node_modules/which": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "license": "ISC", "dependencies": { @@ -2137,6 +2453,8 @@ }, "node_modules/wrap-ansi": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "license": "MIT", "dependencies": { @@ -2151,6 +2469,8 @@ "node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", "dependencies": { @@ -2167,6 +2487,8 @@ }, "node_modules/y18n": { "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, "license": "ISC", "engines": { @@ -2174,28 +2496,32 @@ } }, "node_modules/yargs": { - "version": "16.2.0", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "license": "MIT", "dependencies": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.1.1" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yargs-parser": { - "version": "20.2.9", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, "license": "ISC", "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yn": { diff --git a/types/codegen/package.json b/types/codegen/package.json index 84317569..add005a2 100644 --- a/types/codegen/package.json +++ b/types/codegen/package.json @@ -8,7 +8,7 @@ "generate:no-post": "openapi-generator-cli generate" }, "devDependencies": { - "@openapitools/openapi-generator-cli": "^2.21.0", + "@openapitools/openapi-generator-cli": "^2.21.4", "@types/node": "^24.0.4", "ts-node": "^10.9.2", "typescript": "^5.8.3" diff --git a/types/codegen/schema/chatTypes.json b/types/codegen/schema/chatTypes.json index 3fdea30f..1fddd895 100644 --- a/types/codegen/schema/chatTypes.json +++ b/types/codegen/schema/chatTypes.json @@ -960,6 +960,80 @@ } } }, + "Model": { + "type": "object", + "required": ["id", "name"], + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "ListAvailableModelsParams": { + "type": "object", + "required": ["tabId"], + "properties": { + "tabId": { + "type": "string" + } + } + }, + "ListAvailableModelsResult": { + "type": "object", + "required": ["tabId", "models"], + "properties": { + "tabId": { + "type": "string" + }, + "models": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Model" + } + }, + "selectedModelId": { + "type": "string" + } + } + }, + "SubscriptionDetailsParams": { + "type": "object", + "required": [ + "subscriptionTier", + "subscriptionPeriodReset", + "isOverageEnabled", + "queryUsage", + "queryLimit", + "queryOverage" + ], + "properties": { + "subscriptionTier": { + "type": "string" + }, + "subscriptionPeriodReset": { + "type": "Date" + }, + "isOverageEnabled": { + "type": "boolean" + }, + "queryUsage": { + "type": "number" + }, + "queryLimit": { + "type": "number" + }, + "queryOverage": { + "type": "number" + } + } + }, + "SubscriptionUpgradeParams": { + "type": "object", + "properties": {} + }, "ConversationItemGroup": { "type": "object", "properties": { diff --git a/types/index.ts b/types/index.ts index 92cd65f0..414deaac 100644 --- a/types/index.ts +++ b/types/index.ts @@ -1,5 +1,6 @@ export * from './auth' export { + SubscriptionUpgradeParams, CHAT_REQUEST_METHOD, END_CHAT_REQUEST_METHOD, QUICK_ACTION_REQUEST_METHOD, @@ -37,6 +38,9 @@ export { MCP_SERVER_CLICK_REQUEST_METHOD, GET_SERIALIZED_CHAT_REQUEST_METHOD, OPEN_WORKSPACE_INDEX_SETTINGS_BUTTON_ID, + LIST_AVAILABLE_MODELS_REQUEST_METHOD, + SUBSCRIPTION_DETAILS_NOTIFICATION_METHOD, + SUBSCRIPTION_UPGRADE_NOTIFICATION_METHOD, } from './chat' export * from './didChangeDependencyPaths' export * from './inlineCompletionWithReferences' From e628678db20692456fef71edcece119ae95eec69 Mon Sep 17 00:00:00 2001 From: Conor Stewart Date: Mon, 11 Aug 2025 16:16:19 -0700 Subject: [PATCH 12/38] fix: removing github actions (moving to different branch --- .github/workflows/types-codegen-merge.yaml | 17 -------- .github/workflows/types-codegen-pr.yaml | 49 ---------------------- 2 files changed, 66 deletions(-) delete mode 100644 .github/workflows/types-codegen-merge.yaml delete mode 100644 .github/workflows/types-codegen-pr.yaml diff --git a/.github/workflows/types-codegen-merge.yaml b/.github/workflows/types-codegen-merge.yaml deleted file mode 100644 index a837fb28..00000000 --- a/.github/workflows/types-codegen-merge.yaml +++ /dev/null @@ -1,17 +0,0 @@ -name: Chat Types Merge Processing - -on: - push: - branches: - - feature/flareProtocolCodeGen - paths: - - '**/chatTypes.json' - -jobs: - process-merge: - name: Process Merge with chatTypes.json changes - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v3 \ No newline at end of file diff --git a/.github/workflows/types-codegen-pr.yaml b/.github/workflows/types-codegen-pr.yaml deleted file mode 100644 index 4265a961..00000000 --- a/.github/workflows/types-codegen-pr.yaml +++ /dev/null @@ -1,49 +0,0 @@ -name: Chat Types PR Validation - -on: - workflow_dispatch: # Allows manual triggering - pull_request: - branches: - - feature/flareProtocolCodeGen - paths: - - 'types/codegen/schemas/chatTypes.json' - -jobs: - validate-pr: - name: Validate PR with chatTypes.json changes - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: '20.x' - #should we cache: 'npm' - - - name: Install dependencies - working-directory: types/codegen - run: npm ci - - - name: Generate types - working-directory: types/codegen - run: npm run generate - - - name: Build TypeScript - working-directory: types/codegen/generated/typescript - run: | - npm ci - npm run build - - - name: Setup Java - uses: actions/setup-java@v4 - with: - distribution: 'corretto' - java-version: '21' - cache: 'maven' - - - name: Build Java with Maven - working-directory: types/codegen/generated/java - run: mvn clean verify \ No newline at end of file From 08949d50f76d9a22af86768d2e4a0997511b7b7d Mon Sep 17 00:00:00 2001 From: Conor Stewart Date: Wed, 13 Aug 2025 17:43:45 -0700 Subject: [PATCH 13/38] fix: added readme, updated schema, refactored record.mustace --- types/codegen/README.md | 51 +++++++++++++++++++ .../custom-templates/java/record.mustache | 7 ++- types/codegen/openapitools.json | 6 ++- types/codegen/post-generate.js | 33 +++++++----- types/codegen/schema/chatTypes.json | 2 +- 5 files changed, 82 insertions(+), 17 deletions(-) create mode 100644 types/codegen/README.md diff --git a/types/codegen/README.md b/types/codegen/README.md new file mode 100644 index 00000000..11acfe42 --- /dev/null +++ b/types/codegen/README.md @@ -0,0 +1,51 @@ +# Code Generation + +This directory contains OpenAPI code generation configuration and post-processing scripts for language server runtime types. + +## Structure + +- `schema/` - OpenAPI schema definitions +- `custom-templates/` - Custom Mustache templates for code generation sorted by langauage +- `generated/` - Generated output directory where TypeScript and Java types will be located post generation +- `post-generate.js` - Post-processing script +- `openapitools.json` - OpenAPI Generator configuration + +## Configuration + +### openapitools.json + +OpenAPI Generator configuration defining code generation settings for TypeScript and Java: + +**Common Configuration:** +- `generatorName` - Specifies the generator type (typescript-fetch, java) +- `disabled` - Allows selective turning off of generators during development. By default, all generators run. New languages/input specs can be added with their own customization +- `output` - Target directory for generated code +- `inputSpec` - Source OpenAPI schema file +- `templateDir` - Points to custom Mustache templates that overwrite canonical templates from [OpenAPI Generator templates](https://openapi-generator.tech/docs/templating) + +**TypeScript Configuration:** +- `additionalProperties` - Language-specific options from the [typescript-fetch generator](https://openapi-generator.tech/docs/generators/typescript-fetch/). Notable settings: + - `stringEnums` - Generates string enums instead of numeric + - `withoutRuntimeChecks` - Reduces unnecessary generated code by removing runtime validation + - `supportsES6` - Enables ES6 features + - `modelPropertyNaming`/`enumPropertyNaming` - Sets camelCase naming conventions +- `global-property` - [Global properties](https://openapi-generator.tech/docs/globals) for debugging and selective model generation (alternative to .openapi-generator-ignore file) +- `openapi-normalizer` - [Normalizers](https://openapi-generator.tech/docs/customization/#openapi-normalizer) shape input before generation: + - `REF_AS_PARENT_IN_ALLOF` - Enables traditional inheritance (extends) via allOf instead of including all parent fields in child, resulting in cleaner code +- `reservedWordsMappings` - Overcomes generator renaming of reserved words. Forces `export` field to remain `export` instead of being renamed to `_export` +- `typeMappings` - Overcomes generator quirks where `Date` gets converted to `string` or `ModelDate`. Forces generator to use proper `Date` type + +**Java Configuration:** TODO TODO TODO +- `additionalProperties` - Java-specific settings including Java 21 compatibility, validation options, and serialization settings +- `global-property.models` - Specifies exact models to generate (CursorPosition, FileParams, etc.) for selective generation +- `importMappings` - Maps external types to LSP4J classes for seamless integration with Language Server Protocol + +## Post-Processing + +The `post-generate.js` script runs after OpenAPI code generation to customize the generated TypeScript types: + +- **Adds constants**: Adds protocol method constants from `constants.ts` to the generated index file. This is due to a limitation of the OpenAPI generator which ignores type alias constants in generation. +- **Modifies interfaces**: Changes `PartialResultParams` from exported to internal interface. This is because `PartialResultParams` is only used internally and causes conflicts with VS Code LSP protocol type of the same name if exported. This interface is not exported in the current `chat.ts` either. +- **Extensible**: Other post-processing steps should be added here. + +This ensures the generated types integrate properly with the language server runtime while maintaining clean separation between generated and hand-written code. \ No newline at end of file diff --git a/types/codegen/custom-templates/java/record.mustache b/types/codegen/custom-templates/java/record.mustache index d4328371..a800d678 100644 --- a/types/codegen/custom-templates/java/record.mustache +++ b/types/codegen/custom-templates/java/record.mustache @@ -4,8 +4,11 @@ {{>generatedAnnotation}} public record {{classname}}( {{#vars}} - @JsonProperty("{{baseName}}") - {{#required}}@Nonnull{{/required}}{{^required}}@Nullable{{/required}} {{{datatypeWithEnum}}} {{name}}{{^-last}},{{/-last}} +{{#description}} // {{description}} +{{/description}} @JsonProperty("{{baseName}}") + {{#required}}@Nonnull{{/required}}{{^required}}@Nullable{{/required}} {{{datatypeWithEnum}}} {{name}}{{^-last}},{{/-last}}{{^-last}} + +{{/-last}} {{/vars}} ) {{#parent}}implements {{{.}}} {{/parent}}{{#vendorExtensions.x-implements}}{{#-first}}implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{#-last}} {{/-last}}{{/vendorExtensions.x-implements}}{ diff --git a/types/codegen/openapitools.json b/types/codegen/openapitools.json index d96c4f70..a4486e48 100644 --- a/types/codegen/openapitools.json +++ b/types/codegen/openapitools.json @@ -50,12 +50,16 @@ "targetCompatibility": "21" }, "global-property": { - "models": "CursorPosition:FileParams:CopyFileParams:OpenFileDiffParams:ShowOpenDialogParams:ShowSaveFileDialogParams:ShowSaveFileDialogResult" + "models": "IconType:ContextCommandGroup:QuickActionCommand:ContextCommand:CursorPosition:FileParams:CopyFileParams:OpenFileDiffParams:ShowOpenDialogParams:ShowSaveFileDialogParams:ShowSaveFileDialogResult" }, "importMappings": { "Position": "org.eclipse.lsp4j.Position", "Range": "org.eclipse.lsp4j.Range", "TextDocumentIdentifier": "org.eclipse.lsp4j.TextDocumentIdentifier" + }, + "typeMappings": { + "IconType": "String", + "Uint8Array": "byte[]" } } } diff --git a/types/codegen/post-generate.js b/types/codegen/post-generate.js index 367499c5..d651c377 100755 --- a/types/codegen/post-generate.js +++ b/types/codegen/post-generate.js @@ -5,24 +5,35 @@ const path = require('path') // Path to the generated index.ts file const indexPath = path.join(__dirname, 'generated/typescript/src/models/index.ts') +const constantsPath = path.join(__dirname, 'constants.ts') + +// Check if files exist +if (!fs.existsSync(constantsPath)) { + console.error('Error: constants.ts file not found') + process.exit(1) +} + +if (!fs.existsSync(indexPath)) { + console.error('Error: Generated index.ts file not found') + process.exit(1) +} // Read the constants file -const constants = fs.readFileSync(path.join(__dirname, 'constants.ts'), 'utf8') +const constants = fs.readFileSync(constantsPath, 'utf8') // Read the generated index.ts file let indexContent = fs.readFileSync(indexPath, 'utf8') // Find the position after the imports const importEndPos = indexContent.lastIndexOf('import') -const importEndLinePos = indexContent.indexOf('\n', importEndPos) + 1 +let insertPos = 0 -// Insert the constants after the imports -const newContent = - indexContent.substring(0, importEndLinePos) + - '\n// Constants\n' + - constants + - '\n' + - indexContent.substring(importEndLinePos) +if (importEndPos !== -1) { + insertPos = indexContent.indexOf('\n', importEndPos) + 1 +} + +// Insert the constants after the imports (or at the top if no imports) +const newContent = indexContent.substring(0, insertPos) + '\n' + constants + '\n' + indexContent.substring(insertPos) // Modify PartialResultParams interface let modifiedContent = newContent.replace( @@ -30,12 +41,8 @@ let modifiedContent = newContent.replace( 'interface PartialResultParams {' ) -// Replace any fields named "_export" with "export" -//modifiedContent = modifiedContent.replace(/\b_export\??\s*:/g, 'export?:') // For TypeScript interface properties - // Write the updated content back to the file fs.writeFileSync(indexPath, modifiedContent) console.log('Constants added to generated index.ts file') console.log('PartialResultParams interface modified') -//console.log('Renamed "_export" fields to "export"') diff --git a/types/codegen/schema/chatTypes.json b/types/codegen/schema/chatTypes.json index 1fddd895..13ad3c1d 100644 --- a/types/codegen/schema/chatTypes.json +++ b/types/codegen/schema/chatTypes.json @@ -731,7 +731,7 @@ }, "label": { "type": "string", - "enum": ["file", "folder", "code", "image"] + "description": "file, folder, code, image" }, "children": { "type": "array", From f89388eeadf447d16aa9faedee43a9c2044c7c06 Mon Sep 17 00:00:00 2001 From: Conor Stewart Date: Thu, 14 Aug 2025 08:07:57 -0700 Subject: [PATCH 14/38] test: finish pre/post generation scripts --- .../typescript/models.index.mustache | 1 - types/codegen/openapitools.json | 9 +- types/codegen/package.json | 3 +- types/codegen/post-generate.js | 48 - types/codegen/schema/chatTypes.json | 2905 ++++++++++------- types/codegen/{ => scripts}/constants.ts | 0 types/codegen/scripts/post-typescript.js | 123 + types/codegen/scripts/pre-all.js | 209 ++ 8 files changed, 2082 insertions(+), 1216 deletions(-) delete mode 100755 types/codegen/post-generate.js rename types/codegen/{ => scripts}/constants.ts (100%) create mode 100644 types/codegen/scripts/post-typescript.js create mode 100644 types/codegen/scripts/pre-all.js diff --git a/types/codegen/custom-templates/typescript/models.index.mustache b/types/codegen/custom-templates/typescript/models.index.mustache index 434c6b19..658aaf51 100644 --- a/types/codegen/custom-templates/typescript/models.index.mustache +++ b/types/codegen/custom-templates/typescript/models.index.mustache @@ -1,6 +1,5 @@ /* tslint:disable */ /* eslint-disable */ -import { Position, Range, TextDocumentIdentifier } from 'vscode-languageserver-types' {{#models}} {{#model}} diff --git a/types/codegen/openapitools.json b/types/codegen/openapitools.json index a4486e48..51b2cbec 100644 --- a/types/codegen/openapitools.json +++ b/types/codegen/openapitools.json @@ -8,7 +8,7 @@ "generatorName": "typescript-fetch", "disabled": false, "output": "#{cwd}/generated/typescript", - "inputSpec": "#{cwd}/schema/chatTypes.json", + "inputSpec": "#{cwd}/schema/final-output.json", "templateDir": "#{cwd}/custom-templates/typescript", "additionalProperties": { "supportsES6": true, @@ -30,13 +30,18 @@ }, "typeMappings": { "Date": "Date" + }, + "importMappings": { + "Position": "vscode-languageserver-types", + "Range": "vscode-languageserver-types", + "TextDocumentIdentifier": "vscode-languageserver-types" } }, "java": { "generatorName": "java", "disabled": false, "output": "#{cwd}/generated/java", - "inputSpec": "#{cwd}/schema/chatTypes.json", + "inputSpec": "#{cwd}/schema/final-output.json", "templateDir": "#{cwd}/custom-templates/java", "additionalProperties": { "useOneOfInterfaces": true, diff --git a/types/codegen/package.json b/types/codegen/package.json index add005a2..9ff4c9e5 100644 --- a/types/codegen/package.json +++ b/types/codegen/package.json @@ -4,7 +4,8 @@ "description": "Generate TypeScript defintiinons from JSON Schema using OpenAPI Generator", "main": "generated/src/index.ts", "scripts": { - "generate": "openapi-generator-cli generate && node post-generate.js", + "generate-schema": "node scripts/pre-all.js", + "generate": "npm run generate-schema && openapi-generator-cli generate && node scripts/post-typescript.js", "generate:no-post": "openapi-generator-cli generate" }, "devDependencies": { diff --git a/types/codegen/post-generate.js b/types/codegen/post-generate.js deleted file mode 100755 index d651c377..00000000 --- a/types/codegen/post-generate.js +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env node - -const fs = require('fs') -const path = require('path') - -// Path to the generated index.ts file -const indexPath = path.join(__dirname, 'generated/typescript/src/models/index.ts') -const constantsPath = path.join(__dirname, 'constants.ts') - -// Check if files exist -if (!fs.existsSync(constantsPath)) { - console.error('Error: constants.ts file not found') - process.exit(1) -} - -if (!fs.existsSync(indexPath)) { - console.error('Error: Generated index.ts file not found') - process.exit(1) -} - -// Read the constants file -const constants = fs.readFileSync(constantsPath, 'utf8') - -// Read the generated index.ts file -let indexContent = fs.readFileSync(indexPath, 'utf8') - -// Find the position after the imports -const importEndPos = indexContent.lastIndexOf('import') -let insertPos = 0 - -if (importEndPos !== -1) { - insertPos = indexContent.indexOf('\n', importEndPos) + 1 -} - -// Insert the constants after the imports (or at the top if no imports) -const newContent = indexContent.substring(0, insertPos) + '\n' + constants + '\n' + indexContent.substring(insertPos) - -// Modify PartialResultParams interface -let modifiedContent = newContent.replace( - /export\s+interface\s+PartialResultParams\s*\{/g, - 'interface PartialResultParams {' -) - -// Write the updated content back to the file -fs.writeFileSync(indexPath, modifiedContent) - -console.log('Constants added to generated index.ts file') -console.log('PartialResultParams interface modified') diff --git a/types/codegen/schema/chatTypes.json b/types/codegen/schema/chatTypes.json index 13ad3c1d..e186e73b 100644 --- a/types/codegen/schema/chatTypes.json +++ b/types/codegen/schema/chatTypes.json @@ -1,1452 +1,2029 @@ { - "openapi": "3.0.0", - "info": { - "title": "Chat Types", - "version": "0.0.1", - "description": "Chat Types Definitions for FLARE" - }, - "paths": {}, - "components": { - "schemas": { - "ChatItemAction": { + "ChatItemAction": { + "type": "object", + "required": ["pillText"], + "properties": { + "pillText": { + "type": "string" + }, + "prompt": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "description": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "SourceLink": { + "type": "object", + "required": ["title", "url"], + "properties": { + "title": { + "type": "string", + "description": "The title of the source link" + }, + "url": { + "type": "string", + "description": "The URL of the source link" + }, + "body": { + "type": "string", + "description": "Optional body text for the source link" + } + } + }, + "RecommendationContentSpan": { + "type": "object", + "required": ["start", "end"], + "properties": { + "start": { + "type": "number", + "description": "Start position of the content span" + }, + "end": { + "type": "number", + "description": "End position of the content span" + } + }, + "description": "Content span information" + }, + "ReferenceTrackerInformation": { + "type": "object", + "required": ["information"], + "properties": { + "licenseName": { + "type": "string" + }, + "repository": { + "type": "string" + }, + "url": { + "type": "string" + }, + "recommendationContentSpan": { + "$ref": "#/components/schemas/RecommendationContentSpan" + }, + "information": { + "type": "string" + } + } + }, + "ChatPrompt": { + "type": "object", + "properties": { + "prompt": { + "type": "string", + "description": "Optional prompt text" + }, + "escapedPrompt": { + "type": "string", + "description": "Optional escaped prompt text" + }, + "command": { + "type": "string", + "description": "Optional command" + } + } + }, + "FeedbackPayload": { + "type": "object", + "required": ["messageId", "tabId", "selectedOption"], + "properties": { + "messageId": { + "type": "string", + "description": "ID of the message" + }, + "tabId": { + "type": "string", + "description": "ID of the tab" + }, + "selectedOption": { + "type": "string", + "description": "Selected feedback option" + }, + "comment": { + "type": "string", + "description": "Optional comment" + } + } + }, + "CodeSelectionType": { + "type": "string", + "enum": ["selection", "block"], + "description": "Type of code selection" + }, + "CursorPosition": { + "type": "object", + "required": ["position"], + "properties": { + "position": { + "type": "Position" + } + } + }, + "CursorRange": { + "type": "object", + "required": ["range"], + "properties": { + "range": { + "type": "Range" + } + } + }, + "CursorState": { + "oneOf": [ + { + "$ref": "#/components/schemas/CursorPosition" + }, + { + "$ref": "#/components/schemas/CursorRange" + } + ] + }, + "PartialResultToken": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "PartialResultParams": { + "type": "object", + "properties": { + "partialResultToken": { + "$ref": "#/components/schemas/PartialResultToken" + } + } + }, + "ChatParams": { + "allOf": [ + { + "$ref": "#/components/schemas/PartialResultParams" + }, + { "type": "object", - "required": ["pillText"], + "required": ["tabId", "prompt"], "properties": { - "pillText": { + "tabId": { "type": "string" }, "prompt": { - "type": "string" + "$ref": "#/components/schemas/ChatPrompt" }, - "disabled": { - "type": "boolean" + "cursorState": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CursorState" + } }, - "description": { - "type": "string" + "textDocument": { + "type": "TextDocumentIdentifier" }, - "type": { - "type": "string" + "context": { + "type": "array", + "items": { + "$ref": "#/components/schemas/QuickActionCommand" + }, + "description": "Context of the current chat message to be handled by the servers. Context can be added through QuickActionCommand triggered by `@`." } } + } + ] + }, + "InlineChatParams": { + "allOf": [ + { + "$ref": "#/components/schemas/PartialResultParams" }, - "SourceLink": { + { "type": "object", - "required": ["title", "url"], + "required": ["prompt"], "properties": { - "title": { - "type": "string", - "description": "The title of the source link" + "prompt": { + "$ref": "#/components/schemas/ChatPrompt" }, - "url": { - "type": "string", - "description": "The URL of the source link" + "cursorState": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CursorState" + } }, - "body": { - "type": "string", - "description": "Optional body text for the source link" + "textDocument": { + "type": "TextDocumentIdentifier" } } + } + ] + }, + "EncryptedChatParams": { + "allOf": [ + { + "$ref": "#/components/schemas/PartialResultParams" }, - "RecommendationContentSpan": { - "type": "object", - "required": ["start", "end"], - "properties": { - "start": { - "type": "number", - "description": "Start position of the content span" - }, - "end": { - "type": "number", - "description": "End position of the content span" - } - }, - "description": "Content span information" - }, - "ReferenceTrackerInformation": { + { "type": "object", - "required": ["information"], + "required": ["message"], "properties": { - "licenseName": { - "type": "string" - }, - "repository": { - "type": "string" - }, - "url": { - "type": "string" - }, - "recommendationContentSpan": { - "$ref": "#/components/schemas/RecommendationContentSpan" - }, - "information": { + "message": { "type": "string" } } + } + ] + }, + "FileDetails": { + "type": "object", + "properties": { + "description": { + "type": "string" }, - "ChatPrompt": { - "type": "object", - "properties": { - "prompt": { - "type": "string", - "description": "Optional prompt text" - }, - "escapedPrompt": { - "type": "string", - "description": "Optional escaped prompt text" - }, - "command": { - "type": "string", - "description": "Optional command" + "fullPath": { + "type": "string" + }, + "lineRanges": { + "type": "array", + "items": { + "type": "object", + "required": ["first", "second"], + "properties": { + "first": { + "type": "number" + }, + "second": { + "type": "number" + } } } }, - "FeedbackPayload": { + "changes": { "type": "object", - "required": ["messageId", "tabId", "selectedOption"], "properties": { - "messageId": { - "type": "string", - "description": "ID of the message" - }, - "tabId": { - "type": "string", - "description": "ID of the tab" + "added": { + "type": "number" }, - "selectedOption": { - "type": "string", - "description": "Selected feedback option" + "deleted": { + "type": "number" }, - "comment": { - "type": "string", - "description": "Optional comment" + "total": { + "type": "number" } } + } + } + }, + "FileList": { + "type": "object", + "properties": { + "rootFolderTitle": { + "type": "string" }, - "CodeSelectionType": { - "type": "string", - "enum": ["selection", "block"], - "description": "Type of code selection" + "filePaths": { + "type": "array", + "items": { + "type": "string" + } }, - "CursorPosition": { - "type": "object", - "required": ["position"], - "properties": { - "position": { - "type": "Position" - } + "deletedFiles": { + "type": "array", + "items": { + "type": "string" } }, - "CursorRange": { + "details": { "type": "object", - "required": ["range"], - "properties": { - "range": { - "type": "Range" - } + "additionalProperties": { + "$ref": "#/components/schemas/FileDetails" } + } + } + }, + "Status": { + "type": "string", + "enum": ["info", "success", "warning", "error"] + }, + "ContextCommandIconType": { + "type": "string", + "enum": ["file", "folder", "code-block", "list-add", "magic"] + }, + "IconType": { + "oneOf": [ + { + "$ref": "#/components/schemas/ContextCommandIconType" }, - "CursorState": { - "oneOf": [ - { - "$ref": "#/components/schemas/CursorPosition" - }, - { - "$ref": "#/components/schemas/CursorRange" - } - ] + { + "type": "string" + } + ], + "description": "Can be ContextCommandIconType or other values like 'help', 'trash', 'search', 'calendar', or any string" + }, + "ButtonPartialStatus": { + "type": "string", + "enum": ["main", "primary", "clear"] + }, + "ButtonStatus": { + "oneOf": [ + { + "$ref": "#/components/schemas/ButtonPartialStatus" + }, + { + "$ref": "#/components/schemas/Status" + } + ] + }, + "Button": { + "type": "object", + "required": ["id"], + "properties": { + "id": { + "type": "string" + }, + "text": { + "type": "string" + }, + "description": { + "type": "string" + }, + "icon": { + "$ref": "#/components/schemas/IconType" }, - "PartialResultToken": { - "oneOf": [{ "type": "number" }, { "type": "string" }] + "disabled": { + "type": "boolean" + }, + "keepCardAfterClick": { + "type": "boolean" + }, + "status": { + "$ref": "#/components/schemas/ButtonStatus" + } + } + }, + "ChatMessage": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["answer", "prompt", "system-prompt", "directive", "tool"], + "description": "will default to 'answer'" }, - "PartialResultParams": { + "header": { "type": "object", "properties": { - "partialResultToken": { "$ref": "#/components/schemas/PartialResultToken" } - } - }, - "ChatParams": { - "allOf": [ - { "$ref": "#/components/schemas/PartialResultParams" }, - { + "type": { + "type": "string", + "enum": ["answer", "prompt", "system-prompt", "directive", "tool"] + }, + "buttons": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Button" + } + }, + "body": { + "type": "string" + }, + "messageId": { + "type": "string" + }, + "canBeVoted": { + "type": "boolean" + }, + "relatedContent": { "type": "object", - "required": ["tabId", "prompt"], "properties": { - "tabId": { "type": "string" }, - "prompt": { "$ref": "#/components/schemas/ChatPrompt" }, - "cursorState": { - "type": "array", - "items": { "$ref": "#/components/schemas/CursorState" } + "title": { + "type": "string" }, - "textDocument": { "type": "TextDocumentIdentifier" }, - "context": { + "content": { "type": "array", - "items": { "$ref": "#/components/schemas/QuickActionCommand" }, - "description": "Context of the current chat message to be handled by the servers. Context can be added through QuickActionCommand triggered by `@`." + "items": { + "$ref": "#/components/schemas/SourceLink" + } } - } - } - ] - }, - "InlineChatParams": { - "allOf": [ - { "$ref": "#/components/schemas/PartialResultParams" }, - { + }, + "required": ["content"] + }, + "summary": { "type": "object", - "required": ["prompt"], "properties": { - "prompt": { "$ref": "#/components/schemas/ChatPrompt" }, - "cursorState": { - "type": "array", - "items": { "$ref": "#/components/schemas/CursorState" } + "content": { + "$ref": "#/components/schemas/ChatMessage" }, - "textDocument": { "type": "TextDocumentIdentifier" } + "collapsedContent": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChatMessage" + } + } } - } - ] - }, - "EncryptedChatParams": { - "allOf": [ - { "$ref": "#/components/schemas/PartialResultParams" }, - { + }, + "followUp": { "type": "object", - "required": ["message"], "properties": { - "message": { "type": "string" } + "text": { + "type": "string" + }, + "options": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChatItemAction" + } + } } - } - ] - }, - "FileDetails": { - "type": "object", - "properties": { - "description": { "type": "string" }, - "fullPath": { "type": "string" }, - "lineRanges": { + }, + "codeReference": { "type": "array", "items": { - "type": "object", - "required": ["first", "second"], - "properties": { - "first": { "type": "number" }, - "second": { "type": "number" } - } + "$ref": "#/components/schemas/ReferenceTrackerInformation" } }, - "changes": { + "fileList": { + "$ref": "#/components/schemas/FileList" + }, + "contextList": { + "$ref": "#/components/schemas/FileList" + }, + "icon": { + "$ref": "#/components/schemas/IconType" + }, + "status": { "type": "object", "properties": { - "added": { "type": "number" }, - "deleted": { "type": "number" }, - "total": { "type": "number" } + "status": { + "$ref": "#/components/schemas/Status" + }, + "icon": { + "$ref": "#/components/schemas/IconType" + }, + "text": { + "type": "string" + } } } } }, - "FileList": { - "type": "object", - "properties": { - "rootFolderTitle": { "type": "string" }, - "filePaths": { - "type": "array", - "items": { "type": "string" } - }, - "deletedFiles": { - "type": "array", - "items": { "type": "string" } - }, - "details": { - "type": "object", - "additionalProperties": { "$ref": "#/components/schemas/FileDetails" } - } + "buttons": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Button" } }, - "Status": { - "type": "string", - "enum": ["info", "success", "warning", "error"] - }, - "ContextCommandIconType": { - "type": "string", - "enum": ["file", "folder", "code-block", "list-add", "magic"] - }, - "IconType": { - "oneOf": [{ "$ref": "#/components/schemas/ContextCommandIconType" }, { "type": "string" }], - "description": "Can be ContextCommandIconType or other values like 'help', 'trash', 'search', 'calendar', or any string" - }, - "ButtonPartialStatus": { - "type": "string", - "enum": ["main", "primary", "clear"] + "body": { + "type": "string" }, - "ButtonStatus": { - "oneOf": [ - { "$ref": "#/components/schemas/ButtonPartialStatus" }, - { "$ref": "#/components/schemas/Status" } - ] + "messageId": { + "type": "string" }, - "Button": { - "type": "object", - "required": ["id"], - "properties": { - "id": { "type": "string" }, - "text": { "type": "string" }, - "description": { "type": "string" }, - "icon": { "$ref": "#/components/schemas/IconType" }, - "disabled": { "type": "boolean" }, - "keepCardAfterClick": { "type": "boolean" }, - "status": { "$ref": "#/components/schemas/ButtonStatus" } - } + "canBeVoted": { + "type": "boolean" }, - "ChatMessage": { + "relatedContent": { "type": "object", "properties": { - "type": { - "type": "string", - "enum": ["answer", "prompt", "system-prompt", "directive", "tool"], - "description": "will default to 'answer'" + "title": { + "type": "string" }, - "header": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": ["answer", "prompt", "system-prompt", "directive", "tool"] - }, - "buttons": { - "type": "array", - "items": { "$ref": "#/components/schemas/Button" } - }, - "body": { "type": "string" }, - "messageId": { "type": "string" }, - "canBeVoted": { "type": "boolean" }, - "relatedContent": { - "type": "object", - "properties": { - "title": { "type": "string" }, - "content": { - "type": "array", - "items": { "$ref": "#/components/schemas/SourceLink" } - } - }, - "required": ["content"] - }, - "summary": { - "type": "object", - "properties": { - "content": { "$ref": "#/components/schemas/ChatMessage" }, - "collapsedContent": { - "type": "array", - "items": { "$ref": "#/components/schemas/ChatMessage" } - } - } - }, - "followUp": { - "type": "object", - "properties": { - "text": { "type": "string" }, - "options": { - "type": "array", - "items": { "$ref": "#/components/schemas/ChatItemAction" } - } - } - }, - "codeReference": { - "type": "array", - "items": { "$ref": "#/components/schemas/ReferenceTrackerInformation" } - }, - "fileList": { "$ref": "#/components/schemas/FileList" }, - "contextList": { "$ref": "#/components/schemas/FileList" }, - "icon": { "$ref": "#/components/schemas/IconType" }, - "status": { - "type": "object", - "properties": { - "status": { "$ref": "#/components/schemas/Status" }, - "icon": { "$ref": "#/components/schemas/IconType" }, - "text": { "type": "string" } - } - } - } - }, - "buttons": { - "type": "array", - "items": { "$ref": "#/components/schemas/Button" } - }, - "body": { "type": "string" }, - "messageId": { "type": "string" }, - "canBeVoted": { "type": "boolean" }, - "relatedContent": { - "type": "object", - "properties": { - "title": { "type": "string" }, - "content": { - "type": "array", - "items": { "$ref": "#/components/schemas/SourceLink" } - } - }, - "required": ["content"] - }, - "summary": { - "type": "object", - "properties": { - "content": { "$ref": "#/components/schemas/ChatMessage" }, - "collapsedContent": { - "type": "array", - "items": { "$ref": "#/components/schemas/ChatMessage" } - } - } - }, - "followUp": { - "type": "object", - "properties": { - "text": { "type": "string" }, - "options": { - "type": "array", - "items": { "$ref": "#/components/schemas/ChatItemAction" } - } - } - }, - "codeReference": { + "content": { "type": "array", - "items": { "$ref": "#/components/schemas/ReferenceTrackerInformation" } - }, - "fileList": { "$ref": "#/components/schemas/FileList" }, - "contextList": { "$ref": "#/components/schemas/FileList" } - } - }, - "ChatResult": { - "description": "Represents the result of a chat interaction. A ChatResult extends ChatMessage and can optionally include additional messages that provide context, reasoning, or intermediate steps that led to the final response. Response for chat prompt request can be empty, if server chooses to handle the request and push updates asynchronously.", - "allOf": [ - { "$ref": "#/components/schemas/ChatMessage" }, - { - "type": "object", - "properties": { - "additionalMessages": { - "type": "array", - "items": { "$ref": "#/components/schemas/ChatMessage" }, - "description": "Optional array of supporting messages that provide additional context for the primary message. These can include: - Reasoning steps that led to the final answer - Tool usage and outputs during processing - Intermediate calculations or decision points - Status updates about the processing - Human interactions that influenced the response. The primary message (this ChatResult itself) should contain the final, complete response, while additionalMessages provides transparency into how that response was generated. UI implementations should typically display the primary message prominently, with additionalMessages shown as supporting information when relevant." - } - } - } - ] - }, - "InlineChatResult": { - "allOf": [ - { "$ref": "#/components/schemas/ChatMessage" }, - { - "type": "object", - "properties": { - "requestId": { "type": "string" } + "items": { + "$ref": "#/components/schemas/SourceLink" } } - ] - }, - "QuickActionCommand": { - "type": "object", - "description": "Configuration object for chat quick action.", - "required": ["command"], - "properties": { - "command": { "type": "string" }, - "description": { "type": "string" }, - "placeholder": { "type": "string" }, - "icon": { "$ref": "#/components/schemas/IconType" } - } + }, + "required": ["content"] }, - "QuickActionCommandGroup": { + "summary": { "type": "object", - "description": "Configuration object for registering chat quick actions groups.", - "required": ["commands"], "properties": { - "groupName": { "type": "string" }, - "commands": { + "content": { + "$ref": "#/components/schemas/ChatMessage" + }, + "collapsedContent": { "type": "array", - "items": { "$ref": "#/components/schemas/QuickActionCommand" } + "items": { + "$ref": "#/components/schemas/ChatMessage" + } } } }, - "QuickActions": { + "followUp": { "type": "object", - "description": "Registration options for a Chat QuickActionRequest.", - "required": ["quickActionsCommandGroups"], "properties": { - "quickActionsCommandGroups": { + "text": { + "type": "string" + }, + "options": { "type": "array", - "items": { "$ref": "#/components/schemas/QuickActionCommandGroup" }, - "description": "The chat quick actions groups and commands to be executed on server." + "items": { + "$ref": "#/components/schemas/ChatItemAction" + } } } }, - "TabData": { + "codeReference": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ReferenceTrackerInformation" + } + }, + "fileList": { + "$ref": "#/components/schemas/FileList" + }, + "contextList": { + "$ref": "#/components/schemas/FileList" + } + } + }, + "ChatResult": { + "description": "Represents the result of a chat interaction. A ChatResult extends ChatMessage and can optionally include additional messages that provide context, reasoning, or intermediate steps that led to the final response. Response for chat prompt request can be empty, if server chooses to handle the request and push updates asynchronously.", + "allOf": [ + { + "$ref": "#/components/schemas/ChatMessage" + }, + { "type": "object", - "required": ["messages"], "properties": { - "placeholderText": { "type": "string" }, - "messages": { + "additionalMessages": { "type": "array", - "items": { "$ref": "#/components/schemas/ChatMessage" } + "items": { + "$ref": "#/components/schemas/ChatMessage" + }, + "description": "Optional array of supporting messages that provide additional context for the primary message. These can include: - Reasoning steps that led to the final answer - Tool usage and outputs during processing - Intermediate calculations or decision points - Status updates about the processing - Human interactions that influenced the response. The primary message (this ChatResult itself) should contain the final, complete response, while additionalMessages provides transparency into how that response was generated. UI implementations should typically display the primary message prominently, with additionalMessages shown as supporting information when relevant." } } + } + ] + }, + "InlineChatResult": { + "allOf": [ + { + "$ref": "#/components/schemas/ChatMessage" }, - "ChatOptions": { + { "type": "object", - "description": "Registration options regarding chat data. Currently contains the available quick actions provided by a server and the default tab data to be shown to the user in the chat UI.", "properties": { - "quickActions": { "$ref": "#/components/schemas/QuickActions" }, - "mcpServers": { "type": "boolean" }, - "modelSelection": { "type": "boolean" }, - "history": { "type": "boolean" }, - "export": { "type": "boolean" }, - "chatNotifications": { - "type": "array", - "items": { "$ref": "#/components/schemas/ChatMessage" } + "requestId": { + "type": "string" } } + } + ] + }, + "QuickActionCommand": { + "type": "object", + "description": "Configuration object for chat quick action.", + "required": ["command"], + "properties": { + "command": { + "type": "string" }, - "QuickActionParams": { - "allOf": [ - { "$ref": "#/components/schemas/PartialResultParams" }, - { - "type": "object", - "required": ["tabId", "quickAction"], - "properties": { - "tabId": { "type": "string" }, - "quickAction": { "type": "string" }, - "prompt": { "type": "string" }, - "cursorState": { - "type": "array", - "items": { "$ref": "#/components/schemas/CursorState" } - }, - "textDocument": { "type": "TextDocumentIdentifier" } - } - } - ] + "description": { + "type": "string" }, - "EncryptedQuickActionParams": { - "allOf": [ - { "$ref": "#/components/schemas/PartialResultParams" }, - { - "type": "object", - "required": ["message"], - "properties": { - "message": { "type": "string" } - } - } - ] + "placeholder": { + "type": "string" }, - "QuickActionResult": { - "allOf": [{ "$ref": "#/components/schemas/ChatMessage" }], - "description": "Currently the QuickActionResult and ChatResult share the same shape. Response for quick actions request can be empty, if server chooses to handle the request and push updates asynchronously." + "icon": { + "$ref": "#/components/schemas/IconType" + } + } + }, + "QuickActionCommandGroup": { + "type": "object", + "description": "Configuration object for registering chat quick actions groups.", + "required": ["commands"], + "properties": { + "groupName": { + "type": "string" }, - "FeedbackParams": { - "type": "object", - "required": ["tabId", "feedbackPayload"], - "properties": { - "tabId": { "type": "string" }, - "feedbackPayload": { "$ref": "#/components/schemas/FeedbackPayload" }, - "eventId": { "type": "string" } + "commands": { + "type": "array", + "items": { + "$ref": "#/components/schemas/QuickActionCommand" } + } + } + }, + "QuickActions": { + "type": "object", + "description": "Registration options for a Chat QuickActionRequest.", + "required": ["quickActionsCommandGroups"], + "properties": { + "quickActionsCommandGroups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/QuickActionCommandGroup" + }, + "description": "The chat quick actions groups and commands to be executed on server." + } + } + }, + "TabData": { + "type": "object", + "required": ["messages"], + "properties": { + "placeholderText": { + "type": "string" }, - "TabEventParams": { - "type": "object", - "required": ["tabId"], - "properties": { - "tabId": { "type": "string" } + "messages": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChatMessage" } + } + } + }, + "ChatOptions": { + "type": "object", + "description": "Registration options regarding chat data. Currently contains the available quick actions provided by a server and the default tab data to be shown to the user in the chat UI.", + "properties": { + "quickActions": { + "$ref": "#/components/schemas/QuickActions" }, - "TabAddParams": { - "type": "object", - "allOf": [{ "$ref": "#/components/schemas/TabEventParams" }], - "properties": { - "restoredTab": { "type": "boolean" } - } + "mcpServers": { + "type": "boolean" + }, + "modelSelection": { + "type": "boolean" + }, + "history": { + "type": "boolean" }, - "TabChangeParams": { - "allOf": [{ "$ref": "#/components/schemas/TabEventParams" }] + "export": { + "type": "boolean" }, - "TabRemoveParams": { - "allOf": [{ "$ref": "#/components/schemas/TabEventParams" }] + "chatNotifications": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChatMessage" + } + } + } + }, + "QuickActionParams": { + "allOf": [ + { + "$ref": "#/components/schemas/PartialResultParams" }, - "InsertToCursorPositionParams": { + { "type": "object", - "required": ["tabId", "messageId"], + "required": ["tabId", "quickAction"], "properties": { - "tabId": { "type": "string" }, - "messageId": { "type": "string" }, - "cursorPosition": { "type": "Position" }, - "textDocument": { "type": "TextDocumentIdentifier" }, - "code": { "type": "string" }, - "type": { "$ref": "#/components/schemas/CodeSelectionType" }, - "referenceTrackerInformation": { + "tabId": { + "type": "string" + }, + "quickAction": { + "type": "string" + }, + "prompt": { + "type": "string" + }, + "cursorState": { "type": "array", - "items": { "$ref": "#/components/schemas/ReferenceTrackerInformation" } + "items": { + "$ref": "#/components/schemas/CursorState" + } }, - "eventId": { "type": "string" }, - "codeBlockIndex": { "type": "number" }, - "totalCodeBlocks": { "type": "number" } + "textDocument": { + "type": "TextDocumentIdentifier" + } } + } + ] + }, + "EncryptedQuickActionParams": { + "allOf": [ + { + "$ref": "#/components/schemas/PartialResultParams" }, - "InfoLinkClickParams": { + { "type": "object", - "required": ["tabId", "link"], + "required": ["message"], "properties": { - "tabId": { "type": "string" }, - "link": { "type": "string" }, - "eventId": { "type": "string" } + "message": { + "type": "string" + } } + } + ] + }, + "QuickActionResult": { + "allOf": [ + { + "$ref": "#/components/schemas/ChatMessage" + } + ], + "description": "Currently the QuickActionResult and ChatResult share the same shape. Response for quick actions request can be empty, if server chooses to handle the request and push updates asynchronously." + }, + "FeedbackParams": { + "type": "object", + "required": ["tabId", "feedbackPayload"], + "properties": { + "tabId": { + "type": "string" }, - "LinkClickParams": { - "allOf": [ - { "$ref": "#/components/schemas/InfoLinkClickParams" }, - { - "type": "object", - "required": ["messageId"], - "properties": { - "messageId": { "type": "string" } - } - } - ] + "feedbackPayload": { + "$ref": "#/components/schemas/FeedbackPayload" }, - "SourceLinkClickParams": { - "allOf": [ - { "$ref": "#/components/schemas/InfoLinkClickParams" }, - { - "type": "object", - "required": ["messageId"], - "properties": { - "messageId": { "type": "string" } - } - } - ] + "eventId": { + "type": "string" + } + } + }, + "TabEventParams": { + "type": "object", + "required": ["tabId"], + "properties": { + "tabId": { + "type": "string" + } + } + }, + "TabAddParams": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/TabEventParams" + } + ], + "properties": { + "restoredTab": { + "type": "boolean" + } + } + }, + "TabChangeParams": { + "allOf": [ + { + "$ref": "#/components/schemas/TabEventParams" + } + ] + }, + "TabRemoveParams": { + "allOf": [ + { + "$ref": "#/components/schemas/TabEventParams" + } + ] + }, + "InsertToCursorPositionParams": { + "type": "object", + "required": ["tabId", "messageId"], + "properties": { + "tabId": { + "type": "string" }, - "FollowUpClickParams": { - "type": "object", - "required": ["tabId", "messageId", "followUp"], - "properties": { - "tabId": { "type": "string" }, - "messageId": { "type": "string" }, - "followUp": { "$ref": "#/components/schemas/ChatItemAction" } - } + "messageId": { + "type": "string" }, - "NewTabOptions": { - "type": "object", - "properties": { - "state": { "$ref": "#/components/schemas/TabState" }, - "data": { "$ref": "#/components/schemas/TabData" } - } + "cursorPosition": { + "type": "Position" }, - "OpenTabParams": { - "type": "object", - "description": "Defines parameters for opening a tab. Opens existing tab if `tabId` is provided, otherwise creates a new tab with options provided in `options` parameter and opens it.", - "properties": { - "tabId": { "type": "string" }, - "newTabOptions": { "$ref": "#/components/schemas/NewTabOptions" } - } + "textDocument": { + "type": "TextDocumentIdentifier" }, - "OpenTabResult": { - "allOf": [{ "$ref": "#/components/schemas/TabEventParams" }] + "code": { + "type": "string" }, - "ButtonClickParams": { - "type": "object", - "required": ["tabId", "messageId", "buttonId"], - "properties": { - "tabId": { "type": "string" }, - "messageId": { "type": "string" }, - "buttonId": { "type": "string" } - } + "type": { + "$ref": "#/components/schemas/CodeSelectionType" }, - "ButtonClickResult": { - "type": "object", - "required": ["success"], - "properties": { - "success": { "type": "boolean" }, - "failureReason": { "type": "string" } + "referenceTrackerInformation": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ReferenceTrackerInformation" } }, - "TabState": { - "type": "object", - "properties": { - "inProgress": { "type": "boolean" }, - "cancellable": { "type": "boolean" } - } + "eventId": { + "type": "string" }, - "ChatUpdateParams": { - "type": "object", - "required": ["tabId"], - "properties": { - "tabId": { "type": "string" }, - "state": { "$ref": "#/components/schemas/TabState" }, - "data": { "$ref": "#/components/schemas/TabData" } - } + "codeBlockIndex": { + "type": "number" }, - "ChatOptionsUpdateParams": { - "type": "object", - "required": ["tabId"], - "description": "Server-initiated chat metadata updates.", - "properties": { - "tabId": { "type": "string" }, - "chatNotifications": { - "type": "array", - "items": { "$ref": "#/components/schemas/ChatMessage" }, - "description": "Processes changes of developer profiles." - }, - "modelId": { - "type": "string", - "description": "The last selected modelId for the conversation. This is used to allow the server to programmatically update the selected model for persistance across sessions." - } - } + "totalCodeBlocks": { + "type": "number" + } + } + }, + "InfoLinkClickParams": { + "type": "object", + "required": ["tabId", "link"], + "properties": { + "tabId": { + "type": "string" }, - "FileAction": { - "type": "string", - "enum": ["accept-change", "reject-change"] + "link": { + "type": "string" }, - "FileClickParams": { - "type": "object", - "required": ["tabId", "filePath"], - "properties": { - "tabId": { "type": "string" }, - "filePath": { "type": "string" }, - "action": { "$ref": "#/components/schemas/FileAction" }, - "messageId": { "type": "string" }, - "fullPath": { "type": "string" } - } + "eventId": { + "type": "string" + } + } + }, + "LinkClickParams": { + "allOf": [ + { + "$ref": "#/components/schemas/InfoLinkClickParams" }, - "ContextCommandGroup": { + { "type": "object", - "required": ["commands"], + "required": ["messageId"], "properties": { - "groupName": { "type": "string" }, - "commands": { - "type": "array", - "items": { "$ref": "#/components/schemas/ContextCommand" } + "messageId": { + "type": "string" } } + } + ] + }, + "SourceLinkClickParams": { + "allOf": [ + { + "$ref": "#/components/schemas/InfoLinkClickParams" }, - "ContextCommand": { - "allOf": [ - { "$ref": "#/components/schemas/QuickActionCommand" }, - { - "type": "object", - "properties": { - "id": { "type": "string" }, - "route": { - "type": "array", - "items": { "type": "string" } - }, - "label": { - "type": "string", - "description": "file, folder, code, image" - }, - "children": { - "type": "array", - "items": { "$ref": "#/components/schemas/ContextCommandGroup" } - }, - "content": { - "type": "Uint8Array" - } - } - } - ] - }, - "ContextCommandParams": { + { "type": "object", - "required": ["contextCommandGroups"], + "required": ["messageId"], "properties": { - "contextCommandGroups": { - "type": "array", - "items": { "$ref": "#/components/schemas/ContextCommandGroup" } + "messageId": { + "type": "string" } } + } + ] + }, + "FollowUpClickParams": { + "type": "object", + "required": ["tabId", "messageId", "followUp"], + "properties": { + "tabId": { + "type": "string" }, - "PinnedContextParams": { - "allOf": [ - { "$ref": "#/components/schemas/ContextCommandParams" }, - { - "type": "object", - "required": ["tabId"], - "properties": { - "tabId": { "type": "string" }, - "textDocument": { "type": "TextDocumentIdentifier" }, - "showRules": { "type": "boolean" } - } - } - ] + "messageId": { + "type": "string" }, - "CreatePromptParams": { - "type": "object", - "required": ["promptName"], - "properties": { - "promptName": { "type": "string" }, - "isRule": { "type": "boolean" } - } + "followUp": { + "$ref": "#/components/schemas/ChatItemAction" + } + } + }, + "NewTabOptions": { + "type": "object", + "properties": { + "state": { + "$ref": "#/components/schemas/TabState" + }, + "data": { + "$ref": "#/components/schemas/TabData" + } + } + }, + "OpenTabParams": { + "type": "object", + "description": "Defines parameters for opening a tab. Opens existing tab if `tabId` is provided, otherwise creates a new tab with options provided in `options` parameter and opens it.", + "properties": { + "tabId": { + "type": "string" }, - "OpenFileDialogParams": { - "type": "object", - "required": ["tabId", "fileType"], - "properties": { - "tabId": { "type": "string" }, - "fileType": { "$ref": "#/components/schemas/FileDialogType" }, - "insertPosition": { "type": "number" } - } + "newTabOptions": { + "$ref": "#/components/schemas/NewTabOptions" + } + } + }, + "OpenTabResult": { + "allOf": [ + { + "$ref": "#/components/schemas/TabEventParams" + } + ] + }, + "ButtonClickParams": { + "type": "object", + "required": ["tabId", "messageId", "buttonId"], + "properties": { + "tabId": { + "type": "string" }, - "OpenFileDialogResult": { - "type": "object", - "required": ["tabId", "fileType", "filePaths"], - "properties": { - "tabId": { "type": "string" }, - "fileType": { "$ref": "#/components/schemas/FileDialogType" }, - "filePaths": { - "type": "array", - "items": { "type": "string" } - }, - "errorMessage": { "type": "string" }, - "insertPosition": { "type": "number" } - } + "messageId": { + "type": "string" }, - "DropFilesParams": { - "type": "object", - "required": ["tabId", "files", "insertPosition"], - "properties": { - "tabId": { "type": "string" }, - "files": { "$ref": "#/components/schemas/FileList" }, - "insertPosition": { "type": "number" }, - "errorMessage": { "type": "string" } - } + "buttonId": { + "type": "string" + } + } + }, + "ButtonClickResult": { + "type": "object", + "required": ["success"], + "properties": { + "success": { + "type": "boolean" + }, + "failureReason": { + "type": "string" + } + } + }, + "TabState": { + "type": "object", + "properties": { + "inProgress": { + "type": "boolean" + }, + "cancellable": { + "type": "boolean" + } + } + }, + "ChatUpdateParams": { + "type": "object", + "required": ["tabId"], + "properties": { + "tabId": { + "type": "string" }, - "ProgrammingLanguage": { - "type": "object", - "required": ["languageName"], - "properties": { - "languageName": { "type": "string" } - } + "state": { + "$ref": "#/components/schemas/TabState" }, - "InlineChatUserDecision": { - "type": "string", - "enum": ["ACCEPT", "REJECT", "DISMISS"] + "data": { + "$ref": "#/components/schemas/TabData" + } + } + }, + "ChatOptionsUpdateParams": { + "type": "object", + "required": ["tabId"], + "description": "Server-initiated chat metadata updates.", + "properties": { + "tabId": { + "type": "string" }, - "TextBasedFilterType": { - "type": "string", - "enum": ["textarea", "textinput", "numericinput"] + "chatNotifications": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChatMessage" + }, + "description": "Processes changes of developer profiles." }, - "OptionBasedFilterType": { + "modelId": { "type": "string", - "enum": ["select", "radiogroup"] + "description": "The last selected modelId for the conversation. This is used to allow the server to programmatically update the selected model for persistance across sessions." + } + } + }, + "FileAction": { + "type": "string", + "enum": ["accept-change", "reject-change"] + }, + "FileClickParams": { + "type": "object", + "required": ["tabId", "filePath"], + "properties": { + "tabId": { + "type": "string" }, - "FileDialogType": { - "type": "string", - "enum": ["image", ""] + "filePath": { + "type": "string" }, - "RuleType": { - "type": "string", - "enum": ["folder", "rule"] + "action": { + "$ref": "#/components/schemas/FileAction" }, - "RuleActiveState": { - "oneOf": [{ "type": "boolean" }, { "$ref": "#/components/schemas/RuleActiveStateString" }] + "messageId": { + "type": "string" }, - "RuleActiveStateString": { - "type": "string", - "enum": ["indeterminate"] + "fullPath": { + "type": "string" + } + } + }, + "ContextCommandGroup": { + "type": "object", + "required": ["commands"], + "properties": { + "groupName": { + "type": "string" }, - "InlineChatResultParams": { - "type": "object", - "required": ["requestId"], - "properties": { - "requestId": { "type": "string" }, - "inputLength": { "type": "number" }, - "selectedLines": { "type": "number" }, - "suggestionAddedChars": { "type": "number" }, - "suggestionAddedLines": { "type": "number" }, - "suggestionDeletedChars": { "type": "number" }, - "suggestionDeletedLines": { "type": "number" }, - "codeIntent": { "type": "boolean" }, - "userDecision": { "$ref": "#/components/schemas/InlineChatUserDecision" }, - "responseStartLatency": { "type": "number" }, - "responseEndLatency": { "type": "number" }, - "programmingLanguage": { "$ref": "#/components/schemas/ProgrammingLanguage" } + "commands": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContextCommand" } + } + } + }, + "ContextCommand": { + "allOf": [ + { + "$ref": "#/components/schemas/QuickActionCommand" }, - - "FilterValue": { - "type": "string" - }, - "BaseProperties": { + { "type": "object", "properties": { "id": { "type": "string" }, - "placeholder": { - "type": "string" + "route": { + "type": "array", + "items": { + "type": "string" + } }, - "title": { - "type": "string" + "label": { + "type": "string", + "description": "file, folder, code, image" }, - "description": { - "type": "string" + "children": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContextCommandGroup" + } }, - "icon": { - "$ref": "#/components/schemas/IconType" + "content": { + "type": "Uint8Array" } - }, - "required": ["id"] + } + } + ] + }, + "ContextCommandParams": { + "type": "object", + "required": ["contextCommandGroups"], + "properties": { + "contextCommandGroups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContextCommandGroup" + } + } + } + }, + "PinnedContextParams": { + "allOf": [ + { + "$ref": "#/components/schemas/ContextCommandParams" }, - "SelectOption": { + { "type": "object", + "required": ["tabId"], "properties": { - "value": { + "tabId": { "type": "string" }, - "label": { - "type": "string" + "textDocument": { + "type": "TextDocumentIdentifier" + }, + "showRules": { + "type": "boolean" } - }, - "required": ["value", "label"] + } + } + ] + }, + "CreatePromptParams": { + "type": "object", + "required": ["promptName"], + "properties": { + "promptName": { + "type": "string" }, - "TextBasedFilter": { - "allOf": [ - { "$ref": "#/components/schemas/BaseProperties" }, - { - "type": "object", - "properties": { - "type": { - "$ref": "#/components/schemas/TextBasedFilterType" - } - }, - "required": ["type"] - } - ] + "isRule": { + "type": "boolean" + } + } + }, + "OpenFileDialogParams": { + "type": "object", + "required": ["tabId", "fileType"], + "properties": { + "tabId": { + "type": "string" }, - "OptionBasedFilter": { - "allOf": [ - { "$ref": "#/components/schemas/BaseProperties" }, - { - "type": "object", - "properties": { - "type": { - "$ref": "#/components/schemas/OptionBasedFilterType" - }, - "options": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SelectOption" - } - } - }, - "required": ["type", "options"] - } - ] + "fileType": { + "$ref": "#/components/schemas/FileDialogType" }, - "FilterOption": { - "oneOf": [ - { "$ref": "#/components/schemas/TextBasedFilter" }, - { "$ref": "#/components/schemas/OptionBasedFilter" } - ] + "insertPosition": { + "type": "number" + } + } + }, + "OpenFileDialogResult": { + "type": "object", + "required": ["tabId", "fileType", "filePaths"], + "properties": { + "tabId": { + "type": "string" }, - "Action": { - "type": "object", - "required": ["id", "text"], - "properties": { - "id": { "type": "string" }, - "icon": { "$ref": "#/components/schemas/IconType" }, - "text": { "type": "string" } - } + "fileType": { + "$ref": "#/components/schemas/FileDialogType" }, - "ConversationItem": { - "type": "object", - "required": ["id"], - "properties": { - "id": { "type": "string" }, - "icon": { "$ref": "#/components/schemas/IconType" }, - "description": { "type": "string" }, - "actions": { - "type": "array", - "items": { "$ref": "#/components/schemas/Action" } - } + "filePaths": { + "type": "array", + "items": { + "type": "string" } }, - "Model": { - "type": "object", - "required": ["id", "name"], - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } + "errorMessage": { + "type": "string" }, - "ListAvailableModelsParams": { + "insertPosition": { + "type": "number" + } + } + }, + "DropFilesParams": { + "type": "object", + "required": ["tabId", "files", "insertPosition"], + "properties": { + "tabId": { + "type": "string" + }, + "files": { + "$ref": "#/components/schemas/FileList" + }, + "insertPosition": { + "type": "number" + }, + "errorMessage": { + "type": "string" + } + } + }, + "ProgrammingLanguage": { + "type": "object", + "required": ["languageName"], + "properties": { + "languageName": { + "type": "string" + } + } + }, + "InlineChatUserDecision": { + "type": "string", + "enum": ["ACCEPT", "REJECT", "DISMISS"] + }, + "TextBasedFilterType": { + "type": "string", + "enum": ["textarea", "textinput", "numericinput"] + }, + "OptionBasedFilterType": { + "type": "string", + "enum": ["select", "radiogroup"] + }, + "FileDialogType": { + "type": "string", + "enum": ["image", ""] + }, + "RuleType": { + "type": "string", + "enum": ["folder", "rule"] + }, + "RuleActiveState": { + "oneOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/components/schemas/RuleActiveStateString" + } + ] + }, + "RuleActiveStateString": { + "type": "string", + "enum": ["indeterminate"] + }, + "InlineChatResultParams": { + "type": "object", + "required": ["requestId"], + "properties": { + "requestId": { + "type": "string" + }, + "inputLength": { + "type": "number" + }, + "selectedLines": { + "type": "number" + }, + "suggestionAddedChars": { + "type": "number" + }, + "suggestionAddedLines": { + "type": "number" + }, + "suggestionDeletedChars": { + "type": "number" + }, + "suggestionDeletedLines": { + "type": "number" + }, + "codeIntent": { + "type": "boolean" + }, + "userDecision": { + "$ref": "#/components/schemas/InlineChatUserDecision" + }, + "responseStartLatency": { + "type": "number" + }, + "responseEndLatency": { + "type": "number" + }, + "programmingLanguage": { + "$ref": "#/components/schemas/ProgrammingLanguage" + } + } + }, + "FilterValue": { + "type": "string" + }, + "BaseProperties": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "placeholder": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "icon": { + "$ref": "#/components/schemas/IconType" + } + }, + "required": ["id"] + }, + "SelectOption": { + "type": "object", + "properties": { + "value": { + "type": "string" + }, + "label": { + "type": "string" + } + }, + "required": ["value", "label"] + }, + "TextBasedFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/BaseProperties" + }, + { "type": "object", - "required": ["tabId"], "properties": { - "tabId": { - "type": "string" + "type": { + "$ref": "#/components/schemas/TextBasedFilterType" } - } + }, + "required": ["type"] + } + ] + }, + "OptionBasedFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/BaseProperties" }, - "ListAvailableModelsResult": { + { "type": "object", - "required": ["tabId", "models"], "properties": { - "tabId": { - "type": "string" + "type": { + "$ref": "#/components/schemas/OptionBasedFilterType" }, - "models": { + "options": { "type": "array", "items": { - "$ref": "#/components/schemas/Model" + "$ref": "#/components/schemas/SelectOption" } - }, - "selectedModelId": { - "type": "string" } + }, + "required": ["type", "options"] + } + ] + }, + "FilterOption": { + "oneOf": [ + { + "$ref": "#/components/schemas/TextBasedFilter" + }, + { + "$ref": "#/components/schemas/OptionBasedFilter" + } + ] + }, + "Action": { + "type": "object", + "required": ["id", "text"], + "properties": { + "id": { + "type": "string" + }, + "icon": { + "$ref": "#/components/schemas/IconType" + }, + "text": { + "type": "string" + } + } + }, + "ConversationItem": { + "type": "object", + "required": ["id"], + "properties": { + "id": { + "type": "string" + }, + "icon": { + "$ref": "#/components/schemas/IconType" + }, + "description": { + "type": "string" + }, + "actions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Action" } + } + } + }, + "Model": { + "type": "object", + "required": ["id", "name"], + "properties": { + "id": { + "type": "string" }, - "SubscriptionDetailsParams": { - "type": "object", - "required": [ - "subscriptionTier", - "subscriptionPeriodReset", - "isOverageEnabled", - "queryUsage", - "queryLimit", - "queryOverage" - ], - "properties": { - "subscriptionTier": { - "type": "string" - }, - "subscriptionPeriodReset": { - "type": "Date" - }, - "isOverageEnabled": { - "type": "boolean" - }, - "queryUsage": { - "type": "number" - }, - "queryLimit": { - "type": "number" - }, - "queryOverage": { - "type": "number" - } + "name": { + "type": "string" + } + } + }, + "ListAvailableModelsParams": { + "type": "object", + "required": ["tabId"], + "properties": { + "tabId": { + "type": "string" + } + } + }, + "ListAvailableModelsResult": { + "type": "object", + "required": ["tabId", "models"], + "properties": { + "tabId": { + "type": "string" + }, + "models": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Model" } }, - "SubscriptionUpgradeParams": { - "type": "object", - "properties": {} + "selectedModelId": { + "type": "string" + } + } + }, + "SubscriptionDetailsParams": { + "type": "object", + "required": [ + "subscriptionTier", + "subscriptionPeriodReset", + "isOverageEnabled", + "queryUsage", + "queryLimit", + "queryOverage" + ], + "properties": { + "subscriptionTier": { + "type": "string" + }, + "subscriptionPeriodReset": { + "type": "Date" + }, + "isOverageEnabled": { + "type": "boolean" }, - "ConversationItemGroup": { + "queryUsage": { + "type": "number" + }, + "queryLimit": { + "type": "number" + }, + "queryOverage": { + "type": "number" + } + } + }, + "SubscriptionUpgradeParams": { + "type": "object", + "properties": {} + }, + "ConversationItemGroup": { + "type": "object", + "properties": { + "groupName": { + "type": "string" + }, + "icon": { + "$ref": "#/components/schemas/IconType" + }, + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ConversationItem" + } + } + } + }, + "ListConversationsParams": { + "type": "object", + "properties": { + "filter": { "type": "object", - "properties": { - "groupName": { "type": "string" }, - "icon": { "$ref": "#/components/schemas/IconType" }, - "items": { - "type": "array", - "items": { "$ref": "#/components/schemas/ConversationItem" } - } + "additionalProperties": { + "$ref": "#/components/schemas/FilterValue" } - }, - "ListConversationsParams": { + } + } + }, + "ListMcpServersParams": { + "type": "object", + "properties": { + "filter": { "type": "object", - "properties": { - "filter": { - "type": "object", - "additionalProperties": { "$ref": "#/components/schemas/FilterValue" } - } + "additionalProperties": { + "$ref": "#/components/schemas/FilterValue" } + } + } + }, + "ListRulesParams": { + "type": "object", + "required": ["tabId"], + "properties": { + "tabId": { + "type": "string" + } + } + }, + "ListRulesResult": { + "type": "object", + "required": ["tabId", "rules"], + "properties": { + "tabId": { + "type": "string" }, - "ListMcpServersParams": { + "header": { "type": "object", + "required": ["title"], "properties": { - "filter": { - "type": "object", - "additionalProperties": { "$ref": "#/components/schemas/FilterValue" } + "title": { + "type": "string" } } }, - "ListRulesParams": { - "type": "object", - "required": ["tabId"], - "properties": { - "tabId": { "type": "string" } + "filterOptions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FilterOption" + } + }, + "rules": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RulesFolder" + } + } + } + }, + "RulesFolder": { + "type": "object", + "required": ["active", "rules"], + "properties": { + "folderName": { + "type": "string" + }, + "active": { + "$ref": "#/components/schemas/RuleActiveState", + "description": "Represents the active state of the folder: - true: all rules in the folder are active - false: all rules in the folder are inactive - 'indeterminate': rules inside the folder have mixed active states (some active, some inactive), similar to a parent checkbox in a nested checkbox list having an indeterminate state" + }, + "rules": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Rule" } + } + } + }, + "Rule": { + "type": "object", + "required": ["active", "name", "id"], + "properties": { + "active": { + "type": "boolean" + }, + "name": { + "type": "string" }, - "ListRulesResult": { + "id": { + "type": "string" + } + } + }, + "RuleClickParams": { + "type": "object", + "required": ["tabId", "type", "id"], + "properties": { + "tabId": { + "type": "string" + }, + "type": { + "$ref": "#/components/schemas/RuleType" + }, + "id": { + "type": "string" + } + } + }, + "RuleClickResult": { + "allOf": [ + { + "$ref": "#/components/schemas/RuleClickParams" + }, + { "type": "object", - "required": ["tabId", "rules"], + "required": ["success"], "properties": { - "tabId": { "type": "string" }, - "header": { - "type": "object", - "required": ["title"], - "properties": { - "title": { "type": "string" } - } - }, - "filterOptions": { - "type": "array", - "items": { "$ref": "#/components/schemas/FilterOption" } - }, - "rules": { - "type": "array", - "items": { "$ref": "#/components/schemas/RulesFolder" } + "success": { + "type": "boolean" } } + } + ] + }, + "ActiveEditorChangedParams": { + "type": "object", + "properties": { + "cursorState": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CursorState" + } }, - "RulesFolder": { + "textDocument": { + "type": "TextDocumentIdentifier" + } + } + }, + "ConversationsList": { + "type": "object", + "required": ["list"], + "properties": { + "header": { "type": "object", - "required": ["active", "rules"], + "required": ["title"], "properties": { - "folderName": { "type": "string" }, - "active": { - "$ref": "#/components/schemas/RuleActiveState", - "description": "Represents the active state of the folder: - true: all rules in the folder are active - false: all rules in the folder are inactive - 'indeterminate': rules inside the folder have mixed active states (some active, some inactive), similar to a parent checkbox in a nested checkbox list having an indeterminate state" - }, - "rules": { - "type": "array", - "items": { "$ref": "#/components/schemas/Rule" } + "title": { + "type": "string" } } }, - "Rule": { - "type": "object", - "required": ["active", "name", "id"], - "properties": { - "active": { "type": "boolean" }, - "name": { "type": "string" }, - "id": { "type": "string" } + "filterOptions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FilterOption" } }, - "RuleClickParams": { - "type": "object", - "required": ["tabId", "type", "id"], - "properties": { - "tabId": { "type": "string" }, - "type": { "$ref": "#/components/schemas/RuleType" }, - "id": { "type": "string" } + "list": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ConversationItemGroup" } + } + } + }, + "ListConversationsResult": { + "allOf": [ + { + "$ref": "#/components/schemas/ConversationsList" }, - "RuleClickResult": { - "allOf": [ - { "$ref": "#/components/schemas/RuleClickParams" }, - { - "type": "object", - "required": ["success"], - "properties": { - "success": { "type": "boolean" } - } - } - ] - }, - "ActiveEditorChangedParams": { + { "type": "object", - "properties": { - "cursorState": { - "type": "array", - "items": { "$ref": "#/components/schemas/CursorState" } - }, - "textDocument": { "type": "TextDocumentIdentifier" } - } + "properties": {} + } + ] + }, + "McpServerStatus": { + "type": "string", + "enum": ["INITIALIZING", "ENABLED", "FAILED", "DISABLED"] + }, + "DetailedListItem": { + "type": "object", + "required": ["title"], + "properties": { + "title": { + "type": "string" }, - "ConversationsList": { - "type": "object", - "required": ["list"], - "properties": { - "header": { - "type": "object", - "required": ["title"], - "properties": { - "title": { "type": "string" } - } - }, - "filterOptions": { - "type": "array", - "items": { "$ref": "#/components/schemas/FilterOption" } - }, - "list": { - "type": "array", - "items": { "$ref": "#/components/schemas/ConversationItemGroup" } - } - } + "description": { + "type": "string" }, - "ListConversationsResult": { - "allOf": [ - { "$ref": "#/components/schemas/ConversationsList" }, - { - "type": "object", - "properties": {} - } - ] + "groupActions": { + "type": "boolean" }, - "McpServerStatus": { - "type": "string", - "enum": ["INITIALIZING", "ENABLED", "FAILED", "DISABLED"] + "children": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DetailedListGroup" + } + } + } + }, + "DetailedListGroup": { + "type": "object", + "properties": { + "groupName": { + "type": "string" }, - "DetailedListItem": { - "type": "object", - "required": ["title"], - "properties": { - "title": { "type": "string" }, - "description": { "type": "string" }, - "groupActions": { "type": "boolean" }, - "children": { - "type": "array", - "items": { "$ref": "#/components/schemas/DetailedListGroup" } - } + "children": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DetailedListItem" } }, - "DetailedListGroup": { - "type": "object", - "properties": { - "groupName": { "type": "string" }, - "children": { - "type": "array", - "items": { "$ref": "#/components/schemas/DetailedListItem" } - }, - "actions": { - "type": "array", - "items": { "$ref": "#/components/schemas/Action" } - }, - "icon": { "$ref": "#/components/schemas/IconType" } + "actions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Action" } }, - "ListMcpServersResultHeaderStatus": { - "type": "object", - "properties": { - "icon": { "$ref": "#/components/schemas/IconType" }, - "title": { "type": "string" }, - "status": { "$ref": "#/components/schemas/Status" } + "icon": { + "$ref": "#/components/schemas/IconType" + } + } + }, + "ListMcpServersResultHeaderStatus": { + "type": "object", + "properties": { + "icon": { + "$ref": "#/components/schemas/IconType" + }, + "title": { + "type": "string" + }, + "status": { + "$ref": "#/components/schemas/Status" + } + } + }, + "ListMcpServersResultHeader": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "status": { + "$ref": "#/components/schemas/ListMcpServersResultHeaderStatus" + } + } + }, + "ListMcpServersResult": { + "type": "object", + "required": ["list"], + "properties": { + "header": { + "$ref": "#/components/schemas/ListMcpServersResultHeader" + }, + "list": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DetailedListGroup" } }, - "ListMcpServersResultHeader": { - "type": "object", - "properties": { - "title": { "type": "string" }, - "description": { "type": "string" }, - "status": { "$ref": "#/components/schemas/ListMcpServersResultHeaderStatus" } + "filterOptions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FilterOption" } + } + } + }, + "ConversationAction": { + "type": "string", + "enum": ["delete", "export"] + }, + "ConversationClickParams": { + "type": "object", + "required": ["id"], + "properties": { + "id": { + "type": "string" + }, + "action": { + "$ref": "#/components/schemas/ConversationAction" + } + } + }, + "ConversationClickResult": { + "allOf": [ + { + "$ref": "#/components/schemas/ConversationClickParams" }, - "ListMcpServersResult": { + { "type": "object", - "required": ["list"], + "required": ["success"], "properties": { - "header": { "$ref": "#/components/schemas/ListMcpServersResultHeader" }, - "list": { - "type": "array", - "items": { "$ref": "#/components/schemas/DetailedListGroup" } - }, - "filterOptions": { - "type": "array", - "items": { "$ref": "#/components/schemas/FilterOption" } + "success": { + "type": "boolean" } } + } + ] + }, + "McpServerClickParams": { + "type": "object", + "required": ["id"], + "properties": { + "id": { + "type": "string" }, - "ConversationAction": { - "type": "string", - "enum": ["delete", "export"] + "title": { + "type": "string" }, - "ConversationClickParams": { + "optionsValues": { "type": "object", - "required": ["id"], - "properties": { - "id": { "type": "string" }, - "action": { "$ref": "#/components/schemas/ConversationAction" } + "additionalProperties": { + "type": "string" } + } + } + }, + "McpServerClickResult": { + "allOf": [ + { + "$ref": "#/components/schemas/McpServerClickParams" }, - "ConversationClickResult": { - "allOf": [ - { "$ref": "#/components/schemas/ConversationClickParams" }, - { - "type": "object", - "required": ["success"], - "properties": { - "success": { "type": "boolean" } - } - } - ] - }, - "McpServerClickParams": { + { "type": "object", - "required": ["id"], "properties": { - "id": { "type": "string" }, - "title": { "type": "string" }, - "optionsValues": { - "type": "object", - "additionalProperties": { "type": "string" } - } - } - }, - "McpServerClickResult": { - "allOf": [ - { "$ref": "#/components/schemas/McpServerClickParams" }, - { + "filterOptions": { + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/components/schemas/FilterOption" + } + }, + { + "type": "null" + } + ] + }, + "filterActions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Button" + } + }, + "list": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DetailedListGroup" + } + }, + "header": { "type": "object", "properties": { - "filterOptions": { - "oneOf": [ - { - "type": "array", - "items": { "$ref": "#/components/schemas/FilterOption" } - }, - { "type": "null" } - ] - }, - "filterActions": { - "type": "array", - "items": { "$ref": "#/components/schemas/Button" } + "title": { + "type": "string" }, - "list": { - "type": "array", - "items": { "$ref": "#/components/schemas/DetailedListGroup" } + "icon": { + "$ref": "#/components/schemas/IconType" }, - "header": { + "status": { "type": "object", "properties": { - "title": { "type": "string" }, - "icon": { "$ref": "#/components/schemas/IconType" }, - "status": { - "type": "object", - "properties": { - "icon": { "$ref": "#/components/schemas/IconType" }, - "title": { "type": "string" }, - "description": { "type": "string" }, - "status": { "$ref": "#/components/schemas/Status" } - } + "icon": { + "$ref": "#/components/schemas/IconType" + }, + "title": { + "type": "string" }, - "description": { "type": "string" }, - "actions": { - "type": "array", - "items": { "$ref": "#/components/schemas/Action" } + "description": { + "type": "string" + }, + "status": { + "$ref": "#/components/schemas/Status" } } + }, + "description": { + "type": "string" + }, + "actions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Action" + } } } } - ] - }, - "TabBarAction": { - "type": "string", - "enum": ["export"] - }, - "TabBarActionParams": { - "type": "object", - "required": ["action"], - "properties": { - "tabId": { "type": "string" }, - "action": { "$ref": "#/components/schemas/TabBarAction" } } + } + ] + }, + "TabBarAction": { + "type": "string", + "enum": ["export"] + }, + "TabBarActionParams": { + "type": "object", + "required": ["action"], + "properties": { + "tabId": { + "type": "string" }, - "TabBarActionResult": { - "allOf": [ - { "$ref": "#/components/schemas/TabBarActionParams" }, - { - "type": "object", - "required": ["success"], - "properties": { - "success": { "type": "boolean" } - } - } - ] - }, - "GetSerializedChatParams": { - "allOf": [ - { "$ref": "#/components/schemas/TabEventParams" }, - { - "type": "object", - "required": ["format"], - "properties": { - "format": { - "type": "string", - "enum": ["html", "markdown"] - } - } - } - ] + "action": { + "$ref": "#/components/schemas/TabBarAction" + } + } + }, + "TabBarActionResult": { + "allOf": [ + { + "$ref": "#/components/schemas/TabBarActionParams" }, - "GetSerializedChatResult": { + { "type": "object", - "required": ["content"], + "required": ["success"], "properties": { - "content": { "type": "string" } + "success": { + "type": "boolean" + } } + } + ] + }, + "GetSerializedChatParams": { + "allOf": [ + { + "$ref": "#/components/schemas/TabEventParams" }, - "PromptInputOptionChangeParams": { + { "type": "object", - "required": ["tabId", "optionsValues"], + "required": ["format"], "properties": { - "tabId": { "type": "string" }, - "optionsValues": { - "type": "object", - "additionalProperties": { "type": "string" } - }, - "eventId": { "type": "string" } + "format": { + "type": "string", + "enum": ["html", "markdown"] + } } + } + ] + }, + "GetSerializedChatResult": { + "type": "object", + "required": ["content"], + "properties": { + "content": { + "type": "string" + } + } + }, + "PromptInputOptionChangeParams": { + "type": "object", + "required": ["tabId", "optionsValues"], + "properties": { + "tabId": { + "type": "string" }, - "FileParams": { + "optionsValues": { "type": "object", - "required": ["path"], - "properties": { - "path": { "type": "string" } + "additionalProperties": { + "type": "string" } }, - "CopyFileParams": { - "type": "object", - "required": ["oldPath", "newPath"], - "properties": { - "oldPath": { "type": "string" }, - "newPath": { "type": "string" } - } + "eventId": { + "type": "string" + } + } + }, + "FileParams": { + "type": "object", + "required": ["path"], + "properties": { + "path": { + "type": "string" + } + } + }, + "CopyFileParams": { + "type": "object", + "required": ["oldPath", "newPath"], + "properties": { + "oldPath": { + "type": "string" }, - "OpenFileDiffParams": { - "type": "object", - "required": ["originalFileUri", "isDeleted"], - "properties": { - "originalFileUri": { "type": "string" }, - "originalFileContent": { "type": "string" }, - "isDeleted": { "type": "boolean" }, - "fileContent": { "type": "string" } - } + "newPath": { + "type": "string" + } + } + }, + "OpenFileDiffParams": { + "type": "object", + "required": ["originalFileUri", "isDeleted"], + "properties": { + "originalFileUri": { + "type": "string" }, - "ShowOpenDialogParams": { - "type": "object", - "properties": { - "canSelectFiles": { "type": "boolean" }, - "canSelectFolders": { "type": "boolean" }, - "canSelectMany": { "type": "boolean" }, - "filters": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { "type": "string" } - } - }, - "defaultUri": { "type": "string" }, - "title": { "type": "string" } - } + "originalFileContent": { + "type": "string" }, - "ShowSaveFileDialogParams": { - "type": "object", - "properties": { - "supportedFormats": { - "type": "array", - "items": { "type": "string" } - }, - "defaultUri": { "type": "string" } - } + "isDeleted": { + "type": "boolean" + }, + "fileContent": { + "type": "string" + } + } + }, + "ShowOpenDialogParams": { + "type": "object", + "properties": { + "canSelectFiles": { + "type": "boolean" + }, + "canSelectFolders": { + "type": "boolean" }, - "ShowSaveFileDialogResult": { + "canSelectMany": { + "type": "boolean" + }, + "filters": { "type": "object", - "required": ["targetUri"], - "properties": { - "targetUri": { "type": "string" } + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } } }, - "EndChatParams": { - "type": "object", - "required": ["tabId"], - "properties": { - "tabId": { "type": "string" } + "defaultUri": { + "type": "string" + }, + "title": { + "type": "string" + } + } + }, + "ShowSaveFileDialogParams": { + "type": "object", + "properties": { + "supportedFormats": { + "type": "array", + "items": { + "type": "string" } + }, + "defaultUri": { + "type": "string" + } + } + }, + "ShowSaveFileDialogResult": { + "type": "object", + "required": ["targetUri"], + "properties": { + "targetUri": { + "type": "string" + } + } + }, + "EndChatParams": { + "type": "object", + "required": ["tabId"], + "properties": { + "tabId": { + "type": "string" } } } diff --git a/types/codegen/constants.ts b/types/codegen/scripts/constants.ts similarity index 100% rename from types/codegen/constants.ts rename to types/codegen/scripts/constants.ts diff --git a/types/codegen/scripts/post-typescript.js b/types/codegen/scripts/post-typescript.js new file mode 100644 index 00000000..9e16c0c8 --- /dev/null +++ b/types/codegen/scripts/post-typescript.js @@ -0,0 +1,123 @@ +#!/usr/bin/env node + +const fs = require('fs') +const path = require('path') + +// Post-generation script for TypeScript OpenAPI code generation +// Adds constants, processes import mappings, and modifies generated interfaces + +// File paths +const indexPath = path.join(__dirname, '../generated/typescript/src/models/index.ts') +const constantsPath = path.join(__dirname, 'constants.ts') +const openapiConfigPath = path.join(__dirname, '../openapitools.json') + +// Validate required files exist +if (!fs.existsSync(constantsPath)) { + console.error('Error: constants.ts file not found') + process.exit(1) +} + +if (!fs.existsSync(indexPath)) { + console.error('Error: Generated index.ts file not found') + process.exit(1) +} + +if (!fs.existsSync(openapiConfigPath)) { + console.error('Error: openapitools.json file not found') + process.exit(1) +} + +// Process import mappings from OpenAPI configuration +function processImportMappings() { + let config + try { + const configContent = fs.readFileSync(openapiConfigPath, 'utf8') + config = JSON.parse(configContent) + } catch (error) { + console.error('Error parsing openapitools.json:', error.message) + return { statements: '', totalMappings: 0, processedMappings: 0, importStatements: 0 } + } + + const generators = config['generator-cli']?.generators + const typescriptGenerator = generators?.typescript + const importMappings = typescriptGenerator?.importMappings + + const totalMappings = importMappings ? Object.keys(importMappings).length : 0 + + if (!importMappings || totalMappings === 0) { + return { statements: '', totalMappings, processedMappings: 0, importStatements: 0 } + } + + // Group imports by their source file to avoid duplicate import statements + const fileGroups = {} + Object.entries(importMappings).forEach(([importName, sourcePath]) => { + if (!fileGroups[sourcePath]) { + fileGroups[sourcePath] = [] + } + fileGroups[sourcePath].push(importName) + }) + + // Create properly formatted ES6 import statements + const importStatements = Object.entries(fileGroups).map(([filePath, imports]) => { + const sortedImports = imports.sort() + return `import { ${sortedImports.join(', ')} } from '${filePath}'` + }) + + return { + statements: importStatements.join('\n') + '\n', + totalMappings, + processedMappings: totalMappings, + importStatements: importStatements.length, + } +} + +// Read the constants file and process import mappings +const constants = fs.readFileSync(constantsPath, 'utf8') +const importResult = processImportMappings() + +// Read the generated index.ts file +let indexContent = fs.readFileSync(indexPath, 'utf8') + +// Find the position after existing imports +const importEndPos = indexContent.lastIndexOf('import') +let insertPos = 0 + +if (importEndPos !== -1) { + insertPos = indexContent.indexOf('\n', importEndPos) + 1 +} + +// Insert import statements and constants after existing imports +const contentToInsert = importResult.statements + (importResult.statements ? '\n' : '') + constants + '\n' +const newContent = indexContent.substring(0, insertPos) + '\n' + contentToInsert + indexContent.substring(insertPos) + +// Modify PartialResultParams interface visibility +const originalContent = newContent +let modifiedContent = newContent.replace( + /export\s+interface\s+PartialResultParams\s*\{/g, + 'interface PartialResultParams {' +) + +// Write the updated content back to the file +fs.writeFileSync(indexPath, modifiedContent) + +// Log import mapping results +if (importResult.totalMappings === 0) { + console.log('Import mappings: 0 mappings found in openapitools.json') +} else { + console.log( + `Import mappings: processed ${importResult.processedMappings}/${importResult.totalMappings} mappings into ${importResult.importStatements} import statements` + ) + + // Warning if numbers don't match + if (importResult.processedMappings !== importResult.totalMappings) { + console.warn( + `Warning: Only ${importResult.processedMappings} out of ${importResult.totalMappings} import mappings were processed` + ) + } +} + +console.log('Constants added to generated index.ts file') + +if (originalContent !== modifiedContent) { + console.log('PartialResultParams interface modified') +} diff --git a/types/codegen/scripts/pre-all.js b/types/codegen/scripts/pre-all.js new file mode 100644 index 00000000..49f40f1f --- /dev/null +++ b/types/codegen/scripts/pre-all.js @@ -0,0 +1,209 @@ +#!/usr/bin/env node + +const fs = require('fs') +const path = require('path') + +// Pre-generation script for all generators +// Combines all schema files in the schema directory and creates final-output.json with OpenAPI wrapper + +const schemaDir = path.join(__dirname, '../schema') +const finalOutputPath = path.join(__dirname, '../schema/final-output.json') +const openapiConfigPath = path.join(__dirname, '../openapitools.json') + +// Validate required directories and files exist +if (!fs.existsSync(schemaDir)) { + console.error('Error: schema directory not found') + process.exit(1) +} + +if (!fs.existsSync(openapiConfigPath)) { + console.error('Error: openapitools.json file not found') + process.exit(1) +} + +// get version from openapitools.json +function getVersionFromConfig() { + try { + const configContent = fs.readFileSync(openapiConfigPath, 'utf8') + const config = JSON.parse(configContent) + + const typescriptGenerator = config['generator-cli']?.generators?.typescript + const npmVersion = typescriptGenerator?.additionalProperties?.npmVersion + + if (!npmVersion) { + console.warn('Warning: npmVersion not found in typescript generator config, using default "0.0.1"') + return '0.0.1' + } + + return npmVersion + } catch (error) { + console.error('Error reading openapitools.json:', error.message) + console.warn('Using default version "0.0.1"') + return '0.0.1' + } +} + +// get the version dynamically +const version = getVersionFromConfig() + +// prepend new file with OpenAPI header structure +const openApiHeader = { + openapi: '3.0.0', + info: { + title: 'Chat Types', + version: version, + description: 'Chat Types Definitions for FLARE', + }, + paths: {}, + components: { + schemas: { + // this will be populated with the actual schemas + }, + }, +} + +// Process all JSON files in the schema directory +function processSchemaFiles() { + const allSchemas = {} + const processedFiles = [] + const skippedFiles = [] + const errors = [] + + try { + const files = fs.readdirSync(schemaDir) + + // Filter for JSON files, excluding final-output.json + const jsonFiles = files.filter(file => file.endsWith('.json') && file !== 'final-output.json') + + if (jsonFiles.length === 0) { + console.error('Error: No JSON schema files found in schema directory') + process.exit(1) + } + + // Process each JSON file + for (const file of jsonFiles) { + const filePath = path.join(schemaDir, file) + + try { + const fileContent = fs.readFileSync(filePath, 'utf8') + + // Validate file is not empty + if (!fileContent.trim()) { + console.warn(`Warning: Skipping empty file ${file}`) + skippedFiles.push({ file, reason: 'empty file' }) + continue + } + + const parsedContent = JSON.parse(fileContent) + + // Extract schemas from the file + let fileSchemas + if (parsedContent.components?.schemas) { + // If it has OpenAPI wrapper, extract the schemas + fileSchemas = parsedContent.components.schemas + } else if (parsedContent && typeof parsedContent === 'object') { + // If it's raw schemas, use content directly + fileSchemas = parsedContent + } else { + console.warn(`Warning: Skipping ${file} - no valid schema structure found`) + skippedFiles.push({ file, reason: 'no valid schema structure' }) + continue + } + + // Validate that we have actual schemas + if (!fileSchemas || typeof fileSchemas !== 'object' || Object.keys(fileSchemas).length === 0) { + console.warn(`Warning: Skipping ${file} - no schemas found`) + skippedFiles.push({ file, reason: 'no schemas found' }) + continue + } + + // Merge schemas into the combined object with conflict detection + const fileSchemaKeys = Object.keys(fileSchemas) + const conflicts = [] + + // Check for naming conflicts + for (const schemaName of fileSchemaKeys) { + if (allSchemas[schemaName]) { + conflicts.push(schemaName) + } + } + + if (conflicts.length > 0) { + console.warn( + `Warning: Schema name conflicts in ${file}: ${conflicts.join(', ')} (will overwrite previous definitions)` + ) + } + + // Merge the schemas + Object.assign(allSchemas, fileSchemas) + processedFiles.push(file) + console.log(`Processed ${fileSchemaKeys.length} schemas from ${file}`) + } catch (error) { + // Handle different types of errors more gracefully + if (error instanceof SyntaxError) { + errors.push({ file, error: 'Invalid JSON', details: error.message }) + } else if (error.code === 'ENOENT') { + errors.push({ file, error: 'File not found', details: error.message }) + } else if (error.code === 'EACCES') { + errors.push({ file, error: 'Permission denied', details: error.message }) + } else { + errors.push({ file, error: 'Processing error', details: error.message }) + } + + // Continue processing other files instead of exiting + skippedFiles.push({ file, reason: `error: ${error.message}` }) + } + } + + // Summary of processing results + if (skippedFiles.length > 0) { + console.warn(`\nSkipped ${skippedFiles.length} files:`) + skippedFiles.forEach(({ file, reason }) => { + console.warn(` - ${file}: ${reason}`) + }) + } + + if (errors.length > 0) { + console.error(`\nEncountered ${errors.length} errors during processing:`) + errors.forEach(({ file, error, details }) => { + console.error(` - ${file}: ${error} (${details})`) + }) + } + + return { schemas: allSchemas, files: processedFiles, skipped: skippedFiles.length, errors: errors.length } + } catch (error) { + console.error('Error reading schema directory:', error.message) + process.exit(1) + } +} + +// Process all schema files +const { schemas, files, skipped, errors } = processSchemaFiles() + +if (!schemas || Object.keys(schemas).length === 0) { + console.error('Error: No schemas found in any files') + process.exit(1) +} + +// create the final output with header + schemas + footer +const finalOutput = { + ...openApiHeader, + components: { + schemas: schemas, + }, +} + +// write full OpenAPI spec to final-output.json +try { + fs.writeFileSync(finalOutputPath, JSON.stringify(finalOutput, null, 4)) + + console.log(`\nComplete OpenAPI structure created in final-output.json (version: ${version})`) + console.log(`Combined ${Object.keys(schemas).length} total schemas from ${files.length} files: ${files.join(', ')}`) + + if (skipped > 0 || errors > 0) { + console.log(`Processing summary: ${files.length} successful, ${skipped} skipped, ${errors} errors`) + } +} catch (error) { + console.error('Error writing final-output.json:', error.message) + process.exit(1) +} From 0c0c6f44eecb99f6664a4d3d304ad102be1e5be6 Mon Sep 17 00:00:00 2001 From: Conor Stewart Date: Thu, 14 Aug 2025 08:56:27 -0700 Subject: [PATCH 15/38] fix: refactor package.json --- chat-client-ui-types/package.json | 2 +- package-lock.json | 29 +++++++++-------------------- package.json | 2 +- runtimes/package.json | 2 +- 4 files changed, 12 insertions(+), 23 deletions(-) diff --git a/chat-client-ui-types/package.json b/chat-client-ui-types/package.json index 0cc34855..4096ff5c 100644 --- a/chat-client-ui-types/package.json +++ b/chat-client-ui-types/package.json @@ -19,6 +19,6 @@ "license": "Apache-2.0", "dependencies": { "@aws/language-server-runtimes-types": "^0.1.56", - "@local/language-server-runtimes-generated-types": "file:/Users/conorstw/Desktop/language-server-runtimes/types/codegen/generated" + "@local/language-server-runtimes-generated-types": "file:../types/codegen/generated/typescript" } } diff --git a/package-lock.json b/package-lock.json index 84e2f63a..e75de15a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "Apache-2.0", "workspaces": [ "types", - "types/codegen/generated", + "types/codegen/generated/typescript", "runtimes", "chat-client-ui-types" ], @@ -37,22 +37,15 @@ "npm": ">=7.0.0 <11.0.0" } }, - "../../../Desktop/language-server-runtimes/types/codegen/generated/typescript": { - "extraneous": true - }, "chat-client-ui-types": { "name": "@aws/chat-client-ui-types", "version": "0.1.62", "license": "Apache-2.0", "dependencies": { "@aws/language-server-runtimes-types": "^0.1.56", - "@local/language-server-runtimes-generated-types": "file:/Users/conorstw/Desktop/language-server-runtimes/types/codegen/generated" + "@local/language-server-runtimes-generated-types": "file:../types/codegen/generated/typescript" } }, - "chat-client-ui-types/node_modules/@local/language-server-runtimes-generated-types": { - "resolved": "types/codegen/generated/typescript", - "link": true - }, "node_modules/@apidevtools/json-schema-ref-parser": { "version": "11.9.3", "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.9.3.tgz", @@ -79,10 +72,6 @@ "resolved": "runtimes", "link": true }, - "node_modules/@aws/language-server-runtimes-generated-types": { - "resolved": "types/codegen/generated", - "link": true - }, "node_modules/@aws/language-server-runtimes-types": { "resolved": "types", "link": true @@ -563,6 +552,10 @@ "dev": true, "license": "MIT" }, + "node_modules/@local/language-server-runtimes-generated-types": { + "resolved": "types/codegen/generated/typescript", + "link": true + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -4700,8 +4693,8 @@ "version": "0.2.125", "license": "Apache-2.0", "dependencies": { - "@aws/language-server-runtimes-types": "^0.1.55", - "@local/language-server-runtimes-generated-types": "file:/Users/conorstw/Desktop/language-server-runtimes/types/codegen/generated/typescript", + "@aws/language-server-runtimes-types": "^0.1.56", + "@local/language-server-runtimes-generated-types": "file:../types/codegen/generated/typescript", "@opentelemetry/api": "^1.9.0", "@opentelemetry/api-logs": "^0.200.0", "@opentelemetry/core": "^2.0.0", @@ -4744,10 +4737,6 @@ "node": ">=18.0.0" } }, - "runtimes/node_modules/@local/language-server-runtimes-generated-types": { - "resolved": "types/codegen/generated/typescript", - "link": true - }, "runtimes/node_modules/jose": { "version": "5.10.0", "resolved": "https://registry.npmjs.org/jose/-/jose-5.10.0.tgz", @@ -4766,7 +4755,7 @@ "vscode-languageserver-types": "^3.17.5" } }, - "types/codegen/generated": { + "types/codegen/generated/typescript": { "name": "@local/language-server-runtimes-generated-types", "version": "0.0.1", "devDependencies": { diff --git a/package.json b/package.json index f3a6536d..a9ed2ca0 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ ], "workspaces": [ "types", - "types/codegen/generated", + "types/codegen/generated/typescript", "runtimes", "chat-client-ui-types" ], diff --git a/runtimes/package.json b/runtimes/package.json index fb7ab08c..026391db 100644 --- a/runtimes/package.json +++ b/runtimes/package.json @@ -31,7 +31,7 @@ }, "dependencies": { "@aws/language-server-runtimes-types": "^0.1.56", - "@local/language-server-runtimes-generated-types": "file:/Users/conorstw/Desktop/language-server-runtimes/types/codegen/generated", + "@local/language-server-runtimes-generated-types": "file:../types/codegen/generated/typescript", "@opentelemetry/api": "^1.9.0", "@opentelemetry/api-logs": "^0.200.0", "@opentelemetry/core": "^2.0.0", From 9f8907dec49232fa759f3dc4253c927e52f8500f Mon Sep 17 00:00:00 2001 From: Conor Stewart Date: Thu, 14 Aug 2025 10:27:50 -0700 Subject: [PATCH 16/38] test: test to ensure all models are present in output --- types/codegen/package-lock.json | 2536 ---------------------------- types/codegen/package.json | 9 +- types/codegen/scripts/post-test.js | 272 +++ 3 files changed, 278 insertions(+), 2539 deletions(-) delete mode 100644 types/codegen/package-lock.json create mode 100755 types/codegen/scripts/post-test.js diff --git a/types/codegen/package-lock.json b/types/codegen/package-lock.json deleted file mode 100644 index b82c567f..00000000 --- a/types/codegen/package-lock.json +++ /dev/null @@ -1,2536 +0,0 @@ -{ - "name": "chat-types-generator", - "version": "0.0.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "chat-types-generator", - "version": "0.0.1", - "devDependencies": { - "@openapitools/openapi-generator-cli": "^2.21.4", - "@types/node": "^24.0.4", - "ts-node": "^10.9.2", - "typescript": "^5.8.3" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@lukeed/csprng": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", - "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@nestjs/axios": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@nestjs/axios/-/axios-4.0.1.tgz", - "integrity": "sha512-68pFJgu+/AZbWkGu65Z3r55bTsCPlgyKaV4BSG8yUAD72q1PPuyVRgUwFv6BxdnibTUHlyxm06FmYWNC+bjN7A==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@nestjs/common": "^10.0.0 || ^11.0.0", - "axios": "^1.3.1", - "rxjs": "^7.0.0" - } - }, - "node_modules/@nestjs/common": { - "version": "11.1.5", - "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-11.1.5.tgz", - "integrity": "sha512-DQpWdr3ShO0BHWkHl3I4W/jR6R3pDtxyBlmrpTuZF+PXxQyBXNvsUne0Wyo6QHPEDi+pAz9XchBFoKbqOhcdTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "file-type": "21.0.0", - "iterare": "1.2.1", - "load-esm": "1.0.2", - "tslib": "2.8.1", - "uid": "2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "class-transformer": ">=0.4.1", - "class-validator": ">=0.13.2", - "reflect-metadata": "^0.1.12 || ^0.2.0", - "rxjs": "^7.1.0" - }, - "peerDependenciesMeta": { - "class-transformer": { - "optional": true - }, - "class-validator": { - "optional": true - } - } - }, - "node_modules/@nestjs/core": { - "version": "11.1.5", - "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-11.1.5.tgz", - "integrity": "sha512-Qr25MEY9t8VsMETy7eXQ0cNXqu0lzuFrrTr+f+1G57ABCtV5Pogm7n9bF71OU2bnkDD32Bi4hQLeFR90cku3Tw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@nuxt/opencollective": "0.4.1", - "fast-safe-stringify": "2.1.1", - "iterare": "1.2.1", - "path-to-regexp": "8.2.0", - "tslib": "2.8.1", - "uid": "2.0.2" - }, - "engines": { - "node": ">= 20" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "@nestjs/common": "^11.0.0", - "@nestjs/microservices": "^11.0.0", - "@nestjs/platform-express": "^11.0.0", - "@nestjs/websockets": "^11.0.0", - "reflect-metadata": "^0.1.12 || ^0.2.0", - "rxjs": "^7.1.0" - }, - "peerDependenciesMeta": { - "@nestjs/microservices": { - "optional": true - }, - "@nestjs/platform-express": { - "optional": true - }, - "@nestjs/websockets": { - "optional": true - } - } - }, - "node_modules/@nuxt/opencollective": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@nuxt/opencollective/-/opencollective-0.4.1.tgz", - "integrity": "sha512-GXD3wy50qYbxCJ652bDrDzgMr3NFEkIS374+IgFQKkCvk9yiYcLvX2XDYr7UyQxf4wK0e+yqDYRubZ0DtOxnmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "consola": "^3.2.3" - }, - "bin": { - "opencollective": "bin/opencollective.js" - }, - "engines": { - "node": "^14.18.0 || >=16.10.0", - "npm": ">=5.10.0" - } - }, - "node_modules/@nuxtjs/opencollective": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz", - "integrity": "sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "consola": "^2.15.0", - "node-fetch": "^2.6.1" - }, - "bin": { - "opencollective": "bin/opencollective.js" - }, - "engines": { - "node": ">=8.0.0", - "npm": ">=5.0.0" - } - }, - "node_modules/@nuxtjs/opencollective/node_modules/consola": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@openapitools/openapi-generator-cli": { - "version": "2.21.4", - "resolved": "https://registry.npmjs.org/@openapitools/openapi-generator-cli/-/openapi-generator-cli-2.21.4.tgz", - "integrity": "sha512-s2OBgiNml0DL0ebkvAMQxZi7c8SUQMHssTUJwWsFDv4kVtBVDV4UzsCh9gQEXlNjuEcEgZoa5BIOai2sT0sE8g==", - "dev": true, - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "@nestjs/axios": "4.0.1", - "@nestjs/common": "11.1.5", - "@nestjs/core": "11.1.5", - "@nuxtjs/opencollective": "0.3.2", - "axios": "1.11.0", - "chalk": "4.1.2", - "commander": "8.3.0", - "compare-versions": "4.1.4", - "concurrently": "9.2.0", - "console.table": "0.10.0", - "fs-extra": "11.3.0", - "glob": "11.0.3", - "inquirer": "8.2.6", - "lodash": "4.17.21", - "proxy-agent": "6.5.0", - "reflect-metadata": "0.2.2", - "rxjs": "7.8.2", - "tslib": "2.8.1" - }, - "bin": { - "openapi-generator-cli": "main.js" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/openapi_generator" - } - }, - "node_modules/@tokenizer/inflate": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.2.7.tgz", - "integrity": "sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "fflate": "^0.8.2", - "token-types": "^6.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/@tokenizer/token": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tootallnate/quickjs-emscripten": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", - "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "24.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.8.0" - } - }, - "node_modules/acorn": { - "version": "8.15.0", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/ast-types": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", - "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/axios": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", - "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/basic-ftp": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", - "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true, - "license": "MIT" - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 10" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/compare-versions": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-4.1.4.tgz", - "integrity": "sha512-FemMreK9xNyL8gQevsdRMrvO4lFCkQP7qbuktn1q8ndcNk1+0mz7lgE7b/sNvbhVgY4w6tMN1FDp6aADjqw2rw==", - "dev": true, - "license": "MIT" - }, - "node_modules/concurrently": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.0.tgz", - "integrity": "sha512-IsB/fiXTupmagMW4MNp2lx2cdSN2FfZq78vF90LBB+zZHArbIQZjQtzXCiXnvTxCZSvXanTqFLWBjw2UkLx1SQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "lodash": "^4.17.21", - "rxjs": "^7.8.1", - "shell-quote": "^1.8.1", - "supports-color": "^8.1.1", - "tree-kill": "^1.2.2", - "yargs": "^17.7.2" - }, - "bin": { - "conc": "dist/bin/concurrently.js", - "concurrently": "dist/bin/concurrently.js" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" - } - }, - "node_modules/concurrently/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/consola": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", - "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.18.0 || >=16.10.0" - } - }, - "node_modules/console.table": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/console.table/-/console.table-0.10.0.tgz", - "integrity": "sha512-dPyZofqggxuvSf7WXvNjuRfnsOk1YazkVP8FdxH4tcH2c37wc79/Yl6Bhr7Lsu00KMgy2ql/qCMuNu8xctZM8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "easy-table": "1.1.0" - }, - "engines": { - "node": "> 0.10" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/data-uri-to-buffer": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", - "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/degenerator": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", - "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ast-types": "^0.13.4", - "escodegen": "^2.1.0", - "esprima": "^4.0.1" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, - "node_modules/easy-table": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.1.0.tgz", - "integrity": "sha512-oq33hWOSSnl2Hoh00tZWaIPi1ievrD9aFG82/IgjlycAnW9hHx5PkJiXpxPsgEE+H7BsbVQXFVFST8TEXS6/pA==", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "wcwidth": ">=1.0.1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "license": "MIT", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "dev": true, - "license": "MIT" - }, - "node_modules/fflate": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", - "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", - "dev": true, - "license": "MIT" - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/file-type": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-21.0.0.tgz", - "integrity": "sha512-ek5xNX2YBYlXhiUXui3D/BXa3LdqPmoLJ7rqEx2bKJ7EAUEfmXgW0Das7Dc6Nr9MvqaOnIqiPV0mZk/r/UpNAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tokenizer/inflate": "^0.2.7", - "strtok3": "^10.2.2", - "token-types": "^6.0.0", - "uint8array-extras": "^1.4.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sindresorhus/file-type?sponsor=1" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fs-extra": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", - "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-uri": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", - "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^6.0.2", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/glob": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", - "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.3.1", - "jackspeak": "^4.1.1", - "minimatch": "^10.0.3", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/inquirer": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", - "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/iterare": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", - "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=6" - } - }, - "node_modules/jackspeak": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", - "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/load-esm": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/load-esm/-/load-esm-1.0.2.tgz", - "integrity": "sha512-nVAvWk/jeyrWyXEAs84mpQCYccxRqgKY4OznLuJhJCa0XsPSfdOIr2zvBZEj3IHEHbX97jjscKRRV539bW0Gpw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - }, - { - "type": "buymeacoffee", - "url": "https://buymeacoffee.com/borewit" - } - ], - "license": "MIT", - "engines": { - "node": ">=13.2.0" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, - "license": "MIT" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", - "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", - "dev": true, - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "dev": true, - "license": "ISC" - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", - "dev": true, - "license": "ISC", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true, - "license": "ISC" - }, - "node_modules/netmask": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pac-proxy-agent": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", - "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tootallnate/quickjs-emscripten": "^0.23.0", - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "get-uri": "^6.0.1", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.6", - "pac-resolver": "^7.0.1", - "socks-proxy-agent": "^8.0.5" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/pac-resolver": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", - "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", - "dev": true, - "license": "MIT", - "dependencies": { - "degenerator": "^5.0.0", - "netmask": "^2.0.2" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-to-regexp": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", - "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - } - }, - "node_modules/proxy-agent": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", - "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "http-proxy-agent": "^7.0.1", - "https-proxy-agent": "^7.0.6", - "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.1.0", - "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.5" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/proxy-agent/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true, - "license": "MIT" - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/reflect-metadata": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", - "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/restore-cursor/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/rxjs": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "license": "MIT" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", - "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks": { - "version": "2.8.6", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.6.tgz", - "integrity": "sha512-pe4Y2yzru68lXCb38aAqRf5gvN8YdjP1lok5o0J7BOHljkyCGKVz7H3vpVIXKD27rj2giOJ7DwVyk/GWrPHDWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", - "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "socks": "^2.8.3" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strtok3": { - "version": "10.3.4", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.4.tgz", - "integrity": "sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tokenizer/token": "^0.3.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/token-types": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.0.4.tgz", - "integrity": "sha512-MD9MjpVNhVyH4fyd5rKphjvt/1qj+PtQUz65aFqAZA6XniWAuSFRjLk3e2VALEFlh9OwBpXUN7rfeqSnT/Fmkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tokenizer/token": "^0.3.0", - "ieee754": "^1.2.1" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true, - "license": "MIT" - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "license": "MIT", - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/ts-node": { - "version": "10.9.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "5.8.3", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/uid": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz", - "integrity": "sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@lukeed/csprng": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/uint8array-extras": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.4.0.tgz", - "integrity": "sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/undici-types": { - "version": "7.8.0", - "dev": true, - "license": "MIT" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, - "license": "MIT" - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - } - } -} diff --git a/types/codegen/package.json b/types/codegen/package.json index 9ff4c9e5..b0aa3de2 100644 --- a/types/codegen/package.json +++ b/types/codegen/package.json @@ -2,11 +2,14 @@ "name": "chat-types-generator", "version": "0.0.1", "description": "Generate TypeScript defintiinons from JSON Schema using OpenAPI Generator", - "main": "generated/src/index.ts", + "main": "generated/typescript/src/index.ts", "scripts": { "generate-schema": "node scripts/pre-all.js", - "generate": "npm run generate-schema && openapi-generator-cli generate && node scripts/post-typescript.js", - "generate:no-post": "openapi-generator-cli generate" + "generate": "npm run generate-schema && openapi-generator-cli generate && node scripts/post-typescript.js && npm run test", + "generate:no-post": "npm run generate-schema && openapi-generator-cli generate", + "test": "node scripts/post-test.js", + "test:verbose": "node scripts/post-test.js --verbose", + "validate": "npm run test" }, "devDependencies": { "@openapitools/openapi-generator-cli": "^2.21.4", diff --git a/types/codegen/scripts/post-test.js b/types/codegen/scripts/post-test.js new file mode 100755 index 00000000..eaf43ba4 --- /dev/null +++ b/types/codegen/scripts/post-test.js @@ -0,0 +1,272 @@ +#!/usr/bin/env node + +const fs = require('fs') +const path = require('path') + +// Post-test script to validate generated models against schema definitions +// Compares models in final-output.json with generated TypeScript and Java models +// Usage: node post-test.js [--verbose] + +// Parse command line arguments +const args = process.argv.slice(2) +const verbose = args.includes('--verbose') || args.includes('-v') + +// File paths +const finalOutputPath = path.join(__dirname, '../schema/final-output.json') +const typescriptModelsPath = path.join(__dirname, '../generated/typescript/src/models/index.ts') +const javaModelsDir = path.join(__dirname, '../generated/java/src/main/java/org/openapitools/client/model') +const openapiConfigPath = path.join(__dirname, '../openapitools.json') + +console.log('Starting model validation...\n') + +// Check if final-output.json exists +if (!fs.existsSync(finalOutputPath)) { + console.error('Error: final-output.json not found in schema directory') + console.error(' Run "npm run generate-schema" first to create the schema file') + process.exit(1) +} + +// Load and parse OpenAPI configuration +let openapiConfig = null +let typescriptFilteredModels = null +let javaFilteredModels = null + +try { + openapiConfig = JSON.parse(fs.readFileSync(openapiConfigPath, 'utf8')) + + // Check for TypeScript global-property models filter + const tsGenerator = openapiConfig['generator-cli']?.generators?.typescript + if (tsGenerator?.['global-property']?.models) { + typescriptFilteredModels = new Set(tsGenerator['global-property'].models.split(':')) + } + + // Check for Java global-property models filter + const javaGenerator = openapiConfig['generator-cli']?.generators?.java + if (javaGenerator?.['global-property']?.models) { + javaFilteredModels = new Set(javaGenerator['global-property'].models.split(':')) + } +} catch (error) { + console.warn('Warning: Could not read OpenAPI configuration:', error.message) +} + +// Load and parse final-output.json +let schemaModels = new Set() +try { + const finalOutput = JSON.parse(fs.readFileSync(finalOutputPath, 'utf8')) + + if (!finalOutput.components || !finalOutput.components.schemas) { + console.error('Error: Invalid OpenAPI structure in final-output.json') + console.error(' Missing components.schemas section') + process.exit(1) + } + + schemaModels = new Set(Object.keys(finalOutput.components.schemas)) + console.log(`Found ${schemaModels.size} models in schema\n`) +} catch (error) { + console.error('Error parsing final-output.json:', error.message) + process.exit(1) +} + +// Extract TypeScript models +let typescriptModels = new Set() +if (fs.existsSync(typescriptModelsPath)) { + try { + const typescriptContent = fs.readFileSync(typescriptModelsPath, 'utf8') + + // Match interface and type declarations + const interfaceMatches = typescriptContent.match(/(?:export\s+)?(?:interface|type)\s+(\w+)/g) || [] + const enumMatches = typescriptContent.match(/export\s+(?:const\s+)?(\w+)\s*=\s*{[^}]*}\s*as\s+const/g) || [] + + interfaceMatches.forEach(match => { + const modelName = match.replace(/(?:export\s+)?(?:interface|type)\s+/, '') + typescriptModels.add(modelName) + }) + + enumMatches.forEach(match => { + const modelName = match.match(/export\s+(?:const\s+)?(\w+)/)[1] + typescriptModels.add(modelName) + }) + + if (typescriptFilteredModels) { + console.log(`TypeScript generator has model filter: ${typescriptFilteredModels.size} models`) + } + console.log(`Found ${typescriptModels.size} TypeScript models\n`) + } catch (error) { + console.error('Warning: Error reading TypeScript models:', error.message) + } +} else { + console.warn('Warning: TypeScript models file not found at:', typescriptModelsPath) +} + +// Extract Java models +let javaModels = new Set() +if (fs.existsSync(javaModelsDir)) { + try { + const javaFiles = fs.readdirSync(javaModelsDir).filter(file => file.endsWith('.java')) + + javaFiles.forEach(file => { + const modelName = file.replace('.java', '') + javaModels.add(modelName) + }) + + if (javaFilteredModels) { + console.log(`Java generator has model filter: ${javaFilteredModels.size} models`) + } + console.log(`Found ${javaModels.size} Java models\n`) + } catch (error) { + console.error('Warning: Error reading Java models:', error.message) + } +} else { + console.warn('Warning: Java models directory not found at:', javaModelsDir) +} + +// Validation results +let hasErrors = false +const results = { + typescript: { + missing: [], + extra: [], + }, + java: { + missing: [], + extra: [], + }, +} + +// Check TypeScript models +if (typescriptModels.size > 0) { + // Determine expected models based on configuration + const expectedTypescriptModels = typescriptFilteredModels || schemaModels + + // Find missing models (expected but not in TypeScript) + expectedTypescriptModels.forEach(model => { + if (!typescriptModels.has(model)) { + results.typescript.missing.push(model) + } + }) + + // Find extra models (in TypeScript but not expected) + typescriptModels.forEach(model => { + if (!expectedTypescriptModels.has(model)) { + results.typescript.extra.push(model) + } + }) +} + +// Check Java models +if (javaModels.size > 0) { + // Determine expected models based on configuration + const expectedJavaModels = javaFilteredModels || schemaModels + + // Find missing models (expected but not in Java) + expectedJavaModels.forEach(model => { + if (!javaModels.has(model)) { + results.java.missing.push(model) + } + }) + + // Find extra models (in Java but not expected) + javaModels.forEach(model => { + if (!expectedJavaModels.has(model)) { + results.java.extra.push(model) + } + }) +} + +// Report results +console.log('VALIDATION RESULTS') +console.log('='.repeat(50)) + +// TypeScript results +if (typescriptModels.size > 0) { + console.log('\nTypeScript Models:') + if (typescriptFilteredModels) { + console.log(` Note: Only ${typescriptFilteredModels.size} models expected (global-property filter active)`) + } + + if (results.typescript.missing.length === 0 && results.typescript.extra.length === 0) { + console.log(' All models match perfectly!') + } else { + if (results.typescript.missing.length > 0) { + console.log(` Missing models (${results.typescript.missing.length}):`) + results.typescript.missing.sort().forEach(model => { + console.log(` - ${model}`) + }) + hasErrors = true + } + + if (verbose && results.typescript.extra.length > 0) { + console.log(` Extra/Intermediate models (${results.typescript.extra.length}):`) + results.typescript.extra.sort().forEach(model => { + console.log(` + ${model}`) + }) + } + } +} else { + console.log('\nTypeScript Models: Not found or not generated') +} + +// Java results +if (javaModels.size > 0) { + console.log('\nJava Models:') + if (javaFilteredModels) { + console.log(` Note: Only ${javaFilteredModels.size} models expected (global-property filter active)`) + } + + if (results.java.missing.length === 0 && results.java.extra.length === 0) { + console.log(' All models match perfectly!') + } else { + if (results.java.missing.length > 0) { + console.log(` Missing models (${results.java.missing.length}):`) + results.java.missing.sort().forEach(model => { + console.log(` - ${model}`) + }) + hasErrors = true + } + + if (verbose && results.java.extra.length > 0) { + console.log(` Extra/Intermediate models (${results.java.extra.length}):`) + results.java.extra.sort().forEach(model => { + console.log(` + ${model}`) + }) + } + } +} else { + console.log('\nJava Models: Not found or not generated') +} + +// Summary +console.log('\nSUMMARY') +console.log('='.repeat(50)) +console.log(`Schema models: ${schemaModels.size}`) +console.log(`TypeScript models: ${typescriptModels.size}`) +console.log(`Java models: ${javaModels.size}`) + +const totalMissing = results.typescript.missing.length + results.java.missing.length +const totalExtra = results.typescript.extra.length + results.java.extra.length + +if (totalMissing === 0 && totalExtra === 0 && typescriptModels.size > 0 && javaModels.size > 0) { + console.log('\nSUCCESS: All models are properly generated!') +} else { + if (totalMissing > 0) { + console.log(`\n${totalMissing} missing model(s) found`) + } + if (totalExtra > 0) { + console.log(`\n${totalExtra} extra/intermediate model(s) found`) + } + if (typescriptModels.size === 0 || javaModels.size === 0) { + console.log('\nSome generators may not have run successfully') + } +} + +if (totalExtra > 0 && !verbose) { + console.log('\nTIP: Use --verbose flag to see extra/intermediate models') +} + +// Exit with error code if there are missing models +if (hasErrors) { + console.log('\nTIP: Add model as a constant to the post processing script if type alias or an empty model') + process.exit(1) +} + +process.exit(0) From 64697eb831bc77aea946c04ba9030456975f9635 Mon Sep 17 00:00:00 2001 From: Conor Stewart Date: Thu, 14 Aug 2025 10:46:05 -0700 Subject: [PATCH 17/38] refactor: change output schema name --- types/codegen/openapitools.json | 4 ++-- types/codegen/package.json | 2 +- ...pre-all.js => generate-complete-schema.js} | 20 ++++++++--------- types/codegen/scripts/post-test.js | 22 +++++++++---------- 4 files changed, 24 insertions(+), 24 deletions(-) rename types/codegen/scripts/{pre-all.js => generate-complete-schema.js} (91%) diff --git a/types/codegen/openapitools.json b/types/codegen/openapitools.json index 51b2cbec..bde71726 100644 --- a/types/codegen/openapitools.json +++ b/types/codegen/openapitools.json @@ -8,7 +8,7 @@ "generatorName": "typescript-fetch", "disabled": false, "output": "#{cwd}/generated/typescript", - "inputSpec": "#{cwd}/schema/final-output.json", + "inputSpec": "#{cwd}/schema/complete-schema.json", "templateDir": "#{cwd}/custom-templates/typescript", "additionalProperties": { "supportsES6": true, @@ -41,7 +41,7 @@ "generatorName": "java", "disabled": false, "output": "#{cwd}/generated/java", - "inputSpec": "#{cwd}/schema/final-output.json", + "inputSpec": "#{cwd}/schema/complete-schema.json", "templateDir": "#{cwd}/custom-templates/java", "additionalProperties": { "useOneOfInterfaces": true, diff --git a/types/codegen/package.json b/types/codegen/package.json index b0aa3de2..2da9d98a 100644 --- a/types/codegen/package.json +++ b/types/codegen/package.json @@ -4,7 +4,7 @@ "description": "Generate TypeScript defintiinons from JSON Schema using OpenAPI Generator", "main": "generated/typescript/src/index.ts", "scripts": { - "generate-schema": "node scripts/pre-all.js", + "generate-schema": "node scripts/generate-complete-schema.js", "generate": "npm run generate-schema && openapi-generator-cli generate && node scripts/post-typescript.js && npm run test", "generate:no-post": "npm run generate-schema && openapi-generator-cli generate", "test": "node scripts/post-test.js", diff --git a/types/codegen/scripts/pre-all.js b/types/codegen/scripts/generate-complete-schema.js similarity index 91% rename from types/codegen/scripts/pre-all.js rename to types/codegen/scripts/generate-complete-schema.js index 49f40f1f..0f91cd80 100644 --- a/types/codegen/scripts/pre-all.js +++ b/types/codegen/scripts/generate-complete-schema.js @@ -4,10 +4,10 @@ const fs = require('fs') const path = require('path') // Pre-generation script for all generators -// Combines all schema files in the schema directory and creates final-output.json with OpenAPI wrapper +// Combines all schema files in the schema directory and creates complete-schema.json with OpenAPI wrapper const schemaDir = path.join(__dirname, '../schema') -const finalOutputPath = path.join(__dirname, '../schema/final-output.json') +const completeSchemaPath = path.join(__dirname, '../schema/complete-schema.json') const openapiConfigPath = path.join(__dirname, '../openapitools.json') // Validate required directories and files exist @@ -72,8 +72,8 @@ function processSchemaFiles() { try { const files = fs.readdirSync(schemaDir) - // Filter for JSON files, excluding final-output.json - const jsonFiles = files.filter(file => file.endsWith('.json') && file !== 'final-output.json') + // Filter for JSON files, excluding complete-schema.json + const jsonFiles = files.filter(file => file.endsWith('.json') && file !== 'complete-schema.json') if (jsonFiles.length === 0) { console.error('Error: No JSON schema files found in schema directory') @@ -185,25 +185,25 @@ if (!schemas || Object.keys(schemas).length === 0) { process.exit(1) } -// create the final output with header + schemas + footer -const finalOutput = { +// create the complete schema with header + schemas + footer +const completeSchema = { ...openApiHeader, components: { schemas: schemas, }, } -// write full OpenAPI spec to final-output.json +// write full OpenAPI spec to complete-schema.json try { - fs.writeFileSync(finalOutputPath, JSON.stringify(finalOutput, null, 4)) + fs.writeFileSync(completeSchemaPath, JSON.stringify(completeSchema, null, 4)) - console.log(`\nComplete OpenAPI structure created in final-output.json (version: ${version})`) + console.log(`\nComplete OpenAPI structure created in complete-schema.json (version: ${version})`) console.log(`Combined ${Object.keys(schemas).length} total schemas from ${files.length} files: ${files.join(', ')}`) if (skipped > 0 || errors > 0) { console.log(`Processing summary: ${files.length} successful, ${skipped} skipped, ${errors} errors`) } } catch (error) { - console.error('Error writing final-output.json:', error.message) + console.error('Error writing complete-schema.json:', error.message) process.exit(1) } diff --git a/types/codegen/scripts/post-test.js b/types/codegen/scripts/post-test.js index eaf43ba4..f0e8d7ad 100755 --- a/types/codegen/scripts/post-test.js +++ b/types/codegen/scripts/post-test.js @@ -4,7 +4,7 @@ const fs = require('fs') const path = require('path') // Post-test script to validate generated models against schema definitions -// Compares models in final-output.json with generated TypeScript and Java models +// Compares models in complete-schema.json with generated TypeScript and Java models // Usage: node post-test.js [--verbose] // Parse command line arguments @@ -12,16 +12,16 @@ const args = process.argv.slice(2) const verbose = args.includes('--verbose') || args.includes('-v') // File paths -const finalOutputPath = path.join(__dirname, '../schema/final-output.json') +const completeSchemaPath = path.join(__dirname, '../schema/complete-schema.json') const typescriptModelsPath = path.join(__dirname, '../generated/typescript/src/models/index.ts') const javaModelsDir = path.join(__dirname, '../generated/java/src/main/java/org/openapitools/client/model') const openapiConfigPath = path.join(__dirname, '../openapitools.json') console.log('Starting model validation...\n') -// Check if final-output.json exists -if (!fs.existsSync(finalOutputPath)) { - console.error('Error: final-output.json not found in schema directory') +// Check if complete-schema.json exists +if (!fs.existsSync(completeSchemaPath)) { + console.error('Error: complete-schema.json not found in schema directory') console.error(' Run "npm run generate-schema" first to create the schema file') process.exit(1) } @@ -49,21 +49,21 @@ try { console.warn('Warning: Could not read OpenAPI configuration:', error.message) } -// Load and parse final-output.json +// Load and parse complete-schema.json let schemaModels = new Set() try { - const finalOutput = JSON.parse(fs.readFileSync(finalOutputPath, 'utf8')) + const completeSchema = JSON.parse(fs.readFileSync(completeSchemaPath, 'utf8')) - if (!finalOutput.components || !finalOutput.components.schemas) { - console.error('Error: Invalid OpenAPI structure in final-output.json') + if (!completeSchema.components || !completeSchema.components.schemas) { + console.error('Error: Invalid OpenAPI structure in complete-schema.json') console.error(' Missing components.schemas section') process.exit(1) } - schemaModels = new Set(Object.keys(finalOutput.components.schemas)) + schemaModels = new Set(Object.keys(completeSchema.components.schemas)) console.log(`Found ${schemaModels.size} models in schema\n`) } catch (error) { - console.error('Error parsing final-output.json:', error.message) + console.error('Error parsing complete-schema.json:', error.message) process.exit(1) } From 8133639308b259dbf46fb00b3cd8e91dbe99e352 Mon Sep 17 00:00:00 2001 From: Conor Stewart Date: Thu, 14 Aug 2025 11:21:51 -0700 Subject: [PATCH 18/38] fix: updated README --- types/codegen/README.md | 228 +++++++++++++++++++++++++++++++++------- 1 file changed, 191 insertions(+), 37 deletions(-) diff --git a/types/codegen/README.md b/types/codegen/README.md index 11acfe42..2850209d 100644 --- a/types/codegen/README.md +++ b/types/codegen/README.md @@ -1,51 +1,205 @@ -# Code Generation +# OpenAPI Code Generation -This directory contains OpenAPI code generation configuration and post-processing scripts for language server runtime types. +This directory contains scripts and configuration for generating TypeScript and Java types from OpenAPI schema definitions using OpenAPI Generator CLI. -## Structure +## Overview -- `schema/` - OpenAPI schema definitions -- `custom-templates/` - Custom Mustache templates for code generation sorted by langauage -- `generated/` - Generated output directory where TypeScript and Java types will be located post generation -- `post-generate.js` - Post-processing script -- `openapitools.json` - OpenAPI Generator configuration +The code generation process combines multiple schema files into a complete OpenAPI specification and generates both TypeScript and Java types with custom templates, import mappings, and validation. + +**Running `npm run generate` will automatically generate:** +- **TypeScript types** in `generated/typescript/` - Complete type definitions and runtime client +- **Java model classes** in `generated/java/` - Filtered model classes for specific use cases + +## Directory Structure + +``` +types/codegen/ +├── schema/ # Schema definition files +│ ├── chatTypes.json # Main schema definitions +│ └── complete-schema.json # Generated complete OpenAPI spec +├── scripts/ # Generation and validation scripts +│ ├── generate-complete-schema.js # Combines all schema files +│ ├── post-typescript.js # TypeScript post-processing +│ ├── post-test.js # Model validation script +│ ├── pre-typescript.js # TypeScript pre-processing +│ └── constants.ts # Constants to inject +├── custom-templates/ # Custom Mustache templates +│ ├── typescript/ # TypeScript-specific templates +│ └── java/ # Java-specific templates +├── generated/ # Generated output files +│ ├── typescript/ # TypeScript types +│ └── java/ # Java model classes +├── tests/ # Test schemas and validation +└── openapitools.json # Generator configuration +``` + +## Process Flow + +### 1. Schema Generation (`generate-complete-schema.js`) +- Scans all JSON files in the `schema/` directory +- Combines schemas from multiple files into a single collection +- Creates `complete-schema.json` with complete OpenAPI 3.0.0 structure: + - Dynamic version from `openapitools.json` TypeScript generator config + - Combined schemas from all source files + - Proper OpenAPI structure and formatting + - Conflict detection and warnings for duplicate schema names + +### 2. Code Generation (OpenAPI Generator CLI) +- **TypeScript Generator**: Generates complete TypeScript types and runtime + - Uses `typescript-fetch` generator with custom templates + - Generates interfaces, types, and enum unions + - Includes runtime API client code +- **Java Generator**: Generates filtered Java model classes + - Uses selective model generation via `global-property.models` + - Only generates specific models needed for Java integration + - Targets Java 21 with modern features + +### 3. Post-Processing (`post-typescript.js`) +- Processes import mappings from `openapitools.json` +- Adds external library imports (e.g., `vscode-languageserver-types`) +- Injects constants from `constants.ts` +- Modifies interface visibility (e.g., makes `PartialResultParams` internal) + +### 4. Validation (`post-test.js`) +- Validates generated models against schema definitions +- Checks for missing models (should be generated but aren't) +- Reports extra/intermediate models (generated but not in schema) +- Supports verbose mode for detailed analysis +- Respects `global-property.models` filters for accurate validation + +## Available Scripts + +```bash +# Generate complete schema from individual files +npm run generate-schema + +# Full generation pipeline (schema + generation + post-processing + validation) +npm run generate + +# Generation without post-processing +npm run generate:no-post + +# Validate generated models (errors only) +npm run test +npm run validate + +# Validate with detailed output (includes extra/intermediate models) +npm run test:verbose +``` ## Configuration -### openapitools.json +### Generator Configuration (`openapitools.json`) + +The main configuration file contains detailed settings for both TypeScript and Java generators: + +#### TypeScript Generator Settings +- **Generator**: `typescript-fetch` - Generates TypeScript types with fetch-based runtime +- **ES6 Support**: `supportsES6: true` - Modern JavaScript features +- **Property Naming**: `camelCase` for both models and enums +- **String Enums**: `stringEnums: true` - Generates union types instead of numeric enums +- **Runtime Checks**: `withoutRuntimeChecks: true` - Lighter generated code +- **Additional Properties**: `nullSafeAdditionalProps: false` - Flexible object handling +- **OpenAPI Normalizer**: `REF_AS_PARENT_IN_ALLOF: true` - Better inheritance handling + +#### Java Generator Settings +- **Generator**: `java` - Standard Java model classes +- **Java Version**: Source and target compatibility set to Java 21 +- **OneOf Interfaces**: `useOneOfInterfaces: true` - Union type handling using interfaces +- **Date Library**: `java8` - Uses modern Java time APIs +- **Validation**: Bean validation disabled for lighter models +- **Legacy Behavior**: `legacyDiscriminatorBehavior: false` - Modern discriminator handling + +### Model Filtering + +Java generator uses selective model generation via `global-property.models`: +```json +"global-property": { + "models": "IconType:ContextCommandGroup:QuickActionCommand:ContextCommand:CursorPosition:FileParams:CopyFileParams:OpenFileDiffParams:ShowOpenDialogParams:ShowSaveFileDialogParams:ShowSaveFileDialogResult" +} +``` + +This generates only the specified models, making the Java output focused on specific use cases. + +### Import Mappings + +Both generators support external type imports, but handle them differently: + +#### Java Import Mappings +```json +"importMappings": { + "Position": "org.eclipse.lsp4j.Position", + "Range": "org.eclipse.lsp4j.Range", + "TextDocumentIdentifier": "org.eclipse.lsp4j.TextDocumentIdentifier" +} +``` + +#### TypeScript Import Mappings +Handled by `post-typescript.js` for more flexible processing: +```json +"importMappings": { + "Position": "vscode-languageserver-types", + "Range": "vscode-languageserver-types", + "TextDocumentIdentifier": "vscode-languageserver-types" +} +``` + +### Type Mappings + +Custom type mappings for language-specific types: + +#### Java Type Mappings +```json +"typeMappings": { + "IconType": "String", + "Uint8Array": "byte[]" +} +``` + +#### TypeScript Type Mappings +```json +"typeMappings": { + "Date": "Date" +} +``` + +### Reserved Words -OpenAPI Generator configuration defining code generation settings for TypeScript and Java: +Handle language-specific reserved words: +```json +"reservedWordsMappings": { + "export": "export" +} +``` -**Common Configuration:** -- `generatorName` - Specifies the generator type (typescript-fetch, java) -- `disabled` - Allows selective turning off of generators during development. By default, all generators run. New languages/input specs can be added with their own customization -- `output` - Target directory for generated code -- `inputSpec` - Source OpenAPI schema file -- `templateDir` - Points to custom Mustache templates that overwrite canonical templates from [OpenAPI Generator templates](https://openapi-generator.tech/docs/templating) +## Output -**TypeScript Configuration:** -- `additionalProperties` - Language-specific options from the [typescript-fetch generator](https://openapi-generator.tech/docs/generators/typescript-fetch/). Notable settings: - - `stringEnums` - Generates string enums instead of numeric - - `withoutRuntimeChecks` - Reduces unnecessary generated code by removing runtime validation - - `supportsES6` - Enables ES6 features - - `modelPropertyNaming`/`enumPropertyNaming` - Sets camelCase naming conventions -- `global-property` - [Global properties](https://openapi-generator.tech/docs/globals) for debugging and selective model generation (alternative to .openapi-generator-ignore file) -- `openapi-normalizer` - [Normalizers](https://openapi-generator.tech/docs/customization/#openapi-normalizer) shape input before generation: - - `REF_AS_PARENT_IN_ALLOF` - Enables traditional inheritance (extends) via allOf instead of including all parent fields in child, resulting in cleaner code -- `reservedWordsMappings` - Overcomes generator renaming of reserved words. Forces `export` field to remain `export` instead of being renamed to `_export` -- `typeMappings` - Overcomes generator quirks where `Date` gets converted to `string` or `ModelDate`. Forces generator to use proper `Date` type +### TypeScript Output (`generated/typescript/`) +- Complete type definitions for all schema models +- Runtime API client with fetch-based implementation +- Proper import statements for external dependencies +- Injected constants and utilities +- NPM package ready for distribution -**Java Configuration:** TODO TODO TODO -- `additionalProperties` - Java-specific settings including Java 21 compatibility, validation options, and serialization settings -- `global-property.models` - Specifies exact models to generate (CursorPosition, FileParams, etc.) for selective generation -- `importMappings` - Maps external types to LSP4J classes for seamless integration with Language Server Protocol +### Java Output (`generated/java/`) +- Selective model classes (only specified models via filtering) +- Java 21 compatible code +- LSP4J integration for language server types +- Maven/Gradle compatible structure -## Post-Processing +## Validation Results -The `post-generate.js` script runs after OpenAPI code generation to customize the generated TypeScript types: +The validation script provides detailed reporting: +- **Schema models**: Total models defined in schema files +- **TypeScript models**: Generated models (includes intermediate models) +- **Java models**: Generated models (filtered subset based on configuration) +- **Missing models**: Models that should be generated but aren't +- **Extra models**: Intermediate models created by OpenAPI generator -- **Adds constants**: Adds protocol method constants from `constants.ts` to the generated index file. This is due to a limitation of the OpenAPI generator which ignores type alias constants in generation. -- **Modifies interfaces**: Changes `PartialResultParams` from exported to internal interface. This is because `PartialResultParams` is only used internally and causes conflicts with VS Code LSP protocol type of the same name if exported. This interface is not exported in the current `chat.ts` either. -- **Extensible**: Other post-processing steps should be added here. +## Development Workflow -This ensures the generated types integrate properly with the language server runtime while maintaining clean separation between generated and hand-written code. \ No newline at end of file +1. **Add/modify schemas** in `schema/chatTypes.json` +2. **Run generation**: `npm run generate` +3. **Review validation**: Check for missing or extra models +4. **Test integration**: Use generated types in your application +5. **Commit changes**: Only commit schema files, not generated files \ No newline at end of file From 24aa88b3201ab37f4332445bd1730a593907d148 Mon Sep 17 00:00:00 2001 From: Conor Stewart Date: Thu, 14 Aug 2025 17:22:45 -0700 Subject: [PATCH 19/38] test: added 10 unit tests for config and basic functionality --- package.json | 2 +- types/.gitignore | 5 +- types/codegen/README.md | 37 ++- types/codegen/package.json | 4 + types/codegen/tests/README.md | 104 ++++++ .../codegen/tests/unit/field-addition.test.js | 313 ++++++++++++++++++ .../tests/unit/openapi-normalizer.test.js | 155 +++++++++ types/codegen/tests/utils/test-helpers.js | 121 +++++++ types/index.ts | 6 + 9 files changed, 744 insertions(+), 3 deletions(-) create mode 100644 types/codegen/tests/README.md create mode 100644 types/codegen/tests/unit/field-addition.test.js create mode 100644 types/codegen/tests/unit/openapi-normalizer.test.js create mode 100644 types/codegen/tests/utils/test-helpers.js diff --git a/package.json b/package.json index a9ed2ca0..7de37c0b 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "preversion": "npm run test", "version": "npm run compile && git add -A .", "watch": "tsc --build --watch", - "gen-comp": "cd ./types/codegen/ && npm run generate && cd ./generated && npm run build && cd ../../../ && npm run compile" + "gen-comp": "cd ./types/codegen/ && npm run generate && cd ./generated/typescript && npm run build && cd ../../../ && npm run compile" }, "devDependencies": { "@commitlint/cli": "^19.8.1", diff --git a/types/.gitignore b/types/.gitignore index 53216207..df9e410c 100644 --- a/types/.gitignore +++ b/types/.gitignore @@ -1,3 +1,6 @@ LICENSE NOTICE -SECURITY.md \ No newline at end of file +SECURITY.md +codegen/scripts/**/* +codegen/generated/**/* +codegen/tests/fixtures/**/* \ No newline at end of file diff --git a/types/codegen/README.md b/types/codegen/README.md index 2850209d..a6d4d32e 100644 --- a/types/codegen/README.md +++ b/types/codegen/README.md @@ -196,10 +196,45 @@ The validation script provides detailed reporting: - **Missing models**: Models that should be generated but aren't - **Extra models**: Intermediate models created by OpenAPI generator +## Testing + +The `tests/` directory contains comprehensive tests for the OpenAPI code generation pipeline. These tests validate that your `openapitools.json` configuration and custom templates work correctly. + +### Running Tests + +```bash +# Run all tests +npm run test:unit + +# Inspect generated files for debugging +KEEP_TEST_OUTPUT=1 npm run test:unit + +# Run specific test suites +npm run test:unit -- --testPathPattern="field-addition" +npm run test:unit -- --testPathPattern="openapi-normalizer" +``` + +### Test Coverage + +- **Field Addition Tests (8 tests)**: Validates TypeScript interfaces and Java records for optional/required fields +- **Configuration Tests**: Ensures camelCase naming, ES6 exports, Java 21 compatibility, and custom templates +- **OpenAPI Normalizer Tests (2 tests)**: Tests inheritance vs property flattening based on configuration + +The tests use your actual `openapitools.json` configuration (not mocked) to ensure production validation and regression protection. + +**Key Features:** +- Real configuration testing using your actual `openapitools.json` +- Custom template validation (Java records vs classes) +- Language-specific behavior testing (TypeScript inheritance, Java flattening) +- Configuration-aware tests that adapt to your settings + +See [tests/README.md](tests/README.md) for detailed test documentation. + ## Development Workflow 1. **Add/modify schemas** in `schema/chatTypes.json` 2. **Run generation**: `npm run generate` 3. **Review validation**: Check for missing or extra models 4. **Test integration**: Use generated types in your application -5. **Commit changes**: Only commit schema files, not generated files \ No newline at end of file +5. **Run tests**: `npm run test:unit` to validate configuration and templates +6. **Commit changes**: Only commit schema files, not generated files \ No newline at end of file diff --git a/types/codegen/package.json b/types/codegen/package.json index 2da9d98a..a91b553d 100644 --- a/types/codegen/package.json +++ b/types/codegen/package.json @@ -9,11 +9,15 @@ "generate:no-post": "npm run generate-schema && openapi-generator-cli generate", "test": "node scripts/post-test.js", "test:verbose": "node scripts/post-test.js --verbose", + "test:unit": "ts-mocha -b 'tests/unit/**/*.test.js' --bail false", + "test:all": "npm run test && npm run test:unit", "validate": "npm run test" }, "devDependencies": { "@openapitools/openapi-generator-cli": "^2.21.4", + "@types/mocha": "^10.0.9", "@types/node": "^24.0.4", + "ts-mocha": "^11.1.0", "ts-node": "^10.9.2", "typescript": "^5.8.3" } diff --git a/types/codegen/tests/README.md b/types/codegen/tests/README.md new file mode 100644 index 00000000..3641f105 --- /dev/null +++ b/types/codegen/tests/README.md @@ -0,0 +1,104 @@ +# OpenAPI Code Generation Tests + +Comprehensive test suite validating OpenAPI code generation pipeline using your actual `openapitools.json` configuration and custom templates. + +## Test Structure + +``` +tests/ +├── utils/test-helpers.js # Shared utilities +└── unit/ + ├── field-addition.test.js # Field scenarios & configuration validation + └── openapi-normalizer.test.js # OpenAPI normalizer features +``` + +## Running Tests + +```bash +# Normal test run +npm run test:unit + +# Inspect generated files +KEEP_TEST_OUTPUT=1 npm run test:unit + +# Run specific tests +npm run test:unit -- --testPathPattern="field-addition" +``` + +## Test Coverage + +### Field Addition Tests (8 tests) +Validates field addition scenarios and configuration compliance: + +- **Field Testing**: Base schema, optional fields (`field?: string`), required fields (`field: string`) +- **Configuration Validation**: + - TypeScript camelCase naming (`displayName` vs `display_name`) + - ES6 exports (`export interface` vs `module.exports`) + - Java 21 compatibility (no deprecated features) + - Model filtering (`global-property models=TestModel`) + - Custom templates (Java records vs classes) + +### OpenAPI Normalizer Tests (2 tests) +Validates OpenAPI normalizer features with language-specific behavior: + +- **REF_AS_PARENT_IN_ALLOF**: Configuration-aware testing + - TypeScript: Tests inheritance (`extends BaseModel`) vs flattening + - Java: Always flattens properties (records don't support inheritance) +- **Custom Template Compatibility**: Ensures normalizer works with custom templates + +## Key Features + +### Real Configuration Testing +- Uses your actual `openapitools.json` (not mocked) +- Tests adapt behavior based on your configuration +- Validates custom templates are actually used + +### Language-Specific Validation +- TypeScript: Interfaces, optional fields, ES6 exports, inheritance +- Java: Records, annotations (`@Nonnull`, `@Nullable`), property flattening + +### Robust Design +- Shared utilities prevent code duplication +- Configuration-aware tests adapt to changes +- Clean test isolation with conditional cleanup +- Clear failure points with specific test names + +## Generated Validation Examples + +**TypeScript**: +```typescript +export interface TestModel { + id: string; + displayName: string; // camelCase naming + optionalField?: string; // Optional field syntax +} +``` + +**Java**: +```java +public record TestModel( // Custom template (record vs class) + @JsonProperty("id") @Nonnull String id, + @JsonProperty("displayName") @Nonnull String displayName +) {} +``` + +## Adding New Tests + +**Extend existing files** for simple checks fitting current themes. + +**Create new files** for complex features deserving dedicated test suites: + +```javascript +const { generateCodeWithConfig, createTestDirectory } = require('../utils/test-helpers') + +describe('New Feature Tests', () => { + // Use shared utilities for consistency +}) +``` + +## Benefits + +- **Production validation**: Tests your actual build pipeline +- **Regression protection**: Catches configuration and template breaks +- **Maintainable**: Shared utilities, configuration-aware testing +- **Developer-friendly**: Clear test names, easy debugging with `KEEP_TEST_OUTPUT` \ No newline at end of file diff --git a/types/codegen/tests/unit/field-addition.test.js b/types/codegen/tests/unit/field-addition.test.js new file mode 100644 index 00000000..7b40e2c6 --- /dev/null +++ b/types/codegen/tests/unit/field-addition.test.js @@ -0,0 +1,313 @@ +#!/usr/bin/env node + +// Field Addition Tests for OpenAPI Code Generation +// +// To inspect generated output files, run with: +// KEEP_TEST_OUTPUT=1 npm run test:unit +// +// Files will be preserved in: tests/fixtures/field-addition/temp-generated/ + +const fs = require('fs') +const path = require('path') +const assert = require('assert') +const { + generateCodeWithConfig, + createTestDirectory, + cleanupTestFiles, + cleanupTempOutput, + createBaseSchema, +} = require('../utils/test-helpers') + +describe('Field Addition Tests', function () { + this.timeout(30000) // Increase timeout to 30 seconds for code generation + const testDir = path.join(__dirname, '../fixtures/field-addition') + const baseSchemaPath = path.join(testDir, 'base-schema.json') + const optionalFieldSchemaPath = path.join(testDir, 'optional-field-schema.json') + const requiredFieldSchemaPath = path.join(testDir, 'required-field-schema.json') + const tempOutputDir = path.join(testDir, 'temp-generated') + + // Helper function to generate code for a specific schema using shared utilities + const generateCode = schemaPath => { + generateCodeWithConfig(schemaPath, testDir, tempOutputDir) + } + + before(() => { + // Create test directory structure using shared utility + createTestDirectory(testDir) + + // Create base test schema using shared utility + const baseSchema = createBaseSchema({ + TestModel: { + type: 'object', + required: ['id', 'displayName'], + properties: { + id: { + type: 'string', + description: 'Unique identifier', + }, + displayName: { + type: 'string', + description: 'Display name', + }, + }, + }, + }) + + // Create schema with optional field added + const optionalFieldSchema = createBaseSchema({ + TestModel: { + type: 'object', + required: ['id', 'displayName'], + properties: { + id: { + type: 'string', + description: 'Unique identifier', + }, + displayName: { + type: 'string', + description: 'Display name', + }, + optionalField: { + type: 'string', + description: 'Optional field for testing', + }, + }, + }, + }) + + // Create schema with required field added + const requiredFieldSchema = createBaseSchema({ + TestModel: { + type: 'object', + required: ['id', 'displayName', 'requiredField'], + properties: { + id: { + type: 'string', + description: 'Unique identifier', + }, + displayName: { + type: 'string', + description: 'Display name', + }, + requiredField: { + type: 'string', + description: 'Required field for testing', + }, + }, + }, + }) + + // Write test schemas + fs.writeFileSync(baseSchemaPath, JSON.stringify(baseSchema, null, 2)) + fs.writeFileSync(optionalFieldSchemaPath, JSON.stringify(optionalFieldSchema, null, 2)) + fs.writeFileSync(requiredFieldSchemaPath, JSON.stringify(requiredFieldSchema, null, 2)) + }) + + after(() => { + // Clean up test files using shared utility + cleanupTestFiles(testDir) + }) + + // Note: We don't clean up between tests since each test generates its own code + + it('base schema generates correctly', () => { + // Generate code using helper function + try { + generateCode(baseSchemaPath) + } catch (error) { + console.error('Generation failed for base schema test:', error.message) + throw error + } + + // Verify TypeScript generation - check the actual TestModel file + const tsModelPath = path.join(tempOutputDir, 'typescript/src/models/index.ts') + assert.strictEqual(fs.existsSync(tsModelPath), true) + + const tsContent = fs.readFileSync(tsModelPath, 'utf8') + assert(tsContent.includes('interface TestModel')) + assert(tsContent.includes('id: string')) + assert(tsContent.includes('displayName: string')) + assert(!tsContent.includes('optionalField')) + assert(!tsContent.includes('requiredField')) + + // Verify Java generation + const javaModelPath = path.join( + tempOutputDir, + 'java/src/main/java/org/openapitools/client/model/TestModel.java' + ) + assert.strictEqual(fs.existsSync(javaModelPath), true) + + const javaContent = fs.readFileSync(javaModelPath, 'utf8') + assert(javaContent.includes('record TestModel')) + assert(javaContent.includes('String id')) + assert(javaContent.includes('String displayName')) + // Check that optional and required test fields are not present in base schema + assert(!javaContent.includes('SERIALIZED_NAME_OPTIONAL_FIELD')) + assert(!javaContent.includes('SERIALIZED_NAME_REQUIRED_FIELD')) + assert(!javaContent.includes('private String optionalField')) + assert(!javaContent.includes('private String requiredField')) + }) + + it('optional field is generated correctly', () => { + // Generate code using helper function + try { + generateCode(optionalFieldSchemaPath) + } catch (error) { + console.error('Generation failed for optional field test:', error.message) + throw error + } + + // Verify TypeScript generation + const tsModelPath = path.join(tempOutputDir, 'typescript/src/models/index.ts') + const tsContent = fs.readFileSync(tsModelPath, 'utf8') + + assert(tsContent.includes('interface TestModel')) + assert(tsContent.includes('id: string')) + assert(tsContent.includes('displayName: string')) + assert(tsContent.includes('optionalField?: string')) // Optional field should have ? + + // Verify Java generation + const javaModelPath = path.join( + tempOutputDir, + 'java/src/main/java/org/openapitools/client/model/TestModel.java' + ) + const javaContent = fs.readFileSync(javaModelPath, 'utf8') + + assert(javaContent.includes('record TestModel')) + assert(javaContent.includes('String id')) + assert(javaContent.includes('String displayName')) + assert(javaContent.includes('String optionalField')) + + // Check that optional field doesn't have @NotNull annotation (if using validation) + const optionalFieldLines = javaContent + .split('\n') + .filter(line => line.includes('optionalField') && !line.includes('//')) + assert(optionalFieldLines.length > 0) + }) + + it('required field is generated correctly', () => { + // Generate code using helper function + try { + generateCode(requiredFieldSchemaPath) + } catch (error) { + console.error('Generation failed for required field test:', error.message) + throw error + } + + // Verify TypeScript generation + const tsModelPath = path.join(tempOutputDir, 'typescript/src/models/index.ts') + const tsContent = fs.readFileSync(tsModelPath, 'utf8') + + assert(tsContent.includes('interface TestModel')) + assert(tsContent.includes('id: string')) + assert(tsContent.includes('displayName: string')) + assert(tsContent.includes('requiredField: string')) // Required field should NOT have ? + + // Verify Java generation + const javaModelPath = path.join( + tempOutputDir, + 'java/src/main/java/org/openapitools/client/model/TestModel.java' + ) + const javaContent = fs.readFileSync(javaModelPath, 'utf8') + + assert(javaContent.includes('record TestModel')) + assert(javaContent.includes('String id')) + assert(javaContent.includes('String displayName')) + assert(javaContent.includes('String requiredField')) + }) + + it('TypeScript uses camelCase property naming', () => { + // Generate code using helper function + try { + generateCode(baseSchemaPath) + } catch (error) { + console.error('Generation failed for camelCase test:', error.message) + throw error + } + + // Verify TypeScript configuration settings + const tsModelPath = path.join(tempOutputDir, 'typescript/src/models/index.ts') + const tsContent = fs.readFileSync(tsModelPath, 'utf8') + + // Check camelCase property naming (from modelPropertyNaming: "camelCase") + assert(tsContent.includes('id: string')) // Should be camelCase, not snake_case + assert(tsContent.includes('displayName: string')) // Should be camelCase, not display_name + }) + + it('TypeScript uses ES6 exports (supportsES6: true)', () => { + // Generate code using helper function + try { + generateCode(baseSchemaPath) + } catch (error) { + console.error('Generation failed for ES6 exports test:', error.message) + throw error + } + + // Verify TypeScript uses ES6 module syntax + const tsModelPath = path.join(tempOutputDir, 'typescript/src/models/index.ts') + const tsContent = fs.readFileSync(tsModelPath, 'utf8') + + // Check ES6 support (export statements instead of CommonJS) + assert(tsContent.includes('export interface')) + assert(!tsContent.includes('module.exports')) + }) + + it('Java uses Java 21 compatibility (no deprecated features)', () => { + // Generate code using helper function + try { + generateCode(baseSchemaPath) + } catch (error) { + console.error('Generation failed for Java 21 compatibility test:', error.message) + throw error + } + + // Verify Java configuration settings + const javaModelPath = path.join( + tempOutputDir, + 'java/src/main/java/org/openapitools/client/model/TestModel.java' + ) + const javaContent = fs.readFileSync(javaModelPath, 'utf8') + + // Check Java 21 compatibility (should not have deprecated features) + assert(!javaContent.includes('@SuppressWarnings("deprecation")')) + + // Should use modern annotations + assert(javaContent.includes('@javax.annotation.Generated')) + }) + + it('Java model filtering works (global-property models=TestModel)', () => { + // Generate code using helper function + try { + generateCode(baseSchemaPath) + } catch (error) { + console.error('Generation failed for Java model filtering test:', error.message) + throw error + } + + // Check that only TestModel was generated (due to global-property filter) + const javaModelDir = path.join(tempOutputDir, 'java/src/main/java/org/openapitools/client/model') + const javaFiles = fs.readdirSync(javaModelDir).filter(f => f.endsWith('.java')) + assert.deepStrictEqual(javaFiles, ['TestModel.java']) + }) + + it('custom templates generate Java records instead of classes', () => { + // Generate code using helper function + try { + generateCode(baseSchemaPath) + } catch (error) { + console.error('Generation failed for Java records test:', error.message) + throw error + } + + // Verify Java uses records from custom templates + const javaModelPath = path.join( + tempOutputDir, + 'java/src/main/java/org/openapitools/client/model/TestModel.java' + ) + const javaContent = fs.readFileSync(javaModelPath, 'utf8') + + // Check that custom templates generate records instead of classes + assert(javaContent.includes('public record TestModel')) + assert(!javaContent.includes('public class TestModel')) + }) +}) diff --git a/types/codegen/tests/unit/openapi-normalizer.test.js b/types/codegen/tests/unit/openapi-normalizer.test.js new file mode 100644 index 00000000..f546e1c4 --- /dev/null +++ b/types/codegen/tests/unit/openapi-normalizer.test.js @@ -0,0 +1,155 @@ +#!/usr/bin/env node + +// OpenAPI Normalizer Tests for OpenAPI Code Generation +// +// To inspect generated output files, run with: +// KEEP_TEST_OUTPUT=1 npm run test:unit +// +// Files will be preserved in: tests/fixtures/openapi-normalizer/temp-generated/ + +const fs = require('fs') +const path = require('path') +const assert = require('assert') +const { + generateCodeWithConfig, + createTestDirectory, + cleanupTestFiles, + cleanupTempOutput, + createBaseSchema, +} = require('../utils/test-helpers') + +describe('OpenAPI Normalizer Tests', function () { + this.timeout(30000) // Increase timeout to 30 seconds for code generation + const testDir = path.join(__dirname, '../fixtures/openapi-normalizer') + const tempOutputDir = path.join(testDir, 'temp-generated') + const allOfSchemaPath = path.join(testDir, 'allof-schema.json') + + before(() => { + createTestDirectory(testDir) + + // Create a schema that uses allOf to test REF_AS_PARENT_IN_ALLOF + const allOfSchema = createBaseSchema({ + BaseModel: { + type: 'object', + required: ['id'], + properties: { + id: { + type: 'string', + description: 'Base identifier', + }, + }, + }, + TestModel: { + allOf: [ + { $ref: '#/components/schemas/BaseModel' }, + { + type: 'object', + required: ['name'], + properties: { + name: { + type: 'string', + description: 'Display name', + }, + }, + }, + ], + }, + }) + + // Write test schema + fs.writeFileSync(allOfSchemaPath, JSON.stringify(allOfSchema, null, 2)) + }) + + after(() => { + cleanupTestFiles(testDir) + }) + + // Note: We don't clean up between tests since each test generates its own code + + it('REF_AS_PARENT_IN_ALLOF normalizer works correctly', () => { + // Generate code using helper function + try { + generateCodeWithConfig(allOfSchemaPath, testDir, tempOutputDir) + } catch (error) { + console.error('Generation failed for REF_AS_PARENT_IN_ALLOF test:', error.message) + throw error + } + + // Read the configuration to check if REF_AS_PARENT_IN_ALLOF is enabled + const originalConfigPath = path.join(__dirname, '../../openapitools.json') + const originalConfig = JSON.parse(fs.readFileSync(originalConfigPath, 'utf8')) + + const tsNormalizer = originalConfig['generator-cli']?.generators?.typescript?.['openapi-normalizer'] + const hasRefAsParent = tsNormalizer?.REF_AS_PARENT_IN_ALLOF === true + + // Verify TypeScript generation handles allOf correctly + const tsModelPath = path.join(tempOutputDir, 'typescript/src/models/index.ts') + assert.strictEqual(fs.existsSync(tsModelPath), true) + + const tsContent = fs.readFileSync(tsModelPath, 'utf8') + + if (hasRefAsParent) { + // With REF_AS_PARENT_IN_ALLOF: true, TestModel should extend BaseModel + assert(tsContent.includes('interface BaseModel')) + assert(tsContent.includes('interface TestModel extends BaseModel')) + + // BaseModel should have its own properties + assert(tsContent.includes('id: string')) + + // TestModel should only have its additional properties (not duplicated base properties) + assert(tsContent.includes('name: string')) + + // TestModel should NOT duplicate the id property from BaseModel + const testModelSection = tsContent.split('interface TestModel extends BaseModel')[1] + if (testModelSection) { + assert(!testModelSection.split('interface')[0].includes('id: string')) + } + } else { + // Without REF_AS_PARENT_IN_ALLOF, properties should be flattened + assert(tsContent.includes('interface TestModel')) + assert(tsContent.includes('id: string')) + assert(tsContent.includes('name: string')) + // Should not have inheritance + assert(!tsContent.includes('extends BaseModel')) + } + }) + + it('Java flattens allOf schemas into single record (no inheritance)', () => { + // Generate code using helper function + try { + generateCodeWithConfig(allOfSchemaPath, testDir, tempOutputDir) + } catch (error) { + console.error('Generation failed for Java allOf flattening test:', error.message) + throw error + } + + // Verify Java generation handles allOf correctly + const javaModelPath = path.join( + tempOutputDir, + 'java/src/main/java/org/openapitools/client/model/TestModel.java' + ) + assert.strictEqual(fs.existsSync(javaModelPath), true) + + const javaContent = fs.readFileSync(javaModelPath, 'utf8') + + // Verify it's still using records from custom templates + assert(javaContent.includes('public record TestModel')) + assert(!javaContent.includes('public class TestModel')) + + // Java records don't support inheritance, so allOf should always flatten all properties + // regardless of REF_AS_PARENT_IN_ALLOF setting + assert(javaContent.includes('String id')) // From BaseModel + assert(javaContent.includes('String name')) // From TestModel + + // Should not have separate BaseModel record (Java flattens allOf) + const javaModelDir = path.join(tempOutputDir, 'java/src/main/java/org/openapitools/client/model') + const javaFiles = fs.readdirSync(javaModelDir).filter(f => f.endsWith('.java')) + assert.deepStrictEqual(javaFiles, ['TestModel.java']) // Only TestModel, no BaseModel + + // Verify both properties are in the same record with proper annotations + assert(javaContent.includes('@JsonProperty("id")')) + assert(javaContent.includes('@JsonProperty("name")')) + assert(javaContent.includes('@Nonnull String id')) + assert(javaContent.includes('@Nonnull String name')) + }) +}) diff --git a/types/codegen/tests/utils/test-helpers.js b/types/codegen/tests/utils/test-helpers.js new file mode 100644 index 00000000..059c089d --- /dev/null +++ b/types/codegen/tests/utils/test-helpers.js @@ -0,0 +1,121 @@ +const fs = require('fs') +const path = require('path') +const { execSync } = require('child_process') + +/** + * Shared test utilities for OpenAPI code generation tests + */ + +/** + * Generate code using openapitools.json config with test-specific paths + * @param {string} schemaPath - Path to the OpenAPI schema file + * @param {string} testDir - Test directory for output + * @param {string} tempOutputDir - Temporary output directory + * @param {Object} options - Optional configuration overrides + * @param {string} options.javaModels - Models to generate for Java (default: 'TestModel') + */ +function generateCodeWithConfig(schemaPath, testDir, tempOutputDir, options = {}) { + const originalConfigPath = path.join(__dirname, '../../openapitools.json') + const testConfigPath = path.join(testDir, 'openapitools.json') + + try { + // Read the original openapitools.json + const originalConfig = JSON.parse(fs.readFileSync(originalConfigPath, 'utf8')) + + // Modify the config to use our test schema and output directories + const codegenDir = path.join(__dirname, '../..') + const testConfig = { + ...originalConfig, + 'generator-cli': { + ...originalConfig['generator-cli'], + generators: { + typescript: { + ...originalConfig['generator-cli'].generators.typescript, + inputSpec: schemaPath, + output: path.join(tempOutputDir, 'typescript'), + templateDir: path.join(codegenDir, 'custom-templates/typescript'), + }, + java: { + ...originalConfig['generator-cli'].generators.java, + inputSpec: schemaPath, + output: path.join(tempOutputDir, 'java'), + templateDir: path.join(codegenDir, 'custom-templates/java'), + 'global-property': { + ...originalConfig['generator-cli'].generators.java['global-property'], + models: options.javaModels || 'TestModel', + }, + }, + }, + }, + } + + // Write the test config + fs.writeFileSync(testConfigPath, JSON.stringify(testConfig, null, 2)) + + // Run the same command as your package.json: "openapi-generator-cli generate" + execSync('npx openapi-generator-cli generate', { + stdio: 'pipe', // Suppress output for cleaner test runs + cwd: testDir, + }) + } catch (error) { + console.error('Generation failed:', error.message) + throw error + } +} + +/** + * Create a test directory structure + * @param {string} testDir - Base test directory + */ +function createTestDirectory(testDir) { + if (!fs.existsSync(testDir)) { + fs.mkdirSync(testDir, { recursive: true }) + } +} + +/** + * Clean up test files (respects KEEP_TEST_OUTPUT env var) + * @param {string} testDir - Directory to clean up + */ +function cleanupTestFiles(testDir) { + if (!process.env.KEEP_TEST_OUTPUT && fs.existsSync(testDir)) { + fs.rmSync(testDir, { recursive: true, force: true }) + } +} + +/** + * Clean up temp output directory (respects KEEP_TEST_OUTPUT env var) + * @param {string} tempOutputDir - Directory to clean up + */ +function cleanupTempOutput(tempOutputDir) { + if (!process.env.KEEP_TEST_OUTPUT && fs.existsSync(tempOutputDir)) { + fs.rmSync(tempOutputDir, { recursive: true, force: true }) + } +} + +/** + * Create a basic OpenAPI schema with the given models + * @param {Object} models - Schema models to include + * @returns {Object} Complete OpenAPI schema + */ +function createBaseSchema(models) { + return { + openapi: '3.0.0', + info: { + title: 'Test Schema', + version: '1.0.0', + }, + paths: {}, + components: { + schemas: models, + }, + } +} + +module.exports = { + generateCodeWithConfig, + createTestDirectory, + cleanupTestFiles, + cleanupTempOutput, + createBaseSchema, +} diff --git a/types/index.ts b/types/index.ts index 414deaac..f4b8c4f9 100644 --- a/types/index.ts +++ b/types/index.ts @@ -49,6 +49,9 @@ export { ShowOpenDialogResult, SHOW_SAVE_FILE_DIALOG_REQUEST_METHOD, SHOW_OPEN_FILE_DIALOG_REQUEST_METHOD, + CHECK_DIAGNOSTICS_REQUEST_METHOD, + CheckDiagnosticsParams, + CheckDiagnosticsResult, } from './window' export { SelectWorkspaceItemParams, @@ -61,4 +64,7 @@ export { DID_COPY_FILE_NOTIFICATION_METHOD, DID_APPEND_FILE_NOTIFICATION_METHOD, DID_WRITE_FILE_NOTIFICATION_METHOD, + OPEN_WORKSPACE_FILE_REQUEST_METHOD, + OpenWorkspaceFileParams, + OpenWorkspaceFileResult, } from './workspace' From e35bf29d0ced8ed4d0273a5c517616d3852161fa Mon Sep 17 00:00:00 2001 From: Conor Stewart Date: Fri, 15 Aug 2025 07:36:41 -0700 Subject: [PATCH 20/38] fix: replace github action from branch --- .github/workflows/types-codegen-pr.yaml | 55 +++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 .github/workflows/types-codegen-pr.yaml diff --git a/.github/workflows/types-codegen-pr.yaml b/.github/workflows/types-codegen-pr.yaml new file mode 100644 index 00000000..c223df9f --- /dev/null +++ b/.github/workflows/types-codegen-pr.yaml @@ -0,0 +1,55 @@ +name: Chat Types PR Validation + +on: + pull_request: + branches: + - main + paths: + - 'types/codegen/schema/chatTypes.json' + workflow_dispatch: + +jobs: + validate-pr: + name: Validate PR with chatTypes.json changes + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20.x' + #should we cache: 'npm' + + # - name: Install root dependencies + # working-directory: . + # run: npm install + + - name: Install codegen dependencies + working-directory: types/codegen + run: npm install + + - name: Generate types + working-directory: types/codegen + run: npm run generate + + - name: Build TypeScript + working-directory: types/codegen/generated/typescript + run: | + npm i + npm run build + - name: Setup Java + uses: actions/setup-java@v4 + with: + distribution: 'corretto' + java-version: '21' + cache: 'maven' + + - name: Build Java with Maven + working-directory: types/codegen/generated/java + run: | + # Install the LSP4J dependency before compiling + mvn dependency:get -Dartifact=org.eclipse.lsp4j:org.eclipse.lsp4j:0.22.0 + mvn clean compile -Djava.version=21 \ No newline at end of file From 1be58e91bdad57b9c6ebf1d2142a1c563a2c92e9 Mon Sep 17 00:00:00 2001 From: Conor Stewart Date: Fri, 15 Aug 2025 07:50:35 -0700 Subject: [PATCH 21/38] test: add tests to github action --- .github/workflows/types-codegen-pr.yaml | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/.github/workflows/types-codegen-pr.yaml b/.github/workflows/types-codegen-pr.yaml index c223df9f..f2e7216a 100644 --- a/.github/workflows/types-codegen-pr.yaml +++ b/.github/workflows/types-codegen-pr.yaml @@ -5,7 +5,7 @@ on: branches: - main paths: - - 'types/codegen/schema/chatTypes.json' + - 'types/codegen/schema/**' workflow_dispatch: jobs: @@ -31,9 +31,25 @@ jobs: working-directory: types/codegen run: npm install + - name: Unit tests + working-directory: types/codegen + run: npm run test:unit + + - name: Coalesce schemas + working-directory: types/codegen + run: npm run generate-full-schema + - name: Generate types working-directory: types/codegen - run: npm run generate + run: npm run generate:only + + - name: Post Process + working-directory: types/codegen + run: npm run post-process + + - name: Completeness Test + working-directory: types/codegen + run: npm run test - name: Build TypeScript working-directory: types/codegen/generated/typescript From 12ba02c15b9130cec0948db08807b90a2588bfe7 Mon Sep 17 00:00:00 2001 From: constewart9 <150978709+constewart9@users.noreply.github.com> Date: Fri, 15 Aug 2025 07:54:59 -0700 Subject: [PATCH 22/38] Update package.json --- types/codegen/package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/types/codegen/package.json b/types/codegen/package.json index a91b553d..581bde97 100644 --- a/types/codegen/package.json +++ b/types/codegen/package.json @@ -4,9 +4,11 @@ "description": "Generate TypeScript defintiinons from JSON Schema using OpenAPI Generator", "main": "generated/typescript/src/index.ts", "scripts": { - "generate-schema": "node scripts/generate-complete-schema.js", + "generate-full-schema": "node scripts/generate-complete-schema.js", "generate": "npm run generate-schema && openapi-generator-cli generate && node scripts/post-typescript.js && npm run test", + "generate:only": "openapi-generator-cli generate", "generate:no-post": "npm run generate-schema && openapi-generator-cli generate", + "post-process": "node scripts/post-typescript.js", "test": "node scripts/post-test.js", "test:verbose": "node scripts/post-test.js --verbose", "test:unit": "ts-mocha -b 'tests/unit/**/*.test.js' --bail false", From 9348eff255e015700d96efd7664813a706805960 Mon Sep 17 00:00:00 2001 From: constewart9 <150978709+constewart9@users.noreply.github.com> Date: Fri, 15 Aug 2025 07:59:33 -0700 Subject: [PATCH 23/38] Update chatTypes.json to remove empty model --- types/codegen/schema/chatTypes.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/types/codegen/schema/chatTypes.json b/types/codegen/schema/chatTypes.json index e186e73b..5096de9b 100644 --- a/types/codegen/schema/chatTypes.json +++ b/types/codegen/schema/chatTypes.json @@ -1431,10 +1431,6 @@ } } }, - "SubscriptionUpgradeParams": { - "type": "object", - "properties": {} - }, "ConversationItemGroup": { "type": "object", "properties": { From 36b8bf4c4baf44f1bcd9b6a658d9ba7f49094ed7 Mon Sep 17 00:00:00 2001 From: constewart9 <150978709+constewart9@users.noreply.github.com> Date: Fri, 15 Aug 2025 08:07:37 -0700 Subject: [PATCH 24/38] Update types-codegen-pr.yaml --- .github/workflows/types-codegen-pr.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/types-codegen-pr.yaml b/.github/workflows/types-codegen-pr.yaml index f2e7216a..aae0e7cf 100644 --- a/.github/workflows/types-codegen-pr.yaml +++ b/.github/workflows/types-codegen-pr.yaml @@ -23,9 +23,9 @@ jobs: node-version: '20.x' #should we cache: 'npm' - # - name: Install root dependencies - # working-directory: . - # run: npm install + - name: Install root dependencies + working-directory: . + run: npm install - name: Install codegen dependencies working-directory: types/codegen @@ -68,4 +68,4 @@ jobs: run: | # Install the LSP4J dependency before compiling mvn dependency:get -Dartifact=org.eclipse.lsp4j:org.eclipse.lsp4j:0.22.0 - mvn clean compile -Djava.version=21 \ No newline at end of file + mvn clean compile -Djava.version=21 From 26e276ea2425564580cd7dd41ff8e634a5274fbf Mon Sep 17 00:00:00 2001 From: constewart9 <150978709+constewart9@users.noreply.github.com> Date: Fri, 15 Aug 2025 08:29:38 -0700 Subject: [PATCH 25/38] Remove lsp4j addition, moved to generated pom.xml Remove lsp4j addition, moved to generated pom.xml --- .github/workflows/types-codegen-pr.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/types-codegen-pr.yaml b/.github/workflows/types-codegen-pr.yaml index aae0e7cf..40eb5d77 100644 --- a/.github/workflows/types-codegen-pr.yaml +++ b/.github/workflows/types-codegen-pr.yaml @@ -66,6 +66,4 @@ jobs: - name: Build Java with Maven working-directory: types/codegen/generated/java run: | - # Install the LSP4J dependency before compiling - mvn dependency:get -Dartifact=org.eclipse.lsp4j:org.eclipse.lsp4j:0.22.0 mvn clean compile -Djava.version=21 From fd71ee2e25ab11a4d3b6f0c2619e79b6c1ba3274 Mon Sep 17 00:00:00 2001 From: constewart9 <150978709+constewart9@users.noreply.github.com> Date: Fri, 15 Aug 2025 07:54:59 -0700 Subject: [PATCH 26/38] Update package.json --- types/codegen/package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/types/codegen/package.json b/types/codegen/package.json index a91b553d..581bde97 100644 --- a/types/codegen/package.json +++ b/types/codegen/package.json @@ -4,9 +4,11 @@ "description": "Generate TypeScript defintiinons from JSON Schema using OpenAPI Generator", "main": "generated/typescript/src/index.ts", "scripts": { - "generate-schema": "node scripts/generate-complete-schema.js", + "generate-full-schema": "node scripts/generate-complete-schema.js", "generate": "npm run generate-schema && openapi-generator-cli generate && node scripts/post-typescript.js && npm run test", + "generate:only": "openapi-generator-cli generate", "generate:no-post": "npm run generate-schema && openapi-generator-cli generate", + "post-process": "node scripts/post-typescript.js", "test": "node scripts/post-test.js", "test:verbose": "node scripts/post-test.js --verbose", "test:unit": "ts-mocha -b 'tests/unit/**/*.test.js' --bail false", From 0a00ca60b777b8b0eb10bcf69d641295718eddd9 Mon Sep 17 00:00:00 2001 From: Conor Stewart Date: Fri, 15 Aug 2025 08:32:38 -0700 Subject: [PATCH 27/38] fix: added pom.xml to be generated with java 21 --- .../custom-templates/java/pom.mustache | 314 ++++++++++++++++++ types/codegen/openapitools.json | 3 +- types/codegen/package.json | 4 +- 3 files changed, 318 insertions(+), 3 deletions(-) create mode 100644 types/codegen/custom-templates/java/pom.mustache diff --git a/types/codegen/custom-templates/java/pom.mustache b/types/codegen/custom-templates/java/pom.mustache new file mode 100644 index 00000000..bc54a881 --- /dev/null +++ b/types/codegen/custom-templates/java/pom.mustache @@ -0,0 +1,314 @@ + + 4.0.0 + {{groupId}} + {{artifactId}} + jar + {{artifactId}} + {{artifactVersion}} + {{artifactUrl}} + {{artifactDescription}} + + {{scmConnection}} + {{scmDeveloperConnection}} + {{scmUrl}} + +{{#parentOverridden}} + + {{{parentGroupId}}} + {{{parentArtifactId}}} + {{{parentVersion}}} + +{{/parentOverridden}} + + + + {{licenseName}} + {{licenseUrl}} + repo + + + + + + {{developerName}} + {{developerEmail}} + {{developerOrganization}} + {{developerOrganizationUrl}} + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 21 + 21 + true + 128m + 512m + + -Xlint:all + -J-Xss4m + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + + default-testCompile + test-compile + + testCompile + + + true + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.12 + + true + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 + + + + jar + + + + + + + + org.apache.maven.plugins + maven-source-plugin + 3.3.0 + + + attach-sources + + jar-no-fork + + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.6.3 + + none + 21 + + + + attach-javadocs + + jar + + + + + + + + org.apache.maven.plugins + maven-install-plugin + 3.1.1 + + + + + + + + sign-artifacts + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.5 + + + sign-artifacts + verify + + sign + + + + + + + + + + + {{#swagger1AnnotationLibrary}} + + io.swagger + swagger-annotations + ${swagger-annotations-version} + + {{/swagger1AnnotationLibrary}} + {{#swagger2AnnotationLibrary}} + + io.swagger.core.v3 + swagger-annotations + ${swagger-annotations-version} + + {{/swagger2AnnotationLibrary}} + + + + com.google.code.findbugs + jsr305 + 3.0.2 + + + + + org.eclipse.lsp4j + org.eclipse.lsp4j + 0.22.0 + + + + + + + + com.fasterxml.jackson.core + jackson-core + ${jackson-version} + + + com.fasterxml.jackson.core + jackson-annotations + ${jackson-version} + + + com.fasterxml.jackson.core + jackson-databind + ${jackson-databind-version} + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + ${jackson-version} + + + + + com.google.code.gson + gson + ${gson-version} + + {{#useBeanValidation}} + + + jakarta.validation + jakarta.validation-api + ${beanvalidation-version} + provided + + {{/useBeanValidation}} + {{#performBeanValidation}} + + + org.hibernate + hibernate-validator + 5.4.1.Final + + {{/performBeanValidation}} + {{#parcelableModel}} + + + com.google.android + android + 4.1.1.4 + provided + + {{/parcelableModel}} + + jakarta.annotation + jakarta.annotation-api + ${jakarta-annotation-version} + provided + + {{#useReflectionEqualsHashCode}} + + + org.apache.commons + commons-lang3 + ${commons-lang3-version} + + {{/useReflectionEqualsHashCode}} + + + + org.junit.jupiter + junit-jupiter-engine + ${junit-version} + test + + + org.junit.platform + junit-platform-runner + ${junit-platform-runner.version} + test + + + + UTF-8 + {{#swagger1AnnotationLibrary}} + 1.6.6 + {{/swagger1AnnotationLibrary}} + {{#swagger2AnnotationLibrary}} + 2.2.15 + {{/swagger2AnnotationLibrary}} + 1.19.4 + 2.17.1 + 2.17.1 + {{#useJakartaEe}} + 2.1.1 + 3.0.2 + {{/useJakartaEe}} + {{^useJakartaEe}} + 1.3.5 + 2.0.2 + {{/useJakartaEe}} + {{#useReflectionEqualsHashCode}} + 3.17.0 + {{/useReflectionEqualsHashCode}} + 2.10.1 + 1.0.0 + 5.10.2 + 1.10.0 + + diff --git a/types/codegen/openapitools.json b/types/codegen/openapitools.json index bde71726..e6f19e93 100644 --- a/types/codegen/openapitools.json +++ b/types/codegen/openapitools.json @@ -55,7 +55,8 @@ "targetCompatibility": "21" }, "global-property": { - "models": "IconType:ContextCommandGroup:QuickActionCommand:ContextCommand:CursorPosition:FileParams:CopyFileParams:OpenFileDiffParams:ShowOpenDialogParams:ShowSaveFileDialogParams:ShowSaveFileDialogResult" + "models": "ContextCommandIconType:IconType:ContextCommandGroup:QuickActionCommand:ContextCommand:CursorPosition:FileParams:CopyFileParams:OpenFileDiffParams:ShowOpenDialogParams:ShowSaveFileDialogParams:ShowSaveFileDialogResult", + "supportingFiles": "pom.xml" }, "importMappings": { "Position": "org.eclipse.lsp4j.Position", diff --git a/types/codegen/package.json b/types/codegen/package.json index 581bde97..04dfc87b 100644 --- a/types/codegen/package.json +++ b/types/codegen/package.json @@ -5,9 +5,9 @@ "main": "generated/typescript/src/index.ts", "scripts": { "generate-full-schema": "node scripts/generate-complete-schema.js", - "generate": "npm run generate-schema && openapi-generator-cli generate && node scripts/post-typescript.js && npm run test", + "generate": "npm run generate-full-schema && openapi-generator-cli generate && node scripts/post-typescript.js && npm run test", "generate:only": "openapi-generator-cli generate", - "generate:no-post": "npm run generate-schema && openapi-generator-cli generate", + "generate:no-post": "npm run generate-full-schema && openapi-generator-cli generate && node scripts/post-typescript.js", "post-process": "node scripts/post-typescript.js", "test": "node scripts/post-test.js", "test:verbose": "node scripts/post-test.js --verbose", From 92fb02d1d4c6aedb7b59b042b8d10e54bb750d92 Mon Sep 17 00:00:00 2001 From: tsmithsz <84354541+tsmithsz@users.noreply.github.com> Date: Mon, 18 Aug 2025 15:02:23 -0700 Subject: [PATCH 28/38] fix: skip PAC URLs in macOS proxy detection (#664) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem PAC (Proxy Auto-Configuration) file URLs were being returned directly as proxy URLs, causing the HTTP agent to attempt CONNECT requests to PAC file servers instead of parsing the PAC file to determine the actual proxy configuration. This resulted in "Bad response: 501/400" errors when enterprises used PAC files for proxy configuration. - `501` "Not Implemented": The PAC file server doesn't support the CONNECT method at all (like Python's http.server in the bug report) - `400` "Bad Request": The PAC file server recognizes CONNECT but considers it malformed or inappropriate for that endpoint Issues: - https://github.com/aws/aws-toolkit-vscode/issues/7900 - https://github.com/aws/aws-toolkit-vscode/issues/7878 ## Solution Modified `getMacSystemProxy()` to skip PAC URLs when detected and fall back to manual HTTP/HTTPS proxy settings. This prevents PAC file URLs from being incorrectly used as direct proxy servers while PAC file parsing is not yet implemented TODO: - Implement a PAC parser (This is a significant feature requiring JavaScript evaluation and HTTP fetching, which is why it's currently marked as a TODO) ## Testing 1. Created a simple PAC file server: ``` # Created local.pac with content: function FindProxyForURL(url, host) { return "PROXY localhost:8080"; } ``` ``` # Served using Python: python3 -m http.server 8082 ``` 2. Configured system to use PAC file: ``` sudo networksetup -setautoproxyurl "Wi-Fi" "http://localhost:8082/local.pac" sudo networksetup -setautoproxystate "Wi-Fi" on ``` Test Results: With PAC Configuration: AWS extension incorrectly tried to use PAC file URL as proxy Screenshot 2025-08-18 at 1 05 49 PM Without PAC: Successfully connected Screenshot 2025-08-18 at 1 41 38 PM ## License By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license. --- .../util/standalone/getProxySettings/getMacProxySettings.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/runtimes/runtimes/util/standalone/getProxySettings/getMacProxySettings.ts b/runtimes/runtimes/util/standalone/getProxySettings/getMacProxySettings.ts index cc8c90c3..27462ae6 100644 --- a/runtimes/runtimes/util/standalone/getProxySettings/getMacProxySettings.ts +++ b/runtimes/runtimes/util/standalone/getProxySettings/getMacProxySettings.ts @@ -35,8 +35,10 @@ export function getMacSystemProxy(): ProxyConfig | undefined { // Honor PAC URL first if configured if (settings.ProxyAutoConfigEnable === '1' && settings.ProxyAutoConfigURLString) { - console.debug(`Using PAC URL: ${settings.ProxyAutoConfigURLString}`) - return { proxyUrl: settings.ProxyAutoConfigURLString, noProxy } + console.debug(`PAC URL detected: ${settings.ProxyAutoConfigURLString}`) + // TODO: Parse PAC file to get actual proxy + // For now, skip PAC and fall through to manual proxy settings + console.warn('PAC file support not yet implemented, falling back to manual proxy settings') } // Otherwise pick the first enabled protocol From 1f14063be3dbdcf0d128cea563f9f218e16dd788 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 18 Aug 2025 15:11:18 -0700 Subject: [PATCH 29/38] chore(release): release packages from branch main (#665) :robot: I have created a release *beep* *boop* ---
language-server-runtimes: 0.2.126 ## [0.2.126](https://github.com/aws/language-server-runtimes/compare/language-server-runtimes/v0.2.125...language-server-runtimes/v0.2.126) (2025-08-18) ### Bug Fixes * skip PAC URLs in macOS proxy detection ([#664](https://github.com/aws/language-server-runtimes/issues/664)) ([92fb02d](https://github.com/aws/language-server-runtimes/commit/92fb02d1d4c6aedb7b59b042b8d10e54bb750d92))
--- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .release-please-manifest.json | 2 +- package-lock.json | 2 +- runtimes/CHANGELOG.md | 7 +++++++ runtimes/package.json | 2 +- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 78e2d7d2..f2dedb28 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,5 +1,5 @@ { "chat-client-ui-types": "0.1.62", - "runtimes": "0.2.125", + "runtimes": "0.2.126", "types": "0.1.56" } diff --git a/package-lock.json b/package-lock.json index 3d6e7f65..fb9f2ef2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4684,7 +4684,7 @@ }, "runtimes": { "name": "@aws/language-server-runtimes", - "version": "0.2.125", + "version": "0.2.126", "license": "Apache-2.0", "dependencies": { "@aws/language-server-runtimes-types": "^0.1.56", diff --git a/runtimes/CHANGELOG.md b/runtimes/CHANGELOG.md index 1b8d07f9..c1758243 100644 --- a/runtimes/CHANGELOG.md +++ b/runtimes/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.2.126](https://github.com/aws/language-server-runtimes/compare/language-server-runtimes/v0.2.125...language-server-runtimes/v0.2.126) (2025-08-18) + + +### Bug Fixes + +* skip PAC URLs in macOS proxy detection ([#664](https://github.com/aws/language-server-runtimes/issues/664)) ([92fb02d](https://github.com/aws/language-server-runtimes/commit/92fb02d1d4c6aedb7b59b042b8d10e54bb750d92)) + ## [0.2.125](https://github.com/aws/language-server-runtimes/compare/language-server-runtimes/v0.2.124...language-server-runtimes/v0.2.125) (2025-08-12) diff --git a/runtimes/package.json b/runtimes/package.json index 9858afe5..9297202c 100644 --- a/runtimes/package.json +++ b/runtimes/package.json @@ -1,6 +1,6 @@ { "name": "@aws/language-server-runtimes", - "version": "0.2.125", + "version": "0.2.126", "description": "Runtimes to host Language Servers for AWS", "repository": { "type": "git", From d5ef0f3af87b62d06042afe15b219cbec5729e4f Mon Sep 17 00:00:00 2001 From: Conor Stewart Date: Mon, 18 Aug 2025 11:51:17 -0700 Subject: [PATCH 30/38] fix: update the pom.xml generation --- types/codegen/custom-templates/java/pom.mustache | 15 --------------- types/codegen/openapitools.json | 2 +- types/codegen/package.json | 1 + 3 files changed, 2 insertions(+), 16 deletions(-) diff --git a/types/codegen/custom-templates/java/pom.mustache b/types/codegen/custom-templates/java/pom.mustache index bc54a881..dc02b815 100644 --- a/types/codegen/custom-templates/java/pom.mustache +++ b/types/codegen/custom-templates/java/pom.mustache @@ -55,14 +55,6 @@ -J-Xss4m - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.8.1 default-testCompile @@ -91,13 +83,6 @@ org.apache.maven.plugins maven-jar-plugin 3.3.0 - - - - jar - - - diff --git a/types/codegen/openapitools.json b/types/codegen/openapitools.json index e6f19e93..ff4241b3 100644 --- a/types/codegen/openapitools.json +++ b/types/codegen/openapitools.json @@ -55,7 +55,7 @@ "targetCompatibility": "21" }, "global-property": { - "models": "ContextCommandIconType:IconType:ContextCommandGroup:QuickActionCommand:ContextCommand:CursorPosition:FileParams:CopyFileParams:OpenFileDiffParams:ShowOpenDialogParams:ShowSaveFileDialogParams:ShowSaveFileDialogResult", + "models": "ContextCommandParams:ContextCommandIconType:IconType:ContextCommandGroup:QuickActionCommand:ContextCommand:CursorPosition:FileParams:CopyFileParams:OpenFileDiffParams:ShowOpenDialogParams:ShowSaveFileDialogParams:ShowSaveFileDialogResult", "supportingFiles": "pom.xml" }, "importMappings": { diff --git a/types/codegen/package.json b/types/codegen/package.json index 04dfc87b..7274610a 100644 --- a/types/codegen/package.json +++ b/types/codegen/package.json @@ -4,6 +4,7 @@ "description": "Generate TypeScript defintiinons from JSON Schema using OpenAPI Generator", "main": "generated/typescript/src/index.ts", "scripts": { + "clean": "node scripts/clean.js", "generate-full-schema": "node scripts/generate-complete-schema.js", "generate": "npm run generate-full-schema && openapi-generator-cli generate && node scripts/post-typescript.js && npm run test", "generate:only": "openapi-generator-cli generate", From 0f17f606dc1ff938c26b47acbb31f3b69625d1dc Mon Sep 17 00:00:00 2001 From: Conor Stewart Date: Mon, 18 Aug 2025 21:07:43 -0700 Subject: [PATCH 31/38] fix: split schema into different files --- .github/workflows/types-codegen-pr.yaml | 10 +- runtimes/protocol/lsp.ts | 5 +- types/codegen/schema/chatTypes.json | 206 ++++++++++++----------- types/codegen/schema/windowTypes.json | 54 ++++++ types/codegen/schema/workspaceTypes.json | 41 +++++ 5 files changed, 209 insertions(+), 107 deletions(-) create mode 100644 types/codegen/schema/windowTypes.json create mode 100644 types/codegen/schema/workspaceTypes.json diff --git a/.github/workflows/types-codegen-pr.yaml b/.github/workflows/types-codegen-pr.yaml index 40eb5d77..e06745fb 100644 --- a/.github/workflows/types-codegen-pr.yaml +++ b/.github/workflows/types-codegen-pr.yaml @@ -29,11 +29,7 @@ jobs: - name: Install codegen dependencies working-directory: types/codegen - run: npm install - - - name: Unit tests - working-directory: types/codegen - run: npm run test:unit + run: npm install - name: Coalesce schemas working-directory: types/codegen @@ -51,6 +47,10 @@ jobs: working-directory: types/codegen run: npm run test + - name: Unit tests + working-directory: types/codegen + run: npm run test:unit + - name: Build TypeScript working-directory: types/codegen/generated/typescript run: | diff --git a/runtimes/protocol/lsp.ts b/runtimes/protocol/lsp.ts index f5c54705..c5d20534 100644 --- a/runtimes/protocol/lsp.ts +++ b/runtimes/protocol/lsp.ts @@ -12,13 +12,10 @@ import { RegistrationType, RequestType, } from 'vscode-languageserver-protocol' -import { ChatOptions } from '@local/language-server-runtimes-generated-types' +import { ChatOptions } from '@aws/language-server-runtimes-types' import { LogLevel } from '../runtimes/util/loggingUtil' -//Changed so only METHODS are exported from ./chat export * from '@aws/language-server-runtimes-types' - -export * from '@local/language-server-runtimes-generated-types' export { TextDocument } from 'vscode-languageserver-textdocument' // LSP protocol is a core dependency for LSP feature provided by runtimes. diff --git a/types/codegen/schema/chatTypes.json b/types/codegen/schema/chatTypes.json index 5096de9b..c83cb743 100644 --- a/types/codegen/schema/chatTypes.json +++ b/types/codegen/schema/chatTypes.json @@ -277,6 +277,12 @@ "type": "number" } } + }, + "visibleName": { + "type": "string" + }, + "clickable": { + "type": "boolean" } } }, @@ -539,6 +545,64 @@ }, "contextList": { "$ref": "#/components/schemas/FileList" + }, + "editable": { + "type": "boolean" + }, + "quickSettings": { + "type": "object", + "required": ["type", "messageId", "tabId", "options"], + "properties": { + "type": { + "type": "string", + "enum": ["select", "checkbox", "radio"] + }, + "description": { + "type": "string" + }, + "descriptionLink": { + "type": "object", + "required": ["id", "text", "destination"], + "properties": { + "id": { + "type": "string" + }, + "text": { + "type": "string" + }, + "destination": { + "type": "string" + } + } + }, + "messageId": { + "type": "string" + }, + "tabId": { + "type": "string" + }, + "options": { + "type": "array", + "items": { + "type": "object", + "required": ["id", "label", "value"], + "properties": { + "id": { + "type": "string" + }, + "label": { + "type": "string" + }, + "value": { + "type": "string" + }, + "selected": { + "type": "boolean" + } + } + } + } + } } } }, @@ -646,25 +710,38 @@ "description": "Registration options regarding chat data. Currently contains the available quick actions provided by a server and the default tab data to be shown to the user in the chat UI.", "properties": { "quickActions": { - "$ref": "#/components/schemas/QuickActions" + "$ref": "#/components/schemas/QuickActions", + "description": "Chat QuickActions, supported by Server. Chat Client renders and sets up actions handler for registered QuickAction in UI." }, "mcpServers": { "type": "boolean" }, "modelSelection": { - "type": "boolean" + "type": "boolean", + "description": "Server signals to Chat Client support of model selection." }, "history": { - "type": "boolean" + "type": "boolean", + "description": "Server signals to Chat Client support of conversation history." }, "export": { - "type": "boolean" + "type": "boolean", + "description": "Server signals to Chat Client support of Chat export feature." + }, + "showLogs": { + "type": "boolean", + "description": "Server signals to Chat Client support of show logs feature." + }, + "subscriptionDetails": { + "type": "boolean", + "description": "Server signals to Client and Chat Client that it supports subscription tier operations" }, "chatNotifications": { "type": "array", "items": { "$ref": "#/components/schemas/ChatMessage" - } + }, + "description": "Server signals to Chat Client support of Chat notifications. Currently used for sending chat notifications for developer profile updates. Can be extended to support other types of notifications." } } }, @@ -917,6 +994,12 @@ }, "buttonId": { "type": "string" + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + } } } }, @@ -1051,7 +1134,8 @@ } } } - ] + ], + "required": [] }, "ContextCommandParams": { "type": "object", @@ -1431,6 +1515,15 @@ } } }, + "ExecuteShellCommandParams": { + "type": "object", + "required": ["id"], + "properties": { + "id": { + "type": "string" + } + } + }, "ConversationItemGroup": { "type": "object", "properties": { @@ -1690,6 +1783,7 @@ }, "ListMcpServersResultHeader": { "type": "object", + "required": ["title"], "properties": { "title": { "type": "string" @@ -1699,6 +1793,12 @@ }, "status": { "$ref": "#/components/schemas/ListMcpServersResultHeaderStatus" + }, + "actions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Action" + } } } }, @@ -1849,7 +1949,7 @@ }, "TabBarAction": { "type": "string", - "enum": ["export"] + "enum": ["export", "show_logs"] }, "TabBarActionParams": { "type": "object", @@ -1923,97 +2023,7 @@ } } }, - "FileParams": { - "type": "object", - "required": ["path"], - "properties": { - "path": { - "type": "string" - } - } - }, - "CopyFileParams": { - "type": "object", - "required": ["oldPath", "newPath"], - "properties": { - "oldPath": { - "type": "string" - }, - "newPath": { - "type": "string" - } - } - }, - "OpenFileDiffParams": { - "type": "object", - "required": ["originalFileUri", "isDeleted"], - "properties": { - "originalFileUri": { - "type": "string" - }, - "originalFileContent": { - "type": "string" - }, - "isDeleted": { - "type": "boolean" - }, - "fileContent": { - "type": "string" - } - } - }, - "ShowOpenDialogParams": { - "type": "object", - "properties": { - "canSelectFiles": { - "type": "boolean" - }, - "canSelectFolders": { - "type": "boolean" - }, - "canSelectMany": { - "type": "boolean" - }, - "filters": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "defaultUri": { - "type": "string" - }, - "title": { - "type": "string" - } - } - }, - "ShowSaveFileDialogParams": { - "type": "object", - "properties": { - "supportedFormats": { - "type": "array", - "items": { - "type": "string" - } - }, - "defaultUri": { - "type": "string" - } - } - }, - "ShowSaveFileDialogResult": { - "type": "object", - "required": ["targetUri"], - "properties": { - "targetUri": { - "type": "string" - } - } - }, + "EndChatParams": { "type": "object", "required": ["tabId"], diff --git a/types/codegen/schema/windowTypes.json b/types/codegen/schema/windowTypes.json new file mode 100644 index 00000000..b80f4fae --- /dev/null +++ b/types/codegen/schema/windowTypes.json @@ -0,0 +1,54 @@ +{ + "ShowOpenDialogParams": { + "type": "object", + "properties": { + "canSelectFiles": { + "type": "boolean" + }, + "canSelectFolders": { + "type": "boolean" + }, + "canSelectMany": { + "type": "boolean" + }, + "filters": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "defaultUri": { + "type": "string" + }, + "title": { + "type": "string" + } + } + }, + "ShowSaveFileDialogParams": { + "type": "object", + "properties": { + "supportedFormats": { + "type": "array", + "items": { + "type": "string" + } + }, + "defaultUri": { + "type": "string" + } + } + }, + "ShowSaveFileDialogResult": { + "type": "object", + "required": ["targetUri"], + "properties": { + "targetUri": { + "type": "string" + } + } + } +} diff --git a/types/codegen/schema/workspaceTypes.json b/types/codegen/schema/workspaceTypes.json new file mode 100644 index 00000000..28bd413d --- /dev/null +++ b/types/codegen/schema/workspaceTypes.json @@ -0,0 +1,41 @@ +{ + "FileParams": { + "type": "object", + "required": ["path"], + "properties": { + "path": { + "type": "string" + } + } + }, + "CopyFileParams": { + "type": "object", + "required": ["oldPath", "newPath"], + "properties": { + "oldPath": { + "type": "string" + }, + "newPath": { + "type": "string" + } + } + }, + "OpenFileDiffParams": { + "type": "object", + "required": ["originalFileUri", "isDeleted"], + "properties": { + "originalFileUri": { + "type": "string" + }, + "originalFileContent": { + "type": "string" + }, + "isDeleted": { + "type": "boolean" + }, + "fileContent": { + "type": "string" + } + } + } +} From a7c1712d9b1c435c07a9a42f1f4f624c4408affd Mon Sep 17 00:00:00 2001 From: Conor Stewart Date: Tue, 19 Aug 2025 12:29:01 -0700 Subject: [PATCH 32/38] fix: remove extraneous templates and add gson labels to java --- .../custom-templates/java/pojo.mustache | 616 ------------------ .../custom-templates/java/record.mustache | 1 + .../typescript/models.index.mustache | 30 - 3 files changed, 1 insertion(+), 646 deletions(-) delete mode 100644 types/codegen/custom-templates/java/pojo.mustache delete mode 100644 types/codegen/custom-templates/typescript/models.index.mustache diff --git a/types/codegen/custom-templates/java/pojo.mustache b/types/codegen/custom-templates/java/pojo.mustache deleted file mode 100644 index c03e531b..00000000 --- a/types/codegen/custom-templates/java/pojo.mustache +++ /dev/null @@ -1,616 +0,0 @@ -/** - * {{description}}{{^description}}{{classname}}{{/description}}{{#isDeprecated}} - * @deprecated{{/isDeprecated}} - */{{#isDeprecated}} -@Deprecated{{/isDeprecated}} -{{#swagger1AnnotationLibrary}} -{{#description}} -@ApiModel(description = "{{{.}}}") -{{/description}} -{{/swagger1AnnotationLibrary}} -{{#swagger2AnnotationLibrary}} -{{#description}} -@Schema(description = "{{{.}}}") -{{/description}} -{{/swagger2AnnotationLibrary}} -{{#jackson}} -@JsonPropertyOrder({ -{{#vars}} - {{classname}}.JSON_PROPERTY_{{nameInSnakeCase}}{{^-last}},{{/-last}} -{{/vars}} -}) -{{#isClassnameSanitized}} -{{^hasDiscriminatorWithNonEmptyMapping}} -@JsonTypeName("{{name}}") -{{/hasDiscriminatorWithNonEmptyMapping}} -{{/isClassnameSanitized}} -{{/jackson}} -{{>additionalModelTypeAnnotations}}{{>generatedAnnotation}}{{#discriminator}}{{>typeInfoAnnotation}}{{/discriminator}}{{>xmlAnnotation}} -{{#vendorExtensions.x-class-extra-annotation}} -{{{vendorExtensions.x-class-extra-annotation}}} -{{/vendorExtensions.x-class-extra-annotation}} -public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtensions.x-implements}}{{#-first}}implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{#-last}} {{/-last}}{{/vendorExtensions.x-implements}}{ -{{#serializableModel}} - private static final long serialVersionUID = 1L; - -{{/serializableModel}} - {{#vars}} - {{#isEnum}} - {{^isContainer}} -{{>modelInnerEnum}} - {{/isContainer}} - {{#isContainer}} - {{#mostInnerItems}} -{{>modelInnerEnum}} - {{/mostInnerItems}} - {{/isContainer}} - {{/isEnum}} - {{#gson}} - public static final String SERIALIZED_NAME_{{nameInSnakeCase}} = "{{baseName}}"; - {{/gson}} - {{#jackson}} - public static final String JSON_PROPERTY_{{nameInSnakeCase}} = "{{baseName}}"; - {{/jackson}} - {{#withXml}} - @Xml{{#isXmlAttribute}}Attribute{{/isXmlAttribute}}{{^isXmlAttribute}}Element{{/isXmlAttribute}}(name = "{{items.xmlName}}{{^items.xmlName}}{{xmlName}}{{^xmlName}}{{baseName}}{{/xmlName}}{{/items.xmlName}}"{{#xmlNamespace}}, namespace = "{{.}}"{{/xmlNamespace}}) - {{#isXmlWrapped}} - @XmlElementWrapper(name = "{{xmlName}}{{^xmlName}}{{baseName}}{{/xmlName}}"{{#xmlNamespace}}, namespace = "{{.}}"{{/xmlNamespace}}) - {{/isXmlWrapped}} - {{^isXmlAttribute}} - {{#isDateTime}} - @XmlJavaTypeAdapter(OffsetDateTimeXmlAdapter.class) - {{/isDateTime}} - {{/isXmlAttribute}} - {{/withXml}} - {{#gson}} - @SerializedName(SERIALIZED_NAME_{{nameInSnakeCase}}) - {{/gson}} - {{>nullable_var_annotations}} - {{#vendorExtensions.x-field-extra-annotation}} - {{{vendorExtensions.x-field-extra-annotation}}} - {{/vendorExtensions.x-field-extra-annotation}} - {{#vendorExtensions.x-is-jackson-optional-nullable}} - {{#isContainer}} - {{#hasChildren}}protected{{/hasChildren}}{{^hasChildren}}private{{/hasChildren}} JsonNullable<{{{datatypeWithEnum}}}> {{name}} = JsonNullable.<{{{datatypeWithEnum}}}>undefined(); - {{/isContainer}} - {{^isContainer}} - {{#hasChildren}}protected{{/hasChildren}}{{^hasChildren}}private{{/hasChildren}} JsonNullable<{{{datatypeWithEnum}}}> {{name}} = JsonNullable.<{{{datatypeWithEnum}}}>{{#defaultValue}}of({{{.}}}){{/defaultValue}}{{^defaultValue}}undefined(){{/defaultValue}}; - {{/isContainer}} - {{/vendorExtensions.x-is-jackson-optional-nullable}} - {{^vendorExtensions.x-is-jackson-optional-nullable}} - {{#isContainer}} - {{#hasChildren}}protected{{/hasChildren}}{{^hasChildren}}private{{/hasChildren}} {{{datatypeWithEnum}}} {{name}}{{#defaultValue}} = {{{.}}}{{/defaultValue}}; - {{/isContainer}} - {{^isContainer}} - {{#hasChildren}}protected{{/hasChildren}}{{^hasChildren}}private{{/hasChildren}} {{{datatypeWithEnum}}} {{name}}{{#defaultValue}} = {{{.}}}{{/defaultValue}}; - {{/isContainer}} - {{/vendorExtensions.x-is-jackson-optional-nullable}} - - {{/vars}} - public {{classname}}() { - {{#parent}} - {{#parcelableModel}} - super();{{/parcelableModel}} - {{/parent}} - {{#gson}} - {{#discriminator}} - {{#discriminator.isEnum}} - this.{{{discriminatorName}}} = this.getClass().getSimpleName(); - {{/discriminator.isEnum}} - {{/discriminator}} - {{/gson}} - } - {{#vendorExtensions.x-has-readonly-properties}} - {{^withXml}} - /** - * Constructor with only readonly parameters{{#generateConstructorWithAllArgs}}{{^vendorExtensions.x-java-all-args-constructor}} and all parameters{{/vendorExtensions.x-java-all-args-constructor}}{{/generateConstructorWithAllArgs}} - */ - {{#jsonb}}@JsonbCreator{{/jsonb}}{{#jackson}}@JsonCreator{{/jackson}} - public {{classname}}( - {{#readOnlyVars}} - {{#jsonb}}@JsonbProperty(value = "{{baseName}}"{{^required}}, nullable = true{{/required}}){{/jsonb}}{{#jackson}}@JsonProperty(JSON_PROPERTY_{{nameInSnakeCase}}){{/jackson}} {{{datatypeWithEnum}}} {{name}}{{^-last}}, {{/-last}} - {{/readOnlyVars}} - ) { - this(); - {{#readOnlyVars}} - this.{{name}} = {{#vendorExtensions.x-is-jackson-optional-nullable}}{{name}} == null ? JsonNullable.<{{{datatypeWithEnum}}}>undefined() : JsonNullable.of({{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}{{name}}{{/vendorExtensions.x-is-jackson-optional-nullable}}; - {{/readOnlyVars}} - } - {{/withXml}} - {{/vendorExtensions.x-has-readonly-properties}} -{{#vendorExtensions.x-java-all-args-constructor}} - - /** - * Constructor with all args parameters - */ - public {{classname}}({{#vendorExtensions.x-java-all-args-constructor-vars}}{{#jsonb}}@JsonbProperty(value = "{{baseName}}"{{^required}}, nullable = true{{/required}}){{/jsonb}}{{#jackson}}@JsonProperty(JSON_PROPERTY_{{nameInSnakeCase}}){{/jackson}} {{{datatypeWithEnum}}} {{name}}{{^-last}}, {{/-last}}{{/vendorExtensions.x-java-all-args-constructor-vars}}) { -{{#parent}} - super({{#parentVars}}{{name}}{{^-last}}, {{/-last}}{{/parentVars}}); -{{/parent}} - {{#vars}} - this.{{name}} = {{#vendorExtensions.x-is-jackson-optional-nullable}}{{name}} == null ? JsonNullable.<{{{datatypeWithEnum}}}>undefined() : JsonNullable.of({{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}{{name}}{{/vendorExtensions.x-is-jackson-optional-nullable}}; -{{/vars}} - } -{{/vendorExtensions.x-java-all-args-constructor}} - -{{#vars}} - {{^isReadOnly}} - public {{classname}} {{name}}({{#required}}@Nonnull{{/required}}{{^required}}@Nullable{{/required}} {{>nullable_var_annotations}} {{{datatypeWithEnum}}} {{name}}) { - {{#vendorExtensions.x-is-jackson-optional-nullable}}this.{{name}} = JsonNullable.<{{{datatypeWithEnum}}}>of({{name}});{{/vendorExtensions.x-is-jackson-optional-nullable}} - {{^vendorExtensions.x-is-jackson-optional-nullable}}this.{{name}} = {{name}};{{/vendorExtensions.x-is-jackson-optional-nullable}} - return this; - } - {{#isArray}} - - public {{classname}} add{{nameInPascalCase}}Item({{{items.datatypeWithEnum}}} {{name}}Item) { - {{#vendorExtensions.x-is-jackson-optional-nullable}} - if (this.{{name}} == null || !this.{{name}}.isPresent()) { - this.{{name}} = JsonNullable.<{{{datatypeWithEnum}}}>of({{{defaultValue}}}{{^defaultValue}}new {{#uniqueItems}}LinkedHashSet{{/uniqueItems}}{{^uniqueItems}}ArrayList{{/uniqueItems}}<>(){{/defaultValue}}); - } - try { - this.{{name}}.get().add({{name}}Item); - } catch (java.util.NoSuchElementException e) { - // this can never happen, as we make sure above that the value is present - } - return this; - {{/vendorExtensions.x-is-jackson-optional-nullable}} - {{^vendorExtensions.x-is-jackson-optional-nullable}} - if (this.{{name}} == null) { - this.{{name}} = {{{defaultValue}}}{{^defaultValue}}new {{#uniqueItems}}LinkedHashSet{{/uniqueItems}}{{^uniqueItems}}ArrayList{{/uniqueItems}}<>(){{/defaultValue}}; - } - this.{{name}}.add({{name}}Item); - return this; - {{/vendorExtensions.x-is-jackson-optional-nullable}} - } - {{/isArray}} - {{#isMap}} - - public {{classname}} put{{nameInPascalCase}}Item(String key, {{{items.datatypeWithEnum}}} {{name}}Item) { - {{#vendorExtensions.x-is-jackson-optional-nullable}} - if (this.{{name}} == null || !this.{{name}}.isPresent()) { - this.{{name}} = JsonNullable.<{{{datatypeWithEnum}}}>of({{{defaultValue}}}{{^defaultValue}}new HashMap<>(){{/defaultValue}}); - } - try { - this.{{name}}.get().put(key, {{name}}Item); - } catch (java.util.NoSuchElementException e) { - // this can never happen, as we make sure above that the value is present - } - return this; - {{/vendorExtensions.x-is-jackson-optional-nullable}} - {{^vendorExtensions.x-is-jackson-optional-nullable}} - {{^required}} - if (this.{{name}} == null) { - this.{{name}} = {{{defaultValue}}}{{^defaultValue}}new HashMap<>(){{/defaultValue}}; - } - {{/required}} - this.{{name}}.put(key, {{name}}Item); - return this; - {{/vendorExtensions.x-is-jackson-optional-nullable}} - } - {{/isMap}} - - {{/isReadOnly}} - /** - {{#description}} - * {{.}} - {{/description}} - {{^description}} - * Get {{name}} - {{/description}} - {{#minimum}} - * minimum: {{.}} - {{/minimum}} - {{#maximum}} - * maximum: {{.}} - {{/maximum}} - * @return {{name}} - {{#deprecated}} - * @deprecated - {{/deprecated}} - */ -{{#deprecated}} - @Deprecated -{{/deprecated}} - {{#required}}@Nonnull{{/required}}{{^required}}@Nullable{{/required}} - {{>nullable_var_annotations}} -{{#jsonb}} - @JsonbProperty("{{baseName}}") -{{/jsonb}} -{{#useBeanValidation}} -{{>beanValidation}} -{{/useBeanValidation}} -{{#swagger1AnnotationLibrary}} - @ApiModelProperty({{#example}}example = "{{{.}}}", {{/example}}{{#required}}required = {{required}}, {{/required}}value = "{{{description}}}") -{{/swagger1AnnotationLibrary}} -{{#swagger2AnnotationLibrary}} - @Schema({{#example}}example = "{{{.}}}", {{/example}}requiredMode = {{#required}}Schema.RequiredMode.REQUIRED{{/required}}{{^required}}Schema.RequiredMode.NOT_REQUIRED{{/required}}, description = "{{{description}}}") -{{/swagger2AnnotationLibrary}} -{{#vendorExtensions.x-extra-annotation}} - {{{vendorExtensions.x-extra-annotation}}} -{{/vendorExtensions.x-extra-annotation}} -{{#vendorExtensions.x-is-jackson-optional-nullable}} - {{!unannotated, Jackson would pick this up automatically and add it *in addition* to the _JsonNullable getter field}} - @JsonIgnore -{{/vendorExtensions.x-is-jackson-optional-nullable}} -{{^vendorExtensions.x-is-jackson-optional-nullable}}{{#jackson}}{{> jackson_annotations}}{{/jackson}}{{/vendorExtensions.x-is-jackson-optional-nullable}} - public {{{datatypeWithEnum}}} {{getter}}() { - {{#vendorExtensions.x-is-jackson-optional-nullable}} - {{#isReadOnly}}{{! A readonly attribute doesn't have setter => jackson will set null directly if explicitly returned by API, so make sure we have an empty JsonNullable}} - if ({{name}} == null) { - {{name}} = JsonNullable.<{{{datatypeWithEnum}}}>{{#defaultValue}}of({{{.}}}){{/defaultValue}}{{^defaultValue}}undefined(){{/defaultValue}}; - } - {{/isReadOnly}} - return {{name}}.orElse(null); - {{/vendorExtensions.x-is-jackson-optional-nullable}} - {{^vendorExtensions.x-is-jackson-optional-nullable}} - return {{name}}; - {{/vendorExtensions.x-is-jackson-optional-nullable}} - } - - {{#vendorExtensions.x-is-jackson-optional-nullable}} -{{> jackson_annotations}} - public JsonNullable<{{{datatypeWithEnum}}}> {{getter}}_JsonNullable() { - return {{name}}; - } - {{/vendorExtensions.x-is-jackson-optional-nullable}}{{#vendorExtensions.x-is-jackson-optional-nullable}} - @JsonProperty(JSON_PROPERTY_{{nameInSnakeCase}}) - {{#isReadOnly}}private{{/isReadOnly}}{{^isReadOnly}}public{{/isReadOnly}} void {{setter}}_JsonNullable(JsonNullable<{{{datatypeWithEnum}}}> {{name}}) { - {{! For getters/setters that have name differing from attribute name, we must include setter (albeit private) for jackson to be able to set the attribute}} - this.{{name}} = {{name}}; - } - {{/vendorExtensions.x-is-jackson-optional-nullable}} - - {{^isReadOnly}} -{{#vendorExtensions.x-setter-extra-annotation}} {{{vendorExtensions.x-setter-extra-annotation}}} -{{/vendorExtensions.x-setter-extra-annotation}}{{#jackson}}{{^vendorExtensions.x-is-jackson-optional-nullable}}{{> jackson_annotations}}{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/jackson}} public void {{setter}}({{#required}}@Nonnull{{/required}}{{^required}}@Nullable{{/required}} {{>nullable_var_annotations}} {{{datatypeWithEnum}}} {{name}}) { - {{#vendorExtensions.x-is-jackson-optional-nullable}} - this.{{name}} = JsonNullable.<{{{datatypeWithEnum}}}>of({{name}}); - {{/vendorExtensions.x-is-jackson-optional-nullable}} - {{^vendorExtensions.x-is-jackson-optional-nullable}} - this.{{name}} = {{name}}; - {{/vendorExtensions.x-is-jackson-optional-nullable}} - } - {{/isReadOnly}} - - {{/vars}} - {{#parent}} - {{#readWriteVars}} - {{#isOverridden}} - @Override - public {{classname}} {{name}}({{>nullable_var_annotations}} {{{datatypeWithEnum}}} {{name}}) { - {{#vendorExtensions.x-is-jackson-optional-nullable}} - this.{{setter}}(JsonNullable.<{{{datatypeWithEnum}}}>of({{name}})); - {{/vendorExtensions.x-is-jackson-optional-nullable}} - {{^vendorExtensions.x-is-jackson-optional-nullable}} - this.{{setter}}({{name}}); - {{/vendorExtensions.x-is-jackson-optional-nullable}} - return this; - } - - {{/isOverridden}} - {{/readWriteVars}} - {{/parent}} - @Override - public boolean equals(Object o) { - {{#useReflectionEqualsHashCode}} - return EqualsBuilder.reflectionEquals(this, o, false, null, true); - {{/useReflectionEqualsHashCode}} - {{^useReflectionEqualsHashCode}} - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - }{{#hasVars}} - {{classname}} {{classVarName}} = ({{classname}}) o; - return {{#vars}}{{#vendorExtensions.x-is-jackson-optional-nullable}}equalsNullable(this.{{name}}, {{classVarName}}.{{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}{{#isByteArray}}Arrays{{/isByteArray}}{{^isByteArray}}Objects{{/isByteArray}}.equals(this.{{name}}, {{classVarName}}.{{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^-last}} && - {{/-last}}{{/vars}}{{#parent}} && - super.equals(o){{/parent}};{{/hasVars}}{{^hasVars}} - return {{#parent}}super.equals(o){{/parent}}{{^parent}}true{{/parent}};{{/hasVars}} - {{/useReflectionEqualsHashCode}} - }{{#vendorExtensions.x-jackson-optional-nullable-helpers}} - - private static boolean equalsNullable(JsonNullable a, JsonNullable b) { - return a == b || (a != null && b != null && a.isPresent() && b.isPresent() && Objects.deepEquals(a.get(), b.get())); - }{{/vendorExtensions.x-jackson-optional-nullable-helpers}} - - @Override - public int hashCode() { - {{#useReflectionEqualsHashCode}} - return HashCodeBuilder.reflectionHashCode(this); - {{/useReflectionEqualsHashCode}} - {{^useReflectionEqualsHashCode}} - return Objects.hash({{#vars}}{{#vendorExtensions.x-is-jackson-optional-nullable}}hashCodeNullable({{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}{{^isByteArray}}{{name}}{{/isByteArray}}{{#isByteArray}}Arrays.hashCode({{name}}){{/isByteArray}}{{/vendorExtensions.x-is-jackson-optional-nullable}}{{^-last}}, {{/-last}}{{/vars}}{{#parent}}{{#hasVars}}, {{/hasVars}}super.hashCode(){{/parent}}); - {{/useReflectionEqualsHashCode}} - }{{#vendorExtensions.x-jackson-optional-nullable-helpers}} - - private static int hashCodeNullable(JsonNullable a) { - if (a == null) { - return 1; - } - return a.isPresent() ? Arrays.deepHashCode(new Object[]{a.get()}) : 31; - }{{/vendorExtensions.x-jackson-optional-nullable-helpers}} - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class {{classname}} {\n"); - {{#parent}} - sb.append(" ").append(toIndentedString(super.toString())).append("\n"); - {{/parent}} - {{#vars}} - sb.append(" {{name}}: ").append({{#isPassword}}"*"{{/isPassword}}{{^isPassword}}toIndentedString({{name}}){{/isPassword}}).append("\n"); - {{/vars}} - sb.append("}"); - return sb.toString(); - } - - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private{{#jsonb}} static{{/jsonb}} String toIndentedString(Object o) { - if (o == null) { - return "null"; - } - return o.toString().replace("\n", "\n "); - } -{{#supportUrlQuery}} - - /** - * Convert the instance into URL query string. - * - * @return URL query string - */ - public String toUrlQueryString() { - return toUrlQueryString(null); - } - - /** - * Convert the instance into URL query string. - * - * @param prefix prefix of the query string - * @return URL query string - */ - public String toUrlQueryString(String prefix) { - String suffix = ""; - String containerSuffix = ""; - String containerPrefix = ""; - if (prefix == null) { - // style=form, explode=true, e.g. /pet?name=cat&type=manx - prefix = ""; - } else { - // deepObject style e.g. /pet?id[name]=cat&id[type]=manx - prefix = prefix + "["; - suffix = "]"; - containerSuffix = "]"; - containerPrefix = "["; - } - - StringJoiner joiner = new StringJoiner("&"); - - {{#allVars}} - // add `{{baseName}}` to the URL query string - {{#isArray}} - {{#items.isPrimitiveType}} - {{#uniqueItems}} - if ({{getter}}() != null) { - int i = 0; - for ({{{items.datatypeWithEnum}}} _item : {{getter}}()) { - try { - joiner.add(String.format("%s{{baseName}}%s%s=%s", prefix, suffix, - "".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, i, containerSuffix), - URLEncoder.encode(String.valueOf(_item), "UTF-8").replaceAll("\\+", "%20"))); - } catch (UnsupportedEncodingException e) { - // Should never happen, UTF-8 is always supported - throw new RuntimeException(e); - } - } - i++; - } - {{/uniqueItems}} - {{^uniqueItems}} - if ({{getter}}() != null) { - for (int i = 0; i < {{getter}}().size(); i++) { - try { - joiner.add(String.format("%s{{baseName}}%s%s=%s", prefix, suffix, - "".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, i, containerSuffix), - URLEncoder.encode(String.valueOf({{getter}}().get(i)), "UTF-8").replaceAll("\\+", "%20"))); - } catch (UnsupportedEncodingException e) { - // Should never happen, UTF-8 is always supported - throw new RuntimeException(e); - } - } - } - {{/uniqueItems}} - {{/items.isPrimitiveType}} - {{^items.isPrimitiveType}} - {{#items.isModel}} - {{#uniqueItems}} - if ({{getter}}() != null) { - int i = 0; - for ({{{items.dataType}}} _item : {{getter}}()) { - if (_item != null) { - joiner.add(_item.toUrlQueryString(String.format("%s{{baseName}}%s%s", prefix, suffix, - "".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, i, containerSuffix)))); - } - } - i++; - } - {{/uniqueItems}} - {{^uniqueItems}} - if ({{getter}}() != null) { - for (int i = 0; i < {{getter}}().size(); i++) { - if ({{getter}}().get(i) != null) { - joiner.add({{getter}}().get(i).toUrlQueryString(String.format("%s{{baseName}}%s%s", prefix, suffix, - "".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, i, containerSuffix)))); - } - } - } - {{/uniqueItems}} - {{/items.isModel}} - {{^items.isModel}} - {{#uniqueItems}} - if ({{getter}}() != null) { - int i = 0; - for ({{{items.dataType}}} _item : {{getter}}()) { - if (_item != null) { - try { - joiner.add(String.format("%s{{baseName}}%s%s=%s", prefix, suffix, - "".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, i, containerSuffix), - URLEncoder.encode(String.valueOf(_item), "UTF-8").replaceAll("\\+", "%20"))); - } catch (UnsupportedEncodingException e) { - // Should never happen, UTF-8 is always supported - throw new RuntimeException(e); - } - } - i++; - } - } - {{/uniqueItems}} - {{^uniqueItems}} - if ({{getter}}() != null) { - for (int i = 0; i < {{getter}}().size(); i++) { - if ({{getter}}().get(i) != null) { - try { - joiner.add(String.format("%s{{baseName}}%s%s=%s", prefix, suffix, - "".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, i, containerSuffix), - URLEncoder.encode(String.valueOf({{getter}}().get(i)), "UTF-8").replaceAll("\\+", "%20"))); - } catch (UnsupportedEncodingException e) { - // Should never happen, UTF-8 is always supported - throw new RuntimeException(e); - } - } - } - } - {{/uniqueItems}} - {{/items.isModel}} - {{/items.isPrimitiveType}} - {{/isArray}} - {{^isArray}} - {{#isMap}} - {{^items.isModel}} - if ({{getter}}() != null) { - for (String _key : {{getter}}().keySet()) { - try { - joiner.add(String.format("%s{{baseName}}%s%s=%s", prefix, suffix, - "".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, _key, containerSuffix), - {{getter}}().get(_key), URLEncoder.encode(String.valueOf({{getter}}().get(_key)), "UTF-8").replaceAll("\\+", "%20"))); - } catch (UnsupportedEncodingException e) { - // Should never happen, UTF-8 is always supported - throw new RuntimeException(e); - } - } - } - {{/items.isModel}} - {{#items.isModel}} - if ({{getter}}() != null) { - for (String _key : {{getter}}().keySet()) { - if ({{getter}}().get(_key) != null) { - joiner.add({{getter}}().get(_key).toUrlQueryString(String.format("%s{{baseName}}%s%s", prefix, suffix, - "".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, _key, containerSuffix)))); - } - } - } - {{/items.isModel}} - {{/isMap}} - {{^isMap}} - {{#isPrimitiveType}} - if ({{getter}}() != null) { - try { - joiner.add(String.format("%s{{{baseName}}}%s=%s", prefix, suffix, URLEncoder.encode(String.valueOf({{{getter}}}()), "UTF-8").replaceAll("\\+", "%20"))); - } catch (UnsupportedEncodingException e) { - // Should never happen, UTF-8 is always supported - throw new RuntimeException(e); - } - } - {{/isPrimitiveType}} - {{^isPrimitiveType}} - {{#isModel}} - if ({{getter}}() != null) { - joiner.add({{getter}}().toUrlQueryString(prefix + "{{{baseName}}}" + suffix)); - } - {{/isModel}} - {{^isModel}} - if ({{getter}}() != null) { - try { - joiner.add(String.format("%s{{{baseName}}}%s=%s", prefix, suffix, URLEncoder.encode(String.valueOf({{{getter}}}()), "UTF-8").replaceAll("\\+", "%20"))); - } catch (UnsupportedEncodingException e) { - // Should never happen, UTF-8 is always supported - throw new RuntimeException(e); - } - } - {{/isModel}} - {{/isPrimitiveType}} - {{/isMap}} - {{/isArray}} - - {{/allVars}} - return joiner.toString(); - } -{{/supportUrlQuery}} -{{#parcelableModel}} - - public void writeToParcel(Parcel out, int flags) { -{{#model}} -{{#isArray}} - out.writeList(this); -{{/isArray}} -{{^isArray}} -{{#parent}} - super.writeToParcel(out, flags); -{{/parent}} -{{#vars}} - out.writeValue({{name}}); -{{/vars}} -{{/isArray}} -{{/model}} - } - - {{classname}}(Parcel in) { -{{#isArray}} - in.readTypedList(this, {{arrayModelType}}.CREATOR); -{{/isArray}} -{{^isArray}} -{{#parent}} - super(in); -{{/parent}} -{{#vars}} -{{#isPrimitiveType}} - {{name}} = ({{{datatypeWithEnum}}})in.readValue(null); -{{/isPrimitiveType}} -{{^isPrimitiveType}} - {{name}} = ({{{datatypeWithEnum}}})in.readValue({{complexType}}.class.getClassLoader()); -{{/isPrimitiveType}} -{{/vars}} -{{/isArray}} - } - - public int describeContents() { - return 0; - } - - public static final Parcelable.Creator<{{classname}}> CREATOR = new Parcelable.Creator<{{classname}}>() { - public {{classname}} createFromParcel(Parcel in) { -{{#model}} -{{#isArray}} - {{classname}} result = new {{classname}}(); - result.addAll(in.readArrayList({{arrayModelType}}.class.getClassLoader())); - return result; -{{/isArray}} -{{^isArray}} - return new {{classname}}(in); -{{/isArray}} -{{/model}} - } - public {{classname}}[] newArray(int size) { - return new {{classname}}[size]; - } - }; -{{/parcelableModel}} -{{#generateBuilders}} - - {{>javaBuilder}} -{{/generateBuilders}} - -} diff --git a/types/codegen/custom-templates/java/record.mustache b/types/codegen/custom-templates/java/record.mustache index a800d678..c63206cc 100644 --- a/types/codegen/custom-templates/java/record.mustache +++ b/types/codegen/custom-templates/java/record.mustache @@ -6,6 +6,7 @@ public record {{classname}}( {{#vars}} {{#description}} // {{description}} {{/description}} @JsonProperty("{{baseName}}") + @SerializedName("{{baseName}}") {{#required}}@Nonnull{{/required}}{{^required}}@Nullable{{/required}} {{{datatypeWithEnum}}} {{name}}{{^-last}},{{/-last}}{{^-last}} {{/-last}} diff --git a/types/codegen/custom-templates/typescript/models.index.mustache b/types/codegen/custom-templates/typescript/models.index.mustache deleted file mode 100644 index 658aaf51..00000000 --- a/types/codegen/custom-templates/typescript/models.index.mustache +++ /dev/null @@ -1,30 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ - -{{#models}} -{{#model}} -{{^withoutRuntimeChecks}} -export * from './{{{ classFilename }}}{{importFileExtension}}'; -{{#useSagaAndRecords}} -{{^isEnum}} -export * from './{{{ classFilename }}}Record{{importFileExtension}}'; -{{/isEnum}} -{{/useSagaAndRecords}} -{{/withoutRuntimeChecks}} -{{#withoutRuntimeChecks}} -{{#isEnum}} -{{>modelEnumInterfaces}} -{{/isEnum}} -{{^isEnum}} -{{#oneOf}} -{{#-first}} -{{>modelOneOfInterfaces}} -{{/-first}} -{{/oneOf}} -{{^oneOf}} -{{>modelGenericInterfaces}} -{{/oneOf}} -{{/isEnum}} -{{/withoutRuntimeChecks}} -{{/model}} -{{/models}} From 252de9c23533b5eb829e8739037ff6a782e0a447 Mon Sep 17 00:00:00 2001 From: Conor Stewart Date: Wed, 20 Aug 2025 12:25:13 -0700 Subject: [PATCH 33/38] fix: move external imports to top of file --- .github/workflows/types-codegen-pr.yaml | 2 -- .../custom-templates/typescript/index.mustache | 2 -- types/codegen/scripts/post-typescript.js | 15 +++++++++++---- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/.github/workflows/types-codegen-pr.yaml b/.github/workflows/types-codegen-pr.yaml index e06745fb..ec4cdf36 100644 --- a/.github/workflows/types-codegen-pr.yaml +++ b/.github/workflows/types-codegen-pr.yaml @@ -6,7 +6,6 @@ on: - main paths: - 'types/codegen/schema/**' - workflow_dispatch: jobs: validate-pr: @@ -21,7 +20,6 @@ jobs: uses: actions/setup-node@v4 with: node-version: '20.x' - #should we cache: 'npm' - name: Install root dependencies working-directory: . diff --git a/types/codegen/custom-templates/typescript/index.mustache b/types/codegen/custom-templates/typescript/index.mustache index 9590110f..f7688c7d 100644 --- a/types/codegen/custom-templates/typescript/index.mustache +++ b/types/codegen/custom-templates/typescript/index.mustache @@ -1,5 +1,3 @@ -/* tslint:disable */ -/* eslint-disable */ {{!This is a comment. Removed the export of runtimes because we do not need those functions. Was causing error because exported a def called ResponseError which is also used by vscode LSP}} diff --git a/types/codegen/scripts/post-typescript.js b/types/codegen/scripts/post-typescript.js index 9e16c0c8..2d210a9d 100644 --- a/types/codegen/scripts/post-typescript.js +++ b/types/codegen/scripts/post-typescript.js @@ -78,12 +78,19 @@ const importResult = processImportMappings() // Read the generated index.ts file let indexContent = fs.readFileSync(indexPath, 'utf8') -// Find the position after existing imports -const importEndPos = indexContent.lastIndexOf('import') +// Find the insertion position - either at top of file or after lint disable comments let insertPos = 0 -if (importEndPos !== -1) { - insertPos = indexContent.indexOf('\n', importEndPos) + 1 +// Check if file starts with lint disable comments +const lintDisablePattern = /^(\s*\/\*\s*tslint:disable\s*\*\/\s*\/\*\s*eslint-disable\s*\*\/\s*)/ +const lintDisableMatch = indexContent.match(lintDisablePattern) + +if (lintDisableMatch) { + // Insert after the lint disable comments + insertPos = lintDisableMatch[0].length +} else { + // Insert at the very top of the file + insertPos = 0 } // Insert import statements and constants after existing imports From 28ee7640dab43b42d320753cd7837995009162ee Mon Sep 17 00:00:00 2001 From: chungjac Date: Wed, 20 Aug 2025 17:12:55 -0700 Subject: [PATCH 34/38] fix: initialize telemetry asynchronously without blocking (#666) ## Problem VSCode Q chat experiences ~60-second delays when the telemetry endpoint `aws-language-servers.us-east-1.amazonaws.com` is not allowlisted in corporate networks. Root Cause: - Telemetry initialization runs synchronously during LSP server startup - OTLPMetricExporter and OTLPLogExporter each attempt HTTP connections with timeouts - Chat remains unresponsive until all telemetry timeouts complete https://github.com/user-attachments/assets/88f89a4d-5321-4019-a3ec-8e6c87631d77 ## Solution Make telemetry initialization to be non-blocking. Changes: - Wrap telemetry setup in setImmediate() callback - LSP initialization returns immediately with `{ capabilities: {} }` - Telemetry initializes asynchronously in background ## Testing Chat responds quickly even when telemetry URL is blocked https://github.com/user-attachments/assets/463bff7f-df24-4daf-80e9-086b073551f2 ## License By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license. --- runtimes/runtimes/util/telemetryLspServer.ts | 33 ++++++++++++-------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/runtimes/runtimes/util/telemetryLspServer.ts b/runtimes/runtimes/util/telemetryLspServer.ts index a741d5b8..2b4f4c17 100644 --- a/runtimes/runtimes/util/telemetryLspServer.ts +++ b/runtimes/runtimes/util/telemetryLspServer.ts @@ -47,23 +47,30 @@ export function getTelemetryLspServer( const optOut = params.initializationOptions?.telemetryOptOut ?? true // telemetry disabled if option not provided const endpoint = runtime.getConfiguration('TELEMETRY_GATEWAY_ENDPOINT') ?? DEFAULT_TELEMETRY_ENDPOINT - logging.debug(`Configuring Runtimes OperationalTelemetry with endpoint: ${endpoint}`) + // Initialize telemetry asynchronously without blocking + setImmediate(() => { + try { + logging.debug(`Configuring Runtimes OperationalTelemetry with endpoint: ${endpoint}`) - const optel = OperationalTelemetryService.getInstance({ - serviceName: props.name, - serviceVersion: props.version, - extendedClientInfo: params.initializationOptions?.aws?.clientInfo, - logging: logging, - endpoint: endpoint, - telemetryOptOut: optOut, - }) + const optel = OperationalTelemetryService.getInstance({ + serviceName: props.name, + serviceVersion: props.version, + extendedClientInfo: params.initializationOptions?.aws?.clientInfo, + logging: logging, + endpoint: endpoint, + telemetryOptOut: optOut, + }) - OperationalTelemetryProvider.setTelemetryInstance(optel) + OperationalTelemetryProvider.setTelemetryInstance(optel) - logging.info(`Initialized Runtimes OperationalTelemetry with optOut=${optOut}`) + logging.info(`Initialized Runtimes OperationalTelemetry with optOut=${optOut}`) - setServerCrashTelemetryListeners() - setMemoryUsageTelemetry() + setServerCrashTelemetryListeners() + setMemoryUsageTelemetry() + } catch (error) { + logging.warn(`Failed to initialize telemetry: ${error}`) + } + }) return { capabilities: {}, From 37d3cfd42cb56dd302bca8111cfbf22dd85dd2ff Mon Sep 17 00:00:00 2001 From: Bryce Ito Date: Wed, 20 Aug 2025 21:36:22 -0700 Subject: [PATCH 35/38] chore: add timeout to ensure error flushes to stdout/err on auth failure (#589) ## Problem No log output for initializeAuth failure ## Solution Add a timeout before process kill to ensure the buffer flushes Tested locally by directly modifying the prod artifact. Note that the webpacked version appears to only output to `stdout` (instead of `stderr`, which should be expected with a `console.error` ## License By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license. --- runtimes/runtimes/standalone.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/runtimes/runtimes/standalone.ts b/runtimes/runtimes/standalone.ts index 0c6c8c6a..54e8bb9f 100644 --- a/runtimes/runtimes/standalone.ts +++ b/runtimes/runtimes/standalone.ts @@ -200,7 +200,11 @@ export const standalone = (props: RuntimeProps) => { }, error => { console.error(error) - process.exit(10) + // arbitrary 5 second timeout to ensure console.error flushes before process exit + // note: webpacked version may output exclusively to stdout, not stderr. + setTimeout(() => { + process.exit(10) + }, 5000) } ) .catch((error: Error) => { From e0bd323afa1ff17f7fda511b35fbfca1b338e16a Mon Sep 17 00:00:00 2001 From: Conor Stewart Date: Fri, 22 Aug 2025 10:40:21 -0700 Subject: [PATCH 36/38] fix: updated run scripts --- types/codegen/.gitignore | 2 ++ types/codegen/README.md | 28 +++++++++---------- .../custom-templates/java/pom.mustache | 6 ++-- types/codegen/openapitools.json | 2 +- types/codegen/package.json | 11 ++++---- types/codegen/tsconfig.json | 2 +- 6 files changed, 25 insertions(+), 26 deletions(-) diff --git a/types/codegen/.gitignore b/types/codegen/.gitignore index 65afc6bc..2abef54d 100644 --- a/types/codegen/.gitignore +++ b/types/codegen/.gitignore @@ -12,3 +12,5 @@ node_modules/ # Build outputs dist/ + +schema/complete-schema.json \ No newline at end of file diff --git a/types/codegen/README.md b/types/codegen/README.md index a6d4d32e..4e4af8a9 100644 --- a/types/codegen/README.md +++ b/types/codegen/README.md @@ -7,8 +7,8 @@ This directory contains scripts and configuration for generating TypeScript and The code generation process combines multiple schema files into a complete OpenAPI specification and generates both TypeScript and Java types with custom templates, import mappings, and validation. **Running `npm run generate` will automatically generate:** -- **TypeScript types** in `generated/typescript/` - Complete type definitions and runtime client -- **Java model classes** in `generated/java/` - Filtered model classes for specific use cases +- **TypeScript types** in `generated/typescript/` - Complete type definitions +- **Java model classes** in `generated/java/` - Java model classes with custom templates ## Directory Structure @@ -21,7 +21,7 @@ types/codegen/ │ ├── generate-complete-schema.js # Combines all schema files │ ├── post-typescript.js # TypeScript post-processing │ ├── post-test.js # Model validation script -│ ├── pre-typescript.js # TypeScript pre-processing +│ ├── clean.js # Cleanup utilities │ └── constants.ts # Constants to inject ├── custom-templates/ # Custom Mustache templates │ ├── typescript/ # TypeScript-specific templates @@ -45,14 +45,13 @@ types/codegen/ - Conflict detection and warnings for duplicate schema names ### 2. Code Generation (OpenAPI Generator CLI) -- **TypeScript Generator**: Generates complete TypeScript types and runtime +- **TypeScript Generator**: Generates complete TypeScript types - Uses `typescript-fetch` generator with custom templates - Generates interfaces, types, and enum unions - - Includes runtime API client code -- **Java Generator**: Generates filtered Java model classes - - Uses selective model generation via `global-property.models` - - Only generates specific models needed for Java integration +- **Java Generator**: Generates Java model classes + - Uses custom templates for modern Java features - Targets Java 21 with modern features + - Supports model filtering via `global-property.models` when needed ### 3. Post-Processing (`post-typescript.js`) - Processes import mappings from `openapitools.json` @@ -94,7 +93,7 @@ npm run test:verbose The main configuration file contains detailed settings for both TypeScript and Java generators: #### TypeScript Generator Settings -- **Generator**: `typescript-fetch` - Generates TypeScript types with fetch-based runtime +- **Generator**: `typescript-fetch` - Generates TypeScript types - **ES6 Support**: `supportsES6: true` - Modern JavaScript features - **Property Naming**: `camelCase` for both models and enums - **String Enums**: `stringEnums: true` - Generates union types instead of numeric enums @@ -110,16 +109,16 @@ The main configuration file contains detailed settings for both TypeScript and J - **Validation**: Bean validation disabled for lighter models - **Legacy Behavior**: `legacyDiscriminatorBehavior: false` - Modern discriminator handling -### Model Filtering +### Model Filtering (Optional) -Java generator uses selective model generation via `global-property.models`: +Java generator supports selective model generation via `global-property.models` when needed: ```json "global-property": { - "models": "IconType:ContextCommandGroup:QuickActionCommand:ContextCommand:CursorPosition:FileParams:CopyFileParams:OpenFileDiffParams:ShowOpenDialogParams:ShowSaveFileDialogParams:ShowSaveFileDialogResult" + "models": "IconType:ContextCommandGroup:QuickActionCommand:ContextCommand" } ``` -This generates only the specified models, making the Java output focused on specific use cases. +When specified, this generates only the listed models. If omitted, all models are generated. ### Import Mappings @@ -176,13 +175,12 @@ Handle language-specific reserved words: ### TypeScript Output (`generated/typescript/`) - Complete type definitions for all schema models -- Runtime API client with fetch-based implementation - Proper import statements for external dependencies - Injected constants and utilities - NPM package ready for distribution ### Java Output (`generated/java/`) -- Selective model classes (only specified models via filtering) +- Java model classes with custom templates - Java 21 compatible code - LSP4J integration for language server types - Maven/Gradle compatible structure diff --git a/types/codegen/custom-templates/java/pom.mustache b/types/codegen/custom-templates/java/pom.mustache index dc02b815..895674a0 100644 --- a/types/codegen/custom-templates/java/pom.mustache +++ b/types/codegen/custom-templates/java/pom.mustache @@ -45,8 +45,8 @@ maven-compiler-plugin 3.8.1 - 21 - 21 + {{#sourceCompatibility}}{{sourceCompatibility}}{{/sourceCompatibility}}{{^sourceCompatibility}}21{{/sourceCompatibility}} + {{#targetCompatibility}}{{targetCompatibility}}{{/targetCompatibility}}{{^targetCompatibility}}21{{/targetCompatibility}} true 128m 512m @@ -107,7 +107,7 @@ 3.6.3 none - 21 + {{#sourceCompatibility}}{{sourceCompatibility}}{{/sourceCompatibility}}{{^sourceCompatibility}}21{{/sourceCompatibility}} diff --git a/types/codegen/openapitools.json b/types/codegen/openapitools.json index ff4241b3..61cacb3d 100644 --- a/types/codegen/openapitools.json +++ b/types/codegen/openapitools.json @@ -46,7 +46,7 @@ "additionalProperties": { "useOneOfInterfaces": true, "legacyDiscriminatorBehavior": false, - "java8": false, + "java8": true, "dateLibrary": "java8", "serializableModel": false, "useBeanValidation": false, diff --git a/types/codegen/package.json b/types/codegen/package.json index 7274610a..702f14f6 100644 --- a/types/codegen/package.json +++ b/types/codegen/package.json @@ -1,20 +1,19 @@ { - "name": "chat-types-generator", + "name": "type-generator", "version": "0.0.1", "description": "Generate TypeScript defintiinons from JSON Schema using OpenAPI Generator", "main": "generated/typescript/src/index.ts", "scripts": { "clean": "node scripts/clean.js", - "generate-full-schema": "node scripts/generate-complete-schema.js", - "generate": "npm run generate-full-schema && openapi-generator-cli generate && node scripts/post-typescript.js && npm run test", + "process-schemas": "node scripts/generate-complete-schema.js", + "generate": "npm run process-schemas && openapi-generator-cli generate && npm run post-process && npm run test", "generate:only": "openapi-generator-cli generate", - "generate:no-post": "npm run generate-full-schema && openapi-generator-cli generate && node scripts/post-typescript.js", + "generate:no-post": "npm run process-schemas && openapi-generator-cli generate && npm run post-process", "post-process": "node scripts/post-typescript.js", "test": "node scripts/post-test.js", "test:verbose": "node scripts/post-test.js --verbose", "test:unit": "ts-mocha -b 'tests/unit/**/*.test.js' --bail false", - "test:all": "npm run test && npm run test:unit", - "validate": "npm run test" + "test:all": "npm run test && npm run test:unit" }, "devDependencies": { "@openapitools/openapi-generator-cli": "^2.21.4", diff --git a/types/codegen/tsconfig.json b/types/codegen/tsconfig.json index 192bd06a..b0bb1ec3 100644 --- a/types/codegen/tsconfig.json +++ b/types/codegen/tsconfig.json @@ -7,6 +7,6 @@ "outDir": "dist", "typeRoots": ["node_modules/@types"] }, - "include": ["*.ts"], + "include": ["**/*.ts"], "exclude": ["dist", "node_modules"] } From 5d7fd5ee066ef29703f889116f0effa046d40f8a Mon Sep 17 00:00:00 2001 From: Conor Stewart Date: Fri, 22 Aug 2025 10:58:48 -0700 Subject: [PATCH 37/38] fix: make local building more robust --- chat-client-ui-types/package.json | 3 +- chat-client-ui-types/src/uiContracts.ts | 7 ++- package-lock.json | 16 +---- runtimes/package.json | 1 - runtimes/protocol/chat.ts | 80 ++++++++++++------------- types/index.ts | 1 + 6 files changed, 47 insertions(+), 61 deletions(-) diff --git a/chat-client-ui-types/package.json b/chat-client-ui-types/package.json index 4096ff5c..3a1b1da4 100644 --- a/chat-client-ui-types/package.json +++ b/chat-client-ui-types/package.json @@ -18,7 +18,6 @@ "author": "Amazon Web Services", "license": "Apache-2.0", "dependencies": { - "@aws/language-server-runtimes-types": "^0.1.56", - "@local/language-server-runtimes-generated-types": "file:../types/codegen/generated/typescript" + "@aws/language-server-runtimes-types": "^0.1.56" } } diff --git a/chat-client-ui-types/src/uiContracts.ts b/chat-client-ui-types/src/uiContracts.ts index 4ef84ea2..e7962c2b 100644 --- a/chat-client-ui-types/src/uiContracts.ts +++ b/chat-client-ui-types/src/uiContracts.ts @@ -1,16 +1,17 @@ -import { OPEN_TAB_REQUEST_METHOD, GET_SERIALIZED_CHAT_REQUEST_METHOD } from '@aws/language-server-runtimes-types' import { InsertToCursorPositionParams, ChatOptions, CodeSelectionType, ReferenceTrackerInformation, + OPEN_TAB_REQUEST_METHOD, OpenTabResult, + GET_SERIALIZED_CHAT_REQUEST_METHOD, GetSerializedChatResult, ChatPrompt, OpenFileDialogParams, DropFilesParams, -} from '@local/language-server-runtimes-generated-types' -export { InsertToCursorPositionParams } from '@local/language-server-runtimes-generated-types' +} from '@aws/language-server-runtimes-types' +export { InsertToCursorPositionParams } from '@aws/language-server-runtimes-types' export type AuthFollowUpType = 'full-auth' | 're-auth' | 'missing_scopes' | 'use-supported-auth' export function isValidAuthFollowUpType(value: string): value is AuthFollowUpType { diff --git a/package-lock.json b/package-lock.json index 5ab8fcc8..fb9f2ef2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,6 @@ "license": "Apache-2.0", "workspaces": [ "types", - "types/codegen/generated/typescript", "runtimes", "chat-client-ui-types" ], @@ -42,8 +41,7 @@ "version": "0.1.62", "license": "Apache-2.0", "dependencies": { - "@aws/language-server-runtimes-types": "^0.1.56", - "@local/language-server-runtimes-generated-types": "file:../types/codegen/generated/typescript" + "@aws/language-server-runtimes-types": "^0.1.56" } }, "node_modules/@apidevtools/json-schema-ref-parser": { @@ -552,10 +550,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@local/language-server-runtimes-generated-types": { - "resolved": "types/codegen/generated/typescript", - "link": true - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -4694,7 +4688,6 @@ "license": "Apache-2.0", "dependencies": { "@aws/language-server-runtimes-types": "^0.1.56", - "@local/language-server-runtimes-generated-types": "file:../types/codegen/generated/typescript", "@opentelemetry/api": "^1.9.0", "@opentelemetry/api-logs": "^0.200.0", "@opentelemetry/core": "^2.0.0", @@ -4754,13 +4747,6 @@ "vscode-languageserver-textdocument": "^1.0.12", "vscode-languageserver-types": "^3.17.5" } - }, - "types/codegen/generated/typescript": { - "name": "@local/language-server-runtimes-generated-types", - "version": "0.0.1", - "devDependencies": { - "typescript": "^4.0 || ^5.0" - } } } } diff --git a/runtimes/package.json b/runtimes/package.json index b50cb10f..9297202c 100644 --- a/runtimes/package.json +++ b/runtimes/package.json @@ -31,7 +31,6 @@ }, "dependencies": { "@aws/language-server-runtimes-types": "^0.1.56", - "@local/language-server-runtimes-generated-types": "file:../types/codegen/generated/typescript", "@opentelemetry/api": "^1.9.0", "@opentelemetry/api-logs": "^0.200.0", "@opentelemetry/core": "^2.0.0", diff --git a/runtimes/protocol/chat.ts b/runtimes/protocol/chat.ts index 8760419f..1de86416 100644 --- a/runtimes/protocol/chat.ts +++ b/runtimes/protocol/chat.ts @@ -1,4 +1,18 @@ import { + ChatParams, + ChatResult, + EndChatParams, + EndChatResult, + FeedbackParams, + FollowUpClickParams, + InfoLinkClickParams, + InsertToCursorPositionParams, + LinkClickParams, + QuickActionParams, + SourceLinkClickParams, + TabAddParams, + TabChangeParams, + TabRemoveParams, ProtocolNotificationType, ProtocolRequestType, CHAT_REQUEST_METHOD, @@ -15,77 +29,63 @@ import { TAB_CHANGE_NOTIFICATION_METHOD, TAB_REMOVE_NOTIFICATION_METHOD, AutoParameterStructuresProtocolRequestType, - OPEN_TAB_REQUEST_METHOD, - CHAT_UPDATE_NOTIFICATION_METHOD, - FILE_CLICK_NOTIFICATION_METHOD, - INLINE_CHAT_REQUEST_METHOD, - CONTEXT_COMMAND_NOTIFICATION_METHOD, - CREATE_PROMPT_NOTIFICATION_METHOD, - INLINE_CHAT_RESULT_NOTIFICATION_METHOD, - PINNED_CONTEXT_NOTIFICATION_METHOD, - LIST_CONVERSATIONS_REQUEST_METHOD, - CONVERSATION_CLICK_REQUEST_METHOD, - GET_SERIALIZED_CHAT_REQUEST_METHOD, - TAB_BAR_ACTION_REQUEST_METHOD, - CHAT_OPTIONS_UPDATE_NOTIFICATION_METHOD, - PROMPT_INPUT_OPTION_CHANGE_METHOD, - BUTTON_CLICK_REQUEST_METHOD, - LIST_MCP_SERVERS_REQUEST_METHOD, - MCP_SERVER_CLICK_REQUEST_METHOD, - RULE_CLICK_REQUEST_METHOD, - LIST_RULES_REQUEST_METHOD, - PINNED_CONTEXT_ADD_NOTIFICATION_METHOD, - PINNED_CONTEXT_REMOVE_NOTIFICATION_METHOD, - ACTIVE_EDITOR_CHANGED_NOTIFICATION_METHOD, - OPEN_FILE_DIALOG_METHOD, - ChatParams, - ChatResult, - EndChatParams, - EndChatResult, - FeedbackParams, - FollowUpClickParams, - InfoLinkClickParams, - InsertToCursorPositionParams, - LinkClickParams, - QuickActionParams, - SourceLinkClickParams, - TabAddParams, - TabChangeParams, - TabRemoveParams, EncryptedChatParams, EncryptedQuickActionParams, QuickActionResult, + OPEN_TAB_REQUEST_METHOD, OpenTabParams, OpenTabResult, + CHAT_UPDATE_NOTIFICATION_METHOD, + FILE_CLICK_NOTIFICATION_METHOD, ChatUpdateParams, FileClickParams, + INLINE_CHAT_REQUEST_METHOD, InlineChatParams, InlineChatResult, + CONTEXT_COMMAND_NOTIFICATION_METHOD, ContextCommandParams, + CREATE_PROMPT_NOTIFICATION_METHOD, CreatePromptParams, + INLINE_CHAT_RESULT_NOTIFICATION_METHOD, + PINNED_CONTEXT_NOTIFICATION_METHOD, InlineChatResultParams, ListConversationsParams, ListConversationsResult, + LIST_CONVERSATIONS_REQUEST_METHOD, ConversationClickParams, ConversationClickResult, + CONVERSATION_CLICK_REQUEST_METHOD, GetSerializedChatParams, GetSerializedChatResult, + GET_SERIALIZED_CHAT_REQUEST_METHOD, TabBarActionParams, TabBarActionResult, + TAB_BAR_ACTION_REQUEST_METHOD, ChatOptionsUpdateParams, + CHAT_OPTIONS_UPDATE_NOTIFICATION_METHOD, PromptInputOptionChangeParams, + PROMPT_INPUT_OPTION_CHANGE_METHOD, ButtonClickParams, ButtonClickResult, + BUTTON_CLICK_REQUEST_METHOD, ListMcpServersParams, ListMcpServersResult, - ListRulesResult, - RuleClickResult, - PinnedContextParams, + LIST_MCP_SERVERS_REQUEST_METHOD, McpServerClickParams, McpServerClickResult, + MCP_SERVER_CLICK_REQUEST_METHOD, ListRulesParams, RuleClickParams, + RULE_CLICK_REQUEST_METHOD, + LIST_RULES_REQUEST_METHOD, + ListRulesResult, + RuleClickResult, + PinnedContextParams, + PINNED_CONTEXT_ADD_NOTIFICATION_METHOD, + PINNED_CONTEXT_REMOVE_NOTIFICATION_METHOD, ActiveEditorChangedParams, + ACTIVE_EDITOR_CHANGED_NOTIFICATION_METHOD, + OPEN_FILE_DIALOG_METHOD, OpenFileDialogParams, OpenFileDialogResult, LIST_AVAILABLE_MODELS_REQUEST_METHOD, diff --git a/types/index.ts b/types/index.ts index f4b8c4f9..394ac47c 100644 --- a/types/index.ts +++ b/types/index.ts @@ -68,3 +68,4 @@ export { OpenWorkspaceFileParams, OpenWorkspaceFileResult, } from './workspace' +export * from './codegen/generated/typescript/src' From f28bdd12e6385cbcd37594c3a9f0aea2b5b06ae0 Mon Sep 17 00:00:00 2001 From: Conor Stewart Date: Fri, 22 Aug 2025 15:25:18 -0700 Subject: [PATCH 38/38] fix: add openapi-generator-ignore files to clean up output --- .../codegen/generated/java/.openapi-generator-ignore | 11 +++++++++++ .../generated/typescript/.openapi-generator-ignore | 2 ++ 2 files changed, 13 insertions(+) create mode 100644 types/codegen/generated/java/.openapi-generator-ignore create mode 100644 types/codegen/generated/typescript/.openapi-generator-ignore diff --git a/types/codegen/generated/java/.openapi-generator-ignore b/types/codegen/generated/java/.openapi-generator-ignore new file mode 100644 index 00000000..d42bd7ed --- /dev/null +++ b/types/codegen/generated/java/.openapi-generator-ignore @@ -0,0 +1,11 @@ +src/test/** +docs/** +api/** +README.md +.travis.yml +.github/** +gradle/** +gradlew* +build.gradle +git_push.sh +src/main/java/org/openapitools/client/auth/** \ No newline at end of file diff --git a/types/codegen/generated/typescript/.openapi-generator-ignore b/types/codegen/generated/typescript/.openapi-generator-ignore new file mode 100644 index 00000000..6f3d39e4 --- /dev/null +++ b/types/codegen/generated/typescript/.openapi-generator-ignore @@ -0,0 +1,2 @@ +# Ignore runtimes.ts file +src/runtime.ts