Update vscode use openapi codegen. (#99)

add-tracing
Zhiming Ma 2023-04-13 15:28:30 +08:00 committed by GitHub
parent 3a85b94bcc
commit a9b00b1450
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 160 additions and 105 deletions

View File

@ -1,5 +1,6 @@
out out
dist dist
node_modules node_modules
generated
.vscode-test/ .vscode-test/
*.vsix *.vsix

View File

@ -55,6 +55,8 @@
} }
}, },
"scripts": { "scripts": {
"postinstall": "yarn openapi-codegen",
"openapi-codegen": "openapi --input ../../docs/openapi.json --output ./src/generated --client axios --name Tabby --indent 2",
"vscode:prepublish": "yarn package", "vscode:prepublish": "yarn package",
"compile": "webpack", "compile": "webpack",
"watch": "webpack --watch", "watch": "webpack --watch",
@ -80,6 +82,7 @@
"eslint": "^8.20.0", "eslint": "^8.20.0",
"glob": "^8.0.3", "glob": "^8.0.3",
"mocha": "^10.0.0", "mocha": "^10.0.0",
"openapi-typescript-codegen": "^0.24.0",
"ts-loader": "^9.3.1", "ts-loader": "^9.3.1",
"typescript": "^4.7.4", "typescript": "^4.7.4",
"vsce": "^2.15.0", "vsce": "^2.15.0",
@ -90,6 +93,7 @@
"assert": "^2.0.0", "assert": "^2.0.0",
"axios": "^1.3.4", "axios": "^1.3.4",
"events": "^3.3.0", "events": "^3.3.0",
"form-data": "^4.0.0",
"process": "^0.11.10" "process": "^0.11.10"
} }
} }

View File

@ -1,4 +1,5 @@
import { ConfigurationTarget, workspace, window, commands } from "vscode"; import { ConfigurationTarget, workspace, window, commands } from "vscode";
import { ChoiceEvent, ApiError } from "./generated";
import { TabbyClient } from "./TabbyClient"; import { TabbyClient } from "./TabbyClient";
const target = ConfigurationTarget.Global; const target = ConfigurationTarget.Global;
@ -47,9 +48,14 @@ const openSettings: Command = {
const tabbyClient = TabbyClient.getInstance(); const tabbyClient = TabbyClient.getInstance();
const emitEvent: Command = { const emitEvent: Command = {
command: "tabby.emitEvent", command: "tabby.emitEvent",
callback: (event) => { callback: (event: ChoiceEvent) => {
console.debug("Emit Event: ", event); console.debug("Emit Event: ", event);
tabbyClient.postEvent(event); tabbyClient.api.default.eventsV1EventsPost(event).then(() => {
tabbyClient.changeStatus("ready");
}).catch((err: ApiError) => {
console.error(err);
tabbyClient.changeStatus("disconnected");
});
}, },
}; };

View File

@ -3,43 +3,7 @@ import axios from "axios";
import { sleep } from "./utils"; import { sleep } from "./utils";
import { EventEmitter } from "node:events"; import { EventEmitter } from "node:events";
import { strict as assert } from "node:assert"; import { strict as assert } from "node:assert";
import { Tabby as TabbyApi } from "./generated";
const logAxios = false;
if (logAxios) {
axios.interceptors.request.use((request) => {
console.debug("Starting Request: ", request);
return request;
});
axios.interceptors.response.use((response) => {
console.debug("Response: ", response);
return response;
});
}
export interface TabbyCompletionRequest {
prompt: string;
language?: string;
}
export interface TabbyCompletion {
id?: string;
created?: number;
choices?: Array<{
index: number;
text: string;
}>;
}
export enum EventType {
InlineCompletionDisplayed = "view",
InlineCompletionAccepted = "select",
}
export interface Event {
type: EventType;
id?: string;
index?: number;
}
export class TabbyClient extends EventEmitter { export class TabbyClient extends EventEmitter {
private static instance: TabbyClient; private static instance: TabbyClient;
@ -50,77 +14,52 @@ export class TabbyClient extends EventEmitter {
return TabbyClient.instance; return TabbyClient.instance;
} }
private tabbyServerUrl: string = ""; private serverUrl: string = "";
status: "connecting" | "ready" | "disconnected" = "connecting"; status: "connecting" | "ready" | "disconnected" = "connecting";
api: TabbyApi;
constructor() { constructor() {
super(); super();
this.updateConfiguration(); this.updateConfiguration();
this.api = new TabbyApi({ BASE: this.serverUrl });
workspace.onDidChangeConfiguration((event) => { workspace.onDidChangeConfiguration((event) => {
if (event.affectsConfiguration("tabby")) { if (event.affectsConfiguration("tabby")) {
this.updateConfiguration(); this.updateConfiguration();
this.api = new TabbyApi({ BASE: this.serverUrl });
} }
}); });
} }
private updateConfiguration() { private updateConfiguration() {
const configuration = workspace.getConfiguration("tabby"); const configuration = workspace.getConfiguration("tabby");
this.tabbyServerUrl = configuration.get("serverUrl", "http://127.0.0.1:5000"); this.serverUrl = configuration.get("serverUrl", "http://127.0.0.1:5000");
this.serverUrl = this.serverUrl.replace(/\/$/, ''); // Remove trailing slash
this.ping(); this.ping();
} }
private changeStatus(status: "connecting" | "ready" | "disconnected") { public changeStatus(status: "connecting" | "ready" | "disconnected") {
if (this.status != status) { if (this.status != status) {
this.status = status; this.status = status;
this.emit("statusChanged", status); this.emit("statusChanged", status);
} }
} }
private async ping(tries: number = 0) { private async ping(tries: number = 0): Promise<boolean> {
try { try {
const response = await axios.get(`${this.tabbyServerUrl}/`); const response = await axios.get(`${this.serverUrl}/`);
assert(response.status == 200); assert(response.status == 200);
this.changeStatus("ready"); this.changeStatus("ready");
return true;
} catch (e) { } catch (e) {
if (tries > 5) { if (tries > 5) {
this.changeStatus("disconnected"); this.changeStatus("disconnected");
return; return false;
} }
this.changeStatus("connecting"); this.changeStatus("connecting");
const pingRetryDelay = 1000; const pingRetryDelay = 1000;
await sleep(pingRetryDelay); await sleep(pingRetryDelay);
this.ping(tries + 1); return this.ping(tries + 1);
}
}
public async getCompletion(request: TabbyCompletionRequest): Promise<TabbyCompletion | null> {
if (this.status == "disconnected") {
this.ping();
}
try {
const response = await axios.post<TabbyCompletion>(`${this.tabbyServerUrl}/v1/completions`, request);
assert(response.status == 200);
return response.data;
} catch (e) {
this.ping();
return null;
}
}
public async postEvent(event: Event) {
if (this.status == "disconnected") {
this.ping();
}
try {
const response = await axios.post(`${this.tabbyServerUrl}/v1/events`, {
type: event.type,
completion_id: event.id,
choice_index: event.index,
});
assert(response.status == 200);
} catch (e) {
this.ping();
} }
} }
} }

View File

@ -10,7 +10,8 @@ import {
TextDocument, TextDocument,
workspace, workspace,
} from "vscode"; } from "vscode";
import { TabbyClient, TabbyCompletion, EventType } from "./TabbyClient"; import { Language as SupportedLanguage, CompletionResponse, EventType, ChoiceEvent, ApiError } from "./generated";
import { TabbyClient } from "./TabbyClient";
import { sleep } from "./utils"; import { sleep } from "./utils";
export class TabbyCompletionProvider implements InlineCompletionItemProvider { export class TabbyCompletionProvider implements InlineCompletionItemProvider {
@ -39,6 +40,16 @@ export class TabbyCompletionProvider implements InlineCompletionItemProvider {
return emptyResponse; return emptyResponse;
} }
const languageId = document.languageId; // https://code.visualstudio.com/docs/languages/identifiers
let language = SupportedLanguage.UNKNOWN;
if (Object.values(SupportedLanguage).map(x => x.toString()).includes(languageId)) {
language = languageId as SupportedLanguage;
}
if (language == SupportedLanguage.UNKNOWN) {
console.debug(`Unsupported language '${languageId}', skipping`);
return emptyResponse;
}
const prompt = this.getPrompt(document, position); const prompt = this.getPrompt(document, position);
if (this.isNil(prompt)) { if (this.isNil(prompt)) {
console.debug("Prompt is empty, skipping"); console.debug("Prompt is empty, skipping");
@ -63,10 +74,17 @@ export class TabbyCompletionProvider implements InlineCompletionItemProvider {
language: document.languageId language: document.languageId
} }
); );
// Prompt is already nil-checked
const completion = await this.tabbyClient.getCompletion({ const completion = await this.tabbyClient.api.default.completionsV1CompletionsPost({
prompt: prompt as string, prompt: prompt as string, // Prompt is already nil-checked
language: document.languageId, // https://code.visualstudio.com/docs/languages/identifiers language
}).then((response: CompletionResponse) => {
this.tabbyClient.changeStatus("ready");
return response;
}).catch((err: ApiError) => {
console.error(err);
this.tabbyClient.changeStatus("disconnected");
return null;
}); });
const hasSuffixParen = this.hasSuffixParen(document, position); const hasSuffixParen = this.hasSuffixParen(document, position);
@ -88,33 +106,31 @@ export class TabbyCompletionProvider implements InlineCompletionItemProvider {
this.enabled = configuration.get("enabled", true); this.enabled = configuration.get("enabled", true);
} }
private getPrompt(document: TextDocument, position: Position): String | undefined { private getPrompt(document: TextDocument, position: Position): string | undefined {
const maxLines = 20; const maxLines = 20;
const firstLine = Math.max(position.line - maxLines, 0); const firstLine = Math.max(position.line - maxLines, 0);
return document.getText(new Range(firstLine, 0, position.line, position.character)); return document.getText(new Range(firstLine, 0, position.line, position.character));
} }
private isNil(value: String | undefined | null): boolean { private isNil(value: string | undefined | null): boolean {
return value === undefined || value === null || value.length === 0; return value === undefined || value === null || value.length === 0;
} }
private toInlineCompletions(tabbyCompletion: TabbyCompletion | null, range: Range): InlineCompletionItem[] { private toInlineCompletions(tabbyCompletion: CompletionResponse | null, range: Range): InlineCompletionItem[] {
return ( return (
tabbyCompletion?.choices?.map( tabbyCompletion?.choices?.map((choice: any) => {
(choice: any) => let event: ChoiceEvent = {
new InlineCompletionItem(choice.text, range, { type: EventType.SELECT,
title: "Tabby: Emit Event", completion_id: tabbyCompletion.id,
command: "tabby.emitEvent", choice_index: choice.index,
arguments: [ };
{ return new InlineCompletionItem(choice.text, range, {
type: EventType.InlineCompletionAccepted, title: "Tabby: Emit Event",
id: tabbyCompletion.id, command: "tabby.emitEvent",
index: choice.index, arguments: [event],
}, });
], }) || []
})
) || []
); );
} }

View File

@ -2,9 +2,10 @@
"compilerOptions": { "compilerOptions": {
"module": "commonjs", "module": "commonjs",
"target": "ES2020", "target": "ES2020",
"lib": ["ES2020"], "lib": ["ES2020", "dom"],
"sourceMap": true, "sourceMap": true,
"rootDir": "src", "rootDir": "src",
"allowSyntheticDefaultImports": true,
"strict": true /* enable all strict type-checking options */, "strict": true /* enable all strict type-checking options */,
/* Additional Checks */ /* Additional Checks */
"noImplicitReturns": true /* Report error when not all code paths in function return a value. */, "noImplicitReturns": true /* Report error when not all code paths in function return a value. */,

View File

@ -2,6 +2,16 @@
# yarn lockfile v1 # yarn lockfile v1
"@apidevtools/json-schema-ref-parser@9.0.9":
version "9.0.9"
resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz#d720f9256e3609621280584f2b47ae165359268b"
integrity sha512-GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w==
dependencies:
"@jsdevtools/ono" "^7.1.3"
"@types/json-schema" "^7.0.6"
call-me-maybe "^1.0.1"
js-yaml "^4.1.0"
"@discoveryjs/json-ext@^0.5.0": "@discoveryjs/json-ext@^0.5.0":
version "0.5.7" version "0.5.7"
resolved "https://registry.npmmirror.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" resolved "https://registry.npmmirror.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70"
@ -98,6 +108,11 @@
"@jridgewell/resolve-uri" "3.1.0" "@jridgewell/resolve-uri" "3.1.0"
"@jridgewell/sourcemap-codec" "1.4.14" "@jridgewell/sourcemap-codec" "1.4.14"
"@jsdevtools/ono@^7.1.3":
version "7.1.3"
resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796"
integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==
"@nodelib/fs.scandir@2.1.5": "@nodelib/fs.scandir@2.1.5":
version "2.1.5" version "2.1.5"
resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
@ -158,7 +173,7 @@
"@types/minimatch" "*" "@types/minimatch" "*"
"@types/node" "*" "@types/node" "*"
"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": "@types/json-schema@*", "@types/json-schema@^7.0.6", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9":
version "7.0.11" version "7.0.11"
resolved "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" resolved "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==
@ -643,12 +658,17 @@ call-bind@^1.0.0, call-bind@^1.0.2:
function-bind "^1.1.1" function-bind "^1.1.1"
get-intrinsic "^1.0.2" get-intrinsic "^1.0.2"
call-me-maybe@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.2.tgz#03f964f19522ba643b1b0693acb9152fe2074baa"
integrity sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==
callsites@^3.0.0: callsites@^3.0.0:
version "3.1.0" version "3.1.0"
resolved "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" resolved "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
camelcase@^6.0.0: camelcase@^6.0.0, camelcase@^6.3.0:
version "6.3.0" version "6.3.0"
resolved "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" resolved "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
@ -779,6 +799,11 @@ combined-stream@^1.0.8:
dependencies: dependencies:
delayed-stream "~1.0.0" delayed-stream "~1.0.0"
commander@^10.0.0:
version "10.0.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.0.tgz#71797971162cd3cf65f0b9d24eb28f8d303acdf1"
integrity sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==
commander@^2.20.0: commander@^2.20.0:
version "2.20.3" version "2.20.3"
resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
@ -1224,6 +1249,15 @@ fs-constants@^1.0.0:
resolved "https://registry.npmmirror.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" resolved "https://registry.npmmirror.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
fs-extra@^11.1.1:
version "11.1.1"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d"
integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==
dependencies:
graceful-fs "^4.2.0"
jsonfile "^6.0.1"
universalify "^2.0.0"
fs.realpath@^1.0.0: fs.realpath@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" resolved "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
@ -1338,7 +1372,7 @@ gopd@^1.0.1:
dependencies: dependencies:
get-intrinsic "^1.1.3" get-intrinsic "^1.1.3"
graceful-fs@^4.1.2, graceful-fs@^4.2.4, graceful-fs@^4.2.9: graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9:
version "4.2.11" version "4.2.11"
resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
@ -1348,6 +1382,18 @@ grapheme-splitter@^1.0.4:
resolved "https://registry.npmmirror.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" resolved "https://registry.npmmirror.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e"
integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==
handlebars@^4.7.7:
version "4.7.7"
resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1"
integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==
dependencies:
minimist "^1.2.5"
neo-async "^2.6.0"
source-map "^0.6.1"
wordwrap "^1.0.0"
optionalDependencies:
uglify-js "^3.1.4"
has-flag@^3.0.0: has-flag@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" resolved "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
@ -1620,6 +1666,13 @@ json-parse-even-better-errors@^2.3.1:
resolved "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" resolved "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
json-schema-ref-parser@^9.0.9:
version "9.0.9"
resolved "https://registry.yarnpkg.com/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz#66ea538e7450b12af342fa3d5b8458bc1e1e013f"
integrity sha512-qcP2lmGy+JUoQJ4DOQeLaZDqH9qSkeGCK3suKWxJXS82dg728Mn3j97azDMaOUmJAN4uCq91LdPx4K7E8F1a7Q==
dependencies:
"@apidevtools/json-schema-ref-parser" "9.0.9"
json-schema-traverse@^0.4.1: json-schema-traverse@^0.4.1:
version "0.4.1" version "0.4.1"
resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
@ -1630,6 +1683,15 @@ json-stable-stringify-without-jsonify@^1.0.1:
resolved "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" resolved "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
jsonfile@^6.0.1:
version "6.1.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
dependencies:
universalify "^2.0.0"
optionalDependencies:
graceful-fs "^4.1.6"
jszip@^3.10.1: jszip@^3.10.1:
version "3.10.1" version "3.10.1"
resolved "https://registry.npmmirror.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" resolved "https://registry.npmmirror.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2"
@ -1796,7 +1858,7 @@ minimatch@^5.0.1:
dependencies: dependencies:
brace-expansion "^2.0.1" brace-expansion "^2.0.1"
minimist@^1.2.0, minimist@^1.2.3: minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5:
version "1.2.8" version "1.2.8"
resolved "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" resolved "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
@ -1868,7 +1930,7 @@ natural-compare@^1.4.0:
resolved "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" resolved "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
neo-async@^2.6.2: neo-async@^2.6.0, neo-async@^2.6.2:
version "2.6.2" version "2.6.2"
resolved "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" resolved "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
@ -1927,6 +1989,17 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0:
dependencies: dependencies:
wrappy "1" wrappy "1"
openapi-typescript-codegen@^0.24.0:
version "0.24.0"
resolved "https://registry.yarnpkg.com/openapi-typescript-codegen/-/openapi-typescript-codegen-0.24.0.tgz#b3e6ade5bae75cd47868e5e3e4dc3bcf899cadab"
integrity sha512-rSt8t1XbMWhv6Db7GUI24NNli7FU5kzHLxcE8BpzgGWRdWyWt9IB2YoLyPahxNrVA7yOaVgnXPkrcTDRMQtJYg==
dependencies:
camelcase "^6.3.0"
commander "^10.0.0"
fs-extra "^11.1.1"
handlebars "^4.7.7"
json-schema-ref-parser "^9.0.9"
optionator@^0.9.1: optionator@^0.9.1:
version "0.9.1" version "0.9.1"
resolved "https://registry.npmmirror.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" resolved "https://registry.npmmirror.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
@ -2336,7 +2409,7 @@ source-map-support@~0.5.20:
buffer-from "^1.0.0" buffer-from "^1.0.0"
source-map "^0.6.0" source-map "^0.6.0"
source-map@^0.6.0: source-map@^0.6.0, source-map@^0.6.1:
version "0.6.1" version "0.6.1"
resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
@ -2538,11 +2611,21 @@ uc.micro@^1.0.1, uc.micro@^1.0.5:
resolved "https://registry.npmmirror.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" resolved "https://registry.npmmirror.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac"
integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==
uglify-js@^3.1.4:
version "3.17.4"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c"
integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==
underscore@^1.12.1: underscore@^1.12.1:
version "1.13.6" version "1.13.6"
resolved "https://registry.npmmirror.com/underscore/-/underscore-1.13.6.tgz#04786a1f589dc6c09f761fc5f45b89e935136441" resolved "https://registry.npmmirror.com/underscore/-/underscore-1.13.6.tgz#04786a1f589dc6c09f761fc5f45b89e935136441"
integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A== integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==
universalify@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
update-browserslist-db@^1.0.10: update-browserslist-db@^1.0.10:
version "1.0.10" version "1.0.10"
resolved "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" resolved "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3"
@ -2703,6 +2786,11 @@ word-wrap@^1.2.3:
resolved "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" resolved "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
wordwrap@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==
workerpool@6.2.1: workerpool@6.2.1:
version "6.2.1" version "6.2.1"
resolved "https://registry.npmmirror.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" resolved "https://registry.npmmirror.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343"