From 76b044396c17e03777f13dbe3c55c400d979ad68 Mon Sep 17 00:00:00 2001 From: Ali Asghar <75574550+aliasghar98@users.noreply.github.com> Date: Fri, 23 May 2025 12:12:21 +0500 Subject: [PATCH 01/11] fix(portal): various improvements for portal commands (#59) Closes #55, Closes #56. --- .gitignore | 3 +- README.md | 4 +- package-lock.json | 16 ++-- package.json | 2 +- src/commands/portal/generate.ts | 37 +++++--- src/commands/portal/quickstart.ts | 49 +++++------ src/commands/portal/serve.ts | 16 +--- src/controllers/api/validate.ts | 26 ++---- src/controllers/portal/quickstart.ts | 96 ++++++++++++++++++--- src/controllers/portal/serve.ts | 13 ++- src/prompts/portal/generate.ts | 67 ++++++++++++++ src/prompts/portal/quickstart.ts | 31 ++++--- src/services/portal/server.ts | 87 +++++++++++++------ src/utils/utils.ts | 14 ++- src/validators/common/directoryValidator.ts | 6 +- 15 files changed, 318 insertions(+), 149 deletions(-) create mode 100644 src/prompts/portal/generate.ts diff --git a/.gitignore b/.gitignore index 9a12e18c..37a3356b 100644 --- a/.gitignore +++ b/.gitignore @@ -174,4 +174,5 @@ $RECYCLE.BIN/ # Custom rules (everything added below won't be overriden by 'Generate .gitignore File' if you use 'Update' option) lib/ -tmp/ \ No newline at end of file +tmp/ +.vscode/launch.json diff --git a/README.md b/README.md index e2b1c3df..a1f3eff2 100644 --- a/README.md +++ b/README.md @@ -272,7 +272,7 @@ USAGE $ apimatic portal:serve [-p ] [-d ] [-s ] [-o] [--no-reload] [-i ] [--auth-key ] FLAGS - -d, --destination= [default: ./api-portal] Directory to store and serve the generated portal. + -d, --destination= [default: ./generated_portal] Directory to store and serve the generated portal. -i, --ignore= Comma-separated list of files/directories to ignore. -o, --open Open the portal in the default browser. -p, --port= [default: 3000] Port to serve the portal. @@ -285,7 +285,7 @@ DESCRIPTION Generate and deploy a Docs as Code portal with hot reload. EXAMPLES - $ apimatic portal:serve --source="./" --destination="./api-portal" --port=3000 --open --no-reload + $ apimatic portal:serve --source="./" --destination="./generated_portal" --port=3000 --open --no-reload ``` _See code: [src/commands/portal/serve.ts](https://github.com/apimatic/apimatic-cli/blob/v1.0.1-alpha.11/src/commands/portal/serve.ts)_ diff --git a/package-lock.json b/package-lock.json index 932079e2..49891a62 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MIT", "dependencies": { "@apimatic/sdk": "^0.1.0-alpha.2", - "@clack/prompts": "^0.10.0", + "@clack/prompts": "^0.11.0", "@oclif/core": "^4.2.8", "@oclif/plugin-autocomplete": "^3.2.24", "@oclif/plugin-help": "^6.2.26", @@ -1516,9 +1516,9 @@ } }, "node_modules/@clack/core": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.4.1.tgz", - "integrity": "sha512-Pxhij4UXg8KSr7rPek6Zowm+5M22rbd2g1nfojHJkxp5YkFqiZ2+YLEM/XGVIzvGOcM0nqjIFxrpDwWRZYWYjA==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.5.0.tgz", + "integrity": "sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow==", "license": "MIT", "dependencies": { "picocolors": "^1.0.0", @@ -1526,12 +1526,12 @@ } }, "node_modules/@clack/prompts": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-0.10.0.tgz", - "integrity": "sha512-H3rCl6CwW1NdQt9rE3n373t7o5cthPv7yUoxF2ytZvyvlJv89C5RYMJu83Hed8ODgys5vpBU0GKxIRG83jd8NQ==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-0.11.0.tgz", + "integrity": "sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==", "license": "MIT", "dependencies": { - "@clack/core": "0.4.1", + "@clack/core": "0.5.0", "picocolors": "^1.0.0", "sisteransi": "^1.0.5" } diff --git a/package.json b/package.json index 1ac9066a..b00bc2a6 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ }, "dependencies": { "@apimatic/sdk": "^0.1.0-alpha.2", - "@clack/prompts": "^0.10.0", + "@clack/prompts": "^0.11.0", "@oclif/core": "^4.2.8", "@oclif/plugin-autocomplete": "^3.2.24", "@oclif/plugin-help": "^6.2.26", diff --git a/src/commands/portal/generate.ts b/src/commands/portal/generate.ts index 81f9542e..cd0a45d2 100644 --- a/src/commands/portal/generate.ts +++ b/src/commands/portal/generate.ts @@ -1,15 +1,16 @@ import * as path from "path"; import * as fs from "fs-extra"; -import { ux, Command, Flags } from "@oclif/core"; +import { Command, Flags } from "@oclif/core"; import { Client, DocsPortalManagementController } from "@apimatic/sdk"; import { AxiosError } from "axios"; import { SDKClient } from "../../client-utils/sdk-client"; import { GeneratePortalParams } from "../../types/portal/generate"; import { downloadDocsPortal } from "../../controllers/portal/generate"; -import { zipDirectory, replaceHTML, isJSONParsable } from "../../utils/utils"; +import { replaceHTML, isJSONParsable, validateAndZipPortalSource, getGeneratedFilesPaths } from "../../utils/utils"; import { AuthenticationError } from "../../types/utils"; +import { PortalGeneratePrompts } from "../../prompts/portal/generate"; export default class PortalGenerate extends Command { static description = @@ -45,26 +46,31 @@ Your portal has been generated at D:/ const zip = flags.zip; const sourceFolderPath: string = flags.folder; const portalFolderPath: string = path.join(flags.destination, "generated_portal"); - const zippedPortalPath: string = path.join(flags.destination, "generated_portal.zip"); - - const overrideAuthKey: string | null = flags["auth-key"] ? flags["auth-key"] : null; + const zippedPortalPath: string = path.join(flags.destination, ".generated_portal.zip"); + const overrideAuthKey: string | null = flags["auth-key"] ?? null; + const prompts = new PortalGeneratePrompts(); // Check if at destination, portal already exists and throw error if force flag is not set for both zip and extracted if (fs.existsSync(portalFolderPath) && !flags.force && !zip) { - throw new Error(`Can't download portal to path ${portalFolderPath}, because it already exists`); + await prompts.existingDestinationPortalFolderPrompt(); } else if (fs.existsSync(zippedPortalPath) && !flags.force && zip) { - throw new Error(`Can't download portal to path ${zippedPortalPath}, because it already exists`); + await prompts.existingDestinationPortalZipPrompt(); } try { if (!(await fs.pathExists(flags.destination))) { - throw new Error(`Destination path ${flags.destination} does not exist`); + throw new Error(`Destination path ${flags.destination} does not exist.`); } else if (!(await fs.pathExists(flags.folder))) { - throw new Error(`Portal build folder ${flags.folder} does not exist`); + throw new Error(`Portal build folder ${flags.folder} does not exist.`); } const client: Client = await SDKClient.getInstance().getClient(overrideAuthKey, this.config.configDir); const docsPortalController: DocsPortalManagementController = new DocsPortalManagementController(client); - const zippedBuildFilePath = await zipDirectory(sourceFolderPath, flags.destination); + const pathsToIgnore = getGeneratedFilesPaths(sourceFolderPath, portalFolderPath); + const zippedBuildFilePath = await validateAndZipPortalSource( + sourceFolderPath, + path.join(sourceFolderPath, ".portal_source.zip"), + pathsToIgnore + ); const generatePortalParams: GeneratePortalParams = { zippedBuildFilePath, @@ -74,11 +80,16 @@ Your portal has been generated at D:/ overrideAuthKey, zip }; - ux.action.start('Generating portal'); + + prompts.displayPortalGenerationMessage(); + const generatedPortalPath: string = await downloadDocsPortal(generatePortalParams, this.config.configDir); - ux.action.stop(); - this.log(`Your portal has been generated at ${generatedPortalPath}`); + + prompts.displayPortalGenerationSuccessMessage(); + + prompts.displayOutroMessage(generatedPortalPath); } catch (error) { + prompts.displayPortalGenerationErrorMessage(); if (error && (error as AxiosError).response) { const apiError = error as AxiosError; const apiResponse = apiError.response; diff --git a/src/commands/portal/quickstart.ts b/src/commands/portal/quickstart.ts index 4649513f..e0423fbc 100644 --- a/src/commands/portal/quickstart.ts +++ b/src/commands/portal/quickstart.ts @@ -7,7 +7,7 @@ import { SpecFile } from "../../types/portal/quickstart"; import { getMessageInRedColor } from "../../utils/utils"; export default class PortalQuickstart extends Command { - static description = "Create your first API Portal using APIMatic’s Docs as Code offering."; + static description = "Create your first API Portal using APIMatic's Docs as Code offering."; static examples = ["$ apimatic portal:quickstart"]; @@ -15,9 +15,9 @@ export default class PortalQuickstart extends Command { prompts: PortalQuickstartPrompts, controller: PortalQuickstartController ): Promise { - const spec = await prompts.specPrompt(); + const specPath = await prompts.specPrompt(); - const specFile = await controller.getSpecFile(spec); + const specFile = await controller.getSpecFile(specPath); prompts.displaySpecValidationMessage(); @@ -30,25 +30,16 @@ export default class PortalQuickstart extends Command { specFile: SpecFile, apiValidationController: APIValidationExternalApisController ): Promise { - try { - const apiValidationSummary = await controller.getSpecValidationSummary(specFile, apiValidationController); - - if (!apiValidationSummary.success) { - prompts.displaySpecValidationFailureMessage(); - await prompts.specValidationFailurePrompt(); - } else { - prompts.displaySpecValidationSuccessMessage(); - } + const apiValidationSummary = await controller.getSpecValidationSummary(prompts, specFile, apiValidationController); - return apiValidationSummary; - } catch (error) { - prompts.displaySpecValidationErrorMessage(); - this.error( - getMessageInRedColor( - "The specified path/URL does not point to a valid API Definition file. Please provide a valid API Definition file and try again." - ) - ); + if (!apiValidationSummary.success) { + prompts.displaySpecValidationFailureMessage(); + await prompts.specValidationFailurePrompt(); + } else { + prompts.displaySpecValidationSuccessMessage(); } + + return apiValidationSummary; } private async getBuildDirectory( @@ -58,17 +49,17 @@ export default class PortalQuickstart extends Command { apiValidationSummary: ApiValidationSummary, languages: string[] ): Promise { - const directory = await prompts.buildDirectoryPrompt(); + const buildDirectoryPath = await prompts.buildDirectoryPrompt(); prompts.displayBuildDirectoryGenerationMessage(); - await controller.setupBuildDirectory(prompts, directory, specFile, apiValidationSummary, languages); + await controller.setupBuildDirectory(prompts, buildDirectoryPath, specFile, apiValidationSummary, languages); - prompts.displayBuildDirectoryGenerationSuccessMessage(directory); + prompts.displayBuildDirectoryGenerationSuccessMessage(buildDirectoryPath); - prompts.displayBuildDirectoryAsTree(directory); + prompts.displayBuildDirectoryAsTree(buildDirectoryPath); - return directory; + return buildDirectoryPath; } private async getGeneratedPortalPath( @@ -128,9 +119,11 @@ export default class PortalQuickstart extends Command { const generatedPortalPath = await this.getGeneratedPortalPath(prompts, controller, directory); - controller.servePortal(generatedPortalPath, directory, this.config.configDir); - - prompts.displayOutroMessage(); + const serverStarted = await controller.servePortal(generatedPortalPath, directory, this.config.configDir); + + if (serverStarted) { + prompts.displayOutroMessage(directory); + } } catch (error) { this.error(getMessageInRedColor(error instanceof Error ? error.message : String(error))); } diff --git a/src/commands/portal/serve.ts b/src/commands/portal/serve.ts index 4f874e20..a5ef76ea 100644 --- a/src/commands/portal/serve.ts +++ b/src/commands/portal/serve.ts @@ -4,7 +4,7 @@ import { Command, Flags } from "@oclif/core"; import { generatePortal } from "../../controllers/portal/serve"; import { PortalServerService } from "../../services/portal/server"; import { PortalServePrompts } from "../../prompts/portal/serve"; -import { cleanUpGeneratedPortalFiles, getMessageInRedColor } from "../../utils/utils"; +import { cleanUpGeneratedPortalFiles, getGeneratedFilesPaths, getMessageInRedColor } from "../../utils/utils"; import { PortalServeValidator } from "../../validators/portal/serveValidator"; export default class PortalServe extends Command { @@ -19,7 +19,7 @@ export default class PortalServe extends Command { destination: Flags.string({ char: "d", description: "Directory to store and serve the generated portal.", - default: "./api-portal", + default: "./generated_portal", parse: async (input) => path.resolve(input) }), source: Flags.string({ @@ -49,17 +49,9 @@ export default class PortalServe extends Command { }; static examples = [ - '$ apimatic portal:serve --source="./" --destination="./api-portal" --port=3000 --open --no-reload' + '$ apimatic portal:serve --source="./" --destination="./generated_portal" --port=3000 --open --no-reload' ]; - private getGeneratedFilesPaths(sourceDir: string, portalDir: string): string[] { - const generatedZipPath = path.join(sourceDir, "portal_source.zip"); - const generatedPortalZipPath = path.join(sourceDir, "generated_portal.zip"); - const generatedPortalPath = path.join(path.dirname(portalDir), "api-portal"); - - return [generatedZipPath, generatedPortalPath, generatedPortalZipPath]; - } - async run() { const { flags } = await this.parse(PortalServe); const ignoredPaths = flags.ignore.split(",").map((path) => path.trim()); @@ -70,7 +62,7 @@ export default class PortalServe extends Command { const serverService = new PortalServerService(); const prompts = new PortalServePrompts(); const validator = new PortalServeValidator(this.error); - const allIgnoredPaths = [...ignoredPaths, ...this.getGeneratedFilesPaths(sourceDir, portalDir)]; + const allIgnoredPaths = [...ignoredPaths, ...getGeneratedFilesPaths(sourceDir, portalDir)]; await validator.validate(port, flags.destination, sourceDir, portalDir); diff --git a/src/controllers/api/validate.ts b/src/controllers/api/validate.ts index e718aa19..92779ec8 100644 --- a/src/controllers/api/validate.ts +++ b/src/controllers/api/validate.ts @@ -12,24 +12,16 @@ export const getValidationSummary = async ( if (file) { const fileStatus = fs.statSync(file); - if (fileStatus.isDirectory()){ + if (fileStatus.isDirectory()) { const tempDir = await createTempDirectory(); + const zipPath = await zipDirectory(file, tempDir); + const zipFile = new FileWrapper(fs.createReadStream(zipPath)); + validation = await apiValidationController.validateAPIViaFile(ContentType.EnumMultipartformdata, zipFile); - try { - const zipPath = await zipDirectory(file, tempDir); - const zipFile = new FileWrapper(fs.createReadStream(zipPath)); - validation = await apiValidationController.validateAPIViaFile(ContentType.EnumMultipartformdata, zipFile); - - await deleteFile(zipPath); - } - catch (error) { - throw new Error("There was an error validating your spec file."); - } - finally { - await fs.remove(tempDir); - } - } - else { + await deleteFile(zipPath); + + await fs.remove(tempDir); + } else { const fileDescriptor = new FileWrapper(fs.createReadStream(file)); validation = await apiValidationController.validateAPIViaFile(ContentType.EnumMultipartformdata, fileDescriptor); } @@ -38,6 +30,6 @@ export const getValidationSummary = async ( } else { throw new Error("Please provide a specification file"); } - + return validation.result; }; diff --git a/src/controllers/portal/quickstart.ts b/src/controllers/portal/quickstart.ts index c45d7b80..bb18b1b8 100644 --- a/src/controllers/portal/quickstart.ts +++ b/src/controllers/portal/quickstart.ts @@ -5,7 +5,7 @@ import * as filetype from "file-type"; import * as fs from "fs"; import * as fsextra from "fs-extra"; import { getAuthInfo } from "../../client-utils/auth-manager"; -import { APIValidationExternalApisController, ApiValidationSummary } from "@apimatic/sdk"; +import { ApiError, APIValidationExternalApisController, ApiValidationSummary } from "@apimatic/sdk"; import { LoginCredentials, SpecFile } from "../../types/portal/quickstart"; import { SDKClient } from "../../client-utils/sdk-client"; import { @@ -18,11 +18,12 @@ import { cleanUpGeneratedPortalFiles } from "../../utils/utils"; import { getValidationSummary } from "../api/validate"; -import { GetValidationParams } from "../../types/api/validate"; +import { APIValidateError, AuthorizationError, GetValidationParams } from "../../types/api/validate"; import { generatePortal } from "./serve"; import { metadataFileContent, staticPortalRepoUrl } from "../../config/env"; import { PortalServerService } from "../../services/portal/server"; import { PortalQuickstartPrompts } from "../../prompts/portal/quickstart"; +import { AuthenticationError } from "../../types/utils"; export class PortalQuickstartController { private readonly specUrl = @@ -131,6 +132,7 @@ export class PortalQuickstartController { } async getSpecValidationSummary( + prompts: PortalQuickstartPrompts, specFile: SpecFile, apiValidationController: APIValidationExternalApisController ): Promise { @@ -139,9 +141,81 @@ export class PortalQuickstartController { url: specFile.url }; - const validationSummary = getValidationSummary(validationFlags, apiValidationController); - - return validationSummary; + try { + const validationSummary = await getValidationSummary(validationFlags, apiValidationController); + return validationSummary; + } + catch (error) { + prompts.displaySpecValidationErrorMessage(); + if (axios.isAxiosError(error)) { + if (error.response) { + if (error.response.status === 400) { + throw new Error( + getMessageInRedColor( + `The provided spec file is not valid. Please ensure that the spec you have provided is a valid API definition file.` + ) + ); + } else if (error.response.status === 500) { + throw new Error( + getMessageInRedColor( + `The server encountered an error while validating your spec file, please try again later. If the issue persists, contact our team at support@apimatic.io` + ) + ); + } else { + throw new Error( + getMessageInRedColor( + `Something went wrong while validating your spec file. The server returned the following error ${error.response.status} ${error.response.statusText}. Please try again later. If the issue persists, contact our team at support@apimatic.io` + ) + ); + } + } else if (error.request) { + if (error.code === "ECONNABORTED") { + throw new Error(getMessageInRedColor(`The spec validation request timed out. Please try again.`)); + } else if (error.code === "ENOTFOUND" || error.code === "ERR_NETWORK") { + throw new Error( + getMessageInRedColor( + `Network error encountered while validating the spec file. Please check your connection and try again.` + ) + ); + } else { + throw new Error( + getMessageInRedColor( + `Something went wrong while validating the spec file, please try again. If the issue persists, reach out to our support team at support@apimatic.io` + ) + ); + } + } else { + throw new Error(getMessageInRedColor(`Failed to validate spec file: ${error.message}`)); + } + } else if ((error as ApiError).result) { + const apiError = error as ApiError; + const result = apiError.result as APIValidateError; + if (result.modelState["exception Error"] && apiError.statusCode === 400) { + throw new Error( + `The provided spec file is not valid. Please ensure that the spec file you have provided is a valid API definition file.` + ); + } else if ((error as AuthorizationError).body && apiError.statusCode === 401) { + throw new Error("You are not authorized to perform this action"); + } else { + throw new Error((error as Error).message); + } + } else if ((error as AuthenticationError).statusCode === 401) { + throw new Error("You are not authorized to perform this action"); + } else if ( + (error as AuthenticationError).statusCode === 402 && + (error as AuthenticationError).body && + typeof (error as AuthenticationError).body === "string" + ) { + throw new Error((error as AuthenticationError).body); + } + else { + throw new Error( + getMessageInRedColor( + `Something went wrong while validating the spec file, please try again later. If the issue persists, contact our team at support@apimatic.io` + ) + ); + } + } } async setupBuildDirectory( @@ -212,7 +286,7 @@ export class PortalQuickstartController { } async generatePortalArtifacts(targetFolder: string, configDir: string): Promise { - const generatedPortalPath = path.join(targetFolder, "api-portal"); + const generatedPortalPath = path.join(targetFolder, "generated_portal"); try { await generatePortal(targetFolder, generatedPortalPath, configDir); @@ -227,7 +301,7 @@ export class PortalQuickstartController { ) ); } else if (error.response.status === 403) { - throw new Error(getMessageInRedColor(`Access denied. It looks like you don’t have access to APIMatic’s Docs as Code offering. Check your subscription details and contact our team at support@apimatic.io if you believe this is a mistake.`)); + throw new Error(getMessageInRedColor(`Access denied. It looks like you don't have access to APIMatic's Docs as Code offering. Check your subscription details and contact our team at support@apimatic.io if you believe this is a mistake.`)); } else if (error.response.status === 422) { throw new Error( getMessageInRedColor( @@ -268,12 +342,14 @@ export class PortalQuickstartController { } } - async servePortal(generatedPortalPath: string, targetFolder: string, configDir: string): Promise { + async servePortal(generatedPortalPath: string, targetFolder: string, configDir: string): Promise { const server = new PortalServerService(); server.setupServer(generatedPortalPath); - await server.startServer( + await cleanUpGeneratedPortalFiles(targetFolder); + + return await server.startServer( { generatedPortalPath, targetFolder, @@ -283,7 +359,5 @@ export class PortalQuickstartController { false, false ); - - await cleanUpGeneratedPortalFiles(targetFolder); } } diff --git a/src/controllers/portal/serve.ts b/src/controllers/portal/serve.ts index 3da8b1c4..e74276c8 100644 --- a/src/controllers/portal/serve.ts +++ b/src/controllers/portal/serve.ts @@ -4,6 +4,7 @@ import { Client, DocsPortalManagementController } from "@apimatic/sdk"; import { SDKClient } from "../../client-utils/sdk-client"; import { cleanUpGeneratedPortalFiles, + getGeneratedFilesPaths, getMessageInMagentaColor, getMessageInRedColor, validateAndZipPortalSource @@ -55,14 +56,10 @@ export const watchAndRegeneratePortal = async ( ignoredPaths: string[] = [] ) => { // Convert ignoredPaths to absolute paths for consistent comparison - const generatedZipPath = path.join(sourceDir, "portal_source.zip"); - const generatedPortalZipPath = path.join(sourceDir, "generated_portal.zip"); - const generatedPortalPath = path.join(path.dirname(portalDir), "api-portal"); + const generatedFilesPaths = getGeneratedFilesPaths(sourceDir, portalDir); const absoluteIgnoredPaths = [ ...ignoredPaths.filter((ignoredPath) => ignoredPath.trim() !== ""), - generatedZipPath, - generatedPortalZipPath, - generatedPortalPath + ...generatedFilesPaths ].map((ignoredPath) => path.resolve(sourceDir, ignoredPath)); const watcher = chokidar.watch(sourceDir, { @@ -116,14 +113,14 @@ export const generatePortal = async ( const zippedBuildFilePath = await validateAndZipPortalSource( sourceDir, - path.join(sourceDir, "portal_source.zip"), + path.join(sourceDir, ".portal_source.zip"), ignoredPaths ); const generatePortalParams: GeneratePortalParams = { zippedBuildFilePath, portalFolderPath: portalDir, - zippedPortalPath: path.join(sourceDir, "generated_portal.zip"), + zippedPortalPath: path.join(sourceDir, ".generated_portal.zip"), docsPortalController, overrideAuthKey, zip: false diff --git a/src/prompts/portal/generate.ts b/src/prompts/portal/generate.ts new file mode 100644 index 00000000..c1d27dea --- /dev/null +++ b/src/prompts/portal/generate.ts @@ -0,0 +1,67 @@ +import { cancel, outro, select, spinner } from "@clack/prompts"; +import { isCancel } from "axios"; +import { getMessageInRedColor } from "../../utils/utils"; + +export class PortalGeneratePrompts { + private readonly spin = spinner(); + + async existingDestinationPortalFolderPrompt(): Promise { + const useExistingFolder = await select({ + message: `The destination folder is not empty, do you want to overwrite the existing files?`, + options: [ + { value: "yes", label: "Yes"}, + { value: "no", label: "No"} + ] + }); + + if (isCancel(useExistingFolder)) { + cancel("Operation cancelled."); + return process.exit(1); + } + + if (useExistingFolder === "no") { + outro( + "Please enter a different destination folder or remove the existing files and try again." + ); + process.exit(0); + } + } + + async existingDestinationPortalZipPrompt(): Promise { + const useExistingZip = await select({ + message: `A zip file already exists at the specified destination path, do you want to overwrite it?`, + options: [ + { value: "yes", label: "Yes"}, + { value: "no", label: "No"} + ] + }); + + if (isCancel(useExistingZip)) { + cancel("Operation cancelled."); + return process.exit(1); + } + + if (useExistingZip === "no") { + outro( + "Please enter a different destination path or delete the existing zip file and try again." + ); + process.exit(0); + } + } + + displayPortalGenerationMessage(): void { + this.spin.start("Generating portal..."); + } + + displayPortalGenerationSuccessMessage(): void { + this.spin.stop("✅ Portal generated successfully."); + } + + displayPortalGenerationErrorMessage(): void { + this.spin.stop(getMessageInRedColor(`Something went wrong while generating your portal.`)); + } + + displayOutroMessage(generatedPortalPath: string): void { + outro(`The generated portal can be found at ${generatedPortalPath}`); + } +} \ No newline at end of file diff --git a/src/prompts/portal/quickstart.ts b/src/prompts/portal/quickstart.ts index 116e2218..68bbe06b 100644 --- a/src/prompts/portal/quickstart.ts +++ b/src/prompts/portal/quickstart.ts @@ -17,12 +17,11 @@ export class PortalQuickstartPrompts { private readonly vscodeExtensionUrl = "\u001b[4mhttps://marketplace.visualstudio.com/items?itemName=apimatic-developers.apimatic-for-vscode\u001b[0m"; private readonly serverUrl = "\u001b[4mhttp://localhost:3000\u001b[0m"; - private readonly referenceDocumentation = + private readonly referenceDocumentationUrl = "\u001b[4mhttps://docs.apimatic.io/platform-api/#/http/guides/generating-on-prem-api-portal/overview-generating-api-portal\u001b[0m"; - private readonly customizeTheSdks = + private readonly customizeTheSdksUrl = "\u001b[4mhttps://docs.apimatic.io/generate-sdks/codegen-settings/codegen-settings-overview\u001b[0m"; - private readonly portalDirectory = "apimatic-quickstart-portal"; - private readonly defaultPortalDirectory = path.join(process.cwd(), this.portalDirectory); + private readonly defaultPortalDirectoryPath = process.cwd(); displayWelcomeMessage(): void { intro(`Hello there 👋`); @@ -70,7 +69,7 @@ export class PortalQuickstartPrompts { return process.exit(0); } - return { email: String(email), password: String(pass) }; + return { email: String(email).trim(), password: String(pass).trim() }; } displayLoggingInMessage(): void { @@ -118,7 +117,7 @@ export class PortalQuickstartPrompts { return process.exit(0); } - return String(spec); + return String(spec).trim(); } displaySpecValidationMessage(): void { @@ -162,7 +161,7 @@ export class PortalQuickstartPrompts { "Good luck fixing your API definition! 🛠️ Feel free to run this command again once you're done." ) ); - process.exit(0); + return process.exit(0); } } @@ -201,13 +200,13 @@ export class PortalQuickstartPrompts { placeholder: "Enter absolute path to the directory or leave it empty to use the current directory.", defaultValue: "./", validate: (input) => { - const dirPath = path.resolve(input.trim() || this.portalDirectory); + const dirPath = path.resolve(input.trim()); - if (!fs.existsSync(dirPath) && dirPath != this.defaultPortalDirectory) { + if (!fs.existsSync(dirPath) && dirPath != this.defaultPortalDirectoryPath) { return getMessageInRedColor("Error: The specified directory path does not exist. Please try again."); } - if (dirPath !== this.defaultPortalDirectory) { + if (dirPath !== this.defaultPortalDirectoryPath) { const files = fs.readdirSync(dirPath).filter(item => !item.startsWith('.'));; if (files.length > 0) { return getMessageInRedColor("Error: The target directory is not empty. Please provide a path to an empty directory or clear its contents."); @@ -224,9 +223,9 @@ export class PortalQuickstartPrompts { } if (directory === "./") { - return this.defaultPortalDirectory; + return this.defaultPortalDirectoryPath; } else { - return path.join(String(directory), this.portalDirectory); + return String(directory).trim(); } } @@ -263,21 +262,21 @@ export class PortalQuickstartPrompts { this.spin.stop(getMessageInCyanColor("✅ Portal setup complete!")); } - displayOutroMessage(): void { + displayOutroMessage(directory: string): void { log.step( getMessageInCyanColor(`📢 Your API Portal is live at: ${this.serverUrl}\n`) + getMessageInCyanColor( - `Hot reload enabled! Edit files in ./apimatic-quickstart-portal to see changes instantly reflected in your API Portal.\n` + `Hot reload enabled! Edit files in ${directory} to see changes instantly reflected in your API Portal.\n` ) + getMessageInCyanColor(`Press CTRL+C to stop the server.\n\n`) + getMessageInCyanColor(`What's next?\n`) + getMessageInCyanColor(`- Check out the Interactive Playground in your API Portal.\n`) + - getMessageInCyanColor(`- Read the reference documentation to learn more about how you can customize this API Portal: ${this.referenceDocumentation}`) + + getMessageInCyanColor(`- Read the reference documentation to learn more about how you can customize this API Portal: ${this.referenceDocumentationUrl}`) + getMessageInCyanColor(` \n`) + getMessageInCyanColor( `- Review the SDK Documentation for your favourite programming language and download an SDK from the API Portal.\n` ) + - getMessageInCyanColor(`- Check out how you can customize the SDKs using Code Generation settings: ${this.customizeTheSdks}`) + + getMessageInCyanColor(`- Check out how you can customize the SDKs using Code Generation settings: ${this.customizeTheSdksUrl}`) + getMessageInCyanColor(` \n`) ); } diff --git a/src/services/portal/server.ts b/src/services/portal/server.ts index 02d4bd45..0d392ee0 100644 --- a/src/services/portal/server.ts +++ b/src/services/portal/server.ts @@ -5,51 +5,86 @@ import * as open from "open"; import { watchAndRegeneratePortal } from "../../controllers/portal/serve"; import { PortalServerConfig } from "../../types/portal/quickstart"; import { Server } from "http"; -import { getMessageInRedColor } from "../../utils/utils"; +import { getMessageInRedColor, isPortInUse } from "../../utils/utils"; export class PortalServerService { private server!: Server; private liveReloadServer!: livereload.LiveReloadServer; private readonly app: express.Application; private readonly port = 3000; + private readonly liveReloadPort = 35729; constructor() { this.app = express(); } - setupServer(generatedPortalPath: string): void { - this.liveReloadServer = livereload.createServer(); - this.liveReloadServer.watch(generatedPortalPath); + private async findAvailablePort(startPort: number): Promise { + let port = startPort; + const maxPort = startPort + 10; // Limit the port search range + + while (port < maxPort) { + if (!(await isPortInUse(port))) { + return port; + } + port++; + } + + // If no port is found in the range, return the original port + return startPort; + } - this.app.use(connectLivereload()); + private async createLiveReloadServer(generatedPortalPath: string): Promise { + try { + const availablePort = await this.findAvailablePort(this.liveReloadPort); + + this.liveReloadServer = livereload.createServer({ + port: availablePort + }); + + this.liveReloadServer.watch(generatedPortalPath); + } catch (error) { + console.log(getMessageInRedColor(`Unable to serve the portal: ${(error as Error).message}`)); + } + } + + async setupServer(generatedPortalPath: string): Promise { + await this.createLiveReloadServer(generatedPortalPath); + + if (this.liveReloadServer) { + this.app.use(connectLivereload()); + } this.app.use(express.static(generatedPortalPath)); } - startServer(config: PortalServerConfig, noReload = false, displayShutdownMessages = true): Promise { + async startServer(config: PortalServerConfig, noReload = false, displayShutdownMessages = true): Promise { const { generatedPortalPath, targetFolder, configDir, authKey, ignoredPaths, port, openInBrowser } = config; - const serverPort = port ?? this.port; + const requestedPort = port ?? this.port; - return new Promise((resolve) => { - try { - this.server = this.app.listen(serverPort, () => { - if (openInBrowser) { - open(`http://localhost:${serverPort}`); - } + return new Promise((resolve, reject) => { + this.server = this.app.listen(requestedPort, () => { + if (openInBrowser) { + open(`http://localhost:${requestedPort}`); + } - if (!noReload) { - watchAndRegeneratePortal(targetFolder, generatedPortalPath, configDir, authKey, ignoredPaths); - } + if (!noReload) { + watchAndRegeneratePortal(targetFolder, generatedPortalPath, configDir, authKey, ignoredPaths); + } - if (process.platform !== "darwin") { - //For non-macOS users. - if (process.stdin.setRawMode) { - process.stdin.setRawMode(false); - } + if (process.platform !== "darwin") { + //For non-macOS users. + if (process.stdin.setRawMode) { + process.stdin.setRawMode(false); } - }); - } catch (error) { - throw new Error(getMessageInRedColor(`There was an error starting the server: ${error}`)); - } + } + resolve(true); + }).on('error', (err: NodeJS.ErrnoException) => { + if (err.code === 'EADDRINUSE') { + console.error(getMessageInRedColor(`Port ${requestedPort} is not available. Unable to serve your portal.`)); + } else { + console.error(getMessageInRedColor(`Unable to serve the portal: ${err.message}`)); + } + reject(err); + }); const shutdown = async () => { if (displayShutdownMessages) { @@ -59,7 +94,7 @@ export class PortalServerService { if (displayShutdownMessages) { console.log("Server shut down successfully."); } - resolve(); + resolve(true); process.exit(0); }; diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 808848ef..74264f9e 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -191,7 +191,7 @@ export const zipDirectory = async (sourcePath: string, destinationPath: string): // Check if the directory exists for the user or not await fs.ensureDir(sourcePath); - const zipPath = path.join(destinationPath, "target.zip"); + const zipPath = path.join(destinationPath, ".target.zip"); const output = fs.createWriteStream(zipPath); const archive = archiver("zip"); @@ -228,6 +228,14 @@ export const isJSONParsable = (json: string) => { } }; +export const getGeneratedFilesPaths = (sourceDir: string, portalDir: string): string[] => { + const generatedZipPath = path.join(sourceDir, ".portal_source.zip"); + const generatedPortalZipPath = path.join(sourceDir, ".generated_portal.zip"); + const generatedPortalPath = path.join(path.dirname(portalDir), "generated_portal"); + + return [generatedZipPath, generatedPortalPath, generatedPortalZipPath]; +}; + export const getFileNameFromPath = (filePath: string) => { return path.basename(filePath).split(".")[0]; }; @@ -369,8 +377,8 @@ export async function validateAndZipPortalSource( } export async function cleanUpGeneratedPortalFiles(sourceDir: string) { - const generatedPortalZipFilePath = path.join(sourceDir, "generated_portal.zip"); - const generatedPortalSourceZipFilePath = path.join(sourceDir, "portal_source.zip"); + const generatedPortalZipFilePath = path.join(sourceDir, ".generated_portal.zip"); + const generatedPortalSourceZipFilePath = path.join(sourceDir, ".portal_source.zip"); if (fs.existsSync(generatedPortalZipFilePath)) { await deleteFile(generatedPortalZipFilePath); } diff --git a/src/validators/common/directoryValidator.ts b/src/validators/common/directoryValidator.ts index 32b5d0d3..0c974dc7 100644 --- a/src/validators/common/directoryValidator.ts +++ b/src/validators/common/directoryValidator.ts @@ -12,11 +12,11 @@ export class DirectoryValidator { } async validateGeneratedPortalDestinationDirectory(destinationDir: string, portalDir: string) { - if (!fs.pathExistsSync(destinationDir) && destinationDir != "./api-portal") { + if (!fs.pathExistsSync(destinationDir) && destinationDir != "./generated_portal") { this.error(getMessageInRedColor(`The specified destination directory does not exist: ${destinationDir}. Please provide a valid destination directory to continue.`)); } - if (destinationDir == "./api-portal") { + if (destinationDir == "./generated_portal") { await fs.ensureDir(portalDir); } } @@ -58,7 +58,7 @@ export class DirectoryValidator { validateGeneratedPortalDestinationDirectoryIsEmpty(destinationDir: string) { const portalDirItems = getNonHiddenItemsFromDirectory(destinationDir); - if (portalDirItems.length > 0 && destinationDir != "./api-portal") { + if (portalDirItems.length > 0 && destinationDir != "./generated_portal") { this.error( getMessageInRedColor( "The destination directory is not empty. Please specify an empty destination directory or empty the provided directory." From a703fdf2dedc09e682df7d2ed354fabf7fd6e0e0 Mon Sep 17 00:00:00 2001 From: Ali Asghar <75574550+aliasghar98@users.noreply.github.com> Date: Thu, 5 Jun 2025 12:27:37 +0500 Subject: [PATCH 02/11] refactor: improved portal generate command and updated sdk version (#61) What This change refactors the complete portal:generate command flow, including the controller. In addition to that, the following things have been updated: The APIMatic SDK has been updated to the latest version and is kept as part of the codebase (temporarily). Updated the portal:generate command to use the SDK to call the Platform API instead of calling the Platform API's portal generation endpoint directly. Updated the error messaging corresponding to the error responses. Added unit tests for the portal:generate command. Updated some outdated dependencies to the latest versions. --- .vscode/launch.json | 77 + package-lock.json | 2303 ++--------------- package.json | 17 +- src/actions/portal/generate.ts | 80 + src/commands/portal/generate.ts | 161 +- src/controllers/api/validate.ts | 3 +- src/controllers/portal/generate.ts | 179 +- src/controllers/portal/serve.ts | 36 +- src/controllers/sdk/generate.ts | 7 +- src/infrastructure/services/portal-service.ts | 128 + src/prompts/portal/generate.ts | 100 +- src/sdk/authProvider.ts | 26 + src/sdk/authentication.ts | 7 + src/sdk/client.ts | 151 ++ src/sdk/clientAdapter.ts | 7 + src/sdk/clientInterface.ts | 27 + src/sdk/configuration.ts | 25 + .../aPIValidationExternalApisController.ts | 79 + .../aPIValidationImportedApisController.ts | 66 + .../controllers/apisManagementController.ts | 277 ++ src/sdk/controllers/baseController.ts | 17 + .../codeGenerationExternalApisController.ts | 184 ++ .../codeGenerationImportedApisController.ts | 136 + .../docsPortalGenerationAsyncController.ts | 102 + .../docsPortalManagementController.ts | 221 ++ .../controllers/transformationController.ts | 196 ++ src/sdk/core.ts | 7 + src/sdk/defaultConfiguration.ts | 25 + .../portalGenerationForbiddenResponseError.ts | 23 + ...lGenerationValidationErrorResponseError.ts | 23 + src/sdk/errors/problemDetailsError.ts | 21 + src/sdk/errors/unauthorizedResponseError.ts | 16 + src/sdk/index.ts | 83 + src/sdk/models/aPIEntityCodeGeneration.ts | 44 + src/sdk/models/accept.ts | 19 + src/sdk/models/accept2.ts | 19 + src/sdk/models/accept3.ts | 19 + src/sdk/models/apiEntity.ts | 79 + src/sdk/models/apiEntityDetailed.ts | 87 + src/sdk/models/apiValidationSummary.ts | 21 + src/sdk/models/attributes.ts | 17 + src/sdk/models/authScope.ts | 25 + src/sdk/models/authentication.ts | 44 + src/sdk/models/authorIdentifiers.ts | 17 + src/sdk/models/cSNETSTANDARDLIB.ts | 36 + src/sdk/models/codeGenSettings.ts | 166 ++ src/sdk/models/codeGeneration.ts | 39 + src/sdk/models/contentType.ts | 19 + src/sdk/models/customType.ts | 37 + src/sdk/models/docsValidationSummary.ts | 23 + src/sdk/models/endpoint.ts | 73 + src/sdk/models/endpointsGroup.ts | 18 + src/sdk/models/exportFormats.ts | 34 + src/sdk/models/field.ts | 51 + src/sdk/models/generateSdkViaUrlRequest.ts | 19 + src/sdk/models/id.ts | 19 + src/sdk/models/implementationType.ts | 23 + .../models/importApiVersionViaUrlRequest.ts | 19 + src/sdk/models/importApiViaUrlRequest.ts | 17 + src/sdk/models/importValidationSummary.ts | 23 + .../models/inplaceImportApiViaUrlRequest.ts | 17 + src/sdk/models/inputParameter.ts | 29 + src/sdk/models/link.ts | 19 + src/sdk/models/links.ts | 17 + src/sdk/models/mEnvironment.ts | 24 + src/sdk/models/metaData.ts | 40 + .../models/packageDeploymentInformation.ts | 29 + src/sdk/models/packageRepositories.ts | 23 + src/sdk/models/parameter.ts | 54 + src/sdk/models/platforms.ts | 25 + .../models/portalGenerationAsyncResponse.ts | 17 + .../models/portalGenerationStatusResponse.ts | 16 + src/sdk/models/publishPackageInput.ts | 32 + src/sdk/models/publishedPackage.ts | 40 + src/sdk/models/response.ts | 48 + src/sdk/models/server.ts | 23 + src/sdk/models/serverConfiguration.ts | 31 + src/sdk/models/status.ts | 21 + .../templatesPackageDeploymentInformation.ts | 23 + src/sdk/models/testCase.ts | 58 + src/sdk/models/testGenSettings.ts | 23 + src/sdk/models/transformViaUrlRequest.ts | 23 + src/sdk/models/transformation.ts | 55 + .../updatePackageDeploymentInformation.ts | 26 + ...teTemplatesPackageDeploymentInformation.ts | 23 + src/sdk/models/userCodeGeneration.ts | 45 + src/sdk/models/validationException.ts | 19 + src/sdk/schema.ts | 7 + src/types/common/result.ts | 15 + src/types/portal/generate.ts | 37 +- src/utils/utils.ts | 34 +- test/commands/api/transform.test.ts | 17 - test/commands/api/validate.test.ts | 17 - test/commands/hello.test.ts | 17 - test/commands/portal/generate.test.ts | 265 +- test/commands/sdk/generate.test.ts | 17 - test/tsconfig.json | 3 +- tsconfig.json | 5 +- 98 files changed, 4651 insertions(+), 2400 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 src/actions/portal/generate.ts create mode 100644 src/infrastructure/services/portal-service.ts create mode 100644 src/sdk/authProvider.ts create mode 100644 src/sdk/authentication.ts create mode 100644 src/sdk/client.ts create mode 100644 src/sdk/clientAdapter.ts create mode 100644 src/sdk/clientInterface.ts create mode 100644 src/sdk/configuration.ts create mode 100644 src/sdk/controllers/aPIValidationExternalApisController.ts create mode 100644 src/sdk/controllers/aPIValidationImportedApisController.ts create mode 100644 src/sdk/controllers/apisManagementController.ts create mode 100644 src/sdk/controllers/baseController.ts create mode 100644 src/sdk/controllers/codeGenerationExternalApisController.ts create mode 100644 src/sdk/controllers/codeGenerationImportedApisController.ts create mode 100644 src/sdk/controllers/docsPortalGenerationAsyncController.ts create mode 100644 src/sdk/controllers/docsPortalManagementController.ts create mode 100644 src/sdk/controllers/transformationController.ts create mode 100644 src/sdk/core.ts create mode 100644 src/sdk/defaultConfiguration.ts create mode 100644 src/sdk/errors/portalGenerationForbiddenResponseError.ts create mode 100644 src/sdk/errors/portalGenerationValidationErrorResponseError.ts create mode 100644 src/sdk/errors/problemDetailsError.ts create mode 100644 src/sdk/errors/unauthorizedResponseError.ts create mode 100644 src/sdk/index.ts create mode 100644 src/sdk/models/aPIEntityCodeGeneration.ts create mode 100644 src/sdk/models/accept.ts create mode 100644 src/sdk/models/accept2.ts create mode 100644 src/sdk/models/accept3.ts create mode 100644 src/sdk/models/apiEntity.ts create mode 100644 src/sdk/models/apiEntityDetailed.ts create mode 100644 src/sdk/models/apiValidationSummary.ts create mode 100644 src/sdk/models/attributes.ts create mode 100644 src/sdk/models/authScope.ts create mode 100644 src/sdk/models/authentication.ts create mode 100644 src/sdk/models/authorIdentifiers.ts create mode 100644 src/sdk/models/cSNETSTANDARDLIB.ts create mode 100644 src/sdk/models/codeGenSettings.ts create mode 100644 src/sdk/models/codeGeneration.ts create mode 100644 src/sdk/models/contentType.ts create mode 100644 src/sdk/models/customType.ts create mode 100644 src/sdk/models/docsValidationSummary.ts create mode 100644 src/sdk/models/endpoint.ts create mode 100644 src/sdk/models/endpointsGroup.ts create mode 100644 src/sdk/models/exportFormats.ts create mode 100644 src/sdk/models/field.ts create mode 100644 src/sdk/models/generateSdkViaUrlRequest.ts create mode 100644 src/sdk/models/id.ts create mode 100644 src/sdk/models/implementationType.ts create mode 100644 src/sdk/models/importApiVersionViaUrlRequest.ts create mode 100644 src/sdk/models/importApiViaUrlRequest.ts create mode 100644 src/sdk/models/importValidationSummary.ts create mode 100644 src/sdk/models/inplaceImportApiViaUrlRequest.ts create mode 100644 src/sdk/models/inputParameter.ts create mode 100644 src/sdk/models/link.ts create mode 100644 src/sdk/models/links.ts create mode 100644 src/sdk/models/mEnvironment.ts create mode 100644 src/sdk/models/metaData.ts create mode 100644 src/sdk/models/packageDeploymentInformation.ts create mode 100644 src/sdk/models/packageRepositories.ts create mode 100644 src/sdk/models/parameter.ts create mode 100644 src/sdk/models/platforms.ts create mode 100644 src/sdk/models/portalGenerationAsyncResponse.ts create mode 100644 src/sdk/models/portalGenerationStatusResponse.ts create mode 100644 src/sdk/models/publishPackageInput.ts create mode 100644 src/sdk/models/publishedPackage.ts create mode 100644 src/sdk/models/response.ts create mode 100644 src/sdk/models/server.ts create mode 100644 src/sdk/models/serverConfiguration.ts create mode 100644 src/sdk/models/status.ts create mode 100644 src/sdk/models/templatesPackageDeploymentInformation.ts create mode 100644 src/sdk/models/testCase.ts create mode 100644 src/sdk/models/testGenSettings.ts create mode 100644 src/sdk/models/transformViaUrlRequest.ts create mode 100644 src/sdk/models/transformation.ts create mode 100644 src/sdk/models/updatePackageDeploymentInformation.ts create mode 100644 src/sdk/models/updateTemplatesPackageDeploymentInformation.ts create mode 100644 src/sdk/models/userCodeGeneration.ts create mode 100644 src/sdk/models/validationException.ts create mode 100644 src/sdk/schema.ts create mode 100644 src/types/common/result.ts delete mode 100644 test/commands/api/transform.test.ts delete mode 100644 test/commands/api/validate.test.ts delete mode 100644 test/commands/hello.test.ts delete mode 100644 test/commands/sdk/generate.test.ts diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 00000000..75cb5549 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,77 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Debug APIMatic CLI", + "skipFiles": ["/"], + "program": "${workspaceFolder}/bin/run", + "args": [ + // "api:validate", + // "--file=C:/Users/User/Desktop/spec/Errors.yaml", + // "--file=https://petstore.swagger.io/v2/swagger.json" + // "api:transform", + // "--format=OpenApi3Json", + // "--file=C:/Users/User/Desktop/test-cli/spec/Calculator.json", + // "--destination=C:/Users/User/Desktop/test-cli/spec" + // "auth:logout", + // "auth:login", + // "auth:status" + // "portal:quickstart", + // "portal:generate", + // "--folder", + // "test-source", + // "--destination", + // "test-portal", + // "portal:serve", + // "api:transform", + // "--help" + // "--folder=C:/Users/User/Desktop/demo/portal", + // "--destination=C:\\Users\\User\\Desktop\\demo\\portal\\api-portal" + // "--source=C:/Users/User/Desktop/demo/portal/", + // "--destination=C:/Users/User/Desktop/demo/portal/api-portal2", + // "--source=C:/Users/User/Desktop/demo/portal", + // "--source=\"C:\\Users\\User\\Desktop\\test-cli\"", + // "--destination=\"C:\\Users\\User\\Desktop\\demo\\portal\\api-portal\"", + // "--destination=\"C:\\Users\\User\\Desktop\\demo\\api-portal\"", + // "--source=C:/Users/User/Desktop/test-cli", + // "--destination=C:/Users/User/Desktop/test-cli/api-portal", + // "--source=C:\\Users\\User\\Desktop\\test-cli-2", + // "--destination=C:\\Users\\User\\Desktop\\test-cli-2\\generated_portal" + // "--port=70000" + // "--ignore=C:/Users/User/Desktop/demo/portal/content,C:/Users/User/Desktop/demo/portal/static/images/logo.png", + // "--no-reload", + // "--auth-key=\"invalidApiKey\"", + // "--help" + ], + "console": "externalTerminal", + "preLaunchTask": "tsc: build - tsconfig.json" + }, + { + "type": "node", + "request": "launch", + "name": "Debug CLI Tests", + "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha", + "args": [ + "--require", + "ts-node/register", + "--project", + "${workspaceFolder}/tsconfig.json", + "--forbid-only", + "test/**/*.test.ts", + "--timeout", + "99999", + ], + "cwd": "${workspaceFolder}", + "runtimeArgs": [ + "--nolazy", + "--inspect-brk", + "--trace-warnings" + ], + "internalConsoleOptions": "openOnSessionStart", + "skipFiles": ["/**"], + "console": "integratedTerminal" + } + ] +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 49891a62..319e9b33 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,11 @@ "version": "1.0.1-alpha.11", "license": "MIT", "dependencies": { - "@apimatic/sdk": "^0.1.0-alpha.2", + "@apimatic/authentication-adapters": "^0.5.4", + "@apimatic/axios-client-adapter": "^0.3.7", + "@apimatic/core": "^0.10.16", + "@apimatic/schema": "^0.7.14", + "@apimatic/sdk": "file:./lib/sdk", "@clack/prompts": "^0.11.0", "@oclif/core": "^4.2.8", "@oclif/plugin-autocomplete": "^3.2.24", @@ -39,28 +43,29 @@ "devDependencies": { "@commitlint/cli": "^15.0.0", "@commitlint/config-conventional": "^15.0.0", - "@oclif/test": "^4.1.11", + "@oclif/test": "^4.1.13", "@types/adm-zip": "^0.5.5", "@types/archiver": "^5.1.1", "@types/base-64": "^1.0.0", - "@types/chai": "^4.2.22", + "@types/chai": "^4.3.20", "@types/connect-livereload": "^0.5.1", "@types/express": "^4.17.13", "@types/fs-extra": "^9.0.13", "@types/livereload": "^0.9.2", "@types/mocha": "^5.2.7", - "@types/node": "^10.17.60", + "@types/node": "^20.17.50", "@types/treeify": "^1.0.3", "@types/unzipper": "^0.10.4", "@typescript-eslint/eslint-plugin": "^8.0.0", "@typescript-eslint/parser": "^8.0.0", - "chai": "^4.3.4", + "chai": "^4.5.0", "eslint": "^9.21.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-import": "^2.25.2", "husky": "^7.0.4", "lint-staged": "^11.2.6", - "mocha": "^11.1.0", + "mocha": "^11.5.0", + "nock": "^14.0.4", "nyc": "^17.1.0", "oclif": "^4.17.34", "prettier": "^2.4.1", @@ -72,10 +77,36 @@ "node": ">=20.0.0" } }, + "../apimatic-sdk-for-js-updated": { + "name": "apimatic-apilib", + "version": "3.0.0", + "extraneous": true, + "license": "MIT", + "dependencies": { + "@apimatic/authentication-adapters": "^0.5.4", + "@apimatic/axios-client-adapter": "^0.3.7", + "@apimatic/core": "^0.10.16", + "@apimatic/schema": "^0.7.14" + }, + "devDependencies": { + "@apimatic/test-utilities": "^0.0.1", + "@types/jest": "^29.4.0", + "@typescript-eslint/eslint-plugin": "^5.52.0", + "@typescript-eslint/parser": "^5.52.0", + "eslint": "^8.34.0", + "jest": "^29.4.3", + "rimraf": "^3.0.2", + "ts-jest": "29.2.6", + "tslib": "^2.5.0", + "typescript": "^4.9.5" + }, + "engines": { + "node": ">=14.17.0" + } + }, + "lib/sdk": {}, "node_modules/@ampproject/remapping": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -87,14 +118,14 @@ } }, "node_modules/@apimatic/authentication-adapters": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/@apimatic/authentication-adapters/-/authentication-adapters-0.5.6.tgz", - "integrity": "sha512-7/m+KLIpsiO83uWtCBRZKmpDtCLBoW5yIM9sOsHslI6RKbGWXu/cTnIE07nlrePLQhfX0+dO/Jl9vfFKIoLYzw==", + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/@apimatic/authentication-adapters/-/authentication-adapters-0.5.8.tgz", + "integrity": "sha512-PVFAKil48WAB8arXmnBBkGK0uJ4uFtUQU6sTW0+yhY2U1FnaRLiBZA0ZlaoHau4M1IEmVY2a5FMredMdRP32Mw==", "license": "MIT", "dependencies": { - "@apimatic/core-interfaces": "^0.2.8", - "@apimatic/http-headers": "^0.3.4", - "@apimatic/http-query": "^0.3.4", + "@apimatic/core-interfaces": "^0.2.9", + "@apimatic/http-headers": "^0.3.5", + "@apimatic/http-query": "^0.3.5", "tslib": "^2.8.1" }, "engines": { @@ -102,58 +133,34 @@ } }, "node_modules/@apimatic/axios-client-adapter": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@apimatic/axios-client-adapter/-/axios-client-adapter-0.2.2.tgz", - "integrity": "sha512-cbMd/CiIUmbtYpHjQgptptkeeWWko8MtuOI5rJfqxL/ElYI0ABSytdO5fuT4Q+hXQHQrkPRgL2z9yUMRoFEARg==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@apimatic/axios-client-adapter/-/axios-client-adapter-0.3.9.tgz", + "integrity": "sha512-3g7uJ/TzU7DA8f+aqFSmQOqdKbOlzPF1qcDvrZglB0Sw/CLAVvqzsr6b5KZUJrgY2gSOgCe1DJr22Zy8N2UbTA==", "license": "MIT", "dependencies": { - "@apimatic/convert-to-stream": "^0.1.0", - "@apimatic/core-interfaces": "^0.2.0", - "@apimatic/file-wrapper": "^0.3.0", - "@apimatic/http-headers": "^0.3.0", - "@apimatic/http-query": "^0.3.0", + "@apimatic/convert-to-stream": "^0.1.5", + "@apimatic/core-interfaces": "^0.2.9", + "@apimatic/file-wrapper": "^0.3.5", + "@apimatic/http-headers": "^0.3.5", + "@apimatic/http-query": "^0.3.5", "@apimatic/json-bigint": "^1.2.0", - "@apimatic/schema": "^0.7.0", - "axios": "^0.21.1", + "@apimatic/schema": "^0.7.16", + "axios": "^1.8.4", "detect-browser": "^5.3.0", - "detect-node": "^2.0.4", - "form-data": "^3.0.0", + "detect-node": "^2.1.0", + "form-data": "^4.0.1", "lodash.flatmap": "^4.5.0", "tiny-warning": "^1.0.3", - "tslib": "^2.1.0" + "tslib": "^2.8.1" }, "engines": { "node": ">=14.15.0 || >=16.0.0" } }, - "node_modules/@apimatic/axios-client-adapter/node_modules/axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.14.0" - } - }, - "node_modules/@apimatic/axios-client-adapter/node_modules/form-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.3.tgz", - "integrity": "sha512-q5YBMeWy6E2Un0nMGWMgI65MAKtaylxfNJGJxpGh45YDciZB4epbWpaAfImil6CPAPTYB4sh0URQNDRIZG5F2w==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "mime-types": "^2.1.35" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/@apimatic/convert-to-stream": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@apimatic/convert-to-stream/-/convert-to-stream-0.1.4.tgz", - "integrity": "sha512-QlAUUN/NT4IbajpnFw+w+4GAPwuTtPAEUMBGGKX4M2XLuv8QA4Asag6V19gLsnWFdzcu7mwpjGn+O4tsOlArMQ==", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@apimatic/convert-to-stream/-/convert-to-stream-0.1.5.tgz", + "integrity": "sha512-aMGxQFXh97KAqHf6owcXCZVFDqq7SUnTaeGWgduHBf1Aji1+m4j+HKR28IMzoWtMzItxqZFbauQYEC6UIwIK9A==", "license": "ISC", "dependencies": { "tslib": "2.8.1" @@ -163,18 +170,18 @@ } }, "node_modules/@apimatic/core": { - "version": "0.10.17", - "resolved": "https://registry.npmjs.org/@apimatic/core/-/core-0.10.17.tgz", - "integrity": "sha512-8AHBm0Y0cjDDtJBgx+TkGXWLWadG+zltMiew7vmrADT8GGhKX/JfMV0R9ae+E1kmnF+C2g/IH/muNx6+HH15pA==", + "version": "0.10.19", + "resolved": "https://registry.npmjs.org/@apimatic/core/-/core-0.10.19.tgz", + "integrity": "sha512-yctmGm8kFZHntyGfCCnJSyGNd1R7Rv1HYE9KVOfnVImkWZwqPPuaYNrq2zaySig0nSopE5Pq4eGMwrOpfqSLJA==", "license": "MIT", "dependencies": { "@apimatic/convert-to-stream": "^0.0.2", - "@apimatic/core-interfaces": "^0.2.8", - "@apimatic/file-wrapper": "^0.3.4", - "@apimatic/http-headers": "^0.3.4", - "@apimatic/http-query": "^0.3.4", + "@apimatic/core-interfaces": "^0.2.9", + "@apimatic/file-wrapper": "^0.3.5", + "@apimatic/http-headers": "^0.3.5", + "@apimatic/http-query": "^0.3.5", "@apimatic/json-bigint": "^1.2.0", - "@apimatic/schema": "^0.7.15", + "@apimatic/schema": "^0.7.16", "detect-browser": "^5.3.0", "detect-node": "^2.1.0", "form-data": "^4.0.1", @@ -189,12 +196,12 @@ } }, "node_modules/@apimatic/core-interfaces": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@apimatic/core-interfaces/-/core-interfaces-0.2.8.tgz", - "integrity": "sha512-3o9CkUMeRrg8uE1dDqcvh3MOFIOPqdNRmpFEzhJa5oc0IqHHVhCSU21V9jBe0jB1+Zxc9uHWsq55QXFpliFq8Q==", + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@apimatic/core-interfaces/-/core-interfaces-0.2.9.tgz", + "integrity": "sha512-kHzsbQ+fyb/Sl96OmlqvBJUa25a/69YQmQlYIFx3+Lk69hDtGcpdQsNygNsbAxQJ1oOCkFQ7TjK9Ny6KDeMyQg==", "license": "MIT", "dependencies": { - "@apimatic/file-wrapper": "^0.3.4", + "@apimatic/file-wrapper": "^0.3.5", "tslib": "^2.8.1" }, "engines": { @@ -211,9 +218,9 @@ } }, "node_modules/@apimatic/file-wrapper": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@apimatic/file-wrapper/-/file-wrapper-0.3.4.tgz", - "integrity": "sha512-XMY2Zh1pMOY1mGoz9axxR5Q5MDhdyArh2BxSfdJkRe76t2CiXdmw/+kPgBiX9QvXJXc0rcsDClqg4WMxamDepw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@apimatic/file-wrapper/-/file-wrapper-0.3.5.tgz", + "integrity": "sha512-N/iItJrHrKomLXyL5CDZSIGwRLYcO8sO08VueQHr0RFRkkeT4ZoEKSP5L/c4SfXtImCFWvoVXpHtG28w6pnYzQ==", "license": "MIT", "dependencies": { "tslib": "2.8.1" @@ -223,9 +230,9 @@ } }, "node_modules/@apimatic/http-headers": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@apimatic/http-headers/-/http-headers-0.3.4.tgz", - "integrity": "sha512-ECKyQt9QaRu8nwFJS50HMKKhs+lO191URDUQ5CRzgtGPudmrrmB35I1lz3oVjXelyoJANog2IEGhx3nqoSYD7Q==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@apimatic/http-headers/-/http-headers-0.3.5.tgz", + "integrity": "sha512-S5BXweey0RvmRxVQIoG+UWrztxmrHq8nXXJPBljH17/5iPtOGlxNylsUxEYHLY2EaV2LCHqp6zHlk47CUUEHiQ==", "license": "MIT", "dependencies": { "tslib": "2.8.1" @@ -235,12 +242,12 @@ } }, "node_modules/@apimatic/http-query": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@apimatic/http-query/-/http-query-0.3.4.tgz", - "integrity": "sha512-6s5DS7dMq1lEJ+9AsTIiMyTXGX9xX5vOnduNSw8csSaQJ5lwMP4O4QzHFT3IFrvctKp/pfS75P0HYGV+9ciltg==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@apimatic/http-query/-/http-query-0.3.5.tgz", + "integrity": "sha512-n6GG8TA/XP+PaLpWLta/6e0NUou0yahtDF7YY+8G5YXJ47OCP0i4rD90OKrwLlyyDwEgdw1pAuikVuLbaSMCgA==", "license": "MIT", "dependencies": { - "@apimatic/file-wrapper": "^0.3.4", + "@apimatic/file-wrapper": "^0.3.5", "tslib": "^2.8.1" }, "engines": { @@ -254,9 +261,9 @@ "license": "MIT" }, "node_modules/@apimatic/schema": { - "version": "0.7.15", - "resolved": "https://registry.npmjs.org/@apimatic/schema/-/schema-0.7.15.tgz", - "integrity": "sha512-wJVQPYYJwG9TuMJLvddH7VJ7x5tRK3ycZvcsheeEL9xD2BmTIV5w5ni14gjvmLIbivRsHmMcUkCVhIEssjg+Zg==", + "version": "0.7.16", + "resolved": "https://registry.npmjs.org/@apimatic/schema/-/schema-0.7.16.tgz", + "integrity": "sha512-4u855UE/A3/8t9vqxI4Ma8wpVKCvWtXHQGaOnThdeE8ZDoo4Ha+R+jmxi3DoOkDWNeGe2vyEVDP1xGyxvjuZ2g==", "license": "MIT", "dependencies": { "tslib": "^2.8.1" @@ -266,24 +273,11 @@ } }, "node_modules/@apimatic/sdk": { - "version": "0.1.0-alpha.2", - "resolved": "https://registry.npmjs.org/@apimatic/sdk/-/sdk-0.1.0-alpha.2.tgz", - "integrity": "sha512-Dosc/UiO20jZXDak+OSNxXJuQ/FeSEAQLh7ncU904RY5KjCon0zAGNebTO0FFOW1Oqks6ulOTogrSc/YNIXl3w==", - "license": "MIT", - "dependencies": { - "@apimatic/authentication-adapters": "^0.5.0", - "@apimatic/axios-client-adapter": "^0.2.0", - "@apimatic/core": "^0.10.0", - "@apimatic/schema": "^0.7.0" - }, - "engines": { - "node": ">=14.17.0" - } + "resolved": "lib/sdk", + "link": true }, "node_modules/@aws-crypto/crc32": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", - "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -297,8 +291,6 @@ }, "node_modules/@aws-crypto/crc32c": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz", - "integrity": "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -309,8 +301,6 @@ }, "node_modules/@aws-crypto/sha1-browser": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz", - "integrity": "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -324,8 +314,6 @@ }, "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/is-array-buffer": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -337,8 +325,6 @@ }, "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-buffer-from": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -351,8 +337,6 @@ }, "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-utf8": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -365,8 +349,6 @@ }, "node_modules/@aws-crypto/sha256-browser": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", - "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -381,8 +363,6 @@ }, "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -394,8 +374,6 @@ }, "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -408,8 +386,6 @@ }, "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -422,8 +398,6 @@ }, "node_modules/@aws-crypto/sha256-js": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", - "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -437,8 +411,6 @@ }, "node_modules/@aws-crypto/supports-web-crypto": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", - "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -447,8 +419,6 @@ }, "node_modules/@aws-crypto/util": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", - "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -459,8 +429,6 @@ }, "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -472,8 +440,6 @@ }, "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -486,8 +452,6 @@ }, "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -500,8 +464,6 @@ }, "node_modules/@aws-sdk/client-cloudfront": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudfront/-/client-cloudfront-3.758.0.tgz", - "integrity": "sha512-kAIMe+cwH+ZuK/rM3L8NdM8rS5cnCoFTgCbjF4GVjDnZJ8JlNm3oRIKAK55mmgtGLuqEz1h6QVLrV01/fNvYaA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -554,8 +516,6 @@ }, "node_modules/@aws-sdk/client-s3": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.758.0.tgz", - "integrity": "sha512-f8SlhU9/93OC/WEI6xVJf/x/GoQFj9a/xXK6QCtr5fvCjfSLgMVFmKTiIl/tgtDRzxUDc8YS6EGtbHjJ3Y/atg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -622,8 +582,6 @@ }, "node_modules/@aws-sdk/client-sso": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.758.0.tgz", - "integrity": "sha512-BoGO6IIWrLyLxQG6txJw6RT2urmbtlwfggapNCrNPyYjlXpzTSJhBYjndg7TpDATFd0SXL0zm8y/tXsUXNkdYQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -672,8 +630,6 @@ }, "node_modules/@aws-sdk/core": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.758.0.tgz", - "integrity": "sha512-0RswbdR9jt/XKemaLNuxi2gGr4xGlHyGxkTdhSQzCyUe9A9OPCoLl3rIESRguQEech+oJnbHk/wuiwHqTuP9sg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -695,8 +651,6 @@ }, "node_modules/@aws-sdk/credential-provider-env": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.758.0.tgz", - "integrity": "sha512-N27eFoRrO6MeUNumtNHDW9WOiwfd59LPXPqDrIa3kWL/s+fOKFHb9xIcF++bAwtcZnAxKkgpDCUP+INNZskE+w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -712,8 +666,6 @@ }, "node_modules/@aws-sdk/credential-provider-http": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.758.0.tgz", - "integrity": "sha512-Xt9/U8qUCiw1hihztWkNeIR+arg6P+yda10OuCHX6kFVx3auTlU7+hCqs3UxqniGU4dguHuftf3mRpi5/GJ33Q==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -734,8 +686,6 @@ }, "node_modules/@aws-sdk/credential-provider-ini": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.758.0.tgz", - "integrity": "sha512-cymSKMcP5d+OsgetoIZ5QCe1wnp2Q/tq+uIxVdh9MbfdBBEnl9Ecq6dH6VlYS89sp4QKuxHxkWXVnbXU3Q19Aw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -759,8 +709,6 @@ }, "node_modules/@aws-sdk/credential-provider-node": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.758.0.tgz", - "integrity": "sha512-+DaMv63wiq7pJrhIQzZYMn4hSarKiizDoJRvyR7WGhnn0oQ/getX9Z0VNCV3i7lIFoLNTb7WMmQ9k7+z/uD5EQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -783,8 +731,6 @@ }, "node_modules/@aws-sdk/credential-provider-process": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.758.0.tgz", - "integrity": "sha512-AzcY74QTPqcbXWVgjpPZ3HOmxQZYPROIBz2YINF0OQk0MhezDWV/O7Xec+K1+MPGQO3qS6EDrUUlnPLjsqieHA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -801,8 +747,6 @@ }, "node_modules/@aws-sdk/credential-provider-sso": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.758.0.tgz", - "integrity": "sha512-x0FYJqcOLUCv8GLLFDYMXRAQKGjoM+L0BG4BiHYZRDf24yQWFCAZsCQAYKo6XZYh2qznbsW6f//qpyJ5b0QVKQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -821,8 +765,6 @@ }, "node_modules/@aws-sdk/credential-provider-web-identity": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.758.0.tgz", - "integrity": "sha512-XGguXhBqiCXMXRxcfCAVPlMbm3VyJTou79r/3mxWddHWF0XbhaQiBIbUz6vobVTD25YQRbWSmSch7VA8kI5Lrw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -839,8 +781,6 @@ }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.734.0.tgz", - "integrity": "sha512-etC7G18aF7KdZguW27GE/wpbrNmYLVT755EsFc8kXpZj8D6AFKxc7OuveinJmiy0bYXAMspJUWsF6CrGpOw6CQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -858,8 +798,6 @@ }, "node_modules/@aws-sdk/middleware-expect-continue": { "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.734.0.tgz", - "integrity": "sha512-P38/v1l6HjuB2aFUewt7ueAW5IvKkFcv5dalPtbMGRhLeyivBOHwbCyuRKgVs7z7ClTpu9EaViEGki2jEQqEsQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -874,8 +812,6 @@ }, "node_modules/@aws-sdk/middleware-flexible-checksums": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.758.0.tgz", - "integrity": "sha512-o8Rk71S08YTKLoSobucjnbj97OCGaXgpEDNKXpXaavUM5xLNoHCLSUPRCiEN86Ivqxg1n17Y2nSRhfbsveOXXA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -899,8 +835,6 @@ }, "node_modules/@aws-sdk/middleware-host-header": { "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.734.0.tgz", - "integrity": "sha512-LW7RRgSOHHBzWZnigNsDIzu3AiwtjeI2X66v+Wn1P1u+eXssy1+up4ZY/h+t2sU4LU36UvEf+jrZti9c6vRnFw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -915,8 +849,6 @@ }, "node_modules/@aws-sdk/middleware-location-constraint": { "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.734.0.tgz", - "integrity": "sha512-EJEIXwCQhto/cBfHdm3ZOeLxd2NlJD+X2F+ZTOxzokuhBtY0IONfC/91hOo5tWQweerojwshSMHRCKzRv1tlwg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -930,8 +862,6 @@ }, "node_modules/@aws-sdk/middleware-logger": { "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.734.0.tgz", - "integrity": "sha512-mUMFITpJUW3LcKvFok176eI5zXAUomVtahb9IQBwLzkqFYOrMJvWAvoV4yuxrJ8TlQBG8gyEnkb9SnhZvjg67w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -945,8 +875,6 @@ }, "node_modules/@aws-sdk/middleware-recursion-detection": { "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.734.0.tgz", - "integrity": "sha512-CUat2d9ITsFc2XsmeiRQO96iWpxSKYFjxvj27Hc7vo87YUHRnfMfnc8jw1EpxEwMcvBD7LsRa6vDNky6AjcrFA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -961,8 +889,6 @@ }, "node_modules/@aws-sdk/middleware-sdk-s3": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.758.0.tgz", - "integrity": "sha512-6mJ2zyyHPYSV6bAcaFpsdoXZJeQlR1QgBnZZ6juY/+dcYiuyWCdyLUbGzSZSE7GTfx6i+9+QWFeoIMlWKgU63A==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -987,8 +913,6 @@ }, "node_modules/@aws-sdk/middleware-ssec": { "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.734.0.tgz", - "integrity": "sha512-d4yd1RrPW/sspEXizq2NSOUivnheac6LPeLSLnaeTbBG9g1KqIqvCzP1TfXEqv2CrWfHEsWtJpX7oyjySSPvDQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1002,8 +926,6 @@ }, "node_modules/@aws-sdk/middleware-user-agent": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.758.0.tgz", - "integrity": "sha512-iNyehQXtQlj69JCgfaOssgZD4HeYGOwxcaKeG6F+40cwBjTAi0+Ph1yfDwqk2qiBPIRWJ/9l2LodZbxiBqgrwg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1021,8 +943,6 @@ }, "node_modules/@aws-sdk/nested-clients": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.758.0.tgz", - "integrity": "sha512-YZ5s7PSvyF3Mt2h1EQulCG93uybprNGbBkPmVuy/HMMfbFTt4iL3SbKjxqvOZelm86epFfj7pvK7FliI2WOEcg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1071,8 +991,6 @@ }, "node_modules/@aws-sdk/region-config-resolver": { "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.734.0.tgz", - "integrity": "sha512-Lvj1kPRC5IuJBr9DyJ9T9/plkh+EfKLy+12s/mykOy1JaKHDpvj+XGy2YO6YgYVOb8JFtaqloid+5COtje4JTQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1089,8 +1007,6 @@ }, "node_modules/@aws-sdk/signature-v4-multi-region": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.758.0.tgz", - "integrity": "sha512-0RPCo8fYJcrenJ6bRtiUbFOSgQ1CX/GpvwtLU2Fam1tS9h2klKK8d74caeV6A1mIUvBU7bhyQ0wMGlwMtn3EYw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1107,8 +1023,6 @@ }, "node_modules/@aws-sdk/token-providers": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.758.0.tgz", - "integrity": "sha512-ckptN1tNrIfQUaGWm/ayW1ddG+imbKN7HHhjFdS4VfItsP0QQOB0+Ov+tpgb4MoNR4JaUghMIVStjIeHN2ks1w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1125,8 +1039,6 @@ }, "node_modules/@aws-sdk/types": { "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.734.0.tgz", - "integrity": "sha512-o11tSPTT70nAkGV1fN9wm/hAIiLPyWX6SuGf+9JyTp7S/rC2cFWhR26MvA69nplcjNaXVzB0f+QFrLXXjOqCrg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1139,8 +1051,6 @@ }, "node_modules/@aws-sdk/util-arn-parser": { "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.723.0.tgz", - "integrity": "sha512-ZhEfvUwNliOQROcAk34WJWVYTlTa4694kSVhDSjW6lE1bMataPnIN8A0ycukEzBXmd8ZSoBcQLn6lKGl7XIJ5w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1152,8 +1062,6 @@ }, "node_modules/@aws-sdk/util-endpoints": { "version": "3.743.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.743.0.tgz", - "integrity": "sha512-sN1l559zrixeh5x+pttrnd0A3+r34r0tmPkJ/eaaMaAzXqsmKU/xYre9K3FNnsSS1J1k4PEfk/nHDTVUgFYjnw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1168,8 +1076,6 @@ }, "node_modules/@aws-sdk/util-locate-window": { "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.723.0.tgz", - "integrity": "sha512-Yf2CS10BqK688DRsrKI/EO6B8ff5J86NXe4C+VCysK7UOgN0l1zOTeTukZ3H8Q9tYYX3oaF1961o8vRkFm7Nmw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1181,8 +1087,6 @@ }, "node_modules/@aws-sdk/util-user-agent-browser": { "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.734.0.tgz", - "integrity": "sha512-xQTCus6Q9LwUuALW+S76OL0jcWtMOVu14q+GoLnWPUM7QeUw963oQcLhF7oq0CtaLLKyl4GOUfcwc773Zmwwng==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1194,8 +1098,6 @@ }, "node_modules/@aws-sdk/util-user-agent-node": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.758.0.tgz", - "integrity": "sha512-A5EZw85V6WhoKMV2hbuFRvb9NPlxEErb4HPO6/SPXYY4QrjprIzScHxikqcWv1w4J3apB1wto9LPU3IMsYtfrw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1219,8 +1121,6 @@ }, "node_modules/@aws-sdk/xml-builder": { "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.734.0.tgz", - "integrity": "sha512-Zrjxi5qwGEcUsJ0ru7fRtW74WcTS0rbLcehoFB+rN1GRi2hbLcFaYs4PwVA5diLeAJH0gszv3x4Hr/S87MfbKQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1233,8 +1133,6 @@ }, "node_modules/@babel/code-frame": { "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1248,8 +1146,6 @@ }, "node_modules/@babel/compat-data": { "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", - "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", "dev": true, "license": "MIT", "engines": { @@ -1258,8 +1154,6 @@ }, "node_modules/@babel/core": { "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz", - "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==", "dev": true, "license": "MIT", "dependencies": { @@ -1289,15 +1183,11 @@ }, "node_modules/@babel/core/node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, "license": "MIT" }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -1306,8 +1196,6 @@ }, "node_modules/@babel/generator": { "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz", - "integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==", "dev": true, "license": "MIT", "dependencies": { @@ -1323,8 +1211,6 @@ }, "node_modules/@babel/helper-compilation-targets": { "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", - "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", "dev": true, "license": "MIT", "dependencies": { @@ -1340,8 +1226,6 @@ }, "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "license": "ISC", "dependencies": { @@ -1350,8 +1234,6 @@ }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -1360,15 +1242,11 @@ }, "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, "license": "ISC" }, "node_modules/@babel/helper-module-imports": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", "dev": true, "license": "MIT", "dependencies": { @@ -1381,8 +1259,6 @@ }, "node_modules/@babel/helper-module-transforms": { "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", "dev": true, "license": "MIT", "dependencies": { @@ -1399,8 +1275,6 @@ }, "node_modules/@babel/helper-string-parser": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "dev": true, "license": "MIT", "engines": { @@ -1409,8 +1283,6 @@ }, "node_modules/@babel/helper-validator-identifier": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true, "license": "MIT", "engines": { @@ -1419,8 +1291,6 @@ }, "node_modules/@babel/helper-validator-option": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", "dev": true, "license": "MIT", "engines": { @@ -1429,8 +1299,6 @@ }, "node_modules/@babel/helpers": { "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.9.tgz", - "integrity": "sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==", "dev": true, "license": "MIT", "dependencies": { @@ -1443,8 +1311,6 @@ }, "node_modules/@babel/parser": { "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz", - "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", "dev": true, "license": "MIT", "dependencies": { @@ -1459,8 +1325,6 @@ }, "node_modules/@babel/template": { "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", - "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", "dev": true, "license": "MIT", "dependencies": { @@ -1474,8 +1338,6 @@ }, "node_modules/@babel/traverse": { "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz", - "integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==", "dev": true, "license": "MIT", "dependencies": { @@ -1493,8 +1355,6 @@ }, "node_modules/@babel/traverse/node_modules/globals": { "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, "license": "MIT", "engines": { @@ -1503,8 +1363,6 @@ }, "node_modules/@babel/types": { "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz", - "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", "dev": true, "license": "MIT", "dependencies": { @@ -1538,8 +1396,6 @@ }, "node_modules/@commitlint/cli": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-15.0.0.tgz", - "integrity": "sha512-Y5xmDCweytqzo4N4lOI2YRiuX35xTjcs8n5hUceBH8eyK0YbwtgWX50BJOH2XbkwEmII9blNhlBog6AdQsqicg==", "dev": true, "license": "MIT", "dependencies": { @@ -1562,8 +1418,6 @@ }, "node_modules/@commitlint/config-conventional": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-15.0.0.tgz", - "integrity": "sha512-eZBRL8Lk3hMNHp1wUMYj0qrZQEsST1ai7KHR8J1IDD9aHgT7L2giciibuQ+Og7vxVhR5WtYDvh9xirXFVPaSkQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1575,8 +1429,6 @@ }, "node_modules/@commitlint/ensure": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-15.0.0.tgz", - "integrity": "sha512-7DV4iNIald3vycwaWBNGk5FbonaNzOlU8nBe5m5AgU2dIeNKuXwLm+zzJzG27j0Ho56rgz//3F6RIvmsoxY9ZA==", "dev": true, "license": "MIT", "dependencies": { @@ -1589,8 +1441,6 @@ }, "node_modules/@commitlint/execute-rule": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-15.0.0.tgz", - "integrity": "sha512-pyE4ApxjbWhb1TXz5vRiGwI2ssdMMgZbaaheZq1/7WC0xRnqnIhE1yUC1D2q20qPtvkZPstTYvMiRVtF+DvjUg==", "dev": true, "license": "MIT", "engines": { @@ -1599,8 +1449,6 @@ }, "node_modules/@commitlint/format": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-15.0.0.tgz", - "integrity": "sha512-bPhAfqwRhPk92WiuY0ktEJNpRRHSCd+Eg1MdhGyL9Bl3U25E5zvuInA+dNctnzZiOBSH/37ZaD0eOKCpQE6acg==", "dev": true, "license": "MIT", "dependencies": { @@ -1613,8 +1461,6 @@ }, "node_modules/@commitlint/is-ignored": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-15.0.0.tgz", - "integrity": "sha512-edtnkf2QZ/7e/YCJDgn1WDw9wfF1WfOitW5YEoSOb4SxjJEb/oE87kxNPZ2j8mnDMuunspcMfGHeg6fRlwaEWg==", "dev": true, "license": "MIT", "dependencies": { @@ -1627,8 +1473,6 @@ }, "node_modules/@commitlint/lint": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-15.0.0.tgz", - "integrity": "sha512-hUi2+Im/2dJ5FBvWnodypTkg+5haCgsDzB0fyMApWLUA1IucYUAqRCQCW5em1Mhk9Crw1pd5YzFNikhIclkqCw==", "dev": true, "license": "MIT", "dependencies": { @@ -1643,8 +1487,6 @@ }, "node_modules/@commitlint/load": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-15.0.0.tgz", - "integrity": "sha512-Ak1YPeOhvxmY3ioe0o6m1yLGvUAYb4BdfGgShU8jiTCmU3Mnmms0Xh/kfQz8AybhezCC3AmVTyBLaBZxOHR8kg==", "dev": true, "license": "MIT", "dependencies": { @@ -1664,8 +1506,6 @@ }, "node_modules/@commitlint/load/node_modules/typescript": { "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, "license": "Apache-2.0", "bin": { @@ -1678,8 +1518,6 @@ }, "node_modules/@commitlint/message": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-15.0.0.tgz", - "integrity": "sha512-L8euabzboKavPuDJsdIYAY2wx97LbiGEYsckMo6NmV8pOun50c8hQx6ouXFSAx4pp+mX9yUGmMiVqfrk2LKDJQ==", "dev": true, "license": "MIT", "engines": { @@ -1688,8 +1526,6 @@ }, "node_modules/@commitlint/parse": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-15.0.0.tgz", - "integrity": "sha512-7fweM67tZfBNS7zw1KTuuT5K2u9nGytUJqFqT/1Ln3Na9cBCsoAqR47mfsNOTlRCgGwakm4xiQ7BpS2gN0OGuw==", "dev": true, "license": "MIT", "dependencies": { @@ -1703,8 +1539,6 @@ }, "node_modules/@commitlint/read": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-15.0.0.tgz", - "integrity": "sha512-5yI1o2HKZFVe7RTjL7IhuhHMKar/MDNY34vEHqqz9gMI7BK/rdP8uVb4Di1efl2V0UPnwID0nPKWESjQ8Ti0gw==", "dev": true, "license": "MIT", "dependencies": { @@ -1719,8 +1553,6 @@ }, "node_modules/@commitlint/read/node_modules/fs-extra": { "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1734,8 +1566,6 @@ }, "node_modules/@commitlint/resolve-extends": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-15.0.0.tgz", - "integrity": "sha512-7apfRJjgJsKja7lHsPfEFixKjA/fk/UeD3owkOw1174yYu4u8xBDLSeU3IinGPdMuF9m245eX8wo7vLUy+EBSg==", "dev": true, "license": "MIT", "dependencies": { @@ -1750,8 +1580,6 @@ }, "node_modules/@commitlint/rules": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-15.0.0.tgz", - "integrity": "sha512-SqXfp6QUlwBS+0IZm4FEA/NmmAwcFQIkG3B05BtemOVWXQdZ8j1vV6hDwvA9oMPCmUSrrGpHOtZK7HaHhng2yA==", "dev": true, "license": "MIT", "dependencies": { @@ -1767,8 +1595,6 @@ }, "node_modules/@commitlint/to-lines": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-15.0.0.tgz", - "integrity": "sha512-mY3MNA9ujPqVpiJjTYG9MDsYCobue5PJFO0MfcIzS1mCVvngH8ZFTPAh1fT5t+t1h876boS88+9WgqjRvbYItw==", "dev": true, "license": "MIT", "engines": { @@ -1777,8 +1603,6 @@ }, "node_modules/@commitlint/top-level": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-15.0.0.tgz", - "integrity": "sha512-7Gz3t7xcuuUw1d1Nou6YLaztzp2Em+qZ6YdCzrqYc+aquca3Vt0O696nuiBDU/oE+tls4Hx2CNpAbWhTgEwB5A==", "dev": true, "license": "MIT", "dependencies": { @@ -1790,8 +1614,6 @@ }, "node_modules/@commitlint/types": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-15.0.0.tgz", - "integrity": "sha512-OMSLX+QJnyNoTwws54ULv9sOvuw9GdVezln76oyUd4YbMMJyaav62aSXDuCdWyL2sm9hTkSzyEi52PNaIj/vqw==", "dev": true, "license": "MIT", "dependencies": { @@ -1803,8 +1625,6 @@ }, "node_modules/@endemolshinegroup/cosmiconfig-typescript-loader": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@endemolshinegroup/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-3.0.2.tgz", - "integrity": "sha512-QRVtqJuS1mcT56oHpVegkKBlgtWjXw/gHNWO3eL9oyB5Sc7HBoc2OLG/nYpVfT/Jejvo3NUrD0Udk7XgoyDKkA==", "dev": true, "license": "MIT", "dependencies": { @@ -1822,8 +1642,6 @@ }, "node_modules/@endemolshinegroup/cosmiconfig-typescript-loader/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": { @@ -1832,8 +1650,6 @@ }, "node_modules/@endemolshinegroup/cosmiconfig-typescript-loader/node_modules/ts-node": { "version": "9.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", "dev": true, "license": "MIT", "dependencies": { @@ -1859,8 +1675,6 @@ }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", - "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", "dev": true, "license": "MIT", "dependencies": { @@ -1878,8 +1692,6 @@ }, "node_modules/@eslint-community/regexpp": { "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, "license": "MIT", "engines": { @@ -1888,8 +1700,6 @@ }, "node_modules/@eslint/config-array": { "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", - "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1903,8 +1713,6 @@ }, "node_modules/@eslint/config-array/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "license": "MIT", "dependencies": { @@ -1914,8 +1722,6 @@ }, "node_modules/@eslint/config-array/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -1927,8 +1733,6 @@ }, "node_modules/@eslint/core": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", - "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1940,8 +1744,6 @@ }, "node_modules/@eslint/eslintrc": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.0.tgz", - "integrity": "sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1964,8 +1766,6 @@ }, "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "license": "MIT", "dependencies": { @@ -1975,8 +1775,6 @@ }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -1988,8 +1786,6 @@ }, "node_modules/@eslint/js": { "version": "9.21.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.21.0.tgz", - "integrity": "sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==", "dev": true, "license": "MIT", "engines": { @@ -1998,8 +1794,6 @@ }, "node_modules/@eslint/object-schema": { "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2008,8 +1802,6 @@ }, "node_modules/@eslint/plugin-kit": { "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz", - "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2022,8 +1814,6 @@ }, "node_modules/@humanfs/core": { "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2032,8 +1822,6 @@ }, "node_modules/@humanfs/node": { "version": "0.16.6", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", - "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2046,8 +1834,6 @@ }, "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2060,8 +1846,6 @@ }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2074,8 +1858,6 @@ }, "node_modules/@humanwhocodes/retry": { "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", - "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2088,8 +1870,6 @@ }, "node_modules/@inquirer/confirm": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.2.0.tgz", - "integrity": "sha512-oOIwPs0Dvq5220Z8lGL/6LHRTEr9TgLHmiI99Rj1PJ1p1czTys+olrgBqZk4E2qC0YTzeHprxSQmoHioVdJ7Lw==", "dev": true, "license": "MIT", "dependencies": { @@ -2102,8 +1882,6 @@ }, "node_modules/@inquirer/core": { "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.2.1.tgz", - "integrity": "sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==", "dev": true, "license": "MIT", "dependencies": { @@ -2126,8 +1904,6 @@ }, "node_modules/@inquirer/core/node_modules/@inquirer/type": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-2.0.0.tgz", - "integrity": "sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==", "dev": true, "license": "MIT", "dependencies": { @@ -2139,8 +1915,6 @@ }, "node_modules/@inquirer/core/node_modules/@types/node": { "version": "22.13.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.9.tgz", - "integrity": "sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==", "dev": true, "license": "MIT", "dependencies": { @@ -2149,8 +1923,6 @@ }, "node_modules/@inquirer/core/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": { @@ -2159,8 +1931,6 @@ }, "node_modules/@inquirer/core/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": { @@ -2172,8 +1942,6 @@ }, "node_modules/@inquirer/core/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": { @@ -2185,8 +1953,6 @@ }, "node_modules/@inquirer/core/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": { @@ -2200,8 +1966,6 @@ }, "node_modules/@inquirer/figures": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.10.tgz", - "integrity": "sha512-Ey6176gZmeqZuY/W/nZiUyvmb1/qInjcpiZjXWi6nON+nxJpD1bxtSoBxNliGISae32n6OwbY+TSXPZ1CfS4bw==", "license": "MIT", "engines": { "node": ">=18" @@ -2209,8 +1973,6 @@ }, "node_modules/@inquirer/input": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-2.3.0.tgz", - "integrity": "sha512-XfnpCStx2xgh1LIRqPXrTNEEByqQWoxsWYzNRSEUxJ5c6EQlhMogJ3vHKu8aXuTacebtaZzMAHwEL0kAflKOBw==", "dev": true, "license": "MIT", "dependencies": { @@ -2223,8 +1985,6 @@ }, "node_modules/@inquirer/select": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-2.5.0.tgz", - "integrity": "sha512-YmDobTItPP3WcEI86GvPo+T2sRHkxxOq/kXmsBjHS5BVXUgvgZ5AfJjkvQvZr03T81NnI3KrrRuMzeuYUQRFOA==", "dev": true, "license": "MIT", "dependencies": { @@ -2240,8 +2000,6 @@ }, "node_modules/@inquirer/type": { "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.5.tgz", - "integrity": "sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==", "dev": true, "license": "MIT", "dependencies": { @@ -2253,8 +2011,6 @@ }, "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==", "license": "ISC", "dependencies": { "string-width": "^5.1.2", @@ -2270,8 +2026,6 @@ }, "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==", "license": "MIT", "engines": { "node": ">=12" @@ -2282,14 +2036,10 @@ }, "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==", "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==", "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", @@ -2305,8 +2055,6 @@ }, "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==", "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", @@ -2322,8 +2070,6 @@ }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "license": "ISC", "dependencies": { @@ -2339,8 +2085,6 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "license": "MIT", "dependencies": { @@ -2349,8 +2093,6 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", "dependencies": { @@ -2363,8 +2105,6 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "license": "MIT", "dependencies": { @@ -2377,8 +2117,6 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", "dependencies": { @@ -2390,8 +2128,6 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", "dependencies": { @@ -2406,8 +2142,6 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", "dependencies": { @@ -2419,8 +2153,6 @@ }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, "license": "MIT", "engines": { @@ -2429,8 +2161,6 @@ }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", "dev": true, "license": "MIT", "dependencies": { @@ -2444,8 +2174,6 @@ }, "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": { @@ -2454,8 +2182,6 @@ }, "node_modules/@jridgewell/set-array": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, "license": "MIT", "engines": { @@ -2464,15 +2190,11 @@ }, "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.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2482,8 +2204,6 @@ }, "node_modules/@kwsites/file-exists": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", - "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", "license": "MIT", "dependencies": { "debug": "^4.1.1" @@ -2491,14 +2211,28 @@ }, "node_modules/@kwsites/promise-deferred": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", - "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", "license": "MIT" }, + "node_modules/@mswjs/interceptors": { + "version": "0.38.6", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.38.6.tgz", + "integrity": "sha512-qFlpmObPqeUs4u3oFYv/OM/xyX+pNa5TRAjqjvMhbGYlyMhzSrE5UfncL2rUcEeVfD9Gebgff73hPwqcOwJQNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/logger": "^0.3.0", + "@open-draft/until": "^2.0.0", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.3", + "strict-event-emitter": "^0.5.1" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", @@ -2510,8 +2244,6 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "license": "MIT", "engines": { "node": ">= 8" @@ -2519,8 +2251,6 @@ }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", @@ -2532,8 +2262,6 @@ }, "node_modules/@oclif/core": { "version": "4.2.8", - "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.2.8.tgz", - "integrity": "sha512-OWv4Va6bERxIhrYcnUGzyhGRqktc64lJO6cZ3UwkzJDpfR8ZrbCxRfKRBBah1i8kzUlOAeAXnpbMBMah3skKwA==", "license": "MIT", "dependencies": { "ansi-escapes": "^4.3.2", @@ -2561,8 +2289,6 @@ }, "node_modules/@oclif/core/node_modules/semver": { "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -2573,8 +2299,6 @@ }, "node_modules/@oclif/plugin-autocomplete": { "version": "3.2.24", - "resolved": "https://registry.npmjs.org/@oclif/plugin-autocomplete/-/plugin-autocomplete-3.2.24.tgz", - "integrity": "sha512-KGz7ypHhahRJWy0sB+mNvLLJiMWEt4pgjCFIpcBhkZhc090H4e4QhGR6Xp2430rQgStPcnUa0BYcVZJPojAsDQ==", "license": "MIT", "dependencies": { "@oclif/core": "^4", @@ -2588,8 +2312,6 @@ }, "node_modules/@oclif/plugin-help": { "version": "6.2.26", - "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-6.2.26.tgz", - "integrity": "sha512-5KdldxEizbV3RsHOddN4oMxrX/HL6z79S94tbxEHVZ/dJKDWzfyCpgC9axNYqwmBF2pFZkozl/l7t3hCGOdalw==", "license": "MIT", "dependencies": { "@oclif/core": "^4" @@ -2600,8 +2322,6 @@ }, "node_modules/@oclif/plugin-not-found": { "version": "3.2.44", - "resolved": "https://registry.npmjs.org/@oclif/plugin-not-found/-/plugin-not-found-3.2.44.tgz", - "integrity": "sha512-UF6GD/aDbElP6LJMZSSq72NvK0aQwtQ+fkjn0VLU9o1vNAA3M2K0tGL7lduZGQNw8LejOhr25eR4aXeRCgKb2A==", "license": "MIT", "dependencies": { "@inquirer/prompts": "^7.3.2", @@ -2615,8 +2335,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/checkbox": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.1.2.tgz", - "integrity": "sha512-PL9ixC5YsPXzXhAZFUPmkXGxfgjkdfZdPEPPmt4kFwQ4LBMDG9n/nHXYRGGZSKZJs+d1sGKWgS2GiPzVRKUdtQ==", "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.7", @@ -2639,8 +2357,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/confirm": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.6.tgz", - "integrity": "sha512-6ZXYK3M1XmaVBZX6FCfChgtponnL0R6I7k8Nu+kaoNkT828FVZTcca1MqmWQipaW2oNREQl5AaPCUOOCVNdRMw==", "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.7", @@ -2660,8 +2376,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/core": { "version": "10.1.7", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.7.tgz", - "integrity": "sha512-AA9CQhlrt6ZgiSy6qoAigiA1izOa751ugX6ioSjqgJ+/Gd+tEN/TORk5sUYNjXuHWfW0r1n/a6ak4u/NqHHrtA==", "license": "MIT", "dependencies": { "@inquirer/figures": "^1.0.10", @@ -2687,8 +2401,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/editor": { "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.7.tgz", - "integrity": "sha512-gktCSQtnSZHaBytkJKMKEuswSk2cDBuXX5rxGFv306mwHfBPjg5UAldw9zWGoEyvA9KpRDkeM4jfrx0rXn0GyA==", "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.7", @@ -2709,8 +2421,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/expand": { "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.9.tgz", - "integrity": "sha512-Xxt6nhomWTAmuSX61kVgglLjMEFGa+7+F6UUtdEUeg7fg4r9vaFttUUKrtkViYYrQBA5Ia1tkOJj2koP9BuLig==", "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.7", @@ -2731,8 +2441,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/input": { "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.1.6.tgz", - "integrity": "sha512-1f5AIsZuVjPT4ecA8AwaxDFNHny/tSershP/cTvTDxLdiIGTeILNcKozB0LaYt6mojJLUbOYhpIxicaYf7UKIQ==", "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.7", @@ -2752,8 +2460,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/number": { "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.9.tgz", - "integrity": "sha512-iN2xZvH3tyIYXLXBvlVh0npk1q/aVuKXZo5hj+K3W3D4ngAEq/DkLpofRzx6oebTUhBvOgryZ+rMV0yImKnG3w==", "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.7", @@ -2773,8 +2479,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/password": { "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.9.tgz", - "integrity": "sha512-xBEoOw1XKb0rIN208YU7wM7oJEHhIYkfG7LpTJAEW913GZeaoQerzf5U/LSHI45EVvjAdgNXmXgH51cUXKZcJQ==", "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.7", @@ -2795,8 +2499,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/prompts": { "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.3.2.tgz", - "integrity": "sha512-G1ytyOoHh5BphmEBxSwALin3n1KGNYB6yImbICcRQdzXfOGbuJ9Jske/Of5Sebk339NSGGNfUshnzK8YWkTPsQ==", "license": "MIT", "dependencies": { "@inquirer/checkbox": "^4.1.2", @@ -2824,8 +2526,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/rawlist": { "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.0.9.tgz", - "integrity": "sha512-+5t6ebehKqgoxV8fXwE49HkSF2Rc9ijNiVGEQZwvbMI61/Q5RcD+jWD6Gs1tKdz5lkI8GRBL31iO0HjGK1bv+A==", "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.7", @@ -2846,8 +2546,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/search": { "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.0.9.tgz", - "integrity": "sha512-DWmKztkYo9CvldGBaRMr0ETUHgR86zE6sPDVOHsqz4ISe9o1LuiWfgJk+2r75acFclA93J/lqzhT0dTjCzHuoA==", "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.7", @@ -2869,8 +2567,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/select": { "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.0.9.tgz", - "integrity": "sha512-BpJyJe7Dkhv2kz7yG7bPSbJLQuu/rqyNlF1CfiiFeFwouegfH+zh13KDyt6+d9DwucKo7hqM3wKLLyJxZMO+Xg==", "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.7", @@ -2893,8 +2589,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/type": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.4.tgz", - "integrity": "sha512-2MNFrDY8jkFYc9Il9DgLsHhMzuHnOYM1+CUYVWbzu9oT0hC7V7EcYvdCKeoll/Fcci04A+ERZ9wcc7cQ8lTkIA==", "license": "MIT", "engines": { "node": ">=18" @@ -2910,8 +2604,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/@types/node": { "version": "22.13.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.9.tgz", - "integrity": "sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==", "license": "MIT", "optional": true, "peer": true, @@ -2921,8 +2613,6 @@ }, "node_modules/@oclif/plugin-not-found/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==", "license": "MIT", "engines": { "node": ">=8" @@ -2930,8 +2620,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/mute-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", - "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", "license": "ISC", "engines": { "node": "^18.17.0 || >=20.5.0" @@ -2939,8 +2627,6 @@ }, "node_modules/@oclif/plugin-not-found/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==", "license": "ISC", "engines": { "node": ">=14" @@ -2951,8 +2637,6 @@ }, "node_modules/@oclif/plugin-not-found/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==", "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -2963,8 +2647,6 @@ }, "node_modules/@oclif/plugin-not-found/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==", "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -2977,8 +2659,6 @@ }, "node_modules/@oclif/plugin-warn-if-update-available": { "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@oclif/plugin-warn-if-update-available/-/plugin-warn-if-update-available-3.1.35.tgz", - "integrity": "sha512-gQfFW0UfT3msq/3O3idgBq4CA3cyXzFtrkoG7MK4FXVK0wxIdG0EVgJn4/o3jqjWO7t+93siCXyq56CGTGUZWQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2994,14 +2674,14 @@ } }, "node_modules/@oclif/test": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@oclif/test/-/test-4.1.11.tgz", - "integrity": "sha512-j689R13E2so1Rj6jJUfQ67yJ4N7u6L5KFzv87cvUfD9AZ79xAtCxGrd34/iOLUDJmv1huFt/0QumBcjKoWUSYw==", + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@oclif/test/-/test-4.1.13.tgz", + "integrity": "sha512-pulrTiJRhoAKizFf6y5WeHvM2JyoRiZKV0H8qqYEoE0UHDKqInNmfGJyp8Ip6lTVQeMv1U8YCAXOS/HiWPVWeg==", "dev": true, "license": "MIT", "dependencies": { - "ansis": "^3.16.0", - "debug": "^4.4.0" + "ansis": "^3.17.0", + "debug": "^4.4.1" }, "engines": { "node": ">=18.0.0" @@ -3010,10 +2690,33 @@ "@oclif/core": ">= 3.0.0" } }, + "node_modules/@open-draft/deferred-promise": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", + "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@open-draft/logger": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz", + "integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-node-process": "^1.2.0", + "outvariant": "^1.4.0" + } + }, + "node_modules/@open-draft/until": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz", + "integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==", + "dev": true, + "license": "MIT" + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "license": "MIT", "optional": true, "engines": { @@ -3022,8 +2725,6 @@ }, "node_modules/@pnpm/config.env-replace": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", "dev": true, "license": "MIT", "engines": { @@ -3032,8 +2733,6 @@ }, "node_modules/@pnpm/network.ca-file": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", "dev": true, "license": "MIT", "dependencies": { @@ -3045,15 +2744,11 @@ }, "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true, "license": "ISC" }, "node_modules/@pnpm/npm-conf": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", - "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", "dev": true, "license": "MIT", "dependencies": { @@ -3067,15 +2762,11 @@ }, "node_modules/@rtsao/scc": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", "dev": true, "license": "MIT" }, "node_modules/@sindresorhus/is": { "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", "dev": true, "license": "MIT", "engines": { @@ -3087,8 +2778,6 @@ }, "node_modules/@smithy/abort-controller": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.1.tgz", - "integrity": "sha512-fiUIYgIgRjMWznk6iLJz35K2YxSLHzLBA/RC6lBrKfQ8fHbPfvk7Pk9UvpKoHgJjI18MnbPuEju53zcVy6KF1g==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3101,8 +2790,6 @@ }, "node_modules/@smithy/chunked-blob-reader": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.0.0.tgz", - "integrity": "sha512-+sKqDBQqb036hh4NPaUiEkYFkTUGYzRsn3EuFhyfQfMy6oGHEUJDurLP9Ufb5dasr/XiAmPNMr6wa9afjQB+Gw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3114,8 +2801,6 @@ }, "node_modules/@smithy/chunked-blob-reader-native": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.0.0.tgz", - "integrity": "sha512-R9wM2yPmfEMsUmlMlIgSzOyICs0x9uu7UTHoccMyt7BWw8shcGM8HqB355+BZCPBcySvbTYMs62EgEQkNxz2ig==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3128,8 +2813,6 @@ }, "node_modules/@smithy/config-resolver": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.0.1.tgz", - "integrity": "sha512-Igfg8lKu3dRVkTSEm98QpZUvKEOa71jDX4vKRcvJVyRc3UgN3j7vFMf0s7xLQhYmKa8kyJGQgUJDOV5V3neVlQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3145,8 +2828,6 @@ }, "node_modules/@smithy/core": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.1.5.tgz", - "integrity": "sha512-HLclGWPkCsekQgsyzxLhCQLa8THWXtB5PxyYN+2O6nkyLt550KQKTlbV2D1/j5dNIQapAZM1+qFnpBFxZQkgCA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3165,8 +2846,6 @@ }, "node_modules/@smithy/credential-provider-imds": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.1.tgz", - "integrity": "sha512-l/qdInaDq1Zpznpmev/+52QomsJNZ3JkTl5yrTl02V6NBgJOQ4LY0SFw/8zsMwj3tLe8vqiIuwF6nxaEwgf6mg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3182,8 +2861,6 @@ }, "node_modules/@smithy/eventstream-codec": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.0.1.tgz", - "integrity": "sha512-Q2bCAAR6zXNVtJgifsU16ZjKGqdw/DyecKNgIgi7dlqw04fqDu0mnq+JmGphqheypVc64CYq3azSuCpAdFk2+A==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3198,8 +2875,6 @@ }, "node_modules/@smithy/eventstream-serde-browser": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.1.tgz", - "integrity": "sha512-HbIybmz5rhNg+zxKiyVAnvdM3vkzjE6ccrJ620iPL8IXcJEntd3hnBl+ktMwIy12Te/kyrSbUb8UCdnUT4QEdA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3213,8 +2888,6 @@ }, "node_modules/@smithy/eventstream-serde-config-resolver": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.0.1.tgz", - "integrity": "sha512-lSipaiq3rmHguHa3QFF4YcCM3VJOrY9oq2sow3qlhFY+nBSTF/nrO82MUQRPrxHQXA58J5G1UnU2WuJfi465BA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3227,8 +2900,6 @@ }, "node_modules/@smithy/eventstream-serde-node": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.1.tgz", - "integrity": "sha512-o4CoOI6oYGYJ4zXo34U8X9szDe3oGjmHgsMGiZM0j4vtNoT+h80TLnkUcrLZR3+E6HIxqW+G+9WHAVfl0GXK0Q==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3242,8 +2913,6 @@ }, "node_modules/@smithy/eventstream-serde-universal": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.1.tgz", - "integrity": "sha512-Z94uZp0tGJuxds3iEAZBqGU2QiaBHP4YytLUjwZWx+oUeohCsLyUm33yp4MMBmhkuPqSbQCXq5hDet6JGUgHWA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3257,8 +2926,6 @@ }, "node_modules/@smithy/fetch-http-handler": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.1.tgz", - "integrity": "sha512-3aS+fP28urrMW2KTjb6z9iFow6jO8n3MFfineGbndvzGZit3taZhKWtTorf+Gp5RpFDDafeHlhfsGlDCXvUnJA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3274,8 +2941,6 @@ }, "node_modules/@smithy/hash-blob-browser": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.0.1.tgz", - "integrity": "sha512-rkFIrQOKZGS6i1D3gKJ8skJ0RlXqDvb1IyAphksaFOMzkn3v3I1eJ8m7OkLj0jf1McP63rcCEoLlkAn/HjcTRw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3290,8 +2955,6 @@ }, "node_modules/@smithy/hash-node": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.1.tgz", - "integrity": "sha512-TJ6oZS+3r2Xu4emVse1YPB3Dq3d8RkZDKcPr71Nj/lJsdAP1c7oFzYqEn1IBc915TsgLl2xIJNuxCz+gLbLE0w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3306,8 +2969,6 @@ }, "node_modules/@smithy/hash-stream-node": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.0.1.tgz", - "integrity": "sha512-U1rAE1fxmReCIr6D2o/4ROqAQX+GffZpyMt3d7njtGDr2pUNmAKRWa49gsNVhCh2vVAuf3wXzWwNr2YN8PAXIw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3321,8 +2982,6 @@ }, "node_modules/@smithy/invalid-dependency": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.1.tgz", - "integrity": "sha512-gdudFPf4QRQ5pzj7HEnu6FhKRi61BfH/Gk5Yf6O0KiSbr1LlVhgjThcvjdu658VE6Nve8vaIWB8/fodmS1rBPQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3335,8 +2994,6 @@ }, "node_modules/@smithy/is-array-buffer": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz", - "integrity": "sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3348,8 +3005,6 @@ }, "node_modules/@smithy/md5-js": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.0.1.tgz", - "integrity": "sha512-HLZ647L27APi6zXkZlzSFZIjpo8po45YiyjMGJZM3gyDY8n7dPGdmxIIljLm4gPt/7rRvutLTTkYJpZVfG5r+A==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3363,8 +3018,6 @@ }, "node_modules/@smithy/middleware-content-length": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.1.tgz", - "integrity": "sha512-OGXo7w5EkB5pPiac7KNzVtfCW2vKBTZNuCctn++TTSOMpe6RZO/n6WEC1AxJINn3+vWLKW49uad3lo/u0WJ9oQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3378,8 +3031,6 @@ }, "node_modules/@smithy/middleware-endpoint": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.0.6.tgz", - "integrity": "sha512-ftpmkTHIFqgaFugcjzLZv3kzPEFsBFSnq1JsIkr2mwFzCraZVhQk2gqN51OOeRxqhbPTkRFj39Qd2V91E/mQxg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3398,8 +3049,6 @@ }, "node_modules/@smithy/middleware-retry": { "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.0.7.tgz", - "integrity": "sha512-58j9XbUPLkqAcV1kHzVX/kAR16GT+j7DUZJqwzsxh1jtz7G82caZiGyyFgUvogVfNTg3TeAOIJepGc8TXF4AVQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3419,8 +3068,6 @@ }, "node_modules/@smithy/middleware-retry/node_modules/uuid": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", "dev": true, "funding": [ "https://github.com/sponsors/broofa", @@ -3433,8 +3080,6 @@ }, "node_modules/@smithy/middleware-serde": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.2.tgz", - "integrity": "sha512-Sdr5lOagCn5tt+zKsaW+U2/iwr6bI9p08wOkCp6/eL6iMbgdtc2R5Ety66rf87PeohR0ExI84Txz9GYv5ou3iQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3447,8 +3092,6 @@ }, "node_modules/@smithy/middleware-stack": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.1.tgz", - "integrity": "sha512-dHwDmrtR/ln8UTHpaIavRSzeIk5+YZTBtLnKwDW3G2t6nAupCiQUvNzNoHBpik63fwUaJPtlnMzXbQrNFWssIA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3461,8 +3104,6 @@ }, "node_modules/@smithy/node-config-provider": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.0.1.tgz", - "integrity": "sha512-8mRTjvCtVET8+rxvmzRNRR0hH2JjV0DFOmwXPrISmTIJEfnCBugpYYGAsCj8t41qd+RB5gbheSQ/6aKZCQvFLQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3477,8 +3118,6 @@ }, "node_modules/@smithy/node-http-handler": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.3.tgz", - "integrity": "sha512-dYCLeINNbYdvmMLtW0VdhW1biXt+PPCGazzT5ZjKw46mOtdgToQEwjqZSS9/EN8+tNs/RO0cEWG044+YZs97aA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3494,8 +3133,6 @@ }, "node_modules/@smithy/property-provider": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.1.tgz", - "integrity": "sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3508,8 +3145,6 @@ }, "node_modules/@smithy/protocol-http": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.0.1.tgz", - "integrity": "sha512-TE4cpj49jJNB/oHyh/cRVEgNZaoPaxd4vteJNB0yGidOCVR0jCw/hjPVsT8Q8FRmj8Bd3bFZt8Dh7xGCT+xMBQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3522,8 +3157,6 @@ }, "node_modules/@smithy/querystring-builder": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.1.tgz", - "integrity": "sha512-wU87iWZoCbcqrwszsOewEIuq+SU2mSoBE2CcsLwE0I19m0B2gOJr1MVjxWcDQYOzHbR1xCk7AcOBbGFUYOKvdg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3537,8 +3170,6 @@ }, "node_modules/@smithy/querystring-parser": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.1.tgz", - "integrity": "sha512-Ma2XC7VS9aV77+clSFylVUnPZRindhB7BbmYiNOdr+CHt/kZNJoPP0cd3QxCnCFyPXC4eybmyE98phEHkqZ5Jw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3551,8 +3182,6 @@ }, "node_modules/@smithy/service-error-classification": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.1.tgz", - "integrity": "sha512-3JNjBfOWpj/mYfjXJHB4Txc/7E4LVq32bwzE7m28GN79+M1f76XHflUaSUkhOriprPDzev9cX/M+dEB80DNDKA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3564,8 +3193,6 @@ }, "node_modules/@smithy/shared-ini-file-loader": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.1.tgz", - "integrity": "sha512-hC8F6qTBbuHRI/uqDgqqi6J0R4GtEZcgrZPhFQnMhfJs3MnUTGSnR1NSJCJs5VWlMydu0kJz15M640fJlRsIOw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3578,8 +3205,6 @@ }, "node_modules/@smithy/signature-v4": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.0.1.tgz", - "integrity": "sha512-nCe6fQ+ppm1bQuw5iKoeJ0MJfz2os7Ic3GBjOkLOPtavbD1ONoyE3ygjBfz2ythFWm4YnRm6OxW+8p/m9uCoIA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3598,8 +3223,6 @@ }, "node_modules/@smithy/smithy-client": { "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.1.6.tgz", - "integrity": "sha512-UYDolNg6h2O0L+cJjtgSyKKvEKCOa/8FHYJnBobyeoeWDmNpXjwOAtw16ezyeu1ETuuLEOZbrynK0ZY1Lx9Jbw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3617,8 +3240,6 @@ }, "node_modules/@smithy/types": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", - "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3630,8 +3251,6 @@ }, "node_modules/@smithy/url-parser": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.1.tgz", - "integrity": "sha512-gPXcIEUtw7VlK8f/QcruNXm7q+T5hhvGu9tl63LsJPZ27exB6dtNwvh2HIi0v7JcXJ5emBxB+CJxwaLEdJfA+g==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3645,8 +3264,6 @@ }, "node_modules/@smithy/util-base64": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.0.0.tgz", - "integrity": "sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3660,8 +3277,6 @@ }, "node_modules/@smithy/util-body-length-browser": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz", - "integrity": "sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3673,8 +3288,6 @@ }, "node_modules/@smithy/util-body-length-node": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz", - "integrity": "sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3686,8 +3299,6 @@ }, "node_modules/@smithy/util-buffer-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz", - "integrity": "sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3700,8 +3311,6 @@ }, "node_modules/@smithy/util-config-provider": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz", - "integrity": "sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3713,8 +3322,6 @@ }, "node_modules/@smithy/util-defaults-mode-browser": { "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.7.tgz", - "integrity": "sha512-CZgDDrYHLv0RUElOsmZtAnp1pIjwDVCSuZWOPhIOBvG36RDfX1Q9+6lS61xBf+qqvHoqRjHxgINeQz47cYFC2Q==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3730,8 +3337,6 @@ }, "node_modules/@smithy/util-defaults-mode-node": { "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.7.tgz", - "integrity": "sha512-79fQW3hnfCdrfIi1soPbK3zmooRFnLpSx3Vxi6nUlqaaQeC5dm8plt4OTNDNqEEEDkvKghZSaoti684dQFVrGQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3749,8 +3354,6 @@ }, "node_modules/@smithy/util-endpoints": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.1.tgz", - "integrity": "sha512-zVdUENQpdtn9jbpD9SCFK4+aSiavRb9BxEtw9ZGUR1TYo6bBHbIoi7VkrFQ0/RwZlzx0wRBaRmPclj8iAoJCLA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3764,8 +3367,6 @@ }, "node_modules/@smithy/util-hex-encoding": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz", - "integrity": "sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3777,8 +3378,6 @@ }, "node_modules/@smithy/util-middleware": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.1.tgz", - "integrity": "sha512-HiLAvlcqhbzhuiOa0Lyct5IIlyIz0PQO5dnMlmQ/ubYM46dPInB+3yQGkfxsk6Q24Y0n3/JmcA1v5iEhmOF5mA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3791,8 +3390,6 @@ }, "node_modules/@smithy/util-retry": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.1.tgz", - "integrity": "sha512-WmRHqNVwn3kI3rKk1LsKcVgPBG6iLTBGC1iYOV3GQegwJ3E8yjzHytPt26VNzOWr1qu0xE03nK0Ug8S7T7oufw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3806,8 +3403,6 @@ }, "node_modules/@smithy/util-stream": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.1.2.tgz", - "integrity": "sha512-44PKEqQ303d3rlQuiDpcCcu//hV8sn+u2JBo84dWCE0rvgeiVl0IlLMagbU++o0jCWhYCsHaAt9wZuZqNe05Hw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3826,8 +3421,6 @@ }, "node_modules/@smithy/util-uri-escape": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz", - "integrity": "sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3839,8 +3432,6 @@ }, "node_modules/@smithy/util-utf8": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz", - "integrity": "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3853,8 +3444,6 @@ }, "node_modules/@smithy/util-waiter": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.0.2.tgz", - "integrity": "sha512-piUTHyp2Axx3p/kc2CIJkYSv0BAaheBQmbACZgQSSfWUumWNW+R1lL+H9PDBxKJkvOeEX+hKYEFiwO8xagL8AQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3868,8 +3457,6 @@ }, "node_modules/@szmarczak/http-timer": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", "dev": true, "license": "MIT", "dependencies": { @@ -3881,14 +3468,10 @@ }, "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==", "license": "MIT" }, "node_modules/@types/adm-zip": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@types/adm-zip/-/adm-zip-0.5.7.tgz", - "integrity": "sha512-DNEs/QvmyRLurdQPChqq0Md4zGvPwHerAJYWk9l2jCbD1VPpnzRJorOdiq4zsw09NFbYnhfsoEhWtxIzXpn2yw==", "dev": true, "license": "MIT", "dependencies": { @@ -3897,8 +3480,6 @@ }, "node_modules/@types/archiver": { "version": "5.3.4", - "resolved": "https://registry.npmjs.org/@types/archiver/-/archiver-5.3.4.tgz", - "integrity": "sha512-Lj7fLBIMwYFgViVVZHEdExZC3lVYsl+QL0VmdNdIzGZH544jHveYWij6qdnBgJQDnR7pMKliN9z2cPZFEbhyPw==", "dev": true, "license": "MIT", "dependencies": { @@ -3907,15 +3488,11 @@ }, "node_modules/@types/base-64": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/base-64/-/base-64-1.0.2.tgz", - "integrity": "sha512-uPgKMmM9fmn7I+Zi6YBqctOye4SlJsHKcisjHIMWpb2YKZRc36GpKyNuQ03JcT+oNXg1m7Uv4wU94EVltn8/cw==", "dev": true, "license": "MIT" }, "node_modules/@types/body-parser": { "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dev": true, "license": "MIT", "dependencies": { @@ -3932,8 +3509,6 @@ }, "node_modules/@types/connect": { "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, "license": "MIT", "dependencies": { @@ -3942,8 +3517,6 @@ }, "node_modules/@types/connect-livereload": { "version": "0.5.32", - "resolved": "https://registry.npmjs.org/@types/connect-livereload/-/connect-livereload-0.5.32.tgz", - "integrity": "sha512-2x/n+cMGdnumlUyktVY2qrZn+OMBjrmmFEAZlbe3AXG5nk3qguvdw3vVvd54orFLd3UrmV7vOK7vcXlqzGEf2w==", "dev": true, "license": "MIT", "dependencies": { @@ -3952,15 +3525,11 @@ }, "node_modules/@types/estree": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", "dev": true, "license": "MIT" }, "node_modules/@types/express": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3972,8 +3541,6 @@ }, "node_modules/@types/express-serve-static-core": { "version": "4.19.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", - "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", "dev": true, "license": "MIT", "dependencies": { @@ -3985,8 +3552,6 @@ }, "node_modules/@types/fs-extra": { "version": "9.0.13", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", - "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", "dev": true, "license": "MIT", "dependencies": { @@ -3995,36 +3560,26 @@ }, "node_modules/@types/http-cache-semantics": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", "dev": true, "license": "MIT" }, "node_modules/@types/http-errors": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", "dev": true, "license": "MIT" }, "node_modules/@types/json-schema": { "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true, "license": "MIT" }, "node_modules/@types/json5": { "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true, "license": "MIT" }, "node_modules/@types/livereload": { "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@types/livereload/-/livereload-0.9.5.tgz", - "integrity": "sha512-2RXcRKdivPmn67pwjytvHoRv46AeXaLYVUWA0zkel1XSAOH5i71G0KfUdE5u3g80T155gR3Fo3ilVaqparLsVA==", "dev": true, "license": "MIT", "dependencies": { @@ -4033,29 +3588,21 @@ }, "node_modules/@types/mime": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", "dev": true, "license": "MIT" }, "node_modules/@types/minimist": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", "dev": true, "license": "MIT" }, "node_modules/@types/mocha": { "version": "5.2.7", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", - "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==", "dev": true, "license": "MIT" }, "node_modules/@types/mute-stream": { "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz", - "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==", "dev": true, "license": "MIT", "dependencies": { @@ -4063,44 +3610,44 @@ } }, "node_modules/@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", + "version": "20.17.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.50.tgz", + "integrity": "sha512-Mxiq0ULv/zo1OzOhwPqOA13I81CV/W3nvd3ChtQZRT5Cwz3cr0FKo/wMSsbTqL3EXpaBAEQhva2B8ByRkOIh9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/node/node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", "dev": true, "license": "MIT" }, "node_modules/@types/normalize-package-data": { "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true, "license": "MIT" }, "node_modules/@types/parse-json": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", "dev": true, "license": "MIT" }, "node_modules/@types/qs": { "version": "6.9.18", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", - "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", "dev": true, "license": "MIT" }, "node_modules/@types/range-parser": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", "dev": true, "license": "MIT" }, "node_modules/@types/readdir-glob": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@types/readdir-glob/-/readdir-glob-1.1.5.tgz", - "integrity": "sha512-raiuEPUYqXu+nvtY2Pe8s8FEmZ3x5yAH4VkLdihcPdalvsHltomrRC9BzuStrJ9yk06470hS0Crw0f1pXqD+Hg==", "dev": true, "license": "MIT", "dependencies": { @@ -4109,8 +3656,6 @@ }, "node_modules/@types/send": { "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dev": true, "license": "MIT", "dependencies": { @@ -4120,8 +3665,6 @@ }, "node_modules/@types/serve-static": { "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", "dev": true, "license": "MIT", "dependencies": { @@ -4132,15 +3675,11 @@ }, "node_modules/@types/treeify": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/treeify/-/treeify-1.0.3.tgz", - "integrity": "sha512-hx0o7zWEUU4R2Amn+pjCBQQt23Khy/Dk56gQU5xi5jtPL1h83ACJCeFaB2M/+WO1AntvWrSoVnnCAfI1AQH4Cg==", "dev": true, "license": "MIT" }, "node_modules/@types/unzipper": { "version": "0.10.11", - "resolved": "https://registry.npmjs.org/@types/unzipper/-/unzipper-0.10.11.tgz", - "integrity": "sha512-D25im2zjyMCcgL9ag6N46+wbtJBnXIr7SI4zHf9eJD2Dw2tEB5e+p5MYkrxKIVRscs5QV0EhtU9rgXSPx90oJg==", "dev": true, "license": "MIT", "dependencies": { @@ -4149,15 +3688,11 @@ }, "node_modules/@types/wrap-ansi": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", - "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==", "dev": true, "license": "MIT" }, "node_modules/@types/ws": { "version": "8.5.14", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.14.tgz", - "integrity": "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==", "dev": true, "license": "MIT", "dependencies": { @@ -4166,8 +3701,6 @@ }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.26.0.tgz", - "integrity": "sha512-cLr1J6pe56zjKYajK6SSSre6nl1Gj6xDp1TY0trpgPzjVbgDwd09v2Ws37LABxzkicmUjhEeg/fAUjPJJB1v5Q==", "dev": true, "license": "MIT", "dependencies": { @@ -4196,8 +3729,6 @@ }, "node_modules/@typescript-eslint/parser": { "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.26.0.tgz", - "integrity": "sha512-mNtXP9LTVBy14ZF3o7JG69gRPBK/2QWtQd0j0oH26HcY/foyJJau6pNUez7QrM5UHnSvwlQcJXKsk0I99B9pOA==", "dev": true, "license": "MIT", "dependencies": { @@ -4221,8 +3752,6 @@ }, "node_modules/@typescript-eslint/scope-manager": { "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.26.0.tgz", - "integrity": "sha512-E0ntLvsfPqnPwng8b8y4OGuzh/iIOm2z8U3S9zic2TeMLW61u5IH2Q1wu0oSTkfrSzwbDJIB/Lm8O3//8BWMPA==", "dev": true, "license": "MIT", "dependencies": { @@ -4239,8 +3768,6 @@ }, "node_modules/@typescript-eslint/type-utils": { "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.26.0.tgz", - "integrity": "sha512-ruk0RNChLKz3zKGn2LwXuVoeBcUMh+jaqzN461uMMdxy5H9epZqIBtYj7UiPXRuOpaALXGbmRuZQhmwHhaS04Q==", "dev": true, "license": "MIT", "dependencies": { @@ -4263,8 +3790,6 @@ }, "node_modules/@typescript-eslint/types": { "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.26.0.tgz", - "integrity": "sha512-89B1eP3tnpr9A8L6PZlSjBvnJhWXtYfZhECqlBl1D9Lme9mHO6iWlsprBtVenQvY1HMhax1mWOjhtL3fh/u+pA==", "dev": true, "license": "MIT", "engines": { @@ -4277,8 +3802,6 @@ }, "node_modules/@typescript-eslint/typescript-estree": { "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.26.0.tgz", - "integrity": "sha512-tiJ1Hvy/V/oMVRTbEOIeemA2XoylimlDQ03CgPPNaHYZbpsc78Hmngnt+WXZfJX1pjQ711V7g0H7cSJThGYfPQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4304,8 +3827,6 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, "license": "ISC", "bin": { @@ -4317,8 +3838,6 @@ }, "node_modules/@typescript-eslint/utils": { "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.26.0.tgz", - "integrity": "sha512-2L2tU3FVwhvU14LndnQCA2frYC8JnPDVKyQtWFPf8IYFMt/ykEN1bPolNhNbCVgOmdzTlWdusCTKA/9nKrf8Ig==", "dev": true, "license": "MIT", "dependencies": { @@ -4341,8 +3860,6 @@ }, "node_modules/@typescript-eslint/visitor-keys": { "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.26.0.tgz", - "integrity": "sha512-2z8JQJWAzPdDd51dRQ/oqIJxe99/hoLIqmf8RMCAJQtYDc535W/Jt2+RTP4bP0aKeBG1F65yjIZuczOXCmbWwg==", "dev": true, "license": "MIT", "dependencies": { @@ -4359,8 +3876,6 @@ }, "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -4372,8 +3887,6 @@ }, "node_modules/abort-controller": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "license": "MIT", "dependencies": { "event-target-shim": "^5.0.0" @@ -4384,8 +3897,6 @@ }, "node_modules/accepts": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "license": "MIT", "dependencies": { "mime-types": "~2.1.34", @@ -4397,8 +3908,6 @@ }, "node_modules/acorn": { "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, "license": "MIT", "bin": { @@ -4410,8 +3919,6 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -4420,8 +3927,6 @@ }, "node_modules/adm-zip": { "version": "0.5.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz", - "integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==", "license": "MIT", "engines": { "node": ">=12.0" @@ -4429,8 +3934,6 @@ }, "node_modules/aggregate-error": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "license": "MIT", "dependencies": { @@ -4443,8 +3946,6 @@ }, "node_modules/aggregate-error/node_modules/clean-stack": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, "license": "MIT", "engines": { @@ -4453,8 +3954,6 @@ }, "node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", "dependencies": { @@ -4470,8 +3969,6 @@ }, "node_modules/ansi-colors": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, "license": "MIT", "engines": { @@ -4480,8 +3977,6 @@ }, "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==", "license": "MIT", "dependencies": { "type-fest": "^0.21.3" @@ -4495,8 +3990,6 @@ }, "node_modules/ansi-regex": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "license": "MIT", "engines": { "node": ">=12" @@ -4507,8 +4000,6 @@ }, "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==", "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -4522,8 +4013,6 @@ }, "node_modules/ansis": { "version": "3.17.0", - "resolved": "https://registry.npmjs.org/ansis/-/ansis-3.17.0.tgz", - "integrity": "sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==", "license": "ISC", "engines": { "node": ">=14" @@ -4531,8 +4020,6 @@ }, "node_modules/anymatch": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", @@ -4544,8 +4031,6 @@ }, "node_modules/append-transform": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", - "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", "dev": true, "license": "MIT", "dependencies": { @@ -4557,8 +4042,6 @@ }, "node_modules/archiver": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz", - "integrity": "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==", "license": "MIT", "dependencies": { "archiver-utils": "^5.0.2", @@ -4575,8 +4058,6 @@ }, "node_modules/archiver-utils": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz", - "integrity": "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==", "license": "MIT", "dependencies": { "glob": "^10.0.0", @@ -4593,29 +4074,21 @@ }, "node_modules/archy": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", "dev": true, "license": "MIT" }, "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/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, "node_modules/array-buffer-byte-length": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "license": "MIT", "dependencies": { @@ -4631,21 +4104,15 @@ }, "node_modules/array-flatten": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "license": "MIT" }, "node_modules/array-ify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", "dev": true, "license": "MIT" }, "node_modules/array-includes": { "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4665,8 +4132,6 @@ }, "node_modules/array-union": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "license": "MIT", "engines": { "node": ">=8" @@ -4674,8 +4139,6 @@ }, "node_modules/array.prototype.findlastindex": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4695,8 +4158,6 @@ }, "node_modules/array.prototype.flat": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "dev": true, "license": "MIT", "dependencies": { @@ -4714,8 +4175,6 @@ }, "node_modules/array.prototype.flatmap": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, "license": "MIT", "dependencies": { @@ -4733,8 +4192,6 @@ }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4755,8 +4212,6 @@ }, "node_modules/arrify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, "license": "MIT", "engines": { @@ -4765,15 +4220,11 @@ }, "node_modules/asap": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "dev": true, "license": "MIT" }, "node_modules/assertion-error": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, "license": "MIT", "engines": { @@ -4782,8 +4233,6 @@ }, "node_modules/astral-regex": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, "license": "MIT", "engines": { @@ -4792,14 +4241,10 @@ }, "node_modules/async": { "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "license": "MIT" }, "node_modules/async-function": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", "dev": true, "license": "MIT", "engines": { @@ -4808,8 +4253,6 @@ }, "node_modules/async-retry": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", - "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", "dev": true, "license": "MIT", "dependencies": { @@ -4818,14 +4261,10 @@ }, "node_modules/asynckit": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "license": "MIT" }, "node_modules/available-typed-arrays": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4839,9 +4278,9 @@ } }, "node_modules/axios": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.1.tgz", - "integrity": "sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz", + "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", @@ -4851,33 +4290,23 @@ }, "node_modules/b4a": { "version": "1.6.7", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", - "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", "license": "Apache-2.0" }, "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "license": "MIT" }, "node_modules/bare-events": { "version": "2.5.4", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz", - "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==", "license": "Apache-2.0", "optional": true }, "node_modules/base-64": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", - "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==", "license": "MIT" }, "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==", "funding": [ { "type": "github", @@ -4896,8 +4325,6 @@ }, "node_modules/binary-extensions": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "license": "MIT", "engines": { "node": ">=8" @@ -4908,14 +4335,10 @@ }, "node_modules/bluebird": { "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "license": "MIT" }, "node_modules/body-parser": { "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -4938,8 +4361,6 @@ }, "node_modules/body-parser/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -4947,21 +4368,15 @@ }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, "node_modules/bowser": { "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", "dev": true, "license": "MIT" }, "node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -4969,8 +4384,6 @@ }, "node_modules/braces": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -4981,15 +4394,11 @@ }, "node_modules/browser-stdout": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true, "license": "ISC" }, "node_modules/browserslist": { "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", "dev": true, "funding": [ { @@ -5021,8 +4430,6 @@ }, "node_modules/buffer": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "funding": [ { "type": "github", @@ -5045,8 +4452,6 @@ }, "node_modules/buffer-crc32": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz", - "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==", "license": "MIT", "engines": { "node": ">=8.0.0" @@ -5054,15 +4459,11 @@ }, "node_modules/buffer-from": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true, "license": "MIT" }, "node_modules/bytes": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -5070,8 +4471,6 @@ }, "node_modules/cacheable-lookup": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", "dev": true, "license": "MIT", "engines": { @@ -5080,8 +4479,6 @@ }, "node_modules/cacheable-request": { "version": "10.2.14", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", - "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5099,8 +4496,6 @@ }, "node_modules/caching-transform": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", - "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", "dev": true, "license": "MIT", "dependencies": { @@ -5115,8 +4510,6 @@ }, "node_modules/call-bind": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, "license": "MIT", "dependencies": { @@ -5134,8 +4527,6 @@ }, "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==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -5147,8 +4538,6 @@ }, "node_modules/call-bound": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -5163,8 +4552,6 @@ }, "node_modules/callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "license": "MIT", "engines": { @@ -5173,8 +4560,6 @@ }, "node_modules/camel-case": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "dev": true, "license": "MIT", "dependencies": { @@ -5184,8 +4569,6 @@ }, "node_modules/camelcase": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "license": "MIT", "engines": { @@ -5194,8 +4577,6 @@ }, "node_modules/camelcase-keys": { "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, "license": "MIT", "dependencies": { @@ -5212,8 +4593,6 @@ }, "node_modules/caniuse-lite": { "version": "1.0.30001702", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001702.tgz", - "integrity": "sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==", "dev": true, "funding": [ { @@ -5233,8 +4612,6 @@ }, "node_modules/capital-case": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", - "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", "dev": true, "license": "MIT", "dependencies": { @@ -5264,8 +4641,6 @@ }, "node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -5280,8 +4655,6 @@ }, "node_modules/chalk/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==", "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -5292,8 +4665,6 @@ }, "node_modules/change-case": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", - "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", "dev": true, "license": "MIT", "dependencies": { @@ -5313,14 +4684,10 @@ }, "node_modules/chardet": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "license": "MIT" }, "node_modules/check-error": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, "license": "MIT", "dependencies": { @@ -5332,8 +4699,6 @@ }, "node_modules/chokidar": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "license": "MIT", "dependencies": { "anymatch": "~3.1.2", @@ -5356,8 +4721,6 @@ }, "node_modules/clean-stack": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz", - "integrity": "sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==", "license": "MIT", "dependencies": { "escape-string-regexp": "4.0.0" @@ -5371,8 +4734,6 @@ }, "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": { @@ -5384,8 +4745,6 @@ }, "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==", "license": "MIT", "engines": { "node": ">=6" @@ -5396,8 +4755,6 @@ }, "node_modules/cli-truncate": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, "license": "MIT", "dependencies": { @@ -5413,8 +4770,6 @@ }, "node_modules/cli-width": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", - "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", "license": "ISC", "engines": { "node": ">= 12" @@ -5422,8 +4777,6 @@ }, "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": { @@ -5437,8 +4790,6 @@ }, "node_modules/cliui/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": { @@ -5447,8 +4798,6 @@ }, "node_modules/cliui/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": { @@ -5460,8 +4809,6 @@ }, "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==", "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -5472,21 +4819,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==", "license": "MIT" }, "node_modules/colorette": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", "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==", "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" @@ -5497,8 +4838,6 @@ }, "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": { @@ -5507,15 +4846,11 @@ }, "node_modules/commondir": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true, "license": "MIT" }, "node_modules/compare-func": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, "license": "MIT", "dependencies": { @@ -5525,8 +4860,6 @@ }, "node_modules/compress-commons": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz", - "integrity": "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==", "license": "MIT", "dependencies": { "crc-32": "^1.2.0", @@ -5541,14 +4874,10 @@ }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "license": "MIT" }, "node_modules/config-chain": { "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5558,8 +4887,6 @@ }, "node_modules/connect-livereload": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/connect-livereload/-/connect-livereload-0.6.1.tgz", - "integrity": "sha512-3R0kMOdL7CjJpU66fzAkCe6HNtd3AavCS4m+uW4KtJjrdGPT0SQEZieAYd+cm+lJoBznNQ4lqipYWkhBMgk00g==", "license": "MIT", "engines": { "node": "*" @@ -5567,8 +4894,6 @@ }, "node_modules/constant-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", - "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5579,8 +4904,6 @@ }, "node_modules/content-disposition": { "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" @@ -5591,8 +4914,6 @@ }, "node_modules/content-type": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -5600,8 +4921,6 @@ }, "node_modules/conventional-changelog-angular": { "version": "5.0.13", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", - "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", "dev": true, "license": "ISC", "dependencies": { @@ -5614,8 +4933,6 @@ }, "node_modules/conventional-changelog-conventionalcommits": { "version": "4.6.3", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz", - "integrity": "sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==", "dev": true, "license": "ISC", "dependencies": { @@ -5629,8 +4946,6 @@ }, "node_modules/conventional-commits-parser": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -5650,15 +4965,11 @@ }, "node_modules/convert-source-map": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true, "license": "MIT" }, "node_modules/cookie": { "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -5666,20 +4977,14 @@ }, "node_modules/cookie-signature": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "license": "MIT" }, "node_modules/core-util-is": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "license": "MIT" }, "node_modules/cosmiconfig": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, "license": "MIT", "dependencies": { @@ -5695,8 +5000,6 @@ }, "node_modules/crc-32": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", "license": "Apache-2.0", "bin": { "crc32": "bin/crc32.njs" @@ -5707,8 +5010,6 @@ }, "node_modules/crc32-stream": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz", - "integrity": "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==", "license": "MIT", "dependencies": { "crc-32": "^1.2.0", @@ -5720,15 +5021,11 @@ }, "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==", "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -5741,8 +5038,6 @@ }, "node_modules/dargs": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", "dev": true, "license": "MIT", "engines": { @@ -5751,8 +5046,6 @@ }, "node_modules/data-view-buffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5769,8 +5062,6 @@ }, "node_modules/data-view-byte-length": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5787,8 +5078,6 @@ }, "node_modules/data-view-byte-offset": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5804,9 +5093,9 @@ } }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -5822,8 +5111,6 @@ }, "node_modules/decamelize": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, "license": "MIT", "engines": { @@ -5832,8 +5119,6 @@ }, "node_modules/decamelize-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, "license": "MIT", "dependencies": { @@ -5849,8 +5134,6 @@ }, "node_modules/decamelize-keys/node_modules/map-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, "license": "MIT", "engines": { @@ -5859,8 +5142,6 @@ }, "node_modules/decompress-response": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5875,8 +5156,6 @@ }, "node_modules/decompress-response/node_modules/mimic-response": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true, "license": "MIT", "engines": { @@ -5888,8 +5167,6 @@ }, "node_modules/deep-eql": { "version": "4.1.4", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", - "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", "dev": true, "license": "MIT", "dependencies": { @@ -5901,15 +5178,11 @@ }, "node_modules/deep-is": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, "license": "MIT" }, "node_modules/default-require-extensions": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", - "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", "dev": true, "license": "MIT", "dependencies": { @@ -5924,8 +5197,6 @@ }, "node_modules/defer-to-connect": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true, "license": "MIT", "engines": { @@ -5934,8 +5205,6 @@ }, "node_modules/define-data-property": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "license": "MIT", "dependencies": { @@ -5952,8 +5221,6 @@ }, "node_modules/define-lazy-prop": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "license": "MIT", "engines": { "node": ">=8" @@ -5961,8 +5228,6 @@ }, "node_modules/define-properties": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "license": "MIT", "dependencies": { @@ -5979,8 +5244,6 @@ }, "node_modules/delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "license": "MIT", "engines": { "node": ">=0.4.0" @@ -5988,8 +5251,6 @@ }, "node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -5997,8 +5258,6 @@ }, "node_modules/destroy": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "license": "MIT", "engines": { "node": ">= 0.8", @@ -6013,8 +5272,6 @@ }, "node_modules/detect-indent": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-7.0.1.tgz", - "integrity": "sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==", "dev": true, "license": "MIT", "engines": { @@ -6023,8 +5280,6 @@ }, "node_modules/detect-newline": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-4.0.1.tgz", - "integrity": "sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==", "dev": true, "license": "MIT", "engines": { @@ -6041,9 +5296,9 @@ "license": "MIT" }, "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -6052,8 +5307,6 @@ }, "node_modules/dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "license": "MIT", "dependencies": { "path-type": "^4.0.0" @@ -6064,8 +5317,6 @@ }, "node_modules/doctrine": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -6077,8 +5328,6 @@ }, "node_modules/dot-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", "dev": true, "license": "MIT", "dependencies": { @@ -6088,8 +5337,6 @@ }, "node_modules/dot-prop": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -6101,8 +5348,6 @@ }, "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==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", @@ -6115,8 +5360,6 @@ }, "node_modules/duplexer2": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", "license": "BSD-3-Clause", "dependencies": { "readable-stream": "^2.0.2" @@ -6124,14 +5367,10 @@ }, "node_modules/duplexer2/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "license": "MIT" }, "node_modules/duplexer2/node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", @@ -6145,14 +5384,10 @@ }, "node_modules/duplexer2/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "license": "MIT" }, "node_modules/duplexer2/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" @@ -6160,20 +5395,14 @@ }, "node_modules/eastasianwidth": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "license": "MIT" }, "node_modules/ee-first": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, "node_modules/ejs": { "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "license": "Apache-2.0", "dependencies": { "jake": "^10.8.5" @@ -6187,21 +5416,15 @@ }, "node_modules/electron-to-chromium": { "version": "1.5.112", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.112.tgz", - "integrity": "sha512-oen93kVyqSb3l+ziUgzIOlWt/oOuy4zRmpwestMn4rhFWAoFJeFuCVte9F2fASjeZZo7l/Cif9TiyrdW4CwEMA==", "dev": true, "license": "ISC" }, "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==", "license": "MIT" }, "node_modules/encodeurl": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -6209,8 +5432,6 @@ }, "node_modules/enquirer": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6223,8 +5444,6 @@ }, "node_modules/enquirer/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": { @@ -6233,8 +5452,6 @@ }, "node_modules/enquirer/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": { @@ -6246,8 +5463,6 @@ }, "node_modules/error-ex": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "license": "MIT", "dependencies": { @@ -6256,8 +5471,6 @@ }, "node_modules/es-abstract": { "version": "1.23.9", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", - "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", "dev": true, "license": "MIT", "dependencies": { @@ -6322,8 +5535,6 @@ }, "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==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -6331,8 +5542,6 @@ }, "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==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -6340,8 +5549,6 @@ }, "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==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -6352,8 +5559,6 @@ }, "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==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -6367,8 +5572,6 @@ }, "node_modules/es-shim-unscopables": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", "dev": true, "license": "MIT", "dependencies": { @@ -6380,8 +5583,6 @@ }, "node_modules/es-to-primitive": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "license": "MIT", "dependencies": { @@ -6398,15 +5599,11 @@ }, "node_modules/es6-error": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true, "license": "MIT" }, "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": { @@ -6415,14 +5612,10 @@ }, "node_modules/escape-html": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "license": "MIT", "engines": { "node": ">=10" @@ -6433,8 +5626,6 @@ }, "node_modules/eslint": { "version": "9.21.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.21.0.tgz", - "integrity": "sha512-KjeihdFqTPhOMXTt7StsDxriV4n66ueuF/jfPNC3j/lduHwr/ijDwJMsF+wyMJethgiKi5wniIE243vi07d3pg==", "dev": true, "license": "MIT", "dependencies": { @@ -6493,8 +5684,6 @@ }, "node_modules/eslint-config-prettier": { "version": "8.10.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", - "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", "dev": true, "license": "MIT", "bin": { @@ -6506,8 +5695,6 @@ }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "license": "MIT", "dependencies": { @@ -6518,8 +5705,6 @@ }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6528,8 +5713,6 @@ }, "node_modules/eslint-module-utils": { "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", - "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, "license": "MIT", "dependencies": { @@ -6546,8 +5729,6 @@ }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6556,8 +5737,6 @@ }, "node_modules/eslint-plugin-import": { "version": "2.31.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", - "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, "license": "MIT", "dependencies": { @@ -6590,8 +5769,6 @@ }, "node_modules/eslint-plugin-import/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "license": "MIT", "dependencies": { @@ -6601,8 +5778,6 @@ }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6611,8 +5786,6 @@ }, "node_modules/eslint-plugin-import/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -6624,8 +5797,6 @@ }, "node_modules/eslint-plugin-import/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -6634,8 +5805,6 @@ }, "node_modules/eslint-scope": { "version": "8.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", - "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -6651,8 +5820,6 @@ }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "license": "Apache-2.0", "engines": { @@ -6664,8 +5831,6 @@ }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "license": "MIT", "dependencies": { @@ -6675,8 +5840,6 @@ }, "node_modules/eslint/node_modules/eslint-visitor-keys": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -6688,8 +5851,6 @@ }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "license": "ISC", "dependencies": { @@ -6701,8 +5862,6 @@ }, "node_modules/eslint/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -6714,8 +5873,6 @@ }, "node_modules/espree": { "version": "10.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", - "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -6732,8 +5889,6 @@ }, "node_modules/espree/node_modules/eslint-visitor-keys": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -6745,8 +5900,6 @@ }, "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": { @@ -6759,8 +5912,6 @@ }, "node_modules/esquery": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -6772,8 +5923,6 @@ }, "node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -6785,8 +5934,6 @@ }, "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": { @@ -6795,8 +5942,6 @@ }, "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": { @@ -6805,8 +5950,6 @@ }, "node_modules/etag": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -6814,8 +5957,6 @@ }, "node_modules/event-target-shim": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "license": "MIT", "engines": { "node": ">=6" @@ -6823,8 +5964,6 @@ }, "node_modules/events": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "license": "MIT", "engines": { "node": ">=0.8.x" @@ -6832,8 +5971,6 @@ }, "node_modules/execa": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "license": "MIT", "dependencies": { @@ -6856,8 +5993,6 @@ }, "node_modules/express": { "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "license": "MIT", "dependencies": { "accepts": "~1.3.8", @@ -6902,8 +6037,6 @@ }, "node_modules/express/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -6911,14 +6044,10 @@ }, "node_modules/express/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, "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==", "license": "MIT", "dependencies": { "chardet": "^0.7.0", @@ -6931,21 +6060,15 @@ }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true, "license": "MIT" }, "node_modules/fast-fifo": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", "license": "MIT" }, "node_modules/fast-glob": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -6960,15 +6083,11 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true, "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz", - "integrity": "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==", "license": "MIT", "dependencies": { "fastest-levenshtein": "^1.0.7" @@ -6976,8 +6095,6 @@ }, "node_modules/fast-xml-parser": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", - "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", "dev": true, "funding": [ { @@ -6999,8 +6116,6 @@ }, "node_modules/fastest-levenshtein": { "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "license": "MIT", "engines": { "node": ">= 4.9.1" @@ -7008,8 +6123,6 @@ }, "node_modules/fastq": { "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -7017,8 +6130,6 @@ }, "node_modules/file-entry-cache": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7030,8 +6141,6 @@ }, "node_modules/file-type": { "version": "15.0.1", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-15.0.1.tgz", - "integrity": "sha512-0LieQlSA3bWUdErNrxzxfI4rhsvNAVPBO06R8pTc1hp9SE6nhqlVyvhcaXoMmtXkBTPnQenbMPLW9X76hH76oQ==", "license": "MIT", "dependencies": { "readable-web-to-node-stream": "^2.0.0", @@ -7048,8 +6157,6 @@ }, "node_modules/filelist": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "license": "Apache-2.0", "dependencies": { "minimatch": "^5.0.1" @@ -7057,8 +6164,6 @@ }, "node_modules/filelist/node_modules/minimatch": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -7069,8 +6174,6 @@ }, "node_modules/fill-range": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -7081,8 +6184,6 @@ }, "node_modules/finalhandler": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "license": "MIT", "dependencies": { "debug": "2.6.9", @@ -7099,8 +6200,6 @@ }, "node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -7108,14 +6207,10 @@ }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, "node_modules/find-cache-dir": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, "license": "MIT", "dependencies": { @@ -7132,8 +6227,6 @@ }, "node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { @@ -7149,8 +6242,6 @@ }, "node_modules/find-yarn-workspace-root": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", - "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -7159,8 +6250,6 @@ }, "node_modules/flat": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, "license": "BSD-3-Clause", "bin": { @@ -7169,8 +6258,6 @@ }, "node_modules/flat-cache": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { @@ -7183,15 +6270,11 @@ }, "node_modules/flatted": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", "dev": true, "license": "ISC" }, "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==", "funding": [ { "type": "individual", @@ -7210,8 +6293,6 @@ }, "node_modules/for-each": { "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, "license": "MIT", "dependencies": { @@ -7226,8 +6307,6 @@ }, "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==", "license": "ISC", "dependencies": { "cross-spawn": "^7.0.6", @@ -7242,8 +6321,6 @@ }, "node_modules/foreground-child/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==", "license": "ISC", "engines": { "node": ">=14" @@ -7254,8 +6331,6 @@ }, "node_modules/form-data": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", - "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", @@ -7269,8 +6344,6 @@ }, "node_modules/form-data-encoder": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", "dev": true, "license": "MIT", "engines": { @@ -7279,8 +6352,6 @@ }, "node_modules/forwarded": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -7288,8 +6359,6 @@ }, "node_modules/fresh": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -7297,8 +6366,6 @@ }, "node_modules/fromentries": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", "dev": true, "funding": [ { @@ -7318,8 +6385,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==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -7330,24 +6395,8 @@ "node": ">=14.14" } }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "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==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7355,8 +6404,6 @@ }, "node_modules/function.prototype.name": { "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, "license": "MIT", "dependencies": { @@ -7376,8 +6423,6 @@ }, "node_modules/functions-have-names": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, "license": "MIT", "funding": { @@ -7386,8 +6431,6 @@ }, "node_modules/gensync": { "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, "license": "MIT", "engines": { @@ -7396,8 +6439,6 @@ }, "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": { @@ -7406,8 +6447,6 @@ }, "node_modules/get-func-name": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, "license": "MIT", "engines": { @@ -7416,8 +6455,6 @@ }, "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==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -7440,15 +6477,11 @@ }, "node_modules/get-own-enumerable-property-symbols": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", "dev": true, "license": "ISC" }, "node_modules/get-package-type": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "license": "MIT", "engines": { "node": ">=8.0.0" @@ -7456,8 +6489,6 @@ }, "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==", "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", @@ -7469,8 +6500,6 @@ }, "node_modules/get-stdin": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", - "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", "dev": true, "license": "MIT", "engines": { @@ -7482,8 +6511,6 @@ }, "node_modules/get-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "license": "MIT", "engines": { @@ -7495,8 +6522,6 @@ }, "node_modules/get-symbol-description": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "license": "MIT", "dependencies": { @@ -7513,8 +6538,6 @@ }, "node_modules/git-hooks-list": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-3.2.0.tgz", - "integrity": "sha512-ZHG9a1gEhUMX1TvGrLdyWb9kDopCBbTnI8z4JgRMYxsijWipgjSEYoPWqBuIB0DnRnvqlQSEeVmzpeuPm7NdFQ==", "dev": true, "license": "MIT", "funding": { @@ -7523,8 +6546,6 @@ }, "node_modules/git-raw-commits": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", - "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", "dev": true, "license": "MIT", "dependencies": { @@ -7543,15 +6564,11 @@ }, "node_modules/github-slugger": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", - "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", "dev": true, "license": "ISC" }, "node_modules/glob": { "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", @@ -7570,8 +6587,6 @@ }, "node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -7582,8 +6597,6 @@ }, "node_modules/global-dirs": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", "dev": true, "license": "MIT", "dependencies": { @@ -7595,8 +6608,6 @@ }, "node_modules/globals": { "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, "license": "MIT", "engines": { @@ -7608,8 +6619,6 @@ }, "node_modules/globalthis": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7625,8 +6634,6 @@ }, "node_modules/globby": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "license": "MIT", "dependencies": { "array-union": "^2.1.0", @@ -7645,8 +6652,6 @@ }, "node_modules/gopd": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -7657,8 +6662,6 @@ }, "node_modules/got": { "version": "13.0.0", - "resolved": "https://registry.npmjs.org/got/-/got-13.0.0.tgz", - "integrity": "sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==", "dev": true, "license": "MIT", "dependencies": { @@ -7683,21 +6686,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==", "license": "ISC" }, "node_modules/graphemer": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true, "license": "MIT" }, "node_modules/hard-rejection": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, "license": "MIT", "engines": { @@ -7706,8 +6703,6 @@ }, "node_modules/has-bigints": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, "license": "MIT", "engines": { @@ -7719,8 +6714,6 @@ }, "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==", "license": "MIT", "engines": { "node": ">=8" @@ -7728,8 +6721,6 @@ }, "node_modules/has-property-descriptors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "license": "MIT", "dependencies": { @@ -7741,8 +6732,6 @@ }, "node_modules/has-proto": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7757,8 +6746,6 @@ }, "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==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -7769,8 +6756,6 @@ }, "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==", "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" @@ -7784,8 +6769,6 @@ }, "node_modules/hasha": { "version": "5.2.2", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", - "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7801,8 +6784,6 @@ }, "node_modules/hasha/node_modules/type-fest": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -7811,8 +6792,6 @@ }, "node_modules/hasown": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -7823,8 +6802,6 @@ }, "node_modules/he": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, "license": "MIT", "bin": { @@ -7833,8 +6810,6 @@ }, "node_modules/header-case": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", - "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", "dev": true, "license": "MIT", "dependencies": { @@ -7844,8 +6819,6 @@ }, "node_modules/hosted-git-info": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "license": "ISC", "dependencies": { @@ -7857,22 +6830,16 @@ }, "node_modules/html-escaper": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true, "license": "MIT" }, "node_modules/http-cache-semantics": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", "dev": true, "license": "BSD-2-Clause" }, "node_modules/http-call": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/http-call/-/http-call-5.3.0.tgz", - "integrity": "sha512-ahwimsC23ICE4kPl9xTBjKB4inbRaeLyZeRunC/1Jy/Z6X8tv22MEAjK+KBOMSVLaqXPTTmd8638waVIKLGx2w==", "dev": true, "license": "ISC", "dependencies": { @@ -7889,8 +6856,6 @@ }, "node_modules/http-call/node_modules/parse-json": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, "license": "MIT", "dependencies": { @@ -7903,8 +6868,6 @@ }, "node_modules/http-errors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "license": "MIT", "dependencies": { "depd": "2.0.0", @@ -7919,8 +6882,6 @@ }, "node_modules/http2-wrapper": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7933,8 +6894,6 @@ }, "node_modules/http2-wrapper/node_modules/quick-lru": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true, "license": "MIT", "engines": { @@ -7946,8 +6905,6 @@ }, "node_modules/human-signals": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -7956,8 +6913,6 @@ }, "node_modules/husky": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", - "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", "dev": true, "license": "MIT", "bin": { @@ -7972,8 +6927,6 @@ }, "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==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" @@ -7984,8 +6937,6 @@ }, "node_modules/ieee754": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "funding": [ { "type": "github", @@ -8004,8 +6955,6 @@ }, "node_modules/ignore": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "license": "MIT", "engines": { "node": ">= 4" @@ -8013,8 +6962,6 @@ }, "node_modules/import-fresh": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8030,8 +6977,6 @@ }, "node_modules/import-fresh/node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "license": "MIT", "engines": { @@ -8040,8 +6985,6 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "license": "MIT", "engines": { @@ -8050,8 +6993,6 @@ }, "node_modules/indent-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "license": "MIT", "engines": { "node": ">=8" @@ -8059,21 +7000,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==", "license": "ISC" }, "node_modules/ini": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, "license": "ISC" }, "node_modules/internal-slot": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "license": "MIT", "dependencies": { @@ -8087,8 +7022,6 @@ }, "node_modules/ipaddr.js": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "license": "MIT", "engines": { "node": ">= 0.10" @@ -8096,8 +7029,6 @@ }, "node_modules/is-array-buffer": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "license": "MIT", "dependencies": { @@ -8114,15 +7045,11 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true, "license": "MIT" }, "node_modules/is-async-function": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8141,8 +7068,6 @@ }, "node_modules/is-bigint": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8157,8 +7082,6 @@ }, "node_modules/is-binary-path": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" @@ -8169,8 +7092,6 @@ }, "node_modules/is-boolean-object": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, "license": "MIT", "dependencies": { @@ -8186,8 +7107,6 @@ }, "node_modules/is-callable": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "license": "MIT", "engines": { @@ -8199,8 +7118,6 @@ }, "node_modules/is-core-module": { "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, "license": "MIT", "dependencies": { @@ -8215,8 +7132,6 @@ }, "node_modules/is-data-view": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "license": "MIT", "dependencies": { @@ -8233,8 +7148,6 @@ }, "node_modules/is-date-object": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "license": "MIT", "dependencies": { @@ -8250,8 +7163,6 @@ }, "node_modules/is-docker": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "license": "MIT", "bin": { "is-docker": "cli.js" @@ -8265,8 +7176,6 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -8274,8 +7183,6 @@ }, "node_modules/is-finalizationregistry": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, "license": "MIT", "dependencies": { @@ -8290,8 +7197,6 @@ }, "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==", "license": "MIT", "engines": { "node": ">=8" @@ -8299,8 +7204,6 @@ }, "node_modules/is-generator-function": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8318,8 +7221,6 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -8330,8 +7231,6 @@ }, "node_modules/is-map": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, "license": "MIT", "engines": { @@ -8341,10 +7240,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-node-process": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", + "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==", + "dev": true, + "license": "MIT" + }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "license": "MIT", "engines": { "node": ">=0.12.0" @@ -8352,8 +7256,6 @@ }, "node_modules/is-number-object": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "license": "MIT", "dependencies": { @@ -8369,8 +7271,6 @@ }, "node_modules/is-obj": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true, "license": "MIT", "engines": { @@ -8379,8 +7279,6 @@ }, "node_modules/is-plain-obj": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, "license": "MIT", "engines": { @@ -8389,8 +7287,6 @@ }, "node_modules/is-regex": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "license": "MIT", "dependencies": { @@ -8408,8 +7304,6 @@ }, "node_modules/is-regexp": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", "dev": true, "license": "MIT", "engines": { @@ -8418,8 +7312,6 @@ }, "node_modules/is-retry-allowed": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", "dev": true, "license": "MIT", "engines": { @@ -8428,8 +7320,6 @@ }, "node_modules/is-set": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, "license": "MIT", "engines": { @@ -8441,8 +7331,6 @@ }, "node_modules/is-shared-array-buffer": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "license": "MIT", "dependencies": { @@ -8457,8 +7345,6 @@ }, "node_modules/is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "license": "MIT", "engines": { "node": ">=8" @@ -8469,8 +7355,6 @@ }, "node_modules/is-string": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "license": "MIT", "dependencies": { @@ -8486,8 +7370,6 @@ }, "node_modules/is-symbol": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "license": "MIT", "dependencies": { @@ -8504,8 +7386,6 @@ }, "node_modules/is-text-path": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", "dev": true, "license": "MIT", "dependencies": { @@ -8517,8 +7397,6 @@ }, "node_modules/is-typed-array": { "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8533,14 +7411,10 @@ }, "node_modules/is-typedarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "license": "MIT" }, "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": { @@ -8552,8 +7426,6 @@ }, "node_modules/is-weakmap": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, "license": "MIT", "engines": { @@ -8565,8 +7437,6 @@ }, "node_modules/is-weakref": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "dev": true, "license": "MIT", "dependencies": { @@ -8581,8 +7451,6 @@ }, "node_modules/is-weakset": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8598,8 +7466,6 @@ }, "node_modules/is-windows": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, "license": "MIT", "engines": { @@ -8608,8 +7474,6 @@ }, "node_modules/is-wsl": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "license": "MIT", "dependencies": { "is-docker": "^2.0.0" @@ -8620,21 +7484,15 @@ }, "node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "license": "ISC" }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -8643,8 +7501,6 @@ }, "node_modules/istanbul-lib-hook": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", - "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -8656,8 +7512,6 @@ }, "node_modules/istanbul-lib-instrument": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", - "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -8673,8 +7527,6 @@ }, "node_modules/istanbul-lib-instrument/node_modules/semver": { "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, "license": "ISC", "bin": { @@ -8686,8 +7538,6 @@ }, "node_modules/istanbul-lib-processinfo": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", - "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", "dev": true, "license": "ISC", "dependencies": { @@ -8704,8 +7554,6 @@ }, "node_modules/istanbul-lib-processinfo/node_modules/p-map": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8717,8 +7565,6 @@ }, "node_modules/istanbul-lib-report": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -8732,8 +7578,6 @@ }, "node_modules/istanbul-lib-report/node_modules/make-dir": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "license": "MIT", "dependencies": { @@ -8748,8 +7592,6 @@ }, "node_modules/istanbul-lib-report/node_modules/semver": { "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, "license": "ISC", "bin": { @@ -8761,8 +7603,6 @@ }, "node_modules/istanbul-lib-report/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": { @@ -8774,8 +7614,6 @@ }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -8789,8 +7627,6 @@ }, "node_modules/istanbul-reports": { "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -8803,8 +7639,6 @@ }, "node_modules/jackspeak": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -8818,8 +7652,6 @@ }, "node_modules/jake": { "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", "license": "Apache-2.0", "dependencies": { "async": "^3.2.3", @@ -8836,8 +7668,6 @@ }, "node_modules/jake/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -8846,8 +7676,6 @@ }, "node_modules/jake/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -8858,15 +7686,11 @@ }, "node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true, "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { @@ -8878,8 +7702,6 @@ }, "node_modules/jsesc": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, "license": "MIT", "bin": { @@ -8891,22 +7713,16 @@ }, "node_modules/json-buffer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true, "license": "MIT" }, "node_modules/json-parse-better-errors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true, "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true, "license": "MIT" }, @@ -8918,22 +7734,23 @@ }, "node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true, "license": "MIT" }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "license": "ISC" + }, "node_modules/json5": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "license": "MIT", "bin": { @@ -8945,8 +7762,6 @@ }, "node_modules/jsonfile": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "license": "MIT", "dependencies": { "universalify": "^2.0.0" @@ -8957,8 +7772,6 @@ }, "node_modules/jsonparse": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true, "engines": [ "node >= 0.2.0" @@ -8967,8 +7780,6 @@ }, "node_modules/JSONStream": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, "license": "(MIT OR Apache-2.0)", "dependencies": { @@ -8984,8 +7795,6 @@ }, "node_modules/keyv": { "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "license": "MIT", "dependencies": { @@ -8994,8 +7803,6 @@ }, "node_modules/kind-of": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "license": "MIT", "engines": { @@ -9004,8 +7811,6 @@ }, "node_modules/lazystream": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "license": "MIT", "dependencies": { "readable-stream": "^2.0.5" @@ -9016,14 +7821,10 @@ }, "node_modules/lazystream/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "license": "MIT" }, "node_modules/lazystream/node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", @@ -9037,14 +7838,10 @@ }, "node_modules/lazystream/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "license": "MIT" }, "node_modules/lazystream/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" @@ -9052,8 +7849,6 @@ }, "node_modules/levn": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9066,8 +7861,6 @@ }, "node_modules/lilconfig": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", "license": "MIT", "engines": { "node": ">=14" @@ -9078,15 +7871,11 @@ }, "node_modules/lines-and-columns": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true, "license": "MIT" }, "node_modules/lint-staged": { "version": "11.2.6", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-11.2.6.tgz", - "integrity": "sha512-Vti55pUnpvPE0J9936lKl0ngVeTdSZpEdTNhASbkaWX7J5R9OEifo1INBGQuGW4zmy6OG+TcWPJ3m5yuy5Q8Tg==", "dev": true, "license": "MIT", "dependencies": { @@ -9114,8 +7903,6 @@ }, "node_modules/listr2": { "version": "3.14.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", - "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", "dev": true, "license": "MIT", "dependencies": { @@ -9142,15 +7929,11 @@ }, "node_modules/listr2/node_modules/colorette": { "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true, "license": "MIT" }, "node_modules/livereload": { "version": "0.9.3", - "resolved": "https://registry.npmjs.org/livereload/-/livereload-0.9.3.tgz", - "integrity": "sha512-q7Z71n3i4X0R9xthAryBdNGVGAO2R5X+/xXpmKeuPMrteg+W2U8VusTKV3YiJbXZwKsOlFlHe+go6uSNjfxrZw==", "license": "MIT", "dependencies": { "chokidar": "^3.5.0", @@ -9167,14 +7950,10 @@ }, "node_modules/livereload-js": { "version": "3.4.1", - "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-3.4.1.tgz", - "integrity": "sha512-5MP0uUeVCec89ZbNOT/i97Mc+q3SxXmiUGhRFOTmhrGPn//uWVQdCvcLJDy64MSBR5MidFdOR7B9viumoavy6g==", "license": "MIT" }, "node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { @@ -9189,8 +7968,6 @@ }, "node_modules/lodash": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "license": "MIT" }, "node_modules/lodash.defaultsdeep": { @@ -9207,30 +7984,22 @@ }, "node_modules/lodash.flattendeep": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", "dev": true, "license": "MIT" }, "node_modules/lodash.get": { "name": "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/lodash.merge": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "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": { @@ -9246,8 +8015,6 @@ }, "node_modules/log-update": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", "dev": true, "license": "MIT", "dependencies": { @@ -9265,8 +8032,6 @@ }, "node_modules/log-update/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": { @@ -9275,8 +8040,6 @@ }, "node_modules/log-update/node_modules/slice-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9293,8 +8056,6 @@ }, "node_modules/log-update/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": { @@ -9306,8 +8067,6 @@ }, "node_modules/log-update/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": { @@ -9321,8 +8080,6 @@ }, "node_modules/loupe": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, "license": "MIT", "dependencies": { @@ -9331,8 +8088,6 @@ }, "node_modules/lower-case": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "dev": true, "license": "MIT", "dependencies": { @@ -9341,8 +8096,6 @@ }, "node_modules/lowercase-keys": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", "dev": true, "license": "MIT", "engines": { @@ -9354,8 +8107,6 @@ }, "node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "license": "ISC", "dependencies": { @@ -9367,8 +8118,6 @@ }, "node_modules/make-dir": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "license": "MIT", "dependencies": { @@ -9383,8 +8132,6 @@ }, "node_modules/make-dir/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -9393,15 +8140,11 @@ }, "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/map-obj": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, "license": "MIT", "engines": { @@ -9413,8 +8156,6 @@ }, "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==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -9422,8 +8163,6 @@ }, "node_modules/media-typer": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -9431,8 +8170,6 @@ }, "node_modules/meow": { "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, "license": "MIT", "dependencies": { @@ -9457,8 +8194,6 @@ }, "node_modules/meow/node_modules/type-fest": { "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -9470,8 +8205,6 @@ }, "node_modules/merge-descriptors": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -9479,15 +8212,11 @@ }, "node_modules/merge-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true, "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "license": "MIT", "engines": { "node": ">= 8" @@ -9495,8 +8224,6 @@ }, "node_modules/methods": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -9504,8 +8231,6 @@ }, "node_modules/micromatch": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "license": "MIT", "dependencies": { "braces": "^3.0.3", @@ -9517,8 +8242,6 @@ }, "node_modules/mime": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "license": "MIT", "bin": { "mime": "cli.js" @@ -9529,8 +8252,6 @@ }, "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==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -9538,8 +8259,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==", "license": "MIT", "dependencies": { "mime-db": "1.52.0" @@ -9550,8 +8269,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": { @@ -9560,8 +8277,6 @@ }, "node_modules/mimic-response": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", "dev": true, "license": "MIT", "engines": { @@ -9573,8 +8288,6 @@ }, "node_modules/min-indent": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, "license": "MIT", "engines": { @@ -9583,8 +8296,6 @@ }, "node_modules/minimatch": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -9598,8 +8309,6 @@ }, "node_modules/minimist": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, "license": "MIT", "funding": { @@ -9608,8 +8317,6 @@ }, "node_modules/minimist-options": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, "license": "MIT", "dependencies": { @@ -9623,33 +8330,31 @@ }, "node_modules/minipass": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/mocha": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.1.0.tgz", - "integrity": "sha512-8uJR5RTC2NgpY3GrYcgpZrsEd9zKbPDpob1RezyR2upGHRQtHWofmzTMzTMSV6dru3tj5Ukt0+Vnq1qhFEEwAg==", + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.5.0.tgz", + "integrity": "sha512-VKDjhy6LMTKm0WgNEdlY77YVsD49LZnPSXJAaPNL9NRYQADxvORsyG1DIQY6v53BKTnlNbEE2MbVCDbnxr4K3w==", "dev": true, "license": "MIT", "dependencies": { - "ansi-colors": "^4.1.3", "browser-stdout": "^1.3.1", - "chokidar": "^3.5.3", + "chokidar": "^4.0.1", "debug": "^4.3.5", - "diff": "^5.2.0", + "diff": "^7.0.0", "escape-string-regexp": "^4.0.0", "find-up": "^5.0.0", "glob": "^10.4.5", "he": "^1.2.0", "js-yaml": "^4.1.0", "log-symbols": "^4.1.0", - "minimatch": "^5.1.6", + "minimatch": "^9.0.5", "ms": "^2.1.3", + "picocolors": "^1.1.1", "serialize-javascript": "^6.0.2", "strip-json-comments": "^3.1.1", "supports-color": "^8.1.1", @@ -9666,23 +8371,38 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "node_modules/mocha/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "readdirp": "^4.0.1" }, "engines": { - "node": ">=10" + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/mocha/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, "node_modules/mocha/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": { @@ -9691,14 +8411,10 @@ }, "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==", "license": "MIT" }, "node_modules/mute-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", "dev": true, "license": "ISC", "engines": { @@ -9707,15 +8423,11 @@ }, "node_modules/natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true, "license": "MIT" }, "node_modules/negotiator": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -9723,8 +8435,6 @@ }, "node_modules/no-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, "license": "MIT", "dependencies": { @@ -9732,16 +8442,27 @@ "tslib": "^2.0.3" } }, + "node_modules/nock": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/nock/-/nock-14.0.4.tgz", + "integrity": "sha512-86fh+gIKH8H02+y0/HKAOZZXn6OwgzXvl6JYwfjvKkoKxUWz54wIIDU/+w24xzMvk/R8pNVXOrvTubyl+Ml6cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@mswjs/interceptors": "^0.38.5", + "json-stringify-safe": "^5.0.1", + "propagate": "^2.0.0" + }, + "engines": { + "node": ">=18.20.0 <20 || >=20.12.1" + } + }, "node_modules/node-int64": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "license": "MIT" }, "node_modules/node-preload": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", - "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9753,15 +8474,11 @@ }, "node_modules/node-releases": { "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", "dev": true, "license": "MIT" }, "node_modules/normalize-package-data": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -9776,8 +8493,6 @@ }, "node_modules/normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -9785,8 +8500,6 @@ }, "node_modules/normalize-url": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", - "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", "dev": true, "license": "MIT", "engines": { @@ -9798,8 +8511,6 @@ }, "node_modules/npm-run-path": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "license": "MIT", "dependencies": { @@ -9811,8 +8522,6 @@ }, "node_modules/nyc": { "version": "17.1.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-17.1.0.tgz", - "integrity": "sha512-U42vQ4czpKa0QdI1hu950XuNhYqgoM+ZF1HT+VuUHL9hPfDPVvNQyltmMqdE9bUHMVa+8yNbc3QKTj8zQhlVxQ==", "dev": true, "license": "ISC", "dependencies": { @@ -9853,8 +8562,6 @@ }, "node_modules/nyc/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": { @@ -9863,8 +8570,6 @@ }, "node_modules/nyc/node_modules/cliui": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "license": "ISC", "dependencies": { @@ -9875,8 +8580,6 @@ }, "node_modules/nyc/node_modules/find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", "dependencies": { @@ -9889,8 +8592,6 @@ }, "node_modules/nyc/node_modules/locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", "dependencies": { @@ -9902,8 +8603,6 @@ }, "node_modules/nyc/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", "dependencies": { @@ -9918,8 +8617,6 @@ }, "node_modules/nyc/node_modules/p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", "dependencies": { @@ -9931,8 +8628,6 @@ }, "node_modules/nyc/node_modules/p-map": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9944,8 +8639,6 @@ }, "node_modules/nyc/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": { @@ -9957,8 +8650,6 @@ }, "node_modules/nyc/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": { @@ -9972,15 +8663,11 @@ }, "node_modules/nyc/node_modules/y18n": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true, "license": "ISC" }, "node_modules/nyc/node_modules/yargs": { "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "license": "MIT", "dependencies": { @@ -10002,8 +8689,6 @@ }, "node_modules/nyc/node_modules/yargs-parser": { "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "license": "ISC", "dependencies": { @@ -10016,8 +8701,6 @@ }, "node_modules/object-inspect": { "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -10028,8 +8711,6 @@ }, "node_modules/object-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "license": "MIT", "engines": { @@ -10038,8 +8719,6 @@ }, "node_modules/object.assign": { "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, "license": "MIT", "dependencies": { @@ -10059,8 +8738,6 @@ }, "node_modules/object.fromentries": { "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10078,8 +8755,6 @@ }, "node_modules/object.groupby": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10093,8 +8768,6 @@ }, "node_modules/object.values": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", - "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, "license": "MIT", "dependencies": { @@ -10112,8 +8785,6 @@ }, "node_modules/oclif": { "version": "4.17.34", - "resolved": "https://registry.npmjs.org/oclif/-/oclif-4.17.34.tgz", - "integrity": "sha512-zog6l7Xndexoq0lQIKyHIspr0OQQBiXQ97xTCZC4hUmgxKoxLVUV4HmHfegAxiTC/5Kmp5+z72b+BysNU2RlVQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10151,8 +8822,6 @@ }, "node_modules/oclif/node_modules/fs-extra": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "license": "MIT", "dependencies": { @@ -10166,8 +8835,6 @@ }, "node_modules/oclif/node_modules/hosted-git-info": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", "dev": true, "license": "ISC", "dependencies": { @@ -10179,8 +8846,6 @@ }, "node_modules/oclif/node_modules/jsonfile": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "license": "MIT", "optionalDependencies": { @@ -10189,15 +8854,11 @@ }, "node_modules/oclif/node_modules/lru-cache": { "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, "license": "ISC" }, "node_modules/oclif/node_modules/normalize-package-data": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", - "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -10211,8 +8872,6 @@ }, "node_modules/oclif/node_modules/semver": { "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, "license": "ISC", "bin": { @@ -10224,8 +8883,6 @@ }, "node_modules/oclif/node_modules/universalify": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, "license": "MIT", "engines": { @@ -10234,8 +8891,6 @@ }, "node_modules/on-finished": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "license": "MIT", "dependencies": { "ee-first": "1.1.1" @@ -10246,8 +8901,6 @@ }, "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": { @@ -10262,8 +8915,6 @@ }, "node_modules/open": { "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "license": "MIT", "dependencies": { "define-lazy-prop": "^2.0.0", @@ -10279,8 +8930,6 @@ }, "node_modules/optionator": { "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "license": "MIT", "dependencies": { @@ -10297,30 +8946,29 @@ }, "node_modules/optionator/node_modules/fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true, "license": "MIT" }, "node_modules/opts": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/opts/-/opts-2.0.2.tgz", - "integrity": "sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg==", "license": "BSD-2-Clause" }, "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==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/outvariant": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz", + "integrity": "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==", + "dev": true, + "license": "MIT" + }, "node_modules/own-keys": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", "dev": true, "license": "MIT", "dependencies": { @@ -10337,8 +8985,6 @@ }, "node_modules/p-cancelable": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", "dev": true, "license": "MIT", "engines": { @@ -10347,8 +8993,6 @@ }, "node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10363,8 +9007,6 @@ }, "node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -10379,8 +9021,6 @@ }, "node_modules/p-map": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10395,8 +9035,6 @@ }, "node_modules/p-try": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, "license": "MIT", "engines": { @@ -10405,8 +9043,6 @@ }, "node_modules/package-hash": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", - "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", "dev": true, "license": "ISC", "dependencies": { @@ -10421,14 +9057,10 @@ }, "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==", "license": "BlueOak-1.0.0" }, "node_modules/param-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", "dev": true, "license": "MIT", "dependencies": { @@ -10438,8 +9070,6 @@ }, "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "license": "MIT", "dependencies": { @@ -10451,8 +9081,6 @@ }, "node_modules/parse-json": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "license": "MIT", "dependencies": { @@ -10470,8 +9098,6 @@ }, "node_modules/parseurl": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -10479,8 +9105,6 @@ }, "node_modules/pascal-case": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "dev": true, "license": "MIT", "dependencies": { @@ -10490,8 +9114,6 @@ }, "node_modules/path-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", - "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==", "dev": true, "license": "MIT", "dependencies": { @@ -10501,8 +9123,6 @@ }, "node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { @@ -10511,8 +9131,6 @@ }, "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==", "license": "MIT", "engines": { "node": ">=8" @@ -10520,15 +9138,11 @@ }, "node_modules/path-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true, "license": "MIT" }, "node_modules/path-scurry": { "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", @@ -10543,20 +9157,14 @@ }, "node_modules/path-scurry/node_modules/lru-cache": { "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "license": "ISC" }, "node_modules/path-to-regexp": { "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "license": "MIT", "engines": { "node": ">=8" @@ -10564,8 +9172,6 @@ }, "node_modules/pathval": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, "license": "MIT", "engines": { @@ -10574,8 +9180,6 @@ }, "node_modules/peek-readable": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz", - "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==", "license": "MIT", "engines": { "node": ">=8" @@ -10587,14 +9191,10 @@ }, "node_modules/picocolors": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "license": "MIT", "engines": { "node": ">=8.6" @@ -10605,8 +9205,6 @@ }, "node_modules/pkg-dir": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10618,8 +9216,6 @@ }, "node_modules/pkg-dir/node_modules/find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", "dependencies": { @@ -10632,8 +9228,6 @@ }, "node_modules/pkg-dir/node_modules/locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", "dependencies": { @@ -10645,8 +9239,6 @@ }, "node_modules/pkg-dir/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", "dependencies": { @@ -10661,8 +9253,6 @@ }, "node_modules/pkg-dir/node_modules/p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", "dependencies": { @@ -10674,8 +9264,6 @@ }, "node_modules/please-upgrade-node": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", "dev": true, "license": "MIT", "dependencies": { @@ -10684,8 +9272,6 @@ }, "node_modules/possible-typed-array-names": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "dev": true, "license": "MIT", "engines": { @@ -10694,8 +9280,6 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "license": "MIT", "engines": { @@ -10704,8 +9288,6 @@ }, "node_modules/prettier": { "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, "license": "MIT", "bin": { @@ -10720,8 +9302,6 @@ }, "node_modules/process": { "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "license": "MIT", "engines": { "node": ">= 0.6.0" @@ -10729,14 +9309,10 @@ }, "node_modules/process-nextick-args": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "license": "MIT" }, "node_modules/process-on-spawn": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.1.0.tgz", - "integrity": "sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -10746,17 +9322,23 @@ "node": ">=8" } }, + "node_modules/propagate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, "node_modules/proto-list": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", "dev": true, "license": "ISC" }, "node_modules/proxy-addr": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "license": "MIT", "dependencies": { "forwarded": "0.2.0", @@ -10768,14 +9350,10 @@ }, "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==", "license": "MIT" }, "node_modules/punycode": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "license": "MIT", "engines": { @@ -10785,8 +9363,6 @@ "node_modules/q": { "name": "promise", "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", "dev": true, "license": "MIT", "dependencies": { @@ -10795,8 +9371,6 @@ }, "node_modules/qs": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.6" @@ -10810,8 +9384,6 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "funding": [ { "type": "github", @@ -10830,8 +9402,6 @@ }, "node_modules/quick-lru": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, "license": "MIT", "engines": { @@ -10840,8 +9410,6 @@ }, "node_modules/randombytes": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10850,8 +9418,6 @@ }, "node_modules/range-parser": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -10859,8 +9425,6 @@ }, "node_modules/raw-body": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -10874,8 +9438,6 @@ }, "node_modules/read-pkg": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "license": "MIT", "dependencies": { @@ -10890,8 +9452,6 @@ }, "node_modules/read-pkg-up": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "license": "MIT", "dependencies": { @@ -10908,8 +9468,6 @@ }, "node_modules/read-pkg-up/node_modules/find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", "dependencies": { @@ -10922,8 +9480,6 @@ }, "node_modules/read-pkg-up/node_modules/locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", "dependencies": { @@ -10935,8 +9491,6 @@ }, "node_modules/read-pkg-up/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", "dependencies": { @@ -10951,8 +9505,6 @@ }, "node_modules/read-pkg-up/node_modules/p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", "dependencies": { @@ -10964,8 +9516,6 @@ }, "node_modules/read-pkg-up/node_modules/type-fest": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -10974,15 +9524,11 @@ }, "node_modules/read-pkg/node_modules/hosted-git-info": { "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true, "license": "ISC" }, "node_modules/read-pkg/node_modules/normalize-package-data": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -10994,8 +9540,6 @@ }, "node_modules/read-pkg/node_modules/semver": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { @@ -11004,8 +9548,6 @@ }, "node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -11014,8 +9556,6 @@ }, "node_modules/readable-stream": { "version": "4.7.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", - "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -11030,14 +9570,10 @@ }, "node_modules/readable-web-to-node-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-2.0.0.tgz", - "integrity": "sha512-+oZJurc4hXpaaqsN68GoZGQAQIA3qr09Or4fqEsargABnbe5Aau8hFn6ISVleT3cpY/0n/8drn7huyyEvTbghA==", "license": "MIT" }, "node_modules/readdir-glob": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", - "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", "license": "Apache-2.0", "dependencies": { "minimatch": "^5.1.0" @@ -11045,8 +9581,6 @@ }, "node_modules/readdir-glob/node_modules/minimatch": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -11057,8 +9591,6 @@ }, "node_modules/readdirp": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "license": "MIT", "dependencies": { "picomatch": "^2.2.1" @@ -11069,8 +9601,6 @@ }, "node_modules/redent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "license": "MIT", "dependencies": { @@ -11083,8 +9613,6 @@ }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "dev": true, "license": "MIT", "dependencies": { @@ -11106,8 +9634,6 @@ }, "node_modules/regexp.prototype.flags": { "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, "license": "MIT", "dependencies": { @@ -11127,8 +9653,6 @@ }, "node_modules/registry-auth-token": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz", - "integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==", "dev": true, "license": "MIT", "dependencies": { @@ -11140,8 +9664,6 @@ }, "node_modules/release-zalgo": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", "dev": true, "license": "ISC", "dependencies": { @@ -11153,8 +9675,6 @@ }, "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": { @@ -11163,15 +9683,11 @@ }, "node_modules/require-main-filename": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true, "license": "ISC" }, "node_modules/resolve": { "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dev": true, "license": "MIT", "dependencies": { @@ -11191,15 +9707,11 @@ }, "node_modules/resolve-alpn": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", "dev": true, "license": "MIT" }, "node_modules/resolve-from": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "license": "MIT", "engines": { @@ -11208,8 +9720,6 @@ }, "node_modules/resolve-global": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", - "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", "dev": true, "license": "MIT", "dependencies": { @@ -11221,8 +9731,6 @@ }, "node_modules/responselike": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", - "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", "dev": true, "license": "MIT", "dependencies": { @@ -11237,8 +9745,6 @@ }, "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": { @@ -11251,8 +9757,6 @@ }, "node_modules/retry": { "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true, "license": "MIT", "engines": { @@ -11261,8 +9765,6 @@ }, "node_modules/reusify": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "license": "MIT", "engines": { "iojs": ">=1.0.0", @@ -11271,15 +9773,11 @@ }, "node_modules/rfdc": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "dev": true, "license": "MIT" }, "node_modules/rimraf": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", - "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", "dev": true, "license": "ISC", "dependencies": { @@ -11298,8 +9796,6 @@ }, "node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "funding": [ { "type": "github", @@ -11321,8 +9817,6 @@ }, "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": { @@ -11331,8 +9825,6 @@ }, "node_modules/safe-array-concat": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -11351,8 +9843,6 @@ }, "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==", "funding": [ { "type": "github", @@ -11371,8 +9861,6 @@ }, "node_modules/safe-push-apply": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "dev": true, "license": "MIT", "dependencies": { @@ -11388,8 +9876,6 @@ }, "node_modules/safe-regex-test": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, "license": "MIT", "dependencies": { @@ -11406,14 +9892,10 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, "node_modules/semver": { "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "license": "ISC", "dependencies": { @@ -11428,15 +9910,11 @@ }, "node_modules/semver-compare": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", "dev": true, "license": "MIT" }, "node_modules/send": { "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "license": "MIT", "dependencies": { "debug": "2.6.9", @@ -11459,8 +9937,6 @@ }, "node_modules/send/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -11468,14 +9944,10 @@ }, "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, "node_modules/send/node_modules/encodeurl": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -11483,8 +9955,6 @@ }, "node_modules/sentence-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", - "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", "dev": true, "license": "MIT", "dependencies": { @@ -11495,8 +9965,6 @@ }, "node_modules/serialize-javascript": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -11505,8 +9973,6 @@ }, "node_modules/serve-static": { "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "license": "MIT", "dependencies": { "encodeurl": "~2.0.0", @@ -11520,15 +9986,11 @@ }, "node_modules/set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true, "license": "ISC" }, "node_modules/set-function-length": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "license": "MIT", "dependencies": { @@ -11545,8 +10007,6 @@ }, "node_modules/set-function-name": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11561,8 +10021,6 @@ }, "node_modules/set-proto": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", "dev": true, "license": "MIT", "dependencies": { @@ -11576,14 +10034,10 @@ }, "node_modules/setprototypeof": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "license": "ISC" }, "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==", "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -11594,8 +10048,6 @@ }, "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==", "license": "MIT", "engines": { "node": ">=8" @@ -11603,8 +10055,6 @@ }, "node_modules/side-channel": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -11622,8 +10072,6 @@ }, "node_modules/side-channel-list": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -11638,8 +10086,6 @@ }, "node_modules/side-channel-map": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -11656,8 +10102,6 @@ }, "node_modules/side-channel-weakmap": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -11675,15 +10119,11 @@ }, "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/simple-git": { "version": "3.27.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.27.0.tgz", - "integrity": "sha512-ivHoFS9Yi9GY49ogc6/YAi3Fl9ROnF4VyubNylgCkA+RVqLaKWnDSzXOVzya8csELIaWaYNutsEuAhZrtOjozA==", "license": "MIT", "dependencies": { "@kwsites/file-exists": "^1.1.1", @@ -11703,8 +10143,6 @@ }, "node_modules/slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "license": "MIT", "engines": { "node": ">=8" @@ -11712,8 +10150,6 @@ }, "node_modules/slice-ansi": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11727,8 +10163,6 @@ }, "node_modules/snake-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", "dev": true, "license": "MIT", "dependencies": { @@ -11738,15 +10172,11 @@ }, "node_modules/sort-object-keys": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-1.1.3.tgz", - "integrity": "sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==", "dev": true, "license": "MIT" }, "node_modules/sort-package-json": { "version": "2.15.1", - "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-2.15.1.tgz", - "integrity": "sha512-9x9+o8krTT2saA9liI4BljNjwAbvUnWf11Wq+i/iZt8nl2UGYnf3TH5uBydE7VALmP7AGwlfszuEeL8BDyb0YA==", "dev": true, "license": "MIT", "dependencies": { @@ -11765,8 +10195,6 @@ }, "node_modules/sort-package-json/node_modules/is-plain-obj": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true, "license": "MIT", "engines": { @@ -11778,8 +10206,6 @@ }, "node_modules/sort-package-json/node_modules/semver": { "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, "license": "ISC", "bin": { @@ -11791,8 +10217,6 @@ }, "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", "engines": { @@ -11801,8 +10225,6 @@ }, "node_modules/source-map-support": { "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "license": "MIT", "dependencies": { @@ -11812,8 +10234,6 @@ }, "node_modules/spawn-wrap": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", - "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", "dev": true, "license": "ISC", "dependencies": { @@ -11830,8 +10250,6 @@ }, "node_modules/spawn-wrap/node_modules/foreground-child": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, "license": "ISC", "dependencies": { @@ -11844,8 +10262,6 @@ }, "node_modules/spdx-correct": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11855,15 +10271,11 @@ }, "node_modules/spdx-exceptions": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true, "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -11873,15 +10285,11 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.21", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", - "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", "dev": true, "license": "CC0-1.0" }, "node_modules/split2": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, "license": "ISC", "dependencies": { @@ -11890,8 +10298,6 @@ }, "node_modules/split2/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": { @@ -11905,15 +10311,11 @@ }, "node_modules/sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/statuses": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -11921,8 +10323,6 @@ }, "node_modules/streamx": { "version": "2.22.0", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz", - "integrity": "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==", "license": "MIT", "dependencies": { "fast-fifo": "^1.3.2", @@ -11932,10 +10332,15 @@ "bare-events": "^2.2.0" } }, + "node_modules/strict-event-emitter": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz", + "integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==", + "dev": true, + "license": "MIT" + }, "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==", "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" @@ -11943,8 +10348,6 @@ }, "node_modules/string-argv": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", "dev": true, "license": "MIT", "engines": { @@ -11953,8 +10356,6 @@ }, "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==", "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -11968,8 +10369,6 @@ "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==", "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -11982,8 +10381,6 @@ }, "node_modules/string-width-cjs/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==", "license": "MIT", "engines": { "node": ">=8" @@ -11991,8 +10388,6 @@ }, "node_modules/string-width-cjs/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==", "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -12003,8 +10398,6 @@ }, "node_modules/string-width/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==", "license": "MIT", "engines": { "node": ">=8" @@ -12012,8 +10405,6 @@ }, "node_modules/string-width/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==", "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -12024,8 +10415,6 @@ }, "node_modules/string.prototype.trim": { "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, "license": "MIT", "dependencies": { @@ -12046,8 +10435,6 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12065,8 +10452,6 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "license": "MIT", "dependencies": { @@ -12083,8 +10468,6 @@ }, "node_modules/stringify-object": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -12098,8 +10481,6 @@ }, "node_modules/stringify-object/node_modules/is-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", "dev": true, "license": "MIT", "engines": { @@ -12108,8 +10489,6 @@ }, "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==", "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -12124,8 +10503,6 @@ "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==", "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -12136,8 +10513,6 @@ }, "node_modules/strip-ansi-cjs/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==", "license": "MIT", "engines": { "node": ">=8" @@ -12145,8 +10520,6 @@ }, "node_modules/strip-bom": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, "license": "MIT", "engines": { @@ -12155,8 +10528,6 @@ }, "node_modules/strip-final-newline": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, "license": "MIT", "engines": { @@ -12165,8 +10536,6 @@ }, "node_modules/strip-indent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12178,8 +10547,6 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "license": "MIT", "engines": { @@ -12191,14 +10558,10 @@ }, "node_modules/striptags": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/striptags/-/striptags-3.2.0.tgz", - "integrity": "sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw==", "license": "MIT" }, "node_modules/strnum": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", - "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", "dev": true, "funding": [ { @@ -12210,8 +10573,6 @@ }, "node_modules/strtok3": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz", - "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==", "license": "MIT", "dependencies": { "@tokenizer/token": "^0.3.0", @@ -12227,8 +10588,6 @@ }, "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==", "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -12242,8 +10601,6 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, "license": "MIT", "engines": { @@ -12255,8 +10612,6 @@ }, "node_modules/tar-stream": { "version": "3.1.7", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", - "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", "license": "MIT", "dependencies": { "b4a": "^1.6.4", @@ -12266,8 +10621,6 @@ }, "node_modules/test-exclude": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "license": "ISC", "dependencies": { @@ -12281,8 +10634,6 @@ }, "node_modules/test-exclude/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "license": "MIT", "dependencies": { @@ -12292,8 +10643,6 @@ }, "node_modules/test-exclude/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -12305,8 +10654,6 @@ }, "node_modules/text-decoder": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", - "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", "license": "Apache-2.0", "dependencies": { "b4a": "^1.6.4" @@ -12314,8 +10661,6 @@ }, "node_modules/text-extensions": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true, "license": "MIT", "engines": { @@ -12324,15 +10669,11 @@ }, "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/through2": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, "license": "MIT", "dependencies": { @@ -12341,8 +10682,6 @@ }, "node_modules/through2/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": { @@ -12356,8 +10695,6 @@ }, "node_modules/tiny-jsonc": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tiny-jsonc/-/tiny-jsonc-1.0.2.tgz", - "integrity": "sha512-f5QDAfLq6zIVSyCZQZhhyl0QS6MvAyTxgz4X4x3+EoCktNWEYJ6PeoEA97fyb98njpBNNi88ybpD7m+BDFXaCw==", "dev": true, "license": "MIT" }, @@ -12369,8 +10706,6 @@ }, "node_modules/tinyglobby": { "version": "0.2.12", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", - "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", "dev": true, "license": "MIT", "dependencies": { @@ -12386,8 +10721,6 @@ }, "node_modules/tinyglobby/node_modules/fdir": { "version": "6.4.3", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", - "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", "dev": true, "license": "MIT", "peerDependencies": { @@ -12401,8 +10734,6 @@ }, "node_modules/tinyglobby/node_modules/picomatch": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, "license": "MIT", "engines": { @@ -12414,8 +10745,6 @@ }, "node_modules/tmp": { "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "license": "MIT", "dependencies": { "os-tmpdir": "~1.0.2" @@ -12426,8 +10755,6 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -12438,8 +10765,6 @@ }, "node_modules/toidentifier": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "license": "MIT", "engines": { "node": ">=0.6" @@ -12447,8 +10772,6 @@ }, "node_modules/token-types": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-2.1.1.tgz", - "integrity": "sha512-wnQcqlreS6VjthyHO3Y/kpK/emflxDBNhlNUPfh7wE39KnuDdOituXomIbyI79vBtF0Ninpkh72mcuRHo+RG3Q==", "license": "MIT", "dependencies": { "@tokenizer/token": "^0.1.1", @@ -12464,14 +10787,10 @@ }, "node_modules/token-types/node_modules/@tokenizer/token": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.1.1.tgz", - "integrity": "sha512-XO6INPbZCxdprl+9qa/AAbFFOMzzwqYxpjPgLICrMD6C2FCw6qfJOPcBk6JqqPLSaZ/Qx87qn4rpPmPMwaAK6w==", "license": "MIT" }, "node_modules/treeify": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", - "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", "license": "MIT", "engines": { "node": ">=0.6" @@ -12479,8 +10798,6 @@ }, "node_modules/trim-newlines": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true, "license": "MIT", "engines": { @@ -12489,8 +10806,6 @@ }, "node_modules/ts-api-utils": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", - "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", "dev": true, "license": "MIT", "engines": { @@ -12502,8 +10817,6 @@ }, "node_modules/ts-node": { "version": "8.10.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz", - "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", "dev": true, "license": "MIT", "dependencies": { @@ -12528,8 +10841,6 @@ }, "node_modules/ts-node/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": { @@ -12538,8 +10849,6 @@ }, "node_modules/tsconfig-paths": { "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "license": "MIT", "dependencies": { @@ -12551,8 +10860,6 @@ }, "node_modules/tsconfig-paths/node_modules/json5": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "license": "MIT", "dependencies": { @@ -12564,8 +10871,6 @@ }, "node_modules/tsconfig-paths/node_modules/strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", "engines": { @@ -12574,14 +10879,10 @@ }, "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==", "license": "0BSD" }, "node_modules/tunnel-agent": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12593,8 +10894,6 @@ }, "node_modules/type-check": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "license": "MIT", "dependencies": { @@ -12606,8 +10905,6 @@ }, "node_modules/type-detect": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", - "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", "dev": true, "license": "MIT", "engines": { @@ -12616,8 +10913,6 @@ }, "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==", "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -12628,8 +10923,6 @@ }, "node_modules/type-is": { "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "license": "MIT", "dependencies": { "media-typer": "0.3.0", @@ -12641,8 +10934,6 @@ }, "node_modules/typed-array-buffer": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "license": "MIT", "dependencies": { @@ -12656,8 +10947,6 @@ }, "node_modules/typed-array-byte-length": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, "license": "MIT", "dependencies": { @@ -12676,8 +10965,6 @@ }, "node_modules/typed-array-byte-offset": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12698,8 +10985,6 @@ }, "node_modules/typed-array-length": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, "license": "MIT", "dependencies": { @@ -12719,8 +11004,6 @@ }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "license": "MIT", "dependencies": { "is-typedarray": "^1.0.0" @@ -12728,8 +11011,6 @@ }, "node_modules/typescript": { "version": "5.8.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", - "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -12742,8 +11023,6 @@ }, "node_modules/unbox-primitive": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "license": "MIT", "dependencies": { @@ -12761,15 +11040,11 @@ }, "node_modules/undici-types": { "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", "devOptional": 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==", "license": "MIT", "engines": { "node": ">= 10.0.0" @@ -12777,8 +11052,6 @@ }, "node_modules/unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -12786,8 +11059,6 @@ }, "node_modules/unzipper": { "version": "0.12.3", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.12.3.tgz", - "integrity": "sha512-PZ8hTS+AqcGxsaQntl3IRBw65QrBI6lxzqDEL7IAo/XCEqRTKGfOX56Vea5TH9SZczRVxuzk1re04z/YjuYCJA==", "license": "MIT", "dependencies": { "bluebird": "~3.7.2", @@ -12799,8 +11070,6 @@ }, "node_modules/update-browserslist-db": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "dev": true, "funding": [ { @@ -12830,8 +11099,6 @@ }, "node_modules/upper-case": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", - "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", "dev": true, "license": "MIT", "dependencies": { @@ -12840,8 +11107,6 @@ }, "node_modules/upper-case-first": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", - "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", "dev": true, "license": "MIT", "dependencies": { @@ -12850,8 +11115,6 @@ }, "node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -12860,14 +11123,10 @@ }, "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==", "license": "MIT" }, "node_modules/utils-merge": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "license": "MIT", "engines": { "node": ">= 0.4.0" @@ -12875,8 +11134,6 @@ }, "node_modules/uuid": { "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, "license": "MIT", "bin": { @@ -12885,8 +11142,6 @@ }, "node_modules/validate-npm-package-license": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12896,8 +11151,6 @@ }, "node_modules/validate-npm-package-name": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", - "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", "dev": true, "license": "ISC", "engines": { @@ -12906,8 +11159,6 @@ }, "node_modules/vary": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -12915,8 +11166,6 @@ }, "node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -12930,8 +11179,6 @@ }, "node_modules/which-boxed-primitive": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, "license": "MIT", "dependencies": { @@ -12950,8 +11197,6 @@ }, "node_modules/which-builtin-type": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -12978,8 +11223,6 @@ }, "node_modules/which-collection": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "license": "MIT", "dependencies": { @@ -12997,15 +11240,11 @@ }, "node_modules/which-module": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", "dev": true, "license": "ISC" }, "node_modules/which-typed-array": { "version": "1.1.18", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", - "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", "dev": true, "license": "MIT", "dependencies": { @@ -13025,8 +11264,6 @@ }, "node_modules/widest-line": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "license": "MIT", "dependencies": { "string-width": "^4.0.0" @@ -13037,8 +11274,6 @@ }, "node_modules/word-wrap": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, "license": "MIT", "engines": { @@ -13047,21 +11282,15 @@ }, "node_modules/wordwrap": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "license": "MIT" }, "node_modules/workerpool": { "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", - "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", "dev": true, "license": "Apache-2.0" }, "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==", "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -13078,8 +11307,6 @@ "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==", "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -13095,8 +11322,6 @@ }, "node_modules/wrap-ansi-cjs/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==", "license": "MIT", "engines": { "node": ">=8" @@ -13104,8 +11329,6 @@ }, "node_modules/wrap-ansi-cjs/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==", "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -13116,8 +11339,6 @@ }, "node_modules/wrap-ansi/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==", "license": "MIT", "engines": { "node": ">=8" @@ -13125,8 +11346,6 @@ }, "node_modules/wrap-ansi/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==", "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -13137,8 +11356,6 @@ }, "node_modules/write-file-atomic": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, "license": "ISC", "dependencies": { @@ -13150,8 +11367,6 @@ }, "node_modules/ws": { "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "license": "MIT", "engines": { "node": ">=8.3.0" @@ -13171,8 +11386,6 @@ }, "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": { @@ -13181,15 +11394,11 @@ }, "node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, "license": "ISC" }, "node_modules/yaml": { "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true, "license": "ISC", "engines": { @@ -13198,8 +11407,6 @@ }, "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": { @@ -13217,8 +11424,6 @@ }, "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": { @@ -13227,8 +11432,6 @@ }, "node_modules/yargs-unparser": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, "license": "MIT", "dependencies": { @@ -13243,8 +11446,6 @@ }, "node_modules/yargs-unparser/node_modules/camelcase": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "license": "MIT", "engines": { @@ -13256,8 +11457,6 @@ }, "node_modules/yargs-unparser/node_modules/decamelize": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, "license": "MIT", "engines": { @@ -13269,8 +11468,6 @@ }, "node_modules/yargs-unparser/node_modules/is-plain-obj": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, "license": "MIT", "engines": { @@ -13279,8 +11476,6 @@ }, "node_modules/yargs/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": { @@ -13289,8 +11484,6 @@ }, "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": { @@ -13299,8 +11492,6 @@ }, "node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", "engines": { @@ -13312,8 +11503,6 @@ }, "node_modules/yoctocolors-cjs": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", - "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", "license": "MIT", "engines": { "node": ">=18" @@ -13324,8 +11513,6 @@ }, "node_modules/zip-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz", - "integrity": "sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==", "license": "MIT", "dependencies": { "archiver-utils": "^5.0.0", @@ -13335,6 +11522,12 @@ "engines": { "node": ">= 14" } + }, + "sdk": { + "extraneous": true + }, + "src/sdk": { + "extraneous": true } } } diff --git a/package.json b/package.json index b00bc2a6..6429560b 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,11 @@ "lint:fix": "eslint --fix \"src/**/*.{js,ts}\" --quiet" }, "dependencies": { - "@apimatic/sdk": "^0.1.0-alpha.2", + "@apimatic/authentication-adapters": "^0.5.4", + "@apimatic/axios-client-adapter": "^0.3.7", + "@apimatic/core": "^0.10.16", + "@apimatic/schema": "^0.7.14", + "@apimatic/sdk": "file:./lib/sdk", "@clack/prompts": "^0.11.0", "@oclif/core": "^4.2.8", "@oclif/plugin-autocomplete": "^3.2.24", @@ -70,28 +74,29 @@ "devDependencies": { "@commitlint/cli": "^15.0.0", "@commitlint/config-conventional": "^15.0.0", - "@oclif/test": "^4.1.11", + "@oclif/test": "^4.1.13", "@types/adm-zip": "^0.5.5", "@types/archiver": "^5.1.1", "@types/base-64": "^1.0.0", - "@types/chai": "^4.2.22", + "@types/chai": "^4.3.20", "@types/connect-livereload": "^0.5.1", "@types/express": "^4.17.13", "@types/fs-extra": "^9.0.13", "@types/livereload": "^0.9.2", "@types/mocha": "^5.2.7", - "@types/node": "^10.17.60", + "@types/node": "^20.17.50", "@types/treeify": "^1.0.3", "@types/unzipper": "^0.10.4", "@typescript-eslint/eslint-plugin": "^8.0.0", "@typescript-eslint/parser": "^8.0.0", - "chai": "^4.3.4", + "chai": "^4.5.0", "eslint": "^9.21.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-import": "^2.25.2", "husky": "^7.0.4", "lint-staged": "^11.2.6", - "mocha": "^11.1.0", + "mocha": "^11.5.0", + "nock": "^14.0.4", "nyc": "^17.1.0", "oclif": "^4.17.34", "prettier": "^2.4.1", diff --git a/src/actions/portal/generate.ts b/src/actions/portal/generate.ts new file mode 100644 index 00000000..217c5513 --- /dev/null +++ b/src/actions/portal/generate.ts @@ -0,0 +1,80 @@ +import * as path from "path"; +import * as fs from "fs-extra"; +import { PortalService } from "../../infrastructure/services/portal-service"; +import { PortalPaths, GeneratePortalParams, GenerateFlags } from "../../types/portal/generate"; +import { Result } from "../../types/common/result"; +import { + getGeneratedFilesPaths, + validateAndZipPortalSource, + deleteFile, + extractZipFile, + getMessageInRedColor +} from "../../utils/utils"; +import { PortalGeneratePrompts } from "../../prompts/portal/generate"; + +export class PortalGenerateAction { + private readonly prompts: PortalGeneratePrompts; + + constructor() { + this.prompts = new PortalGeneratePrompts(); + } + + async generatePortal(paths: PortalPaths, flags: GenerateFlags, configDir: string): Promise { + this.prompts.displayPortalGenerationMessage(); + const pathsToIgnore = getGeneratedFilesPaths(paths.sourceFolderPath, paths.generatedPortalArtifactsFolderPath); + + //TODO: Refactor this method, carries dual responsibility. + const sourceBuildInputZipFilePath = await validateAndZipPortalSource( + paths.sourceFolderPath, + path.join(paths.sourceFolderPath, ".portal_source.zip"), + pathsToIgnore + ); + + const generatePortalParams: GeneratePortalParams = { + sourceBuildInputZipFilePath: sourceBuildInputZipFilePath, + generatedPortalArtifactsFolderPath: paths.generatedPortalArtifactsFolderPath, + generatedPortalArtifactsZipFilePath: paths.generatedPortalArtifactsZipFilePath, + overrideAuthKey: flags["auth-key"] ?? null, + generateZipFile: flags.zip + }; + + const docsPortalService = new PortalService(); + const portalGenerationResult = await docsPortalService.generateOnPremPortal(generatePortalParams, configDir); + await deleteFile(sourceBuildInputZipFilePath); + + if (portalGenerationResult.isSuccess) { + await this.saveGeneratedPortalStreamToZipFile( + portalGenerationResult.value!, + paths.generatedPortalArtifactsZipFilePath + ); + + if (flags.zip) { + this.prompts.displayOutroMessage(paths.generatedPortalArtifactsZipFilePath); + } + + await extractZipFile(paths.generatedPortalArtifactsZipFilePath, paths.generatedPortalArtifactsFolderPath); + await deleteFile(paths.generatedPortalArtifactsZipFilePath); + + this.prompts.displayPortalGenerationSuccessMessage(); + this.prompts.displayOutroMessage(paths.generatedPortalArtifactsFolderPath); + } else { + this.prompts.displayPortalGenerationErrorMessage(); + this.prompts.logError( + getMessageInRedColor(`An error occurred while generating the portal: \n${portalGenerationResult.error!}`) + ); + } + } + + private async saveGeneratedPortalStreamToZipFile( + data: NodeJS.ReadableStream, + generatedPortalArtifactsZipFilePath: string + ): Promise { + const writeStream = fs.createWriteStream(generatedPortalArtifactsZipFilePath); + await new Promise((resolve, reject) => { + data + .pipe(writeStream) + .on("finish", () => resolve()) + .on("error", (error) => reject(Result.failure(`Failed to save downloaded portal to file: ${error.message}`))); + }); + } +} diff --git a/src/commands/portal/generate.ts b/src/commands/portal/generate.ts index cd0a45d2..d352bc58 100644 --- a/src/commands/portal/generate.ts +++ b/src/commands/portal/generate.ts @@ -1,16 +1,16 @@ import * as path from "path"; import * as fs from "fs-extra"; - import { Command, Flags } from "@oclif/core"; -import { Client, DocsPortalManagementController } from "@apimatic/sdk"; - -import { AxiosError } from "axios"; -import { SDKClient } from "../../client-utils/sdk-client"; -import { GeneratePortalParams } from "../../types/portal/generate"; -import { downloadDocsPortal } from "../../controllers/portal/generate"; -import { replaceHTML, isJSONParsable, validateAndZipPortalSource, getGeneratedFilesPaths } from "../../utils/utils"; -import { AuthenticationError } from "../../types/utils"; +import { GenerateFlags, PortalPaths } from "../../types/portal/generate"; +import { getMessageInRedColor } from "../../utils/utils"; import { PortalGeneratePrompts } from "../../prompts/portal/generate"; +import { PortalGenerateAction } from "../../actions/portal/generate"; +import { Result } from "../../types/common/result"; + +const DEFAULT_FOLDER = "./"; +const DEFAULT_DESTINATION = path.resolve("./"); +const GENERATED_PORTAL_ARTIFACTS_FOLDER = "generated_portal"; +const GENERATED_PORTAL_ARTIFACTS_ZIP = ".generated_portal.zip"; export default class PortalGenerate extends Command { static description = @@ -18,17 +18,24 @@ export default class PortalGenerate extends Command { static flags = { folder: Flags.string({ - parse: async (input) => path.resolve(input), - default: "./", + parse: async (input: string) => path.resolve(input), + default: DEFAULT_FOLDER, description: "path to the input directory containing API specifications and config files" }), destination: Flags.string({ - parse: async (input) => path.resolve(input), - default: path.resolve("./"), + parse: async (input: string) => path.resolve(input), + default: DEFAULT_DESTINATION, description: "path to the downloaded portal" }), - force: Flags.boolean({ char: "f", default: false, description: "overwrite if a portal exists in the destination" }), - zip: Flags.boolean({ default: false, description: "download the generated portal as a .zip archive" }), + force: Flags.boolean({ + char: "f", + default: false, + description: "overwrite if a portal exists in the destination" + }), + zip: Flags.boolean({ + default: false, + description: "download the generated portal as a .zip archive" + }), "auth-key": Flags.string({ default: "", description: "override current authentication state with an authentication key" @@ -41,89 +48,67 @@ Your portal has been generated at D:/ ` ]; - async run() { - const { flags } = await this.parse(PortalGenerate); - const zip = flags.zip; - const sourceFolderPath: string = flags.folder; - const portalFolderPath: string = path.join(flags.destination, "generated_portal"); - const zippedPortalPath: string = path.join(flags.destination, ".generated_portal.zip"); - const overrideAuthKey: string | null = flags["auth-key"] ?? null; - const prompts = new PortalGeneratePrompts(); + private readonly prompts: PortalGeneratePrompts; - // Check if at destination, portal already exists and throw error if force flag is not set for both zip and extracted - if (fs.existsSync(portalFolderPath) && !flags.force && !zip) { - await prompts.existingDestinationPortalFolderPrompt(); - } else if (fs.existsSync(zippedPortalPath) && !flags.force && zip) { - await prompts.existingDestinationPortalZipPrompt(); - } - try { - if (!(await fs.pathExists(flags.destination))) { - throw new Error(`Destination path ${flags.destination} does not exist.`); - } else if (!(await fs.pathExists(flags.folder))) { - throw new Error(`Portal build folder ${flags.folder} does not exist.`); - } - const client: Client = await SDKClient.getInstance().getClient(overrideAuthKey, this.config.configDir); - const docsPortalController: DocsPortalManagementController = new DocsPortalManagementController(client); - - const pathsToIgnore = getGeneratedFilesPaths(sourceFolderPath, portalFolderPath); - const zippedBuildFilePath = await validateAndZipPortalSource( - sourceFolderPath, - path.join(sourceFolderPath, ".portal_source.zip"), - pathsToIgnore - ); + constructor(argv: string[], config: any) { + super(argv, config); + this.prompts = new PortalGeneratePrompts(); + } - const generatePortalParams: GeneratePortalParams = { - zippedBuildFilePath, - portalFolderPath, - zippedPortalPath, - docsPortalController, - overrideAuthKey, - zip - }; + async run(): Promise { + const { flags } = await this.parse(PortalGenerate); + const paths = await this.getPortalPaths(flags as GenerateFlags); + const portalGenerateAction = new PortalGenerateAction(); - prompts.displayPortalGenerationMessage(); + const shouldContinueWithExistingPortal = await this.checkExistingPortal(paths, flags as GenerateFlags); + if (!shouldContinueWithExistingPortal) { + process.exit(1); + } - const generatedPortalPath: string = await downloadDocsPortal(generatePortalParams, this.config.configDir); + const validationResult = await this.validatePaths(paths); + if (!validationResult.isSuccess) { + this.error(validationResult.error!); + } - prompts.displayPortalGenerationSuccessMessage(); + await portalGenerateAction.generatePortal(paths, flags as GenerateFlags, this.config.configDir); + } - prompts.displayOutroMessage(generatedPortalPath); - } catch (error) { - prompts.displayPortalGenerationErrorMessage(); - if (error && (error as AxiosError).response) { - const apiError = error as AxiosError; - const apiResponse = apiError.response; + private async getPortalPaths(flags: GenerateFlags): Promise { + return { + sourceFolderPath: flags.folder, + destinationFolderPath: flags.destination, + generatedPortalArtifactsFolderPath: path.join(flags.destination, GENERATED_PORTAL_ARTIFACTS_FOLDER), + generatedPortalArtifactsZipFilePath: path.join(flags.destination, GENERATED_PORTAL_ARTIFACTS_ZIP) + }; + } - if (apiResponse) { - const responseData = (apiResponse.data as string).toString(); + private async validatePaths(paths: PortalPaths): Promise> { + if (!(await fs.pathExists(paths.sourceFolderPath))) { + return Result.failure( + getMessageInRedColor(`Portal build input folder ${paths.sourceFolderPath} does not exist.`) + ); + } + if (!(await fs.pathExists(path.dirname(paths.generatedPortalArtifactsFolderPath)))) { + return Result.failure( + getMessageInRedColor( + `Destination path ${path.dirname(paths.generatedPortalArtifactsFolderPath)} does not exist.` + ) + ); + } - if (apiResponse.status === 422 && responseData.length > 0 && isJSONParsable(responseData)) { - const nestedErrors = JSON.parse(responseData); + return Result.success("Paths validated successfully."); + } - if (nestedErrors.error) { - return this.error(replaceHTML(nestedErrors.error)); - } else if (nestedErrors.message) { - return this.error(replaceHTML(nestedErrors.message)); - } - } else if (apiResponse.status === 401 && responseData.length > 0) { - this.error("You are not authorized to perform this action"); - } else if (apiResponse.status === 403 && apiResponse.statusText) { - return this.error("Your subscription does not allow on premise portal generation"); - } else { - return this.error(apiError.message); - } - } - } else if ((error as AuthenticationError).statusCode === 401) { - this.error("You are not authorized to perform this action"); - } else if ( - (error as AuthenticationError).statusCode === 402 && - (error as AuthenticationError).body && - typeof (error as AuthenticationError).body === "string" - ) { - this.error((error as AuthenticationError).body); - } else { - this.error(`${(error as Error).message}`); + private async checkExistingPortal(paths: PortalPaths, flags: GenerateFlags): Promise { + if (fs.existsSync(paths.generatedPortalArtifactsFolderPath) && !flags.force && !flags.zip) { + if (!(await this.prompts.overwriteExistingPortalArtifactsPrompt())) { + return false; + } + } else if (fs.existsSync(paths.generatedPortalArtifactsZipFilePath) && !flags.force && flags.zip) { + if (!(await this.prompts.existingDestinationPortalZipPrompt())) { + return false; } } + return true; } } diff --git a/src/controllers/api/validate.ts b/src/controllers/api/validate.ts index 92779ec8..d250ce33 100644 --- a/src/controllers/api/validate.ts +++ b/src/controllers/api/validate.ts @@ -1,7 +1,6 @@ import * as fs from "fs-extra"; -import { ApiResponse, FileWrapper } from "@apimatic/sdk"; +import { ApiResponse, APIValidationExternalApisController, ApiValidationSummary, ContentType, FileWrapper } from "@apimatic/sdk"; import { GetValidationParams } from "../../types/api/validate"; -import { APIValidationExternalApisController, ApiValidationSummary, ContentType } from "@apimatic/sdk"; import { createTempDirectory, deleteFile, zipDirectory } from "../../utils/utils"; export const getValidationSummary = async ( diff --git a/src/controllers/portal/generate.ts b/src/controllers/portal/generate.ts index e68f9a3f..1fd91c57 100644 --- a/src/controllers/portal/generate.ts +++ b/src/controllers/portal/generate.ts @@ -1,72 +1,139 @@ import * as fs from "fs-extra"; -import * as FormData from "form-data"; -import { baseURL } from "../../config/env"; -import { deleteFile, extractZipFile } from "../../utils/utils"; -import { GeneratePortalParams } from "../../types/portal/generate"; +import { deleteFile, extractZipFile, getMessageInRedColor, parseStreamBodyToJson } from "../../utils/utils"; +import { ErrorResponse, GeneratePortalParams } from "../../types/portal/generate"; import { AuthInfo, getAuthInfo } from "../../client-utils/auth-manager"; -import { AxiosRequestConfig, AxiosResponse, CancelTokenSource } from "axios"; +import { + ApiError, + ApiResponse, + Client, + ContentType, + DocsPortalManagementController, + FileWrapper, + ProblemDetailsError, + UnauthorizedResponseError +} from "@apimatic/sdk"; +import { Result } from "../../types/common/result"; +const CONTENT_TYPE = ContentType.EnumMultipartformdata; +const TIMEOUT = 0; -import axiosInstance from "../../config/axios-config"; +export const downloadDocsPortal = async ( + params: GeneratePortalParams, + configDir: string +): Promise> => { + if (!(await fs.pathExists(params.sourceBuildInputZipFilePath))) { + return Result.failure("Build file doesn't exist"); + } -//TODO: Remove after SDK is patched -const downloadPortalAxios = async (zippedBuildFilePath: string, configDir: string, overrideAuthKey: string | null, cancellationToken: CancelTokenSource | null) => { - const formData = new FormData(); const authInfo: AuthInfo | null = await getAuthInfo(configDir); - let authorizationHeader = ""; - if (overrideAuthKey) - { - authorizationHeader = `X-Auth-Key ${overrideAuthKey}`; + const authorizationHeader = createAuthorizationHeader(authInfo, params.overrideAuthKey); + const client = createApiClient(authorizationHeader); + const docsPortalManagementController = new DocsPortalManagementController(client); + + try { + const stream = await generatePortalFromSyncEndpoint(docsPortalManagementController, params.sourceBuildInputZipFilePath); + await saveGeneratedPortalStreamToZipFile(stream, params.generatedPortalArtifactsZipFilePath); + await deleteFile(params.sourceBuildInputZipFilePath); + + if (params.generateZipFile) { + return Result.success(params.generatedPortalArtifactsZipFilePath); + } + + await extractZipFile(params.generatedPortalArtifactsZipFilePath, params.generatedPortalArtifactsFolderPath); + await deleteFile(params.generatedPortalArtifactsZipFilePath); + + return Result.success(params.generatedPortalArtifactsFolderPath); + } catch (error) { + return handlePortalGenerationErrors(error, params); } - else if (authInfo) { - authorizationHeader = `X-Auth-Key ${authInfo.authKey}`; +}; + +const createAuthorizationHeader = (authInfo: AuthInfo | null, overrideAuthKey: string | null): string => { + if (overrideAuthKey) { + return `X-Auth-Key ${overrideAuthKey}`; + } + if (!authInfo) { + return ""; } - formData.append("file", fs.createReadStream(zippedBuildFilePath)); - const config: AxiosRequestConfig = { - headers: { - Authorization: authorizationHeader, - "User-Agent": "APIMatic CLI", - ...formData.getHeaders() + return `X-Auth-Key ${authInfo.authKey}`; +}; + +const createApiClient = (authorizationHeader: string): Client => { + return new Client({ + customHeaderAuthenticationCredentials: { + Authorization: authorizationHeader }, - responseType: "arraybuffer" - }; + timeout: TIMEOUT + }); +}; - if (cancellationToken) { - config.cancelToken = cancellationToken.token; - } +const generatePortalFromSyncEndpoint = async ( + docsPortalManagementController: DocsPortalManagementController, + zippedBuildFilePath: string +): Promise => { + const file = new FileWrapper(fs.createReadStream(zippedBuildFilePath)); + const response: ApiResponse = + await docsPortalManagementController.generateOnPremPortalViaBuildInput(CONTENT_TYPE, file); - const { data }: AxiosResponse = await axiosInstance.post(`${baseURL}/portal`, formData, config); - return data; + return response.result as NodeJS.ReadableStream; }; -// Download Docs Portal -export const downloadDocsPortal = async ( - { zippedBuildFilePath, portalFolderPath, zippedPortalPath, overrideAuthKey, zip }: GeneratePortalParams, - configDir: string, - cancellationToken: CancelTokenSource | null = null -) => { - // Check if the build file exists for the user or not - if (!(await fs.pathExists(zippedBuildFilePath))) { - throw new Error("Build file doesn't exist"); - } - // TODO: ***CRITICAL*** Remove this call once the SDK is patched - const data: ArrayBuffer = await downloadPortalAxios(zippedBuildFilePath, configDir, overrideAuthKey, cancellationToken); +const saveGeneratedPortalStreamToZipFile = async (data: NodeJS.ReadableStream, generatedPortalArtifactsZipFilePath: string): Promise => { + const writeStream = fs.createWriteStream(generatedPortalArtifactsZipFilePath); + await new Promise((resolve, reject) => { + data + .pipe(writeStream) + .on("finish", () => resolve()) + .on("error", (error) => + reject(Result.failure(`Failed to save downloaded portal to file: ${error.message}`)) + ); + }); +}; - await deleteFile(zippedBuildFilePath); - await fs.writeFile(zippedPortalPath, data); +const handlePortalGenerationErrors = async (error: unknown, params: GeneratePortalParams): Promise> => { + if (error instanceof UnauthorizedResponseError) { + //401 + const body = await parseErrorResponse(error); + return Result.failure(getMessageInRedColor(body.message ?? "Unauthorized access")); + } else if (error instanceof ProblemDetailsError) { + //400 & 403 + const body = await parseErrorResponse(error); + const message = body.errors[Object.keys(body.errors)[0]][0]; + return Result.failure(getMessageInRedColor(body.title + " " + (body.detail ?? "") + ":\n" + message)); + } else if (error instanceof ApiError && error.statusCode === 422) { + //422 + await extractErrorZipFile(error, params); + return Result.failure( + getMessageInRedColor( + "An error occurred during portal generation due to an issue with the input. An error report has been written at the destination path: " + + params.generatedPortalArtifactsFolderPath + ) + ); + } else { + return Result.failure(getMessageInRedColor(error instanceof Error ? error.message : String(error))); + } +}; - // TODO: Uncomment this code block when the SDK is patched - // const file: FileWrapper = new FileWrapper(fs.createReadStream(zippedBuildFilePath)); - // const { result }: ApiResponse = - // await docsPortalController.generateOnPremPortalViaBuildInput(file); - // if ((data as NodeJS.ReadableStream).readable) { - // await writeFileUsingReadableStream(data as NodeJS.ReadableStream, zippedPortalPath); - if (!zip) { - await extractZipFile(zippedPortalPath, portalFolderPath); - await deleteFile(zippedPortalPath); +const parseErrorResponse = async (error: unknown): Promise => { + if (error instanceof Error && "body" in error) { + const stream = (error as { body: NodeJS.ReadableStream }).body; + return await parseStreamBodyToJson(stream); } + throw error; +}; + +const extractErrorZipFile = async (error: ApiError, params: GeneratePortalParams): Promise => { + const data = error.body as NodeJS.ReadableStream; + const writeStream = fs.createWriteStream(params.generatedPortalArtifactsZipFilePath); + + await new Promise((resolve, reject) => { + data + .pipe(writeStream) + .on("finish", () => resolve()) + .on("error", reject); + }); - return zip ? zippedPortalPath : portalFolderPath; - // } else { - // throw new Error("Couldn't download the portal"); - // } -}; \ No newline at end of file + if (!params.generateZipFile) { + await extractZipFile(params.generatedPortalArtifactsZipFilePath, params.generatedPortalArtifactsFolderPath); + await deleteFile(params.generatedPortalArtifactsZipFilePath); + } +}; diff --git a/src/controllers/portal/serve.ts b/src/controllers/portal/serve.ts index e74276c8..feebd6d4 100644 --- a/src/controllers/portal/serve.ts +++ b/src/controllers/portal/serve.ts @@ -1,7 +1,5 @@ import * as path from "path"; import * as chokidar from "chokidar"; -import { Client, DocsPortalManagementController } from "@apimatic/sdk"; -import { SDKClient } from "../../client-utils/sdk-client"; import { cleanUpGeneratedPortalFiles, getGeneratedFilesPaths, @@ -11,7 +9,7 @@ import { } from "../../utils/utils"; import { GeneratePortalParams } from "../../types/portal/generate"; import { downloadDocsPortal } from "./generate"; -import axios, { CancelTokenSource } from "axios"; +import axios from "axios"; const progressSpinner = { frames: ["◒", "◐", "◓", "◑"].map((frame) => getMessageInMagentaColor(frame)), @@ -70,20 +68,12 @@ export const watchAndRegeneratePortal = async ( const deletedDirectories = new Set(); - let cancellationToken: CancelTokenSource | null = null; - watcher .on("all", async (event, path) => { if (event == "unlinkDir") { deletedDirectories.add(path); } - if (cancellationToken) { - cancellationToken.cancel("New portal regeneration request, operation cancelled."); - } - - cancellationToken = axios.CancelToken.source(); - if (event == "unlink") { for (const dir of deletedDirectories) { if (path.startsWith(dir)) { @@ -91,7 +81,7 @@ export const watchAndRegeneratePortal = async ( } } } - await handleFileChange(sourceDir, portalDir, configDir, overrideAuthKey, absoluteIgnoredPaths, cancellationToken); + await handleFileChange(sourceDir, portalDir, configDir, overrideAuthKey, absoluteIgnoredPaths); }) .on("error", (error: Error) => { console.error("Watcher error:", error); @@ -105,12 +95,8 @@ export const generatePortal = async ( portalDir: string, configDir: string, ignoredPaths: string[] = [], - overrideAuthKey: string | null = null, - cancellationToken: CancelTokenSource | null = null + overrideAuthKey: string | null = null ) => { - const client: Client = await SDKClient.getInstance().getClient(overrideAuthKey, configDir); - const docsPortalController: DocsPortalManagementController = new DocsPortalManagementController(client); - const zippedBuildFilePath = await validateAndZipPortalSource( sourceDir, path.join(sourceDir, ".portal_source.zip"), @@ -118,15 +104,14 @@ export const generatePortal = async ( ); const generatePortalParams: GeneratePortalParams = { - zippedBuildFilePath, - portalFolderPath: portalDir, - zippedPortalPath: path.join(sourceDir, ".generated_portal.zip"), - docsPortalController, + sourceBuildInputZipFilePath: zippedBuildFilePath, + generatedPortalArtifactsFolderPath: portalDir, + generatedPortalArtifactsZipFilePath: path.join(sourceDir, ".generated_portal.zip"), overrideAuthKey, - zip: false + generateZipFile: false }; - await downloadDocsPortal(generatePortalParams, configDir, cancellationToken); + await downloadDocsPortal(generatePortalParams, configDir); }; async function handleFileChange( @@ -134,12 +119,11 @@ async function handleFileChange( portalDir: string, configDir: string, overrideAuthKey: string | null, - absoluteIgnoredPaths: string[], - cancellationToken: CancelTokenSource | null + absoluteIgnoredPaths: string[] ) { progressSpinner.start(); try { - await generatePortal(sourceDir, portalDir, configDir, absoluteIgnoredPaths, overrideAuthKey, cancellationToken); + await generatePortal(sourceDir, portalDir, configDir, absoluteIgnoredPaths, overrideAuthKey); progressSpinner.stop(); await cleanUpGeneratedPortalFiles(sourceDir); } catch (error) { diff --git a/src/controllers/sdk/generate.ts b/src/controllers/sdk/generate.ts index 514917df..97754c2b 100644 --- a/src/controllers/sdk/generate.ts +++ b/src/controllers/sdk/generate.ts @@ -1,13 +1,12 @@ import * as fs from "fs-extra"; import { ux } from "@oclif/core"; -import { +import { ApiResponse, CodeGenerationExternalApisController, UserCodeGeneration, Platforms, - GenerateSdkViaUrlRequest -} from "@apimatic/sdk"; -import { ApiResponse, FileWrapper } from "@apimatic/sdk"; + GenerateSdkViaUrlRequest, + FileWrapper } from "@apimatic/sdk"; import { GenerationIdParams, SimplePlatforms, DownloadSDKParams } from "../../types/sdk/generate"; import { unzipFile, writeFileUsingReadableStream } from "../../utils/utils"; diff --git a/src/infrastructure/services/portal-service.ts b/src/infrastructure/services/portal-service.ts new file mode 100644 index 00000000..63db4dd8 --- /dev/null +++ b/src/infrastructure/services/portal-service.ts @@ -0,0 +1,128 @@ +import * as fsExtra from "fs-extra"; +import * as fs from "fs"; +import { FileWrapper, ApiResponse, ApiError } from "@apimatic/sdk"; +import { + ContentType, + DocsPortalManagementController, + Client, + UnauthorizedResponseError, + ProblemDetailsError +} from "@apimatic/sdk"; +import { AuthInfo, getAuthInfo } from "../../client-utils/auth-manager"; +import { GeneratePortalParams, ErrorResponse } from "../../types/portal/generate"; +import { Result } from "../../types/common/result"; +import { getMessageInRedColor, parseStreamBodyToJson, extractZipFile, deleteFile } from "../../utils/utils"; + +export class PortalService { + private readonly CONTENT_TYPE = ContentType.EnumMultipartformdata; + private readonly TIMEOUT = 0; + + async generateOnPremPortal( + params: GeneratePortalParams, + configDir: string + ): Promise> { + if (!(await fsExtra.pathExists(params.sourceBuildInputZipFilePath))) { + return Result.failure("Build file doesn't exist"); + } + + const authInfo: AuthInfo | null = await getAuthInfo(configDir); + const authorizationHeader = this.createAuthorizationHeader(authInfo, params.overrideAuthKey); + const client = this.createApiClient(authorizationHeader); + const docsPortalManagementController = new DocsPortalManagementController(client); + + try { + const stream = await this.generatePortalFromSyncEndpoint( + docsPortalManagementController, + params.sourceBuildInputZipFilePath + ); + return Result.success(stream); + } catch (error) { + return Result.failure(await this.handlePortalGenerationErrors(error, params)); + } + } + + private createAuthorizationHeader = (authInfo: AuthInfo | null, overrideAuthKey: string | null): string => { + const key = overrideAuthKey || authInfo?.authKey; + return `X-Auth-Key ${key ?? ""}`; + }; + + private createApiClient = (authorizationHeader: string): Client => { + return new Client({ + customHeaderAuthenticationCredentials: { + Authorization: authorizationHeader + }, + timeout: this.TIMEOUT + }); + }; + + private generatePortalFromSyncEndpoint = async ( + docsPortalManagementController: DocsPortalManagementController, + zippedBuildFilePath: string + ): Promise => { + const file = new FileWrapper(fs.createReadStream(zippedBuildFilePath)); + const response: ApiResponse = + await docsPortalManagementController.generateOnPremPortalViaBuildInput(this.CONTENT_TYPE, file); + + return response.result as NodeJS.ReadableStream; + }; + + private handlePortalGenerationErrors = async (error: unknown, params: GeneratePortalParams): Promise => { + if (error instanceof UnauthorizedResponseError) { + //401 + const body = await this.parseErrorResponse(error); + return getMessageInRedColor(body.message ?? "Unauthorized access"); + } else if (error instanceof ProblemDetailsError) { + //400 & 403 + const body = await this.parseErrorResponse(error); + const message = body.errors[Object.keys(body.errors)[0]][0]; + return getMessageInRedColor(body.title + "\n- " + message); + } else if (error instanceof ApiError && error.statusCode === 422) { + //422 + return await this.saveAndExtractErrorZipFile(error, params); + } else if (error instanceof ApiError && error.statusCode === 500) { + //500 + //TODO: Replace this message with the one returned by the API once we improve the messaging. + return getMessageInRedColor( + "An internal server error occurred. Please try again or reach out to our team at support@apimatic.io for help if your problem persists." + ); + } else { + return getMessageInRedColor(error instanceof Error ? error.message : String(error)); + } + }; + + private parseErrorResponse = async (error: unknown): Promise => { + if (error instanceof Error && "body" in error) { + const stream = (error as { body: NodeJS.ReadableStream }).body; + return await parseStreamBodyToJson(stream); + } + throw error; + }; + + private saveAndExtractErrorZipFile = async (error: ApiError, params: GeneratePortalParams): Promise => { + const data = error.body as NodeJS.ReadableStream; + const writeStream = fs.createWriteStream(params.generatedPortalArtifactsZipFilePath); + + //TODO: Extract zip to temp folder and only copy the the debug report. + return await new Promise((resolve, reject) => { + data + .pipe(writeStream) + .on("finish", async () => { + await extractZipFile(params.generatedPortalArtifactsZipFilePath, params.generatedPortalArtifactsFolderPath); + await deleteFile(params.generatedPortalArtifactsZipFilePath); + resolve( + getMessageInRedColor( + "An error occurred during portal generation due to an issue with the input. An error report has been written at the destination path: " + + params.generatedPortalArtifactsFolderPath + ) + ); + }) + .on("error", async () => { + reject( + getMessageInRedColor( + "An error occurred during portal generation due to an issue with the input. The error report could not be generated. Please try again later." + ) + ); + }); + }); + }; +} diff --git a/src/prompts/portal/generate.ts b/src/prompts/portal/generate.ts index c1d27dea..2e58b77f 100644 --- a/src/prompts/portal/generate.ts +++ b/src/prompts/portal/generate.ts @@ -3,65 +3,67 @@ import { isCancel } from "axios"; import { getMessageInRedColor } from "../../utils/utils"; export class PortalGeneratePrompts { - private readonly spin = spinner(); + private readonly spin = spinner(); - async existingDestinationPortalFolderPrompt(): Promise { - const useExistingFolder = await select({ - message: `The destination folder is not empty, do you want to overwrite the existing files?`, - options: [ - { value: "yes", label: "Yes"}, - { value: "no", label: "No"} - ] - }); + async overwriteExistingPortalArtifactsPrompt(): Promise { + const useExistingFolder = await select({ + message: `The destination folder is not empty, do you want to overwrite the existing files?`, + options: [ + { value: "yes", label: "Yes" }, + { value: "no", label: "No" } + ] + }); - if (isCancel(useExistingFolder)) { - cancel("Operation cancelled."); - return process.exit(1); - } + if (isCancel(useExistingFolder)) { + cancel("Operation cancelled."); + return process.exit(1); + } - if (useExistingFolder === "no") { - outro( - "Please enter a different destination folder or remove the existing files and try again." - ); - process.exit(0); - } + if (useExistingFolder === "no") { + outro("Please enter a different destination folder or remove the existing files and try again."); } - async existingDestinationPortalZipPrompt(): Promise { - const useExistingZip = await select({ - message: `A zip file already exists at the specified destination path, do you want to overwrite it?`, - options: [ - { value: "yes", label: "Yes"}, - { value: "no", label: "No"} - ] - }); + return useExistingFolder === "yes"; + } - if (isCancel(useExistingZip)) { - cancel("Operation cancelled."); - return process.exit(1); - } + async existingDestinationPortalZipPrompt(): Promise { + const useExistingZip = await select({ + message: `A zip file already exists at the specified destination path, do you want to overwrite it?`, + options: [ + { value: "yes", label: "Yes" }, + { value: "no", label: "No" } + ] + }); - if (useExistingZip === "no") { - outro( - "Please enter a different destination path or delete the existing zip file and try again." - ); - process.exit(0); - } + if (isCancel(useExistingZip)) { + cancel("Operation cancelled."); + return process.exit(1); } - displayPortalGenerationMessage(): void { - this.spin.start("Generating portal..."); - } - - displayPortalGenerationSuccessMessage(): void { - this.spin.stop("✅ Portal generated successfully."); + if (useExistingZip === "no") { + outro("Please enter a different destination path or delete the existing zip file and try again."); } - displayPortalGenerationErrorMessage(): void { - this.spin.stop(getMessageInRedColor(`Something went wrong while generating your portal.`)); - } + return useExistingZip === "yes"; + } - displayOutroMessage(generatedPortalPath: string): void { - outro(`The generated portal can be found at ${generatedPortalPath}`); - } + displayPortalGenerationMessage(): void { + this.spin.start("Generating portal..."); + } + + displayPortalGenerationSuccessMessage(): void { + this.spin.stop("✅ Portal generated successfully."); + } + + displayPortalGenerationErrorMessage(): void { + this.spin.stop(getMessageInRedColor(`Something went wrong while generating your portal.`)); + } + + displayOutroMessage(generatedPortalPath: string): void { + outro(`The generated portal can be found at ${generatedPortalPath}`); + } + + logError(error: string): void { + outro(error); + } } \ No newline at end of file diff --git a/src/sdk/authProvider.ts b/src/sdk/authProvider.ts new file mode 100644 index 00000000..a0de3a41 --- /dev/null +++ b/src/sdk/authProvider.ts @@ -0,0 +1,26 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + compositeAuthenticationProvider, + customHeaderAuthenticationProvider, +} from './authentication'; +import { Configuration } from './configuration'; + +export function createAuthProviderFromConfig(config: Partial) { + const authConfig = { + authorization: + config.customHeaderAuthenticationCredentials && + customHeaderAuthenticationProvider( + config.customHeaderAuthenticationCredentials + ), + }; + + return compositeAuthenticationProvider< + keyof typeof authConfig, + typeof authConfig + >(authConfig); +} diff --git a/src/sdk/authentication.ts b/src/sdk/authentication.ts new file mode 100644 index 00000000..8d775190 --- /dev/null +++ b/src/sdk/authentication.ts @@ -0,0 +1,7 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +export * from '@apimatic/authentication-adapters'; diff --git a/src/sdk/client.ts b/src/sdk/client.ts new file mode 100644 index 00000000..4fde72bd --- /dev/null +++ b/src/sdk/client.ts @@ -0,0 +1,151 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { createAuthProviderFromConfig } from './authProvider'; +import { + AuthParams, + ClientInterface, + SdkRequestBuilder, + SdkRequestBuilderFactory, + Server, +} from './clientInterface'; +import { Configuration, Environment } from './configuration'; +import { + DEFAULT_CONFIGURATION, + DEFAULT_RETRY_CONFIG, +} from './defaultConfiguration'; +import { ApiError } from './core'; +import { setHeader } from './core'; +import { updateUserAgent } from './core'; +import { + AbortError, + AuthenticatorInterface, + createRequestBuilderFactory, + HttpClientInterface, + RetryConfiguration, +} from './core'; +import { HttpClient } from './clientAdapter'; + +export class Client implements ClientInterface { + private _config: Readonly; + private _timeout: number; + private _retryConfig: RetryConfiguration; + private _requestBuilderFactory: SdkRequestBuilderFactory; + private _userAgent: string; + + constructor(config?: Partial) { + this._config = { + ...DEFAULT_CONFIGURATION, + ...config, + }; + this._retryConfig = { + ...DEFAULT_RETRY_CONFIG, + ...this._config.httpClientOptions?.retryConfig, + }; + this._timeout = + typeof this._config.httpClientOptions?.timeout != 'undefined' + ? this._config.httpClientOptions.timeout + : this._config.timeout; + const clonedConfig = { + ...this._config, + customHeaderAuthenticationCredentials: this._config + .customHeaderAuthenticationCredentials || { + Authorization: this._config.authorization || '', + }, + }; + + this._userAgent = updateUserAgent('APIMatic CLI'); + this._requestBuilderFactory = createRequestHandlerFactory( + (server) => getBaseUri(server, this._config), + createAuthProviderFromConfig(clonedConfig), + new HttpClient(AbortError, { + timeout: this._timeout, + clientConfigOverrides: this._config.unstable_httpClientOptions, + httpAgent: this._config.httpClientOptions?.httpAgent, + httpsAgent: this._config.httpClientOptions?.httpsAgent, + }), + [ + withErrorHandlers, + withUserAgent(this._userAgent), + withAuthenticationByDefault, + ], + this._retryConfig + ); + } + + public getRequestBuilderFactory(): SdkRequestBuilderFactory { + return this._requestBuilderFactory; + } + + /** + * Clone this client and override given configuration options + */ + public withConfiguration(config: Partial) { + return new Client({ ...this._config, ...config }); + } +} + +function createHttpClientAdapter(client: HttpClient): HttpClientInterface { + return async (request, requestOptions) => { + return await client.executeRequest(request, requestOptions); + }; +} + +function getBaseUri(server: Server = 'default', config: Configuration): string { + if (config.environment === Environment.Production) { + if (server === 'default') { + return 'https://api.apimatic.io'; + } + } + throw new Error('Could not get Base URL. Invalid environment or server.'); +} + +function createRequestHandlerFactory( + baseUrlProvider: (server?: Server) => string, + authProvider: AuthenticatorInterface, + httpClient: HttpClient, + addons: ((rb: SdkRequestBuilder) => void)[], + retryConfig: RetryConfiguration +): SdkRequestBuilderFactory { + const requestBuilderFactory = createRequestBuilderFactory( + createHttpClientAdapter(httpClient), + baseUrlProvider, + ApiError, + authProvider, + retryConfig + ); + + return tap(requestBuilderFactory, ...addons); +} + +function tap( + requestBuilderFactory: SdkRequestBuilderFactory, + ...callback: ((requestBuilder: SdkRequestBuilder) => void)[] +): SdkRequestBuilderFactory { + return (...args) => { + const requestBuilder = requestBuilderFactory(...args); + callback.forEach((c) => c(requestBuilder)); + return requestBuilder; + }; +} + +function withErrorHandlers(rb: SdkRequestBuilder) { + rb.defaultToError(ApiError); +} + +function withUserAgent(userAgent: string) { + return (rb: SdkRequestBuilder) => { + rb.interceptRequest((request) => { + const headers = request.headers ?? {}; + setHeader(headers, 'user-agent', userAgent); + return { ...request, headers }; + }); + }; +} + +function withAuthenticationByDefault(rb: SdkRequestBuilder) { + rb.authenticate([{ authorization: true }]); +} diff --git a/src/sdk/clientAdapter.ts b/src/sdk/clientAdapter.ts new file mode 100644 index 00000000..b9c7096b --- /dev/null +++ b/src/sdk/clientAdapter.ts @@ -0,0 +1,7 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +export * from '@apimatic/axios-client-adapter'; diff --git a/src/sdk/clientInterface.ts b/src/sdk/clientInterface.ts new file mode 100644 index 00000000..df8e394d --- /dev/null +++ b/src/sdk/clientInterface.ts @@ -0,0 +1,27 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { createAuthProviderFromConfig } from './authProvider'; +import { AuthenticatorInterface, RequestBuilderFactory } from './core'; + +export interface ClientInterface { + getRequestBuilderFactory(): SdkRequestBuilderFactory; +} + +export type SdkRequestBuilderFactory = RequestBuilderFactory< + Server, + AuthParams +>; + +export type SdkRequestBuilder = ReturnType; + +export type Server = 'default'; + +export type AuthParams = ReturnType< + typeof createAuthProviderFromConfig +> extends AuthenticatorInterface + ? X + : never; diff --git a/src/sdk/configuration.ts b/src/sdk/configuration.ts new file mode 100644 index 00000000..754c5227 --- /dev/null +++ b/src/sdk/configuration.ts @@ -0,0 +1,25 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { HttpClientOptions } from './clientAdapter'; + +/** An interface for all configuration parameters required by the SDK. */ +export interface Configuration { + timeout: number; + environment: Environment; + /** @deprecated use customHeaderAuthenticationCredentials field instead */ + authorization?: string; + customHeaderAuthenticationCredentials?: { + 'Authorization': string; + }; + httpClientOptions?: Partial; + unstable_httpClientOptions?: any; +} + +/** Environments available for API */ +export enum Environment { + Production = 'production', +} diff --git a/src/sdk/controllers/aPIValidationExternalApisController.ts b/src/sdk/controllers/aPIValidationExternalApisController.ts new file mode 100644 index 00000000..70b097b8 --- /dev/null +++ b/src/sdk/controllers/aPIValidationExternalApisController.ts @@ -0,0 +1,79 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { ApiResponse, FileWrapper, RequestOptions } from '../core'; +import { + ApiValidationSummary, + apiValidationSummarySchema, +} from '../models/apiValidationSummary'; +import { ContentType, contentTypeSchema } from '../models/contentType'; +import { string } from '../schema'; +import { BaseController } from './baseController'; +import { ApiError } from '@apimatic/core'; + +export class APIValidationExternalApisController extends BaseController { + /** + * Validate an API by uploading the API specification file. + * + * You can also specify [API Metadata](https://docs.apimatic.io/manage-apis/apimatic-metadata) while + * validating the API using this endpoint. When specifying Metadata, the uploaded file will be a zip + * file containing the API specification file and the `APIMATIC-META` json file. + * + * @param contentType + * @param file The API specification file.
The type of the specification file should be + * any of the [supported formats](https://docs.apimatic.io/api- + * transformer/overview-transformer#supported-input-formats). + * @return Response from the API call + */ + async validateAPIViaFile( + contentType: ContentType, + file: FileWrapper, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('POST', '/validation/validate-via-file'); + req.baseUrl('default'); + const mapped = req.prepareArgs({ + contentType: [contentType, contentTypeSchema], + }); + req.header('Content-Type', mapped.contentType); + req.formData({ file: file }); + req.throwOn(400, ApiError, 'Bad Request'); + req.throwOn(401, ApiError, 'Unauthenticated'); + req.throwOn(403, ApiError, 'Forbidden'); + req.throwOn(500, ApiError, 'Internal Server Error'); + req.authenticate([{ authorization: true }]); + return req.callAsJson(apiValidationSummarySchema, requestOptions); + } + + /** + * Validate an API by providing the URL of the API specification file. + * + * You can also specify [API Metadata](https://docs.apimatic.io/manage-apis/apimatic-metadata) while + * validating the API using this endpoint. When specifying Metadata, the URL provided will be that of a + * zip file containing the API specification file and the `APIMATIC-META` json file. + * + * @param descriptionUrl The URL for the API specification file.

**Note:** This URL should be + * publicly accessible. + * @return Response from the API call + */ + async validateAPIViaURL( + descriptionUrl: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET', '/validation/validate-via-url'); + req.baseUrl('default'); + const mapped = req.prepareArgs({ + descriptionUrl: [descriptionUrl, string()], + }); + req.query('descriptionUrl', mapped.descriptionUrl); + req.throwOn(400, ApiError, 'Bad Request'); + req.throwOn(401, ApiError, 'Unauthenticated'); + req.throwOn(403, ApiError, 'Forbidden'); + req.throwOn(500, ApiError, 'Internal Server Error'); + req.authenticate([{ authorization: true }]); + return req.callAsJson(apiValidationSummarySchema, requestOptions); + } +} diff --git a/src/sdk/controllers/aPIValidationImportedApisController.ts b/src/sdk/controllers/aPIValidationImportedApisController.ts new file mode 100644 index 00000000..31e29f33 --- /dev/null +++ b/src/sdk/controllers/aPIValidationImportedApisController.ts @@ -0,0 +1,66 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { ApiResponse, RequestOptions } from '../core'; +import { + ApiValidationSummary, + apiValidationSummarySchema, +} from '../models/apiValidationSummary'; +import { + DocsValidationSummary, + docsValidationSummarySchema, +} from '../models/docsValidationSummary'; +import { string } from '../schema'; +import { BaseController } from './baseController'; +import { ApiError } from '@apimatic/core'; + +export class APIValidationImportedApisController extends BaseController { + /** + * Validate an API using the [APIMatic Validator](https://docs.apimatic.io/generate-sdks/overview- + * sdks#step-2-api-validation). + * + * @param apiEntityId The ID of the API Entity to perform validation for. + * @return Response from the API call + */ + async validateAPI( + apiEntityId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + req.baseUrl('default'); + const mapped = req.prepareArgs({ apiEntityId: [apiEntityId, string()] }); + req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/api-validation-summary`; + req.throwOn(400, ApiError, 'Bad Request'); + req.throwOn(403, ApiError, 'Forbidden'); + req.throwOn(404, ApiError, 'API not found'); + req.throwOn(500, ApiError, 'Internal Server Error'); + req.authenticate([{ authorization: true }]); + return req.callAsJson(apiValidationSummarySchema, requestOptions); + } + + /** + * Validate an API for documentation generation. This process validates the API for missing examples or + * missing descriptions. + * + * @param apiEntityId The ID of the API Entity to perform validation for. + * @return Response from the API call + */ + async validateAPIForDocs( + apiEntityId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + req.baseUrl('default'); + const mapped = req.prepareArgs({ apiEntityId: [apiEntityId, string()] }); + req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/docs-validation-summary`; + req.throwOn(400, ApiError, 'Bad Request'); + req.throwOn(403, ApiError, 'Forbidden'); + req.throwOn(404, ApiError, 'API not found'); + req.throwOn(500, ApiError, 'Internal Server Error'); + req.authenticate([{ authorization: true }]); + return req.callAsJson(docsValidationSummarySchema, requestOptions); + } +} diff --git a/src/sdk/controllers/apisManagementController.ts b/src/sdk/controllers/apisManagementController.ts new file mode 100644 index 00000000..0dee825c --- /dev/null +++ b/src/sdk/controllers/apisManagementController.ts @@ -0,0 +1,277 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { ApiResponse, FileWrapper, RequestOptions } from '../core'; +import { Accept, acceptSchema } from '../models/accept'; +import { Accept2, accept2Schema } from '../models/accept2'; +import { ApiEntity, apiEntitySchema } from '../models/apiEntity'; +import { ContentType, contentTypeSchema } from '../models/contentType'; +import { ExportFormats, exportFormatsSchema } from '../models/exportFormats'; +import { + ImportApiVersionViaUrlRequest, + importApiVersionViaUrlRequestSchema, +} from '../models/importApiVersionViaUrlRequest'; +import { + ImportApiViaUrlRequest, + importApiViaUrlRequestSchema, +} from '../models/importApiViaUrlRequest'; +import { + InplaceImportApiViaUrlRequest, + inplaceImportApiViaUrlRequestSchema, +} from '../models/inplaceImportApiViaUrlRequest'; +import { string } from '../schema'; +import { BaseController } from './baseController'; +import { ApiError } from '@apimatic/core'; + +export class ApisManagementController extends BaseController { + /** + * Import an API into the APIMatic Dashboard by uploading the API specification file. + * + * You can also specify [API Metadata](https://docs.apimatic.io/manage-apis/apimatic-metadata) while + * importing the API using this endpoint. When specifying Metadata, the uploaded file will be a zip + * file containing the API specification file and the `APIMATIC-META` json file. + * + * @param contentType + * @param file The API specification file.
The type of the specification file should be + * any of the [supported formats](https://docs.apimatic.io/api- + * transformer/overview-transformer#supported-input-formats). + * @return Response from the API call + */ + async importAPIViaFile( + contentType: ContentType, + file: FileWrapper, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('POST', '/api-entities/import-via-file'); + const mapped = req.prepareArgs({ + contentType: [contentType, contentTypeSchema], + }); + req.header('Content-Type', mapped.contentType); + req.formData({ file: file }); + req.throwOn(400, ApiError, 'Bad Request'); + req.throwOn(412, ApiError, 'Precondition Failed'); + req.throwOn(422, ApiError, 'Unprocessable Entity'); + req.throwOn(500, ApiError, 'Internal Server Error'); + req.authenticate([{ authorization: true }]); + return req.callAsJson(apiEntitySchema, requestOptions); + } + + /** + * Import an API into the APIMatic Dashboard by providing the URL of the API specification file. + * + * You can also specify [API Metadata](https://docs.apimatic.io/manage-apis/apimatic-metadata) while + * importing the API using this endpoint. When specifying Metadata, the URL provided will be that of a + * zip file containing the API specification file and the `APIMATIC-META` json file. + * + * @param body Request Body + * @return Response from the API call + */ + async importAPIViaURL( + body: ImportApiViaUrlRequest, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('POST', '/api-entities/import-via-url'); + const mapped = req.prepareArgs({ + body: [body, importApiViaUrlRequestSchema], + }); + req.header( + 'Content-Type', + 'application/vnd.apimatic.apiEntityUrlImportDto.v1+json' + ); + req.json(mapped.body); + req.throwOn(400, ApiError, 'Bad Request'); + req.throwOn(412, ApiError, 'Precondition Failed'); + req.throwOn(422, ApiError, 'Unprocessable Entity'); + req.throwOn(500, ApiError, 'Internal Server Error'); + req.authenticate([{ authorization: true }]); + return req.callAsJson(apiEntitySchema, requestOptions); + } + + /** + * Import a new version for an API, against an existing API Group, by uploading the API specification + * file. + * + * You can also specify [API Metadata](https://docs.apimatic.io/manage-apis/apimatic-metadata) while + * importing the API version using this endpoint. When specifying Metadata, the uploaded file will be a + * zip file containing the API specification file and the `APIMATIC-META` json file. + * + * @param apiGroupId The ID of the API Group for which to import a new API version. + * @param accept + * @param versionOverride The version number with which the new API version will be imported. This + * version number will override the version specified in the API specification + * file.
APIMatic recommends versioning the API with the [versioning + * scheme](https://docs.apimatic.io/define-apis/basic-settings/#version) + * documented in the docs. + * @param file The API specification file.
The type of the specification file should + * be any of the [supported formats](https://docs.apimatic.io/api- + * transformer/overview-transformer#supported-input-formats). + * @return Response from the API call + */ + async importNewAPIVersionViaFile( + apiGroupId: string, + accept: Accept, + versionOverride: string, + file: FileWrapper, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('POST'); + const mapped = req.prepareArgs({ + apiGroupId: [apiGroupId, string()], + accept: [accept, acceptSchema], + versionOverride: [versionOverride, string()], + }); + req.header('Accept', mapped.accept); + req.formData({ version_override: mapped.versionOverride, file: file }); + req.appendTemplatePath`/api-groups/${mapped.apiGroupId}/api-entities/import-via-file`; + req.authenticate([{ authorization: true }]); + return req.callAsJson(apiEntitySchema, requestOptions); + } + + /** + * Import a new version for an API, against an existing API Group, by providing the URL of the API + * specification file. + * + * You can also specify [API Metadata](https://docs.apimatic.io/manage-apis/apimatic-metadata) while + * importing the API version using this endpoint. When specifying Metadata, the URL provided will be + * that of a zip file containing the API specification file and the `APIMATIC-META` json file. + * + * @param apiGroupId The ID of the API Group for which to import a new API + * version. + * @param accept + * @param body Request Body + * @return Response from the API call + */ + async importNewAPIVersionViaURL( + apiGroupId: string, + accept: Accept, + body: ImportApiVersionViaUrlRequest, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('POST'); + const mapped = req.prepareArgs({ + apiGroupId: [apiGroupId, string()], + accept: [accept, acceptSchema], + body: [body, importApiVersionViaUrlRequestSchema], + }); + req.header('Accept', mapped.accept); + req.header( + 'Content-Type', + 'application/vnd.apimatic.apiGroupApiEntityUrlImportDto.v1+json' + ); + req.json(mapped.body); + req.appendTemplatePath`/api-groups/${mapped.apiGroupId}/api-entities/import-via-url`; + req.authenticate([{ authorization: true }]); + return req.callAsJson(apiEntitySchema, requestOptions); + } + + /** + * Replace an API version of an API Group, by uploading the API specification file that will replace + * the current version. + * + * You can also specify [API Metadata](https://docs.apimatic.io/manage-apis/apimatic-metadata) while + * importing the API version using this endpoint. When specifying Metadata, the uploaded file will be a + * zip file containing the API specification file and the `APIMATIC-META` json file. + * + * @param apiEntityId The ID of the API Entity to replace. + * @param accept + * @param file The API specification file.
The type of the specification file should be + * any of the [supported formats](https://docs.apimatic.io/api- + * transformer/overview-transformer#supported-input-formats). + * @return Response from the API call + */ + async inplaceAPIImportViaFile( + apiEntityId: string, + accept: Accept2, + file: FileWrapper, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('PUT'); + const mapped = req.prepareArgs({ + apiEntityId: [apiEntityId, string()], + accept: [accept, accept2Schema], + }); + req.header('Accept', mapped.accept); + req.formData({ file: file }); + req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/import-via-file`; + req.authenticate([{ authorization: true }]); + return req.call(requestOptions); + } + + /** + * Replace an API version of an API Group, by providing the URL of the API specification file that will + * replace the current version. + * + * You can also specify [API Metadata](https://docs.apimatic.io/manage-apis/apimatic-metadata) while + * importing the API version using this endpoint. When specifying Metadata, the URL provided will be + * that of a zip file containing the API specification file and the `APIMATIC-META` json file. + * + * @param apiEntityId The ID of the API Entity to replace. + * @param body Request Body + * @return Response from the API call + */ + async inplaceAPIImportViaURL( + apiEntityId: string, + body: InplaceImportApiViaUrlRequest, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('PUT'); + const mapped = req.prepareArgs({ + apiEntityId: [apiEntityId, string()], + body: [body, inplaceImportApiViaUrlRequestSchema], + }); + req.header( + 'Content-Type', + 'application/vnd.apimatic.apiEntityUrlImportDto.v1+json' + ); + req.json(mapped.body); + req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/import-via-url`; + req.authenticate([{ authorization: true }]); + return req.call(requestOptions); + } + + /** + * Fetch an API Entity. + * + * @param apiEntityId The ID of the API Entity to fetch. + * @return Response from the API call + */ + async fetchAPIEntity( + apiEntityId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ apiEntityId: [apiEntityId, string()] }); + req.appendTemplatePath`/api-entities/${mapped.apiEntityId}`; + req.authenticate([{ authorization: true }]); + return req.callAsJson(apiEntitySchema, requestOptions); + } + + /** + * Download the API Specification file for a an API Version in any of the API Specification formats + * supported by APIMatic. + * + * @param apiEntityId The ID of the API Entity to download. + * @param format The format in which to download the API.
The format can be any of the + * [supported formats](https://docs.apimatic.io/api-transformer/overview- + * transformer#supported-input-formats). + * @return Response from the API call + */ + async downloadApisPecification( + apiEntityId: string, + format: ExportFormats, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ + apiEntityId: [apiEntityId, string()], + format: [format, exportFormatsSchema], + }); + req.query('format', mapped.format); + req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/api-description`; + req.authenticate([{ authorization: true }]); + return req.callAsStream(requestOptions); + } +} diff --git a/src/sdk/controllers/baseController.ts b/src/sdk/controllers/baseController.ts new file mode 100644 index 00000000..6dfb201e --- /dev/null +++ b/src/sdk/controllers/baseController.ts @@ -0,0 +1,17 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { ClientInterface, SdkRequestBuilderFactory } from '../clientInterface'; + +/** Base class for all controllers */ +export class BaseController { + /** Create a request builder */ + protected createRequest: SdkRequestBuilderFactory; + + constructor(client: ClientInterface) { + this.createRequest = client.getRequestBuilderFactory(); + } +} diff --git a/src/sdk/controllers/codeGenerationExternalApisController.ts b/src/sdk/controllers/codeGenerationExternalApisController.ts new file mode 100644 index 00000000..acfa981e --- /dev/null +++ b/src/sdk/controllers/codeGenerationExternalApisController.ts @@ -0,0 +1,184 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { ApiResponse, FileWrapper, RequestOptions } from '../core'; +import { + GenerateSdkViaUrlRequest, + generateSdkViaUrlRequestSchema, +} from '../models/generateSdkViaUrlRequest'; +import { Platforms, platformsSchema } from '../models/platforms'; +import { + UserCodeGeneration, + userCodeGenerationSchema, +} from '../models/userCodeGeneration'; +import { array, string } from '../schema'; +import { BaseController } from './baseController'; + +export class CodeGenerationExternalApisController extends BaseController { + /** + * Generate an SDK for an API by by uploading the API specification file. + * + * This endpoint generates and then uploads the generated SDK to APIMatic's cloud storage. An ID for + * the generation performed is returned as part of the response. + * + * This endpoint does not import an API into APIMatic. + * + * @param file The API specification file.
The type of the specification file should be any of + * the [supported formats](https://docs.apimatic.io/api-transformer/overview- + * transformer#supported-input-formats). + * @param template The structure contains platforms that APIMatic CodeGen can generate SDKs and Docs + * in. + * @return Response from the API call + */ + async generateSDKViaFile( + file: FileWrapper, + template: Platforms, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest( + 'POST', + '/code-generations/generate-via-file' + ); + const mapped = req.prepareArgs({ template: [template, platformsSchema] }); + req.formData({ file: file, template: mapped.template }); + req.authenticate([{ authorization: true }]); + return req.callAsJson(userCodeGenerationSchema, requestOptions); + } + + /** + * Generate an SDK for an API by providing the URL of the API specification file. + * + * This endpoint generates and then uploads the generated SDK to APIMatic's cloud storage. An ID for + * the generation performed is returned as part of the response. + * + * This endpoint does not import an API into APIMatic. + * + * @param body Request Body + * @return Response from the API call + */ + async generateSDKViaURL( + body: GenerateSdkViaUrlRequest, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest( + 'POST', + '/code-generations/generate-via-url' + ); + const mapped = req.prepareArgs({ + body: [body, generateSdkViaUrlRequestSchema], + }); + req.header( + 'Content-Type', + 'application/vnd.apimatic.userCodeGenerationDto.v1+json' + ); + req.json(mapped.body); + req.authenticate([{ authorization: true }]); + return req.callAsJson(userCodeGenerationSchema, requestOptions); + } + + /** + * Download the SDK generated via the Generate SDK endpoints. + * + * @param codegenId The ID of code generation received in the response of the [Generate SDK Via + * File](https://www.apimatic.io/api-docs- + * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api-endpoints/code-generation- + * external-apis/generate-sdk-via-file) or [Generate SDK Via URL ](https://www.apimatic. + * io/api-docs-preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api-endpoints/code- + * generation-external-apis/generate-sdk-via-url) calls. + * @return Response from the API call + */ + async downloadSDK( + codegenId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ codegenId: [codegenId, string()] }); + req.appendTemplatePath`/code-generations/${mapped.codegenId}/generated-sdk`; + req.authenticate([{ authorization: true }]); + return req.callAsStream(requestOptions); + } + + /** + * Get a list of all SDK generations performed with external APIs via the Generate SDK endpoints. + * + * @return Response from the API call + */ + async listAllCodeGenerations( + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET', '/code-generations'); + req.authenticate([{ authorization: true }]); + return req.callAsJson(array(userCodeGenerationSchema), requestOptions); + } + + /** + * Download the API Specification file used as input for a specific SDK generation performed via the + * Generate SDK endpoints. + * + * @param codegenId The ID of the code generation to download the API specification for. The code + * generation ID is received in the response of the [Generate SDK Via File](https://www. + * apimatic.io/api-docs-preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api- + * endpoints/code-generation-external-apis/generate-sdk-via-file) or [Generate SDK Via + * URL ](https://www.apimatic.io/api-docs- + * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api-endpoints/code-generation- + * external-apis/generate-sdk-via-url) calls + * @return Response from the API call + */ + async downloadInputFile( + codegenId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ codegenId: [codegenId, string()] }); + req.appendTemplatePath`/code-generations/${mapped.codegenId}/input-file`; + req.authenticate([{ authorization: true }]); + return req.callAsStream(requestOptions); + } + + /** + * Get details on an SDK generation performed for an external API via the Generate SDK endpoints. + * + * @param codegenId The ID of the code generation to fetch. The code generation ID is received in the + * response of the [Generate SDK Via File](https://www.apimatic.io/api-docs- + * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api-endpoints/code-generation- + * external-apis/generate-sdk-via-file) or [Generate SDK Via URL ](https://www.apimatic. + * io/api-docs-preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api-endpoints/code- + * generation-external-apis/generate-sdk-via-url) calls. + * @return Response from the API call + */ + async getACodeGeneration( + codegenId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ codegenId: [codegenId, string()] }); + req.appendTemplatePath`/code-generations/${mapped.codegenId}`; + req.authenticate([{ authorization: true }]); + return req.callAsJson(userCodeGenerationSchema, requestOptions); + } + + /** + * Delete an SDK generation performed for an API via the Generate SDK endpoints. + * + * @param codegenId The ID of the code generation to delete. The code generation ID is received in the + * response of the [Generate SDK Via File](https://www.apimatic.io/api-docs- + * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api-endpoints/code-generation- + * external-apis/generate-sdk-via-file) or [Generate SDK Via URL ](https://www.apimatic. + * io/api-docs-preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api-endpoints/code- + * generation-external-apis/generate-sdk-via-url) calls. + * @return Response from the API call + */ + async deleteCodeGeneration1( + codegenId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('DELETE'); + const mapped = req.prepareArgs({ codegenId: [codegenId, string()] }); + req.appendTemplatePath`/code-generations/${mapped.codegenId}`; + req.authenticate([{ authorization: true }]); + return req.call(requestOptions); + } +} diff --git a/src/sdk/controllers/codeGenerationImportedApisController.ts b/src/sdk/controllers/codeGenerationImportedApisController.ts new file mode 100644 index 00000000..1bc44c71 --- /dev/null +++ b/src/sdk/controllers/codeGenerationImportedApisController.ts @@ -0,0 +1,136 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { ApiResponse, RequestOptions } from '../core'; +import { + APIEntityCodeGeneration, + aPIEntityCodeGenerationSchema, +} from '../models/aPIEntityCodeGeneration'; +import { Platforms, platformsSchema } from '../models/platforms'; +import { array, string } from '../schema'; +import { BaseController } from './baseController'; + +export class CodeGenerationImportedApisController extends BaseController { + /** + * Generate an SDK for an API Version. + * + * This endpoint generates and then uploads the generated SDK to APIMatic's cloud storage. An ID for + * the generation performed is returned as part of the response. + * + * @param apiEntityId The ID of the API Entity to generate the SDK for. + * @param template The structure contains platforms that APIMatic CodeGen can generate SDKs and + * Docs in. + * @return Response from the API call + */ + async generateSDK( + apiEntityId: string, + template: Platforms, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('POST'); + const mapped = req.prepareArgs({ + apiEntityId: [apiEntityId, string()], + template: [template, platformsSchema], + }); + req.header('Content-Type', 'application/x-www-form-urlencoded'); + req.form({ template: mapped.template }); + req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/code-generations/generate`; + req.authenticate([{ authorization: true }]); + return req.callAsJson(aPIEntityCodeGenerationSchema, requestOptions); + } + + /** + * Download the SDK generated via the Generate SDK endpoint. + * + * @param apiEntityId The ID of the API Entity for which the SDK was generated. + * @param codegenId The ID of code generation received in the response of the [SDK generation + * call](https://www.apimatic.io/api-docs- + * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api-endpoints/code- + * generation-imported-apis/generate-sdk). + * @return Response from the API call + */ + async downloadSDK( + apiEntityId: string, + codegenId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ + apiEntityId: [apiEntityId, string()], + codegenId: [codegenId, string()], + }); + req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/code-generations/${mapped.codegenId}/generated-sdk`; + req.authenticate([{ authorization: true }]); + return req.callAsStream(requestOptions); + } + + /** + * Get a list of all SDK generations done against an API Version via the Generate SDK endpoint. + * + * @param apiEntityId The ID of the API Entity for which to list code generations. + * @return Response from the API call + */ + async listAllCodeGenerations( + apiEntityId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ apiEntityId: [apiEntityId, string()] }); + req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/code-generations`; + req.authenticate([{ authorization: true }]); + return req.callAsJson(array(aPIEntityCodeGenerationSchema), requestOptions); + } + + /** + * Get details on an SDK generation performed via the Generate SDK endpoint. + * + * @param apiEntityId The ID of the API Entity to fetch the code generation for. + * @param codegenId The ID of the code generation to fetch. The code generation ID is received in the + * response of the [SDK generation call](https://www.apimatic.io/api-docs- + * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api-endpoints/code- + * generation-imported-apis/generate-sdk). + * @return Response from the API call + */ + async getACodeGeneration( + apiEntityId: string, + codegenId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ + apiEntityId: [apiEntityId, string()], + codegenId: [codegenId, string()], + }); + req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/code-generations/${mapped.codegenId}`; + req.authenticate([{ authorization: true }]); + return req.callAsJson(aPIEntityCodeGenerationSchema, requestOptions); + } + + /** + * Delete an SDK generation performed for an API Version via the Generate SDK endpoint. + * + * @param apiEntityId The ID of the API Entity to delete the code generation for. + * @param codegenId The ID of the code generation to delete. The code generation ID is received in the + * response of the [SDK generation call](https://www.apimatic.io/api-docs- + * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api-endpoints/code- + * generation-imported-apis/generate-sdk). + * @return Response from the API call + */ + async deleteCodeGeneration( + apiEntityId: string, + codegenId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('DELETE'); + const mapped = req.prepareArgs({ + apiEntityId: [apiEntityId, string()], + codegenId: [codegenId, string()], + }); + req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/code-generations/${mapped.codegenId}`; + req.authenticate([{ authorization: true }]); + return req.call(requestOptions); + } +} diff --git a/src/sdk/controllers/docsPortalGenerationAsyncController.ts b/src/sdk/controllers/docsPortalGenerationAsyncController.ts new file mode 100644 index 00000000..ea2841e1 --- /dev/null +++ b/src/sdk/controllers/docsPortalGenerationAsyncController.ts @@ -0,0 +1,102 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { ApiResponse, FileWrapper, RequestOptions } from '../core'; +import { ContentType, contentTypeSchema } from '../models/contentType'; +import { + PortalGenerationAsyncResponse, + portalGenerationAsyncResponseSchema, +} from '../models/portalGenerationAsyncResponse'; +import { + PortalGenerationStatusResponse, + portalGenerationStatusResponseSchema, +} from '../models/portalGenerationStatusResponse'; +import { optional, string } from '../schema'; +import { BaseController } from './baseController'; +import { ApiError } from '@apimatic/core'; + +export class DocsPortalGenerationAsyncController extends BaseController { + /** + * Create an async On-premise Documentation Portal Generation request by providing a Portal Build + * Input + * + * @param contentType + * @param file The input file to the Portal Generator. Must contain the build file. + * @param xAPIMaticCallbackUrl Optional header containing callback url. This url will be called by + * the server once the portal generation completes + * @return Response from the API call + */ + async generateOnPremPortalViaBuildInputAsync( + contentType: ContentType, + file: FileWrapper, + xAPIMaticCallbackUrl?: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('POST', '/portal/v2'); + const mapped = req.prepareArgs({ + contentType: [contentType, contentTypeSchema], + xAPIMaticCallbackUrl: [xAPIMaticCallbackUrl, optional(string())], + }); + req.header('Content-Type', mapped.contentType); + req.header('X-APIMatic-CallbackUrl', mapped.xAPIMaticCallbackUrl); + req.formData({ file: file }); + req.throwOn(400, ApiError, 'Bad Request'); + req.throwOn(401, ApiError, 'Unauthorized'); + req.throwOn(402, ApiError, 'Subscription Issue'); + req.authenticate([{ authorization: true }]); + return req.callAsJson(portalGenerationAsyncResponseSchema, requestOptions); + } + + /** + * Get the status of a portal generation request + * + * @param id + * @return Response from the API call + */ + async getPortalGenerationStatus( + id: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ id: [id, string()] }); + req.appendTemplatePath`/portal/v2/${mapped.id}/status`; + req.throwOn(400, ApiError, 'Bad Request'); + req.throwOn(401, ApiError, 'Unauthorized'); + req.throwOn(402, ApiError, 'Subscription Issue'); + req.authenticate([{ authorization: true }]); + return req.callAsJson(portalGenerationStatusResponseSchema, requestOptions); + } + + /** + * Downloads the portal artifacts. The generated artifacts include: + * + * + * 1. SDKs + * + * 2. Docs + * + * 3. API Specification files + * + * + * The endpoint returns a zip file that contains a static Site and can be hosted on any Web Server. + * + * @param id + * @return Response from the API call + */ + async downloadGeneratedPortal( + id: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ id: [id, string()] }); + req.appendTemplatePath`/portal/v2/${mapped.id}/download`; + req.throwOn(400, ApiError, 'Bad Request'); + req.throwOn(401, ApiError, 'Unauthorized'); + req.throwOn(402, ApiError, 'Subscription Issue'); + req.authenticate([{ authorization: true }]); + return req.callAsStream(requestOptions); + } +} diff --git a/src/sdk/controllers/docsPortalManagementController.ts b/src/sdk/controllers/docsPortalManagementController.ts new file mode 100644 index 00000000..cec8625f --- /dev/null +++ b/src/sdk/controllers/docsPortalManagementController.ts @@ -0,0 +1,221 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { ApiResponse, FileWrapper, RequestOptions } from '../core'; +import { Accept3, accept3Schema } from '../models/accept3'; +import { ContentType, contentTypeSchema } from '../models/contentType'; +import { array, optional, string, unknown } from '../schema'; +import { BaseController } from './baseController'; +import { ApiError } from '@apimatic/core'; +import { ProblemDetailsError } from '../errors/problemDetailsError'; +import { UnauthorizedResponseError } from '../errors/unauthorizedResponseError'; + +export class DocsPortalManagementController extends BaseController { + /** + * Publish artifacts for a Hosted Portal. + * + * This endpoint regenerates all the artifacts for a hosted portal and uploads them to APIMatic's cloud + * storage, from where the Portal fetches them. These artifacts include: + * + * 1. SDKs + * 2. Docs + * 3. API Specification files + * + * Call this endpoint to update your Hosted Portal after you update an API Entity via any of the Import + * API Endpoints. + * + * __**Note: If you have an embedded portal against the same API Entity, artifacts for that portal will + * get updated as well.**__ + * + * @param apiEntityId The ID of the API Entity to update the portal artifacts for. + * @return Response from the API call + */ + async publishHostedPortal( + apiEntityId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('PUT'); + const mapped = req.prepareArgs({ apiEntityId: [apiEntityId, string()] }); + req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/hosted-portal`; + req.authenticate([{ authorization: true }]); + return req.call(requestOptions); + } + + /** + * Publish artifacts for an Embedded Portal and get the Portal Embed script. + * + * This endpoint regenerates all the artifacts for an embedded portal and uploads them to APIMatic's + * cloud storage, from where the Portal fetches them. These artifacts include: + * + * 1. SDKs + * 2. Docs + * 3. API Specification files + * + * Call this endpoint to update your Embedded Portal after you update an API Entity via any of the + * Import API Endpoints. This endpoint returns the Portal Embed script in the response. + * + * __**Note: If you have a hosted portal against the same API Entity, artifacts for that portal will + * get updated as well.**__ + * + * @param apiEntityId The ID of the API Entity to update the portal artifacts for. + * @return Response from the API call + */ + async publishEmbeddedPortal( + apiEntityId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('PUT'); + const mapped = req.prepareArgs({ apiEntityId: [apiEntityId, string()] }); + req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/embedded-portal`; + req.authenticate([{ authorization: true }]); + return req.call(requestOptions); + } + + /** + * Generate an On-premise Documentation Portal for an API Entity. This endpoint generates all artifacts + * for the Portal and packages them together into a zip file along with the required HTML, CSS and JS + * files. The generated artifacts include: + * + * 1. SDKs + * 2. Docs + * 3. API Specification files + * + * The endpoint returns a zip file that contains a static Site and can be hosted on any Web Server. + * + * @param apiEntityId The ID of the API Entity to generate the Portal for. + * @param accept Example: application/zip + * @return Response from the API call + */ + async generateOnPremPortalViaAPIEntity( + apiEntityId: string, + accept: Accept3, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ + apiEntityId: [apiEntityId, string()], + accept: [accept, accept3Schema], + }); + req.header('Accept', mapped.accept); + req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/on-prem-portal`; + req.authenticate([{ authorization: true }]); + return req.call(requestOptions); + } + + /** + * Generate an On-premise Documentation Portal by uploading a Portal Build Input. This endpoint + * generates all artifacts for the Portal and packages them together into a zip file along with the + * required HTML, CSS and JS files. The generated artifacts include: + * + * 1. SDKs + * 2. Docs + * 3. API Specification files + * + * The endpoint returns a zip file that contains a static Site and can be hosted on any Web Server. + * + * @param contentType + * @param file The input file to the Portal Generator. Must contain the build file. + * @return Response from the API call + */ + async generateOnPremPortalViaBuildInput( + contentType: ContentType, + file: FileWrapper, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('POST', '/portal'); + const mapped = req.prepareArgs({ + contentType: [contentType, contentTypeSchema], + }); + req.header('Content-Type', mapped.contentType); + req.formData({ file: file }); + req.throwOn(400, ProblemDetailsError, 'Bad Request'); + req.throwOn(401, UnauthorizedResponseError, 'Unauthorized'); + req.throwOn(403, ProblemDetailsError, 'Subscription Issue'); + req.throwOn( + 422, + ApiError, + 'Unprocessable Entity - Contains error.zip for build issues' + ); + req.authenticate([{ authorization: true }]); + return req.callAsStream(requestOptions); + } + + /** + * Generate Build Input for a Portal created using the UI workflow. The Build Input will correspond to + * the draft version of the Portal i.e. unpublished changes will also be included. + * This can be used to create a backup of your Portal or to migrate from the UI workflow to the docs as + * code workflow. + * + * @param apiGroupId + * @param apiEntities + * @return Response from the API call + */ + async generateBuildInputForUnpublishedPortal( + apiGroupId: string, + apiEntities?: string[], + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ + apiGroupId: [apiGroupId, string()], + apiEntities: [apiEntities, optional(array(string()))], + }); + req.query('apiEntities', mapped.apiEntities); + req.appendTemplatePath`/portal/build/${mapped.apiGroupId}/draft`; + req.authenticate([{ authorization: true }]); + return req.callAsJson(optional(unknown()), requestOptions); + } + + /** + * Generate Build Input for a Portal created using the UI workflow. The Build Input will correspond to + * the published version of the Portal i.e. unpublished changes will not be inlcuded. + * This can be used to create a backup of your Portal or to migrate from the UI workflow to the docs as + * code workflow. + * + * @param apiGroupId + * @param apiEntities + * @return Response from the API call + */ + async generateBuildInputForPublishedPortal( + apiGroupId: string, + apiEntities?: string[], + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ + apiGroupId: [apiGroupId, string()], + apiEntities: [apiEntities, optional(array(string()))], + }); + req.query('apiEntities', mapped.apiEntities); + req.appendTemplatePath`/portal/build/${mapped.apiGroupId}/published`; + req.authenticate([{ authorization: true }]); + return req.callAsJson(optional(unknown()), requestOptions); + } + + /** + * Unpublish a Hosted or Embedded Portal published for an API Entity. Calling this endpoint deletes all + * the published artifacts for a Portal from APIMatic's cloud storage. + * + * In case of a Hosted Portal, to completely remove the Portal, this endpoint needs to be called + * against all API versions that the Portal hosts. + * + * In case of an Embedded Portal, to completely remove the Portal, the user needs to manually remove + * the Portal Embed script from the embedding site. + * + * @param apiEntityId The ID of the API Entity to unpublish the Portal artifacts for. + * @return Response from the API call + */ + async unpublishPortal( + apiEntityId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('DELETE'); + const mapped = req.prepareArgs({ apiEntityId: [apiEntityId, string()] }); + req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/portal`; + req.authenticate([{ authorization: true }]); + return req.call(requestOptions); + } +} diff --git a/src/sdk/controllers/transformationController.ts b/src/sdk/controllers/transformationController.ts new file mode 100644 index 00000000..aa2a0fba --- /dev/null +++ b/src/sdk/controllers/transformationController.ts @@ -0,0 +1,196 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { ApiResponse, FileWrapper, RequestOptions } from '../core'; +import { ContentType, contentTypeSchema } from '../models/contentType'; +import { ExportFormats, exportFormatsSchema } from '../models/exportFormats'; +import { Transformation, transformationSchema } from '../models/transformation'; +import { + TransformViaUrlRequest, + transformViaUrlRequestSchema, +} from '../models/transformViaUrlRequest'; +import { array, string } from '../schema'; +import { BaseController } from './baseController'; + +export class TransformationController extends BaseController { + /** + * Transform an API into any of the supported API specification formats by uploading the API + * specification file. + * + * This endpoint transforms and then uploads the transformed API specification to APIMatic's cloud + * storage. An ID for the transformation performed is returned as part of the response. + * + * @param contentType + * @param file The API specification file.
The type of the specification file should be + * any of the [supported formats](https://docs.apimatic.io/api- + * transformer/overview-transformer#supported-input-formats). + * @param exportFormat The structure contains API specification formats that Transformer can + * convert to. + * @return Response from the API call + */ + async transformViaFile( + contentType: ContentType, + file: FileWrapper, + exportFormat: ExportFormats, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest( + 'POST', + '/transformations/transform-via-file' + ); + const mapped = req.prepareArgs({ + contentType: [contentType, contentTypeSchema], + exportFormat: [exportFormat, exportFormatsSchema], + }); + req.header('Content-Type', mapped.contentType); + req.formData({ file: file, export_format: mapped.exportFormat }); + req.authenticate([{ authorization: true }]); + return req.callAsJson(transformationSchema, requestOptions); + } + + /** + * Transform an API into any of the supported API specification formats by providing the URL of the API + * specification file. + * + * This endpoint transforms and then uploads the transformed API specification to APIMatic's cloud + * storage. An ID for the transformation performed is returned as part of the response. + * + * @param body Request Body + * @return Response from the API call + */ + async transformViaURL( + body: TransformViaUrlRequest, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest( + 'POST', + '/transformations/transform-via-url' + ); + const mapped = req.prepareArgs({ + body: [body, transformViaUrlRequestSchema], + }); + req.header( + 'Content-Type', + 'application/vnd.apimatic.urlTransformDto.v1+json' + ); + req.json(mapped.body); + req.authenticate([{ authorization: true }]); + return req.callAsJson(transformationSchema, requestOptions); + } + + /** + * Download the transformed API specification file transformed via the Transformation endpoints. + * + * @param transformationId The ID of transformation received in the response of the [Transform Via File + * ](https://www.apimatic.io/api-docs- + * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api- + * endpoints/transformation/transform-via-file) or [Transform Via URL ](https: + * //www.apimatic.io/api-docs- + * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api- + * endpoints/transformation/transform-via-url) calls. + * @return Response from the API call + */ + async downloadTransformedFile( + transformationId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ + transformationId: [transformationId, string()], + }); + req.appendTemplatePath`/transformations/${mapped.transformationId}/converted-file`; + req.authenticate([{ authorization: true }]); + return req.callAsStream(requestOptions); + } + + /** + * Download the API Specification file used as input for a particular Transformation performed via the + * Transformation endpoints. + * + * @param transformationId The ID of the transformation to download the API specification for. The + * transformation ID is received in the response of the [Transform Via File + * ](https://www.apimatic.io/api-docs- + * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api- + * endpoints/transformation/transform-via-file) or [Transform Via URL](https://www. + * apimatic.io/api-docs-preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api- + * endpoints/transformation/transform-via-url) calls. + * @return Response from the API call + */ + async downloadInputFile( + transformationId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ + transformationId: [transformationId, string()], + }); + req.appendTemplatePath`/transformations/${mapped.transformationId}/input-file`; + req.authenticate([{ authorization: true }]); + return req.callAsStream(requestOptions); + } + + /** + * Get a list of all API transformations performed. + * + * @return Response from the API call + */ + async listAllTransformations( + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET', '/transformations'); + req.authenticate([{ authorization: true }]); + return req.callAsJson(array(transformationSchema), requestOptions); + } + + /** + * Get details on a particular Transformation performed via the Transformation endpoints. + * + * @param transformationId The ID of the transformation to fetch. The transformation ID is received in + * the response of the [Transform Via File ](https://www.apimatic.io/api-docs- + * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api- + * endpoints/transformation/transform-via-file) or [Transform Via URL ](https: + * //www.apimatic.io/api-docs- + * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api- + * endpoints/transformation/transform-via-url) calls. + * @return Response from the API call + */ + async getATransformation( + transformationId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ + transformationId: [transformationId, string()], + }); + req.appendTemplatePath`/transformations/${mapped.transformationId}`; + req.authenticate([{ authorization: true }]); + return req.callAsJson(transformationSchema, requestOptions); + } + + /** + * Delete a particular Transformation performed for an API via the Transformation endpoints. + * + * @param transformationId The ID of the transformation to delete. The transformation ID is received in + * the response of the [Transform Via File ](https://www.apimatic.io/api-docs- + * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api- + * endpoints/transformation/transform-via-file) or [Transform Via URL](https://www. + * apimatic.io/api-docs-preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api- + * endpoints/transformation/transform-via-url) calls. + * @return Response from the API call + */ + async deleteTransformation( + transformationId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('DELETE'); + const mapped = req.prepareArgs({ + transformationId: [transformationId, string()], + }); + req.appendTemplatePath`/transformations/${mapped.transformationId}`; + req.authenticate([{ authorization: true }]); + return req.call(requestOptions); + } +} diff --git a/src/sdk/core.ts b/src/sdk/core.ts new file mode 100644 index 00000000..6b9d56b6 --- /dev/null +++ b/src/sdk/core.ts @@ -0,0 +1,7 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +export * from '@apimatic/core'; diff --git a/src/sdk/defaultConfiguration.ts b/src/sdk/defaultConfiguration.ts new file mode 100644 index 00000000..efdf395e --- /dev/null +++ b/src/sdk/defaultConfiguration.ts @@ -0,0 +1,25 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { Configuration, Environment } from './configuration'; +import { RetryConfiguration } from './core'; + +/** Default values for the configuration parameters of the client. */ +export const DEFAULT_CONFIGURATION: Configuration = { + timeout: 0, + environment: Environment.Production, +}; + +/** Default values for retry configuration parameters. */ +export const DEFAULT_RETRY_CONFIG: RetryConfiguration = { + maxNumberOfRetries: 0, + retryOnTimeout: true, + retryInterval: 1, + maximumRetryWaitTime: 0, + backoffFactor: 2, + httpStatusCodesToRetry: [408, 413, 429, 500, 502, 503, 504, 521, 522, 524, 408, 413, 429, 500, 502, 503, 504, 521, 522, 524, 408, 413, 429, 500, 502, 503, 504, 521, 522, 524], + httpMethodsToRetry: ['GET', 'PUT', 'GET', 'PUT', 'GET', 'PUT'], +}; diff --git a/src/sdk/errors/portalGenerationForbiddenResponseError.ts b/src/sdk/errors/portalGenerationForbiddenResponseError.ts new file mode 100644 index 00000000..a9d9cf9c --- /dev/null +++ b/src/sdk/errors/portalGenerationForbiddenResponseError.ts @@ -0,0 +1,23 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { ApiError } from '../core'; + +/** + * Creates an instance of PortalGenerationForbiddenResponse + */ +interface PortalGenerationForbiddenResponse { + type?: string; + title?: string; + status?: number; + detail?: string; + instance?: string; + errors?: Record; +} + +export class PortalGenerationForbiddenResponseError extends ApiError< + PortalGenerationForbiddenResponse +> {} diff --git a/src/sdk/errors/portalGenerationValidationErrorResponseError.ts b/src/sdk/errors/portalGenerationValidationErrorResponseError.ts new file mode 100644 index 00000000..3cbabe57 --- /dev/null +++ b/src/sdk/errors/portalGenerationValidationErrorResponseError.ts @@ -0,0 +1,23 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { ApiError } from '../core'; + +/** + * Creates an instance of PortalGenerationValidationErrorResponse + */ +interface PortalGenerationValidationErrorResponse { + type?: string; + title?: string; + status?: number; + detail?: string; + instance?: string; + errors?: Record; +} + +export class PortalGenerationValidationErrorResponseError extends ApiError< + PortalGenerationValidationErrorResponse +> {} diff --git a/src/sdk/errors/problemDetailsError.ts b/src/sdk/errors/problemDetailsError.ts new file mode 100644 index 00000000..98b56811 --- /dev/null +++ b/src/sdk/errors/problemDetailsError.ts @@ -0,0 +1,21 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { ApiError } from '../core'; + +/** + * Creates an instance of ProblemDetails + */ +interface ProblemDetails { + type?: string; + title?: string; + status?: number; + detail?: string; + instance?: string; + errors?: Record; +} + +export class ProblemDetailsError extends ApiError {} diff --git a/src/sdk/errors/unauthorizedResponseError.ts b/src/sdk/errors/unauthorizedResponseError.ts new file mode 100644 index 00000000..9491a0fa --- /dev/null +++ b/src/sdk/errors/unauthorizedResponseError.ts @@ -0,0 +1,16 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { ApiError } from '../core'; + +/** + * Creates an instance of UnauthorizedResponse + */ +interface UnauthorizedResponse { + message?: string; +} + +export class UnauthorizedResponseError extends ApiError {} diff --git a/src/sdk/index.ts b/src/sdk/index.ts new file mode 100644 index 00000000..7d2c1104 --- /dev/null +++ b/src/sdk/index.ts @@ -0,0 +1,83 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +export * from './client'; +export * from './configuration'; +export type { ApiResponse } from './core'; +export { + AbortError, + ArgumentsValidationError, + cloneFileWrapper, + FileWrapper, + isFileWrapper, + ResponseValidationError, +} from './core'; +export * from './defaultConfiguration'; +export * from './controllers/aPIValidationExternalApisController'; +export * from './controllers/aPIValidationImportedApisController'; +export * from './controllers/apisManagementController'; +export * from './controllers/codeGenerationExternalApisController'; +export * from './controllers/codeGenerationImportedApisController'; +export * from './controllers/docsPortalGenerationAsyncController'; +export * from './controllers/docsPortalManagementController'; +export * from './controllers/transformationController'; +export { ApiError } from './core'; +export * from './errors/problemDetailsError'; +export * from './errors/unauthorizedResponseError'; +export { Accept } from './models/accept'; +export { Accept2 } from './models/accept2'; +export { Accept3 } from './models/accept3'; +export type { ApiEntity } from './models/apiEntity'; +export type { APIEntityCodeGeneration } from './models/aPIEntityCodeGeneration'; +export type { ApiEntityDetailed } from './models/apiEntityDetailed'; +export type { ApiValidationSummary } from './models/apiValidationSummary'; +export type { Attributes } from './models/attributes'; +export type { Authentication } from './models/authentication'; +export type { AuthorIdentifiers } from './models/authorIdentifiers'; +export type { AuthScope } from './models/authScope'; +export type { CodeGeneration } from './models/codeGeneration'; +export type { CodeGenSettings } from './models/codeGenSettings'; +export { ContentType } from './models/contentType'; +export type { CSNETSTANDARDLIB } from './models/cSNETSTANDARDLIB'; +export type { CustomType } from './models/customType'; +export type { DocsValidationSummary } from './models/docsValidationSummary'; +export type { Endpoint } from './models/endpoint'; +export type { EndpointsGroup } from './models/endpointsGroup'; +export { ExportFormats } from './models/exportFormats'; +export type { Field } from './models/field'; +export type { GenerateSdkViaUrlRequest } from './models/generateSdkViaUrlRequest'; +export { Id } from './models/id'; +export { ImplementationType } from './models/implementationType'; +export type { ImportApiVersionViaUrlRequest } from './models/importApiVersionViaUrlRequest'; +export type { ImportApiViaUrlRequest } from './models/importApiViaUrlRequest'; +export type { ImportValidationSummary } from './models/importValidationSummary'; +export type { InplaceImportApiViaUrlRequest } from './models/inplaceImportApiViaUrlRequest'; +export type { InputParameter } from './models/inputParameter'; +export { Link } from './models/link'; +export type { Links } from './models/links'; +export type { MEnvironment } from './models/mEnvironment'; +export type { MetaData } from './models/metaData'; +export type { PackageDeploymentInformation } from './models/packageDeploymentInformation'; +export { PackageRepositories } from './models/packageRepositories'; +export type { Parameter } from './models/parameter'; +export { Platforms } from './models/platforms'; +export type { PortalGenerationAsyncResponse } from './models/portalGenerationAsyncResponse'; +export type { PortalGenerationStatusResponse } from './models/portalGenerationStatusResponse'; +export type { PublishedPackage } from './models/publishedPackage'; +export type { PublishPackageInput } from './models/publishPackageInput'; +export type { Response } from './models/response'; +export type { Server } from './models/server'; +export type { ServerConfiguration } from './models/serverConfiguration'; +export { Status } from './models/status'; +export type { TemplatesPackageDeploymentInformation } from './models/templatesPackageDeploymentInformation'; +export type { TestCase } from './models/testCase'; +export type { TestGenSettings } from './models/testGenSettings'; +export type { Transformation } from './models/transformation'; +export type { TransformViaUrlRequest } from './models/transformViaUrlRequest'; +export type { UpdatePackageDeploymentInformation } from './models/updatePackageDeploymentInformation'; +export type { UpdateTemplatesPackageDeploymentInformation } from './models/updateTemplatesPackageDeploymentInformation'; +export type { UserCodeGeneration } from './models/userCodeGeneration'; +export type { ValidationException } from './models/validationException'; diff --git a/src/sdk/models/aPIEntityCodeGeneration.ts b/src/sdk/models/aPIEntityCodeGeneration.ts new file mode 100644 index 00000000..dd617661 --- /dev/null +++ b/src/sdk/models/aPIEntityCodeGeneration.ts @@ -0,0 +1,44 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { boolean, object, Schema, string } from '../schema'; +import { Platforms, platformsSchema } from './platforms'; + +/** The Code Generation structure encapsulates all the the details of an SDK generation performed against an API Entity */ +export interface APIEntityCodeGeneration { + /** Unique Code Generation Identifier */ + id: string; + /** The structure contains platforms that APIMatic CodeGen can generate SDKs and Docs in. */ + template: Platforms; + /** The generated SDK */ + generatedFile: string; + /** Generation Date and Time */ + generatedOn: string; + /** The md5 hash of the API Description */ + hashCode: string; + /** Generation Source */ + codeGenerationSource: string; + /** Generation Version */ + codeGenVersion: string; + /** Generation Status */ + success: boolean; + /** Unique API Entity Identifier */ + apiEntityId: string; +} + +export const aPIEntityCodeGenerationSchema: Schema = object( + { + id: ['id', string()], + template: ['template', platformsSchema], + generatedFile: ['generatedFile', string()], + generatedOn: ['generatedOn', string()], + hashCode: ['hashCode', string()], + codeGenerationSource: ['codeGenerationSource', string()], + codeGenVersion: ['codeGenVersion', string()], + success: ['success', boolean()], + apiEntityId: ['apiEntityId', string()], + } +); diff --git a/src/sdk/models/accept.ts b/src/sdk/models/accept.ts new file mode 100644 index 00000000..d5c32a5d --- /dev/null +++ b/src/sdk/models/accept.ts @@ -0,0 +1,19 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { Schema, stringEnum } from '../schema'; + +/** + * Enum for Accept + */ +export enum Accept { + EnumApplicationjson = 'application/json', +} + +/** + * Schema for Accept + */ +export const acceptSchema: Schema = stringEnum(Accept); diff --git a/src/sdk/models/accept2.ts b/src/sdk/models/accept2.ts new file mode 100644 index 00000000..7f0c36ae --- /dev/null +++ b/src/sdk/models/accept2.ts @@ -0,0 +1,19 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { Schema, stringEnum } from '../schema'; + +/** + * Enum for Accept2 + */ +export enum Accept2 { + EnumApplicationvndapimaticapiEntityfullv1json = 'application/vnd.apimatic.apiEntity.full.v1+json', +} + +/** + * Schema for Accept2 + */ +export const accept2Schema: Schema = stringEnum(Accept2); diff --git a/src/sdk/models/accept3.ts b/src/sdk/models/accept3.ts new file mode 100644 index 00000000..d626261e --- /dev/null +++ b/src/sdk/models/accept3.ts @@ -0,0 +1,19 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { Schema, stringEnum } from '../schema'; + +/** + * Enum for Accept3 + */ +export enum Accept3 { + EnumApplicationzip = 'application/zip', +} + +/** + * Schema for Accept3 + */ +export const accept3Schema: Schema = stringEnum(Accept3); diff --git a/src/sdk/models/apiEntity.ts b/src/sdk/models/apiEntity.ts new file mode 100644 index 00000000..bcca7cec --- /dev/null +++ b/src/sdk/models/apiEntity.ts @@ -0,0 +1,79 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { array, boolean, lazy, object, Schema, string } from '../schema'; +import { Authentication, authenticationSchema } from './authentication'; +import { CodeGenSettings, codeGenSettingsSchema } from './codeGenSettings'; +import { EndpointsGroup, endpointsGroupSchema } from './endpointsGroup'; +import { MetaData, metaDataSchema } from './metaData'; +import { + ServerConfiguration, + serverConfigurationSchema, +} from './serverConfiguration'; +import { TestGenSettings, testGenSettingsSchema } from './testGenSettings'; + +/** The API Entity Structure encapsulates all the details of an API Entity. An API entity is a unique API Version. */ +export interface ApiEntity { + /** Unique API Entity identifier */ + id: string; + /** Enrcypted API Entity Id */ + encryptedId: string; + /** API Integration Key. Obtain from API Card on Dashboard. */ + apiKey: string; + /** Unique API Group Identifier */ + apiGroupId: string; + /** Cover Image */ + imageUri: string; + /** Entity creation date */ + creationDate: string; + /** API Status (Deprecated) */ + mPublic: boolean; + /** API Entity Name */ + name: string; + /** Description of the API */ + description: string; + /** Entity Version Number */ + version: string; + /** Header Content */ + additionalHeaders: string[]; + /** This Structure encapsulates all details of API authentication. */ + authentication: Authentication; + /** APIMatic’s code generation engine has various code generation configurations to customise the behaviour and outlook across the generated SDKS. This structure encapsulates all settings for CodeGeneration. */ + codeGenSettings: CodeGenSettings; + /** This structure helps specify additional test configurations which affects how test cases are generated. */ + testGenSettings: TestGenSettings; + /** API Errors */ + errors: string[]; + /** Server configurations can be used to create multiple environments, multiple servers that can be used with specific endpoints and server URLs with template paramters. */ + serverConfiguration: ServerConfiguration; + /** API Endpoint Groups */ + endpointsGroup: EndpointsGroup[]; + metaData: MetaData; +} + +export const apiEntitySchema: Schema = object({ + id: ['id', string()], + encryptedId: ['encryptedId', string()], + apiKey: ['apiKey', string()], + apiGroupId: ['apiGroupId', string()], + imageUri: ['imageUri', string()], + creationDate: ['creationDate', string()], + mPublic: ['public', boolean()], + name: ['name', string()], + description: ['description', string()], + version: ['version', string()], + additionalHeaders: ['additionalHeaders', array(string())], + authentication: ['authentication', lazy(() => authenticationSchema)], + codeGenSettings: ['codeGenSettings', lazy(() => codeGenSettingsSchema)], + testGenSettings: ['testGenSettings', lazy(() => testGenSettingsSchema)], + errors: ['errors', array(string())], + serverConfiguration: [ + 'serverConfiguration', + lazy(() => serverConfigurationSchema), + ], + endpointsGroup: ['endpointsGroup', array(lazy(() => endpointsGroupSchema))], + metaData: ['metaData', lazy(() => metaDataSchema)], +}); diff --git a/src/sdk/models/apiEntityDetailed.ts b/src/sdk/models/apiEntityDetailed.ts new file mode 100644 index 00000000..fffc75c4 --- /dev/null +++ b/src/sdk/models/apiEntityDetailed.ts @@ -0,0 +1,87 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { array, boolean, lazy, object, Schema, string } from '../schema'; +import { Authentication, authenticationSchema } from './authentication'; +import { CodeGenSettings, codeGenSettingsSchema } from './codeGenSettings'; +import { CustomType, customTypeSchema } from './customType'; +import { Endpoint, endpointSchema } from './endpoint'; +import { EndpointsGroup, endpointsGroupSchema } from './endpointsGroup'; +import { MetaData, metaDataSchema } from './metaData'; +import { + ServerConfiguration, + serverConfigurationSchema, +} from './serverConfiguration'; +import { TestGenSettings, testGenSettingsSchema } from './testGenSettings'; + +/** The structure collects API Endpoints and Custom Types to display detailed information on API Entity. */ +export interface ApiEntityDetailed { + /** Unique API Entity identifier */ + id: string; + /** Enrcypted API Entity Id */ + encryptedId: string; + /** API Integration Key. Obtain from API Card on Dashboard. */ + apiKey: string; + /** Unique API Group Identifier */ + apiGroupId: string; + /** Cover Image */ + imageUri: string; + /** Entity creation date */ + creationDate: string; + /** API Status (Deprecated) */ + mPublic: boolean; + /** API Entity Name */ + name: string; + /** Description of the API */ + description: string; + /** Entity Version Number */ + version: string; + /** Header Content */ + additionalHeaders: string[]; + /** This Structure encapsulates all details of API authentication. */ + authentication: Authentication; + /** APIMatic’s code generation engine has various code generation configurations to customise the behaviour and outlook across the generated SDKS. This structure encapsulates all settings for CodeGeneration. */ + codeGenSettings: CodeGenSettings; + /** This structure helps specify additional test configurations which affects how test cases are generated. */ + testGenSettings: TestGenSettings; + /** API Errors */ + errors: string[]; + /** Server configurations can be used to create multiple environments, multiple servers that can be used with specific endpoints and server URLs with template paramters. */ + serverConfiguration: ServerConfiguration; + /** API Endpoint Groups */ + endpointsGroup: EndpointsGroup[]; + metaData: MetaData; + /** API Endpoints */ + endpoints: Endpoint[]; + /** Complex Custom Model Types */ + customTypes: CustomType[]; +} + +export const apiEntityDetailedSchema: Schema = object({ + id: ['id', string()], + encryptedId: ['encryptedId', string()], + apiKey: ['apiKey', string()], + apiGroupId: ['apiGroupId', string()], + imageUri: ['imageUri', string()], + creationDate: ['creationDate', string()], + mPublic: ['public', boolean()], + name: ['name', string()], + description: ['description', string()], + version: ['version', string()], + additionalHeaders: ['additionalHeaders', array(string())], + authentication: ['authentication', lazy(() => authenticationSchema)], + codeGenSettings: ['codeGenSettings', lazy(() => codeGenSettingsSchema)], + testGenSettings: ['testGenSettings', lazy(() => testGenSettingsSchema)], + errors: ['errors', array(string())], + serverConfiguration: [ + 'serverConfiguration', + lazy(() => serverConfigurationSchema), + ], + endpointsGroup: ['endpointsGroup', array(lazy(() => endpointsGroupSchema))], + metaData: ['metaData', lazy(() => metaDataSchema)], + endpoints: ['endpoints', array(lazy(() => endpointSchema))], + customTypes: ['customTypes', array(lazy(() => customTypeSchema))], +}); diff --git a/src/sdk/models/apiValidationSummary.ts b/src/sdk/models/apiValidationSummary.ts new file mode 100644 index 00000000..cb2cbd5a --- /dev/null +++ b/src/sdk/models/apiValidationSummary.ts @@ -0,0 +1,21 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { array, boolean, object, Schema, string } from '../schema'; + +export interface ApiValidationSummary { + success: boolean; + errors: string[]; + warnings: string[]; + messages: string[]; +} + +export const apiValidationSummarySchema: Schema = object({ + success: ['success', boolean()], + errors: ['errors', array(string())], + warnings: ['warnings', array(string())], + messages: ['messages', array(string())], +}); diff --git a/src/sdk/models/attributes.ts b/src/sdk/models/attributes.ts new file mode 100644 index 00000000..8629d4b1 --- /dev/null +++ b/src/sdk/models/attributes.ts @@ -0,0 +1,17 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { object, Schema, string } from '../schema'; + +/** The structure contain attribute details of a parameter type. */ +export interface Attributes { + /** Unique Attribute Identifier */ + id: string; +} + +export const attributesSchema: Schema = object({ + id: ['id', string()], +}); diff --git a/src/sdk/models/authScope.ts b/src/sdk/models/authScope.ts new file mode 100644 index 00000000..9cd14031 --- /dev/null +++ b/src/sdk/models/authScope.ts @@ -0,0 +1,25 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { object, Schema, string } from '../schema'; + +export interface AuthScope { + /** Scope Id */ + id: string; + /** Scope Name */ + name: string; + /** Scope Value */ + value: string; + /** Scope Description */ + description: string; +} + +export const authScopeSchema: Schema = object({ + id: ['id', string()], + name: ['name', string()], + value: ['value', string()], + description: ['description', string()], +}); diff --git a/src/sdk/models/authentication.ts b/src/sdk/models/authentication.ts new file mode 100644 index 00000000..5015269d --- /dev/null +++ b/src/sdk/models/authentication.ts @@ -0,0 +1,44 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + array, + lazy, + object, + optional, + Schema, + string, + unknown, +} from '../schema'; +import { AuthScope, authScopeSchema } from './authScope'; + +/** This Structure encapsulates all details of API authentication. */ +export interface Authentication { + /** Auth Id */ + id: string; + /** Auth Type */ + authType: string; + /** Scope */ + scopes: AuthScope[]; + /** Auth Params */ + parameters: string[]; + /** Auth Scopes */ + authScopes: string[]; + /** Auth Grant Types */ + authGrantTypes: string[]; + /** Paramater Formats */ + paramFormats?: unknown; +} + +export const authenticationSchema: Schema = object({ + id: ['id', string()], + authType: ['authType', string()], + scopes: ['scopes', array(lazy(() => authScopeSchema))], + parameters: ['parameters', array(string())], + authScopes: ['authScopes', array(string())], + authGrantTypes: ['authGrantTypes', array(string())], + paramFormats: ['paramFormats', optional(unknown())], +}); diff --git a/src/sdk/models/authorIdentifiers.ts b/src/sdk/models/authorIdentifiers.ts new file mode 100644 index 00000000..332f294e --- /dev/null +++ b/src/sdk/models/authorIdentifiers.ts @@ -0,0 +1,17 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { object, Schema, string } from '../schema'; + +export interface AuthorIdentifiers { + email: string; + userName: string; +} + +export const authorIdentifiersSchema: Schema = object({ + email: ['Email', string()], + userName: ['UserName', string()], +}); diff --git a/src/sdk/models/cSNETSTANDARDLIB.ts b/src/sdk/models/cSNETSTANDARDLIB.ts new file mode 100644 index 00000000..ce1afb2f --- /dev/null +++ b/src/sdk/models/cSNETSTANDARDLIB.ts @@ -0,0 +1,36 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { object, optional, Schema, string, unknown } from '../schema'; +import { Id, idSchema } from './id'; +import { Link, linkSchema } from './link'; + +/** This structure contains all details that goes into package deployment. */ +export interface CSNETSTANDARDLIB { + /** Unique package identifier */ + id?: Id; + /** Package Repository as per platform */ + packageRepository: string; + /** Package Name */ + packageName: string; + version: string; + /** Any additional platform specific deployment detail */ + additionalDeploymentInformation?: unknown; + /** Link of deployed package */ + link?: Link; +} + +export const cSNETSTANDARDLIBSchema: Schema = object({ + id: ['id', optional(idSchema)], + packageRepository: ['packageRepository', string()], + packageName: ['packageName', string()], + version: ['version', string()], + additionalDeploymentInformation: [ + 'additionalDeploymentInformation', + optional(unknown()), + ], + link: ['link', optional(linkSchema)], +}); diff --git a/src/sdk/models/codeGenSettings.ts b/src/sdk/models/codeGenSettings.ts new file mode 100644 index 00000000..8e1302e6 --- /dev/null +++ b/src/sdk/models/codeGenSettings.ts @@ -0,0 +1,166 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { array, boolean, number, object, Schema, string } from '../schema'; + +/** APIMatic’s code generation engine has various code generation configurations to customise the behaviour and outlook across the generated SDKS. This structure encapsulates all settings for CodeGeneration. */ +export interface CodeGenSettings { + /** Generate asynchronous code for API Calls and deserialization */ + isAsync: boolean; + /** Use HTTP Method prefixes for endpoint wrappers */ + useHttpMethodPrefix: boolean; + /** Use "Model" postfixes for generated class names */ + useModelPrefix: boolean; + /** Use "Enum" postfixes for enumerated types */ + useEnumPrefix: boolean; + useConstructorsForConfig: boolean; + /** Use common SDK library to reduce code duplication */ + useCommonSdkLibrary: boolean; + /** Generates interfaces for controller classes in the generated SDKs */ + generateInterfaces: boolean; + /** Generate Appveyor configuration file */ + generateAppveyorConfig: boolean; + /** Generate CircleCI configuration file */ + generateCircleConfig: boolean; + /** Generate Jenkins configuration file */ + generateJenkinsConfig: boolean; + /** Generate Travis CI configuration file */ + generateTravisConfig: boolean; + /** Use "AndroidManifest.xml" for config variables in Android */ + androidUseAppManifest: boolean; + /** Use "App-Info.plist" file for config variables in iOS */ + iosUseAppInfoPlist: boolean; + /** Generate "CoreData" schema and entity classes in iOS? */ + iosGenerateCoreData: boolean; + /** Enable runscope */ + runscopeEnabled: boolean; + /** Collect Parameters as arrays */ + collapseParamsToArray: boolean; + /** Attempts to preserve parameter order for endpoints */ + preserveParameterOrder: boolean; + /** Append JSON/XML accept and content-type headers */ + appendContentHeaders: boolean; + modelSerializationIsJSON: boolean; + /** Return a null value on HTTP 404 */ + nullify404: boolean; + /** Validate required parameters to be Not Null */ + validateRequiredParameters: boolean; + /** Allow models to have additional runtime properties */ + enableAdditionalModelProperties: boolean; + javaUsePropertiesConfig: boolean; + /** Use "Controller" postfixes for generated controller classes */ + useControllerPrefix: boolean; + /** Use Exception Prefixes */ + useExceptionPrefix: boolean; + /** Parameter Array format with index or without */ + parameterArrayFormat: string; + /** Configure the HTTP client for Objective C */ + objCHttpClient: string; + /** Configure the HTTP client for C# */ + cSharpHttpClient: string; + /** Configure the HTTP client for Android */ + androidHttpClient: string; + /** Configure the HTTP client for node */ + nodeHttpClient: string; + /** Configure the HTTP client for PHP */ + phpHttpClient: string; + bodySerialization: number; + /** Specify type of array serialisation */ + arraySerialization: string; + /** This option specifies the duration (in seconds) after which requests would timeout */ + timeout: number; + /** Enabling this generates code in the SDKs for logging events in the API cycle using a library. */ + enableLogging: boolean; + /** Enabling caching of responses (not available in all languages) */ + enableHttpCache: boolean; + /** Specify number of retries */ + retries: number; + /** Specify retry interval in case of failures */ + retryInterval: number; + /** Generate advanced read me files */ + generateAdvancedDocs: boolean; + /** Store Timezone information for the generation */ + storeTimezoneInformation: boolean; + /** Use "Controller" postfixes for generated controller classes */ + enablePhpComposerVersionString: boolean; + /** Specify Security Protocols */ + securityProtocols: string[]; + /** Use underscores before and after numbers for underscore case */ + underscoreNumbers: boolean; + /** Allow usage of a Singleton Pattern */ + useSingletonPattern: boolean; + /** Files/dependencies used for linting are not generated if this option is enabled */ + disableLinting: boolean; + /** Create a configuration option in SDKs to optionally skip certificate verification when establishing HTTPS connections. */ + allowSkippingSSLCertVerification: boolean; + /** Apply Customisations */ + applyCustomizations: string[]; + /** Enabling this will stop splitting of words when converting identifiers from API specification to language-specific identifiers. */ + doNotSplitWords: string[]; + /** Sorts resources such as endpoints, endpoint groups and models in generated documentation */ + sortResources: boolean; + /** Enable a global user agent */ + enableGlobalUserAgent: boolean; +} + +export const codeGenSettingsSchema: Schema = object({ + isAsync: ['isAsync', boolean()], + useHttpMethodPrefix: ['useHttpMethodPrefix', boolean()], + useModelPrefix: ['useModelPrefix', boolean()], + useEnumPrefix: ['useEnumPrefix', boolean()], + useConstructorsForConfig: ['useConstructorsForConfig', boolean()], + useCommonSdkLibrary: ['useCommonSdkLibrary', boolean()], + generateInterfaces: ['generateInterfaces', boolean()], + generateAppveyorConfig: ['generateAppveyorConfig', boolean()], + generateCircleConfig: ['generateCircleConfig', boolean()], + generateJenkinsConfig: ['generateJenkinsConfig', boolean()], + generateTravisConfig: ['generateTravisConfig', boolean()], + androidUseAppManifest: ['androidUseAppManifest', boolean()], + iosUseAppInfoPlist: ['iosUseAppInfoPlist', boolean()], + iosGenerateCoreData: ['iosGenerateCoreData', boolean()], + runscopeEnabled: ['runscopeEnabled', boolean()], + collapseParamsToArray: ['collapseParamsToArray', boolean()], + preserveParameterOrder: ['preserveParameterOrder', boolean()], + appendContentHeaders: ['appendContentHeaders', boolean()], + modelSerializationIsJSON: ['modelSerializationIsJSON', boolean()], + nullify404: ['nullify404', boolean()], + validateRequiredParameters: ['validateRequiredParameters', boolean()], + enableAdditionalModelProperties: [ + 'enableAdditionalModelProperties', + boolean(), + ], + javaUsePropertiesConfig: ['javaUsePropertiesConfig', boolean()], + useControllerPrefix: ['useControllerPrefix', boolean()], + useExceptionPrefix: ['useExceptionPrefix', boolean()], + parameterArrayFormat: ['parameterArrayFormat', string()], + objCHttpClient: ['objCHttpClient', string()], + cSharpHttpClient: ['cSharpHttpClient', string()], + androidHttpClient: ['androidHttpClient', string()], + nodeHttpClient: ['nodeHttpClient', string()], + phpHttpClient: ['phpHttpClient', string()], + bodySerialization: ['bodySerialization', number()], + arraySerialization: ['arraySerialization', string()], + timeout: ['timeout', number()], + enableLogging: ['enableLogging', boolean()], + enableHttpCache: ['enableHttpCache', boolean()], + retries: ['retries', number()], + retryInterval: ['retryInterval', number()], + generateAdvancedDocs: ['generateAdvancedDocs', boolean()], + storeTimezoneInformation: ['storeTimezoneInformation', boolean()], + enablePhpComposerVersionString: ['enablePhpComposerVersionString', boolean()], + securityProtocols: ['securityProtocols', array(string())], + underscoreNumbers: ['underscoreNumbers', boolean()], + useSingletonPattern: ['useSingletonPattern', boolean()], + disableLinting: ['disableLinting', boolean()], + allowSkippingSSLCertVerification: [ + 'allowSkippingSSLCertVerification', + boolean(), + ], + applyCustomizations: ['applyCustomizations', array(string())], + doNotSplitWords: ['doNotSplitWords', array(string())], + sortResources: ['sortResources', boolean()], + enableGlobalUserAgent: ['enableGlobalUserAgent', boolean()], +}); diff --git a/src/sdk/models/codeGeneration.ts b/src/sdk/models/codeGeneration.ts new file mode 100644 index 00000000..aea38f0a --- /dev/null +++ b/src/sdk/models/codeGeneration.ts @@ -0,0 +1,39 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { boolean, object, Schema, string } from '../schema'; +import { Platforms, platformsSchema } from './platforms'; + +/** The Code Generation structure encapsulates all the the details of an SDK generation performed against an API Entity */ +export interface CodeGeneration { + /** Unique Code Generation Identifier */ + id: string; + /** The structure contains platforms that APIMatic CodeGen can generate SDKs and Docs in. */ + template: Platforms; + /** The generated SDK */ + generatedFile: string; + /** Generation Date and Time */ + generatedOn: string; + /** The md5 hash of the API Description */ + hashCode: string; + /** Generation Source */ + codeGenerationSource: string; + /** Generation Version */ + codeGenVersion: string; + /** Generation Status */ + success: boolean; +} + +export const codeGenerationSchema: Schema = object({ + id: ['id', string()], + template: ['template', platformsSchema], + generatedFile: ['generatedFile', string()], + generatedOn: ['generatedOn', string()], + hashCode: ['hashCode', string()], + codeGenerationSource: ['codeGenerationSource', string()], + codeGenVersion: ['codeGenVersion', string()], + success: ['success', boolean()], +}); diff --git a/src/sdk/models/contentType.ts b/src/sdk/models/contentType.ts new file mode 100644 index 00000000..9428bc06 --- /dev/null +++ b/src/sdk/models/contentType.ts @@ -0,0 +1,19 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { Schema, stringEnum } from '../schema'; + +/** + * Enum for ContentType + */ +export enum ContentType { + EnumMultipartformdata = 'multipart/form-data', +} + +/** + * Schema for ContentType + */ +export const contentTypeSchema: Schema = stringEnum(ContentType); diff --git a/src/sdk/models/customType.ts b/src/sdk/models/customType.ts new file mode 100644 index 00000000..6c410d1c --- /dev/null +++ b/src/sdk/models/customType.ts @@ -0,0 +1,37 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { array, lazy, object, Schema, string } from '../schema'; +import { Field, fieldSchema } from './field'; +import { + ImplementationType, + implementationTypeSchema, +} from './implementationType'; + +/** This structure helps creates a new complex model type. */ +export interface CustomType { + /** Unique Type Identifier */ + id: string; + /** Unique API Entity identifier */ + apiId: string; + /** Custom Type Name */ + name: string; + /** Data Format */ + baseType: string; + /** The structure helps describes the nature of implementation of a custom model. A model can be of 3 types. */ + implementationType: ImplementationType; + /** Type Fields */ + fields: Field[]; +} + +export const customTypeSchema: Schema = object({ + id: ['id', string()], + apiId: ['apiId', string()], + name: ['name', string()], + baseType: ['baseType', string()], + implementationType: ['implementationType', implementationTypeSchema], + fields: ['fields', array(lazy(() => fieldSchema))], +}); diff --git a/src/sdk/models/docsValidationSummary.ts b/src/sdk/models/docsValidationSummary.ts new file mode 100644 index 00000000..52835df6 --- /dev/null +++ b/src/sdk/models/docsValidationSummary.ts @@ -0,0 +1,23 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { array, boolean, object, Schema, string } from '../schema'; + +export interface DocsValidationSummary { + success: boolean; + errors: string[]; + warnings: string[]; + messages: string[]; +} + +export const docsValidationSummarySchema: Schema = object( + { + success: ['success', boolean()], + errors: ['errors', array(string())], + warnings: ['warnings', array(string())], + messages: ['messages', array(string())], + } +); diff --git a/src/sdk/models/endpoint.ts b/src/sdk/models/endpoint.ts new file mode 100644 index 00000000..72f6cda7 --- /dev/null +++ b/src/sdk/models/endpoint.ts @@ -0,0 +1,73 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + array, + boolean, + lazy, + object, + Schema, + string, + unknown, +} from '../schema'; +import { Parameter, parameterSchema } from './parameter'; +import { Response, responseSchema } from './response'; +import { TestCase, testCaseSchema } from './testCase'; + +/** This structure encapsulates all the attributes of an API Endpoint. */ +export interface Endpoint { + /** Unique Endpoint Identifier */ + id: string; + /** Unique API Identifier */ + apiId: string; + /** Endpoint Name */ + name: string; + /** Endpoint Method */ + httpMethod: string; + /** The Group Endpoint belongs to */ + group: string; + /** If Endpoint warrants authentication or not */ + skipAuthentication: boolean; + /** The Endpoint route */ + route: string; + /** The structure encapsulates all details of a request response */ + response: Response; + /** Enabling this option allows optional query parameters */ + hasOptionalQueryParams: boolean; + /** Enabling this option allows optional field parameters */ + hasOptionalFieldParams: boolean; + /** Enabling this option collects API endpoint parameters as collections */ + collectParameters: boolean; + /** Enabling this option allows wrapping of body in objects */ + wrapBodyInObject: boolean; + /** What scopes apply to an Endpoint */ + requiredScopes: string[]; + /** Endpoint Paramaters */ + parameters: Parameter[]; + /** Errors that Endpoint may output */ + errors: unknown[]; + /** Test Cases associated with Endpoint */ + testCases: TestCase[]; +} + +export const endpointSchema: Schema = object({ + id: ['id', string()], + apiId: ['apiId', string()], + name: ['name', string()], + httpMethod: ['httpMethod', string()], + group: ['group', string()], + skipAuthentication: ['skipAuthentication', boolean()], + route: ['route', string()], + response: ['response', lazy(() => responseSchema)], + hasOptionalQueryParams: ['hasOptionalQueryParams', boolean()], + hasOptionalFieldParams: ['hasOptionalFieldParams', boolean()], + collectParameters: ['collectParameters', boolean()], + wrapBodyInObject: ['wrapBodyInObject', boolean()], + requiredScopes: ['requiredScopes', array(string())], + parameters: ['parameters', array(lazy(() => parameterSchema))], + errors: ['errors', array(unknown())], + testCases: ['testCases', array(lazy(() => testCaseSchema))], +}); diff --git a/src/sdk/models/endpointsGroup.ts b/src/sdk/models/endpointsGroup.ts new file mode 100644 index 00000000..c6c49e03 --- /dev/null +++ b/src/sdk/models/endpointsGroup.ts @@ -0,0 +1,18 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { object, Schema, string } from '../schema'; + +/** This structure encapsulates all the attributes of an API Endpoints Group. */ +export interface EndpointsGroup { + name: string; + description: string; +} + +export const endpointsGroupSchema: Schema = object({ + name: ['name', string()], + description: ['description', string()], +}); diff --git a/src/sdk/models/exportFormats.ts b/src/sdk/models/exportFormats.ts new file mode 100644 index 00000000..56e2958e --- /dev/null +++ b/src/sdk/models/exportFormats.ts @@ -0,0 +1,34 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { Schema, stringEnum } from '../schema'; + +/** + * Enum for ExportFormats + */ +export enum ExportFormats { + APIMATIC = 'APIMATIC', + WADL2009 = 'WADL2009', + WSDL = 'WSDL', + SWAGGER10 = 'Swagger10', + SWAGGER20 = 'Swagger20', + SWAGGERYAML = 'SwaggerYaml', + OAS3 = 'OpenApi3Json', + OPENAPI3YAML = 'OpenApi3Yaml', + APIBLUEPRINT = 'APIBluePrint', + RAML = 'RAML', + RAML10 = 'RAML10', + POSTMAN10 = 'Postman10', + POSTMAN20 = 'Postman20', + GRAPHQLSCHEMA = 'GraphQlSchema', +} + +/** + * Schema for ExportFormats + */ +export const exportFormatsSchema: Schema = stringEnum( + ExportFormats +); diff --git a/src/sdk/models/field.ts b/src/sdk/models/field.ts new file mode 100644 index 00000000..7443b819 --- /dev/null +++ b/src/sdk/models/field.ts @@ -0,0 +1,51 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { boolean, lazy, object, Schema, string } from '../schema'; +import { Attributes, attributesSchema } from './attributes'; + +/** This structure encapsulates all details of a parameter. */ +export interface Field { + /** If parameter is optional */ + optional: boolean; + /** Type of Parameter */ + type: string; + /** IF Parameter is constant */ + constant: boolean; + /** If Param is collected as array */ + isArray: boolean; + isStream: boolean; + isAttribute: boolean; + isMap: boolean; + /** The structure contain attribute details of a parameter type. */ + attributes: Attributes; + /** If Parameter is nullable */ + nullable: boolean; + /** Unique Parameter identifier */ + id: string; + /** Parameter Name */ + name: string; + /** Parameter Description */ + description: string; + /** Default Values of a Parameter */ + defaultValue: string; +} + +export const fieldSchema: Schema = object({ + optional: ['optional', boolean()], + type: ['type', string()], + constant: ['constant', boolean()], + isArray: ['isArray', boolean()], + isStream: ['isStream', boolean()], + isAttribute: ['isAttribute', boolean()], + isMap: ['isMap', boolean()], + attributes: ['attributes', lazy(() => attributesSchema)], + nullable: ['nullable', boolean()], + id: ['id', string()], + name: ['name', string()], + description: ['description', string()], + defaultValue: ['defaultValue', string()], +}); diff --git a/src/sdk/models/generateSdkViaUrlRequest.ts b/src/sdk/models/generateSdkViaUrlRequest.ts new file mode 100644 index 00000000..10ca34bf --- /dev/null +++ b/src/sdk/models/generateSdkViaUrlRequest.ts @@ -0,0 +1,19 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { object, Schema, string } from '../schema'; +import { Platforms, platformsSchema } from './platforms'; + +export interface GenerateSdkViaUrlRequest { + /** The URL for the API specification file.

**Note:** This URL should be publicly accessible. */ + url: string; + /** The structure contains platforms that APIMatic CodeGen can generate SDKs and Docs in. */ + template: Platforms; +} + +export const generateSdkViaUrlRequestSchema: Schema = object( + { url: ['url', string()], template: ['template', platformsSchema] } +); diff --git a/src/sdk/models/id.ts b/src/sdk/models/id.ts new file mode 100644 index 00000000..66bc133c --- /dev/null +++ b/src/sdk/models/id.ts @@ -0,0 +1,19 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { Schema, stringEnum } from '../schema'; + +/** + * Enum for Id + */ +export enum Id { + Enum5dcd2b5893c3e31a206f30c4 = '5dcd2b5893c3e31a206f30c4', +} + +/** + * Schema for Id + */ +export const idSchema: Schema = stringEnum(Id); diff --git a/src/sdk/models/implementationType.ts b/src/sdk/models/implementationType.ts new file mode 100644 index 00000000..75d89bcd --- /dev/null +++ b/src/sdk/models/implementationType.ts @@ -0,0 +1,23 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { Schema, stringEnum } from '../schema'; + +/** + * Enum for ImplementationType + */ +export enum ImplementationType { + Structure = 'Structure', + Enumeration = 'Enumeration', + Exception = 'Exception', +} + +/** + * Schema for ImplementationType + */ +export const implementationTypeSchema: Schema = stringEnum( + ImplementationType +); diff --git a/src/sdk/models/importApiVersionViaUrlRequest.ts b/src/sdk/models/importApiVersionViaUrlRequest.ts new file mode 100644 index 00000000..88715aba --- /dev/null +++ b/src/sdk/models/importApiVersionViaUrlRequest.ts @@ -0,0 +1,19 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { object, Schema, string } from '../schema'; + +/** This structure contains details of importing a new API Version */ +export interface ImportApiVersionViaUrlRequest { + /** The version number with which the new API version will be imported. This version number will override the version specified in the API specification file.
APIMatic recommends versioning the API with the [versioning scheme](https://docs.apimatic.io/define-apis/basic-settings/#version) documented in the docs. */ + versionOverride: string; + /** The URL for the API specification file.

**Note:** This URL should be publicly accessible. */ + url: string; +} + +export const importApiVersionViaUrlRequestSchema: Schema = object( + { versionOverride: ['version_override', string()], url: ['url', string()] } +); diff --git a/src/sdk/models/importApiViaUrlRequest.ts b/src/sdk/models/importApiViaUrlRequest.ts new file mode 100644 index 00000000..9d647960 --- /dev/null +++ b/src/sdk/models/importApiViaUrlRequest.ts @@ -0,0 +1,17 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { object, Schema, string } from '../schema'; + +/** Contains a url field to allow Apis to be imported via url */ +export interface ImportApiViaUrlRequest { + /** The URL for the API specification file.

**Note:** This URL should be publicly accessible. */ + url: string; +} + +export const importApiViaUrlRequestSchema: Schema = object( + { url: ['url', string()] } +); diff --git a/src/sdk/models/importValidationSummary.ts b/src/sdk/models/importValidationSummary.ts new file mode 100644 index 00000000..de3b1c4b --- /dev/null +++ b/src/sdk/models/importValidationSummary.ts @@ -0,0 +1,23 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { array, boolean, object, Schema, string } from '../schema'; + +export interface ImportValidationSummary { + success: boolean; + errors: string[]; + warnings: string[]; + messages: string[]; +} + +export const importValidationSummarySchema: Schema = object( + { + success: ['success', boolean()], + errors: ['errors', array(string())], + warnings: ['warnings', array(string())], + messages: ['messages', array(string())], + } +); diff --git a/src/sdk/models/inplaceImportApiViaUrlRequest.ts b/src/sdk/models/inplaceImportApiViaUrlRequest.ts new file mode 100644 index 00000000..0901f702 --- /dev/null +++ b/src/sdk/models/inplaceImportApiViaUrlRequest.ts @@ -0,0 +1,17 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { object, Schema, string } from '../schema'; + +/** Contains a url field to allow Apis to be imported via url */ +export interface InplaceImportApiViaUrlRequest { + /** The URL for the API specification file.

**Note:** This URL should be publicly accessible. */ + url: string; +} + +export const inplaceImportApiViaUrlRequestSchema: Schema = object( + { url: ['url', string()] } +); diff --git a/src/sdk/models/inputParameter.ts b/src/sdk/models/inputParameter.ts new file mode 100644 index 00000000..48c1eba5 --- /dev/null +++ b/src/sdk/models/inputParameter.ts @@ -0,0 +1,29 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { boolean, object, Schema, string } from '../schema'; + +/** This structure helps specify details of an input parameter. */ +export interface InputParameter { + /** If parameter is null */ + isNull: boolean; + /** Unique parameter identifier for each endpoint */ + endpointInputPrameterId: string; + /** Unique parameter identifier */ + id: string; + /** Parameter Name */ + name: string; + /** Parameter Value */ + value: string; +} + +export const inputParameterSchema: Schema = object({ + isNull: ['isNull', boolean()], + endpointInputPrameterId: ['endpointInputPrameterId', string()], + id: ['id', string()], + name: ['name', string()], + value: ['value', string()], +}); diff --git a/src/sdk/models/link.ts b/src/sdk/models/link.ts new file mode 100644 index 00000000..6a57b1be --- /dev/null +++ b/src/sdk/models/link.ts @@ -0,0 +1,19 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { Schema, stringEnum } from '../schema'; + +/** + * Enum for Link + */ +export enum Link { + EnumHttpswwwnugetorgpackagesmyPackage111 = 'https://www.nuget.org/packages/myPackage/1.1.1', +} + +/** + * Schema for Link + */ +export const linkSchema: Schema = stringEnum(Link); diff --git a/src/sdk/models/links.ts b/src/sdk/models/links.ts new file mode 100644 index 00000000..4de41cc1 --- /dev/null +++ b/src/sdk/models/links.ts @@ -0,0 +1,17 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { object, Schema, string } from '../schema'; + +export interface Links { + status: string; + download: string; +} + +export const linksSchema: Schema = object({ + status: ['status', string()], + download: ['download', string()], +}); diff --git a/src/sdk/models/mEnvironment.ts b/src/sdk/models/mEnvironment.ts new file mode 100644 index 00000000..c91a840e --- /dev/null +++ b/src/sdk/models/mEnvironment.ts @@ -0,0 +1,24 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { array, lazy, object, Schema, string } from '../schema'; +import { Server, serverSchema } from './server'; + +/** An environment consists of a set of servers with base URL values. The environment can be changed programatically allowing rapid switching between different environments. For example the user can specify a Production and Testing Environment and switch between them in the generated SDK. */ +export interface MEnvironment { + /** Unique Environment Identifier */ + id: string; + /** Environment Name */ + name: string; + /** The user can specify multiple servers within an environment. A server comprises of a name and a url. */ + servers: Server[]; +} + +export const mEnvironmentSchema: Schema = object({ + id: ['id', string()], + name: ['name', string()], + servers: ['servers', array(lazy(() => serverSchema))], +}); diff --git a/src/sdk/models/metaData.ts b/src/sdk/models/metaData.ts new file mode 100644 index 00000000..3900a88b --- /dev/null +++ b/src/sdk/models/metaData.ts @@ -0,0 +1,40 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { lazy, object, Schema } from '../schema'; +import { + ApiValidationSummary, + apiValidationSummarySchema, +} from './apiValidationSummary'; +import { + DocsValidationSummary, + docsValidationSummarySchema, +} from './docsValidationSummary'; +import { + ImportValidationSummary, + importValidationSummarySchema, +} from './importValidationSummary'; + +export interface MetaData { + importValidationSummary: ImportValidationSummary; + apiValidationSummary: ApiValidationSummary; + docsValidationSummary: DocsValidationSummary; +} + +export const metaDataSchema: Schema = object({ + importValidationSummary: [ + 'importValidationSummary', + lazy(() => importValidationSummarySchema), + ], + apiValidationSummary: [ + 'apiValidationSummary', + lazy(() => apiValidationSummarySchema), + ], + docsValidationSummary: [ + 'docsValidationSummary', + lazy(() => docsValidationSummarySchema), + ], +}); diff --git a/src/sdk/models/packageDeploymentInformation.ts b/src/sdk/models/packageDeploymentInformation.ts new file mode 100644 index 00000000..db709a79 --- /dev/null +++ b/src/sdk/models/packageDeploymentInformation.ts @@ -0,0 +1,29 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { lazy, object, Schema, string } from '../schema'; +import { + TemplatesPackageDeploymentInformation, + templatesPackageDeploymentInformationSchema, +} from './templatesPackageDeploymentInformation'; + +/** The structure contains Package Deployment Information along with Id. */ +export interface PackageDeploymentInformation { + /** Package Deployment Identifier */ + id: string; + /** This structure encapsulates all package deployment details. */ + templatesPackageDeploymentInformation: TemplatesPackageDeploymentInformation; +} + +export const packageDeploymentInformationSchema: Schema = object( + { + id: ['id', string()], + templatesPackageDeploymentInformation: [ + 'templatesPackageDeploymentInformation', + lazy(() => templatesPackageDeploymentInformationSchema), + ], + } +); diff --git a/src/sdk/models/packageRepositories.ts b/src/sdk/models/packageRepositories.ts new file mode 100644 index 00000000..f1f50918 --- /dev/null +++ b/src/sdk/models/packageRepositories.ts @@ -0,0 +1,23 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { Schema, stringEnum } from '../schema'; + +/** + * Enum for PackageRepositories + */ +export enum PackageRepositories { + Npm = 'Npm', + PyPI = 'PyPI', + RubyGems = 'RubyGems', +} + +/** + * Schema for PackageRepositories + */ +export const packageRepositoriesSchema: Schema = stringEnum( + PackageRepositories +); diff --git a/src/sdk/models/parameter.ts b/src/sdk/models/parameter.ts new file mode 100644 index 00000000..442838b4 --- /dev/null +++ b/src/sdk/models/parameter.ts @@ -0,0 +1,54 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { boolean, lazy, object, Schema, string } from '../schema'; +import { Attributes, attributesSchema } from './attributes'; + +/** Parameters are options passed with the endpoint */ +export interface Parameter { + /** If parameter is optional */ + optional: boolean; + /** Type of Parameter */ + type: string; + /** IF Parameter is constant */ + constant: boolean; + /** If Param is collected as array */ + isArray: boolean; + isStream: boolean; + isAttribute: boolean; + isMap: boolean; + /** The structure contain attribute details of a parameter type. */ + attributes: Attributes; + /** If Parameter is nullable */ + nullable: boolean; + /** Unique Parameter identifier */ + id: string; + /** Parameter Name */ + name: string; + /** Parameter Description */ + description: string; + /** Default Values of a Parameter */ + defaultValue: string; + /** Specify Parameter Format */ + paramFormat: string; +} + +export const parameterSchema: Schema = object({ + optional: ['optional', boolean()], + type: ['type', string()], + constant: ['constant', boolean()], + isArray: ['isArray', boolean()], + isStream: ['isStream', boolean()], + isAttribute: ['isAttribute', boolean()], + isMap: ['isMap', boolean()], + attributes: ['attributes', lazy(() => attributesSchema)], + nullable: ['nullable', boolean()], + id: ['id', string()], + name: ['name', string()], + description: ['description', string()], + defaultValue: ['defaultValue', string()], + paramFormat: ['ParamFormat', string()], +}); diff --git a/src/sdk/models/platforms.ts b/src/sdk/models/platforms.ts new file mode 100644 index 00000000..3799765f --- /dev/null +++ b/src/sdk/models/platforms.ts @@ -0,0 +1,25 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { Schema, stringEnum } from '../schema'; + +/** + * Enum for Platforms + */ +export enum Platforms { + CSNETSTANDARDLIB = 'CS_NET_STANDARD_LIB', + JAVAECLIPSEJRELIB = 'JAVA_ECLIPSE_JRE_LIB', + PHPGENERICLIBV2 = 'PHP_GENERIC_LIB_V2', + PYTHONGENERICLIB = 'PYTHON_GENERIC_LIB', + RUBYGENERICLIB = 'RUBY_GENERIC_LIB', + TSGENERICLIB = 'TS_GENERIC_LIB', + GOGENERICLIB = 'GO_GENERIC_LIB', +} + +/** + * Schema for Platforms + */ +export const platformsSchema: Schema = stringEnum(Platforms); diff --git a/src/sdk/models/portalGenerationAsyncResponse.ts b/src/sdk/models/portalGenerationAsyncResponse.ts new file mode 100644 index 00000000..b90808c2 --- /dev/null +++ b/src/sdk/models/portalGenerationAsyncResponse.ts @@ -0,0 +1,17 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { lazy, object, Schema, string } from '../schema'; +import { Links, linksSchema } from './links'; + +export interface PortalGenerationAsyncResponse { + id: string; + links: Links; +} + +export const portalGenerationAsyncResponseSchema: Schema = object( + { id: ['id', string()], links: ['links', lazy(() => linksSchema)] } +); diff --git a/src/sdk/models/portalGenerationStatusResponse.ts b/src/sdk/models/portalGenerationStatusResponse.ts new file mode 100644 index 00000000..1b3cc9fb --- /dev/null +++ b/src/sdk/models/portalGenerationStatusResponse.ts @@ -0,0 +1,16 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { object, Schema } from '../schema'; +import { Status, statusSchema } from './status'; + +export interface PortalGenerationStatusResponse { + status: Status; +} + +export const portalGenerationStatusResponseSchema: Schema = object( + { status: ['status', statusSchema] } +); diff --git a/src/sdk/models/publishPackageInput.ts b/src/sdk/models/publishPackageInput.ts new file mode 100644 index 00000000..5709b3fe --- /dev/null +++ b/src/sdk/models/publishPackageInput.ts @@ -0,0 +1,32 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { object, optional, Schema, string, unknown } from '../schema'; +import { + PackageRepositories, + packageRepositoriesSchema, +} from './packageRepositories'; +import { Platforms, platformsSchema } from './platforms'; + +export interface PublishPackageInput { + packageRepository: PackageRepositories; + /** The structure contains platforms that APIMatic CodeGen can generate SDKs and Docs in. */ + template: Platforms; + packageName: string; + version: string; + additionalDeploymentInformation?: unknown; +} + +export const publishPackageInputSchema: Schema = object({ + packageRepository: ['packageRepository', packageRepositoriesSchema], + template: ['template', platformsSchema], + packageName: ['packageName', string()], + version: ['version', string()], + additionalDeploymentInformation: [ + 'additionalDeploymentInformation', + optional(unknown()), + ], +}); diff --git a/src/sdk/models/publishedPackage.ts b/src/sdk/models/publishedPackage.ts new file mode 100644 index 00000000..3ae24acf --- /dev/null +++ b/src/sdk/models/publishedPackage.ts @@ -0,0 +1,40 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { lazy, object, optional, Schema, string, unknown } from '../schema'; +import { + AuthorIdentifiers, + authorIdentifiersSchema, +} from './authorIdentifiers'; + +export interface PublishedPackage { + id: string; + createdOn: string; + apiEntityId: string; + packageRepository: string; + template: string; + packageName: string; + version: string; + additionalDeploymentInformation?: unknown; + authorIdentifiers: AuthorIdentifiers; + link: string; +} + +export const publishedPackageSchema: Schema = object({ + id: ['id', string()], + createdOn: ['createdOn', string()], + apiEntityId: ['apiEntityId', string()], + packageRepository: ['packageRepository', string()], + template: ['template', string()], + packageName: ['packageName', string()], + version: ['version', string()], + additionalDeploymentInformation: [ + 'additionalDeploymentInformation', + optional(unknown()), + ], + authorIdentifiers: ['authorIdentifiers', lazy(() => authorIdentifiersSchema)], + link: ['link', string()], +}); diff --git a/src/sdk/models/response.ts b/src/sdk/models/response.ts new file mode 100644 index 00000000..b39e1e3a --- /dev/null +++ b/src/sdk/models/response.ts @@ -0,0 +1,48 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { boolean, lazy, object, Schema, string } from '../schema'; +import { Attributes, attributesSchema } from './attributes'; + +/** The structure encapsulates all details of a request response */ +export interface Response { + /** Specify if response is optional or not */ + optional: boolean; + /** Specify response type */ + type: string; + /** Specify if response is constant */ + constant: boolean; + /** Specify if response is array */ + isArray: boolean; + /** Specify if response is stream */ + isStream: boolean; + /** Specify if response has attributes */ + isAttribute: boolean; + /** Specify if response is collected as map */ + isMap: boolean; + /** The structure contain attribute details of a parameter type. */ + attributes: Attributes; + /** Specify is response is nullable */ + nullable: boolean; + /** Unique response identifier */ + id: string; + /** Response name */ + name: string; +} + +export const responseSchema: Schema = object({ + optional: ['optional', boolean()], + type: ['type', string()], + constant: ['constant', boolean()], + isArray: ['isArray', boolean()], + isStream: ['isStream', boolean()], + isAttribute: ['isAttribute', boolean()], + isMap: ['isMap', boolean()], + attributes: ['attributes', lazy(() => attributesSchema)], + nullable: ['nullable', boolean()], + id: ['id', string()], + name: ['name', string()], +}); diff --git a/src/sdk/models/server.ts b/src/sdk/models/server.ts new file mode 100644 index 00000000..6af68e83 --- /dev/null +++ b/src/sdk/models/server.ts @@ -0,0 +1,23 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { object, Schema, string } from '../schema'; + +/** The user can specify multiple servers within an environment. A server comprises of a name and a URL. The names of the hosts remain consistent over different environments but their values may vary. The URL values can contain any number of parameters defined. */ +export interface Server { + /** Unique Server identifier */ + id: string; + /** Server Name */ + name: string; + /** Server URL */ + url: string; +} + +export const serverSchema: Schema = object({ + id: ['id', string()], + name: ['name', string()], + url: ['url', string()], +}); diff --git a/src/sdk/models/serverConfiguration.ts b/src/sdk/models/serverConfiguration.ts new file mode 100644 index 00000000..4ca1cd9b --- /dev/null +++ b/src/sdk/models/serverConfiguration.ts @@ -0,0 +1,31 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { array, lazy, object, Schema, string } from '../schema'; +import { MEnvironment, mEnvironmentSchema } from './mEnvironment'; +import { Parameter, parameterSchema } from './parameter'; + +/** Server configurations can be used to create multiple environments, multiple servers that can be used with specific endpoints and server URLs with template paramters. */ +export interface ServerConfiguration { + /** Server Config Identifier */ + id: string; + /** Default Environment */ + defaultEnvironment: string; + /** Default Server */ + defaultServer: string; + /** Environment Identifier and Name */ + environments: MEnvironment[]; + /** Parameter Attributes */ + parameters: Parameter[]; +} + +export const serverConfigurationSchema: Schema = object({ + id: ['id', string()], + defaultEnvironment: ['defaultEnvironment', string()], + defaultServer: ['defaultServer', string()], + environments: ['environments', array(lazy(() => mEnvironmentSchema))], + parameters: ['parameters', array(lazy(() => parameterSchema))], +}); diff --git a/src/sdk/models/status.ts b/src/sdk/models/status.ts new file mode 100644 index 00000000..19ed2770 --- /dev/null +++ b/src/sdk/models/status.ts @@ -0,0 +1,21 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { Schema, stringEnum } from '../schema'; + +/** + * Enum for Status + */ +export enum Status { + Completed = 'Completed', + InProgress = 'InProgress', + Failed = 'Failed', +} + +/** + * Schema for Status + */ +export const statusSchema: Schema = stringEnum(Status); diff --git a/src/sdk/models/templatesPackageDeploymentInformation.ts b/src/sdk/models/templatesPackageDeploymentInformation.ts new file mode 100644 index 00000000..effd3009 --- /dev/null +++ b/src/sdk/models/templatesPackageDeploymentInformation.ts @@ -0,0 +1,23 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { lazy, object, Schema } from '../schema'; +import { CSNETSTANDARDLIB, cSNETSTANDARDLIBSchema } from './cSNETSTANDARDLIB'; + +/** This structure encapsulates all package deployment details. */ +export interface TemplatesPackageDeploymentInformation { + /** This structure contains all details that goes into package deployment. */ + cSNETSTANDARDLIB: CSNETSTANDARDLIB; +} + +export const templatesPackageDeploymentInformationSchema: Schema = object( + { + cSNETSTANDARDLIB: [ + 'CS_NET_STANDARD_LIB', + lazy(() => cSNETSTANDARDLIBSchema), + ], + } +); diff --git a/src/sdk/models/testCase.ts b/src/sdk/models/testCase.ts new file mode 100644 index 00000000..764b92c8 --- /dev/null +++ b/src/sdk/models/testCase.ts @@ -0,0 +1,58 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { array, boolean, lazy, object, Schema, string } from '../schema'; +import { InputParameter, inputParameterSchema } from './inputParameter'; + +/** APIMatic lets you define test cases for endpoints using the API Editor. The test cases are automatically generated for each language. This structure encapsulates all details of a Test Case. To find out more about defining Test Cases visit: https://docs.apimatic.io/testing/defining-your-first-test-case/ */ +export interface TestCase { + /** Unique Test Case identifier */ + id: string; + /** The Endpoint, test case is associated with */ + endpointId: string; + /** The API Entity, test case is associated with */ + apiId: string; + /** The Test Case name */ + name: string; + /** Enable/Disable a Test Case */ + enabled: boolean; + shouldPass: boolean; + /** Test case parameters */ + inputParameters: InputParameter[]; + /** Expected response status. We expect the status code to be 200 if the operation is successful, hence we input the value 200. */ + expectedStatus: string; + /** Expected Headers */ + expectedHeaders: string[]; + /** If this flag is disabled, it will cause the test case to fail if the response contains other headers than those listed in the expected headers list. */ + expectedHeadersAllowExtra: boolean; + /** Expected response goes in the expected body */ + expectedBody: string; + /** Specifies what to match */ + expectedBodyMatchMode: string; + /** If enabled, this will involve ensuring that the response body contains the array elements in the same order as the expected body. */ + expectedArrayOrderedMatching: boolean; + /** If enabled, this will ensure that the response body contains the same number of elements in the array as does the expected body. */ + expectedArrayCheckCount: boolean; + responseMatchSchema: boolean; +} + +export const testCaseSchema: Schema = object({ + id: ['id', string()], + endpointId: ['endpointId', string()], + apiId: ['apiId', string()], + name: ['name', string()], + enabled: ['enabled', boolean()], + shouldPass: ['shouldPass', boolean()], + inputParameters: ['inputParameters', array(lazy(() => inputParameterSchema))], + expectedStatus: ['expectedStatus', string()], + expectedHeaders: ['expectedHeaders', array(string())], + expectedHeadersAllowExtra: ['expectedHeadersAllowExtra', boolean()], + expectedBody: ['expectedBody', string()], + expectedBodyMatchMode: ['expectedBodyMatchMode', string()], + expectedArrayOrderedMatching: ['expectedArrayOrderedMatching', boolean()], + expectedArrayCheckCount: ['expectedArrayCheckCount', boolean()], + responseMatchSchema: ['responseMatchSchema', boolean()], +}); diff --git a/src/sdk/models/testGenSettings.ts b/src/sdk/models/testGenSettings.ts new file mode 100644 index 00000000..4a522efc --- /dev/null +++ b/src/sdk/models/testGenSettings.ts @@ -0,0 +1,23 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { number, object, optional, Schema, unknown } from '../schema'; + +/** This structure helps specify additional test configurations which affects how test cases are generated. */ +export interface TestGenSettings { + /** Error margin for comparing values in decimal places */ + precisionDelta: number; + /** Number of seconds after which if the endpoint is not returning any response, the test is forced to fail e.g. a timeout of 60 */ + testTimeout: number; + /** The parameters allows to provide values for configuration file for use in the test environment */ + configuration?: unknown; +} + +export const testGenSettingsSchema: Schema = object({ + precisionDelta: ['precisionDelta', number()], + testTimeout: ['testTimeout', number()], + configuration: ['configuration', optional(unknown())], +}); diff --git a/src/sdk/models/transformViaUrlRequest.ts b/src/sdk/models/transformViaUrlRequest.ts new file mode 100644 index 00000000..640712d5 --- /dev/null +++ b/src/sdk/models/transformViaUrlRequest.ts @@ -0,0 +1,23 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { object, Schema, string } from '../schema'; +import { ExportFormats, exportFormatsSchema } from './exportFormats'; + +/** This structure puts together the URL of the file to be transformed, along with the desired export format. */ +export interface TransformViaUrlRequest { + /** The URL for the API specification file.

**Note:** This URL should be publicly accessible. */ + url: string; + /** The structure contains API specification formats that Transformer can convert to. */ + exportFormat: ExportFormats; +} + +export const transformViaUrlRequestSchema: Schema = object( + { + url: ['url', string()], + exportFormat: ['export_format', exportFormatsSchema], + } +); diff --git a/src/sdk/models/transformation.ts b/src/sdk/models/transformation.ts new file mode 100644 index 00000000..1a9fc8a2 --- /dev/null +++ b/src/sdk/models/transformation.ts @@ -0,0 +1,55 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { boolean, lazy, object, Schema, string } from '../schema'; +import { + ApiValidationSummary, + apiValidationSummarySchema, +} from './apiValidationSummary'; + +/** Transformation structure encapsulates all the details of a Transformation. */ +export interface Transformation { + /** Unique Transformation Identifier */ + id: string; + /** Transformation Date and Time */ + transformedOn: string; + /** Unique User Identifier */ + userId: string; + /** API Specification file to be transformed */ + inputtedFile: string; + /** API Specification file transformed to desired format */ + generatedFile: string; + /** Desired Specification format */ + exportFormat: string; + /** Source of Transformation */ + transformationSource: string; + /** Via File or URL */ + transformationInput: string; + /** CodeGen Engine Version */ + codeGenVersion: string; + /** Successful Transformation Flag */ + success: boolean; + importSummary: ApiValidationSummary; + apiValidationSummary: ApiValidationSummary; +} + +export const transformationSchema: Schema = object({ + id: ['id', string()], + transformedOn: ['transformedOn', string()], + userId: ['userId', string()], + inputtedFile: ['inputtedFile', string()], + generatedFile: ['generatedFile', string()], + exportFormat: ['exportFormat', string()], + transformationSource: ['transformationSource', string()], + transformationInput: ['transformationInput', string()], + codeGenVersion: ['codeGenVersion', string()], + success: ['success', boolean()], + importSummary: ['importSummary', lazy(() => apiValidationSummarySchema)], + apiValidationSummary: [ + 'apiValidationSummary', + lazy(() => apiValidationSummarySchema), + ], +}); diff --git a/src/sdk/models/updatePackageDeploymentInformation.ts b/src/sdk/models/updatePackageDeploymentInformation.ts new file mode 100644 index 00000000..7b3f9ed6 --- /dev/null +++ b/src/sdk/models/updatePackageDeploymentInformation.ts @@ -0,0 +1,26 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { lazy, object, Schema } from '../schema'; +import { + UpdateTemplatesPackageDeploymentInformation, + updateTemplatesPackageDeploymentInformationSchema, +} from './updateTemplatesPackageDeploymentInformation'; + +/** This structure is used to update package deployment details. */ +export interface UpdatePackageDeploymentInformation { + /** This structure helps update package deployment details. */ + templatesPackageDeploymentInformation: UpdateTemplatesPackageDeploymentInformation; +} + +export const updatePackageDeploymentInformationSchema: Schema = object( + { + templatesPackageDeploymentInformation: [ + 'templatesPackageDeploymentInformation', + lazy(() => updateTemplatesPackageDeploymentInformationSchema), + ], + } +); diff --git a/src/sdk/models/updateTemplatesPackageDeploymentInformation.ts b/src/sdk/models/updateTemplatesPackageDeploymentInformation.ts new file mode 100644 index 00000000..1b504ae4 --- /dev/null +++ b/src/sdk/models/updateTemplatesPackageDeploymentInformation.ts @@ -0,0 +1,23 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { lazy, object, Schema } from '../schema'; +import { CSNETSTANDARDLIB, cSNETSTANDARDLIBSchema } from './cSNETSTANDARDLIB'; + +/** This structure helps update package deployment details. */ +export interface UpdateTemplatesPackageDeploymentInformation { + /** This structure contains all details that goes into package deployment. */ + cSNETSTANDARDLIB: CSNETSTANDARDLIB; +} + +export const updateTemplatesPackageDeploymentInformationSchema: Schema = object( + { + cSNETSTANDARDLIB: [ + 'CS_NET_STANDARD_LIB', + lazy(() => cSNETSTANDARDLIBSchema), + ], + } +); diff --git a/src/sdk/models/userCodeGeneration.ts b/src/sdk/models/userCodeGeneration.ts new file mode 100644 index 00000000..7d7bb0f5 --- /dev/null +++ b/src/sdk/models/userCodeGeneration.ts @@ -0,0 +1,45 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { boolean, object, Schema, string } from '../schema'; +import { Platforms, platformsSchema } from './platforms'; + +/** The Code Generation structure encapsulates all the the details of an SDK generation performed by a user. */ +export interface UserCodeGeneration { + /** Unique Code Generation Identifier */ + id: string; + /** The structure contains platforms that APIMatic CodeGen can generate SDKs and Docs in. */ + template: Platforms; + /** The generated SDK */ + generatedFile: string; + /** Generation Date and Time */ + generatedOn: string; + /** The md5 hash of the API Description */ + hashCode: string; + /** Generation Source */ + codeGenerationSource: string; + /** Generation Version */ + codeGenVersion: string; + /** Generation Status */ + success: boolean; + /** Unique User Identifier */ + userId: string; + /** API Specification file in a supported format */ + inputFile: string; +} + +export const userCodeGenerationSchema: Schema = object({ + id: ['id', string()], + template: ['template', platformsSchema], + generatedFile: ['generatedFile', string()], + generatedOn: ['generatedOn', string()], + hashCode: ['hashCode', string()], + codeGenerationSource: ['codeGenerationSource', string()], + codeGenVersion: ['codeGenVersion', string()], + success: ['success', boolean()], + userId: ['userId', string()], + inputFile: ['inputFile', string()], +}); diff --git a/src/sdk/models/validationException.ts b/src/sdk/models/validationException.ts new file mode 100644 index 00000000..78640998 --- /dev/null +++ b/src/sdk/models/validationException.ts @@ -0,0 +1,19 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { object, optional, Schema, string } from '../schema'; + +/** Validation exception contains information, warnings, messages and errors. */ +export interface ValidationException { + reason: string; + /** Validation Summary of the API in case validation failed */ + summary?: string; +} + +export const validationExceptionSchema: Schema = object({ + reason: ['reason', string()], + summary: ['summary', optional(string())], +}); diff --git a/src/sdk/schema.ts b/src/sdk/schema.ts new file mode 100644 index 00000000..f84e93f6 --- /dev/null +++ b/src/sdk/schema.ts @@ -0,0 +1,7 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +export * from '@apimatic/schema'; diff --git a/src/types/common/result.ts b/src/types/common/result.ts new file mode 100644 index 00000000..9a396508 --- /dev/null +++ b/src/types/common/result.ts @@ -0,0 +1,15 @@ +export class Result { + private constructor( + public readonly isSuccess: boolean, + public readonly value?: T, + public readonly error?: TError + ) {} + + public static success(value: T): Result { + return new Result(true, value, undefined); + } + + public static failure(error: TError): Result { + return new Result(false, undefined, error); + } +} \ No newline at end of file diff --git a/src/types/portal/generate.ts b/src/types/portal/generate.ts index 2bfce385..edc38c7d 100644 --- a/src/types/portal/generate.ts +++ b/src/types/portal/generate.ts @@ -1,10 +1,29 @@ -import { DocsPortalManagementController } from "@apimatic/sdk"; - -export type GeneratePortalParams = { - zippedBuildFilePath: string; - portalFolderPath: string; - zippedPortalPath: string; - docsPortalController: DocsPortalManagementController; - overrideAuthKey: string | null; - zip: boolean; +export interface GeneratePortalParams { + readonly sourceBuildInputZipFilePath: string; + readonly generatedPortalArtifactsFolderPath: string; + readonly generatedPortalArtifactsZipFilePath: string; + readonly overrideAuthKey: string | null; + readonly generateZipFile: boolean; }; + +export interface PortalPaths { + readonly sourceFolderPath: string; + readonly destinationFolderPath: string; + readonly generatedPortalArtifactsFolderPath: string; + readonly generatedPortalArtifactsZipFilePath: string; +} + +export interface ErrorResponse { + readonly title: string; + readonly detail?: string; + readonly errors: Record; + readonly message?: string; +} + +export interface GenerateFlags { + readonly folder: string; + readonly destination: string; + readonly force: boolean; + readonly zip: boolean; + readonly "auth-key": string; +} \ No newline at end of file diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 74264f9e..c4b49f8c 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -146,13 +146,10 @@ export const deleteFile = async (filePath: string) => { }; export const writeFileUsingReadableStream = (stream: NodeJS.ReadableStream, destinationPath: string) => { - return new Promise((resolve, reject) => { + return new Promise((resolve) => { const writeStream = fs.createWriteStream(destinationPath); stream.pipe(writeStream); - writeStream.on("close", (error: Error) => { - if (error) { - return reject(new Error("Couldn't zip the stream")); - } + writeStream.on("close", () => { resolve("Zipped"); }); }); @@ -228,12 +225,12 @@ export const isJSONParsable = (json: string) => { } }; -export const getGeneratedFilesPaths = (sourceDir: string, portalDir: string): string[] => { - const generatedZipPath = path.join(sourceDir, ".portal_source.zip"); - const generatedPortalZipPath = path.join(sourceDir, ".generated_portal.zip"); - const generatedPortalPath = path.join(path.dirname(portalDir), "generated_portal"); +export const getGeneratedFilesPaths = (sourceDirectoryPath: string, generatedPortalArtifactsDirectoryPath: string): string[] => { + const generatedBuildInputZipPath = path.join(sourceDirectoryPath, ".portal_source.zip"); + const generatedPortalArtifactsZipFilePath = path.join(sourceDirectoryPath, ".generated_portal.zip"); + const generatedPortalArtifactsFolderPath = path.join(path.dirname(generatedPortalArtifactsDirectoryPath), "generated_portal"); - return [generatedZipPath, generatedPortalPath, generatedPortalZipPath]; + return [generatedBuildInputZipPath, generatedPortalArtifactsFolderPath, generatedPortalArtifactsZipFilePath]; }; export const getFileNameFromPath = (filePath: string) => { @@ -317,14 +314,6 @@ export async function validateAndZipPortalSource( zlib: { level: 9 } }); - const items = await fs.readdir(sourceDir); - - if (!items.some((item) => item.startsWith("APIMATIC-BUILD"))) { - throw new Error( - "APIMatic Build file is missing, portal cannot be generated. Please specify a valid APIMatic build file and try again." - ); - } - return new Promise((resolve, reject) => { output.on("close", () => resolve(outputPath)); output.on("error", (err) => { @@ -408,6 +397,15 @@ export function isPortInUse(port: number): Promise { }); } +export async function parseStreamBodyToJson(body: NodeJS.ReadableStream): Promise { + const chunks: Buffer[] = []; + for await (const chunk of body) { + chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)); + } + const text = Buffer.concat(chunks).toString("utf-8"); + return JSON.parse(text); +} + export const getNonHiddenItemsFromDirectory = (directoryPath: string): string[] => { return fs.readdirSync(directoryPath).filter((item) => !item.startsWith(".")); }; diff --git a/test/commands/api/transform.test.ts b/test/commands/api/transform.test.ts deleted file mode 100644 index 8bc8cefd..00000000 --- a/test/commands/api/transform.test.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {expect, test} from '@oclif/test' - -describe('api:transform', () => { - test - .stdout() - .command(['api:transform']) - .it('runs hello', ctx => { - expect(ctx.stdout).to.contain('hello world') - }) - - test - .stdout() - .command(['api:transform', '--name', 'jeff']) - .it('runs hello --name jeff', ctx => { - expect(ctx.stdout).to.contain('hello jeff') - }) -}) diff --git a/test/commands/api/validate.test.ts b/test/commands/api/validate.test.ts deleted file mode 100644 index 221af74c..00000000 --- a/test/commands/api/validate.test.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {expect, test} from '@oclif/test' - -describe('api:validate', () => { - test - .stdout() - .command(['api:validate']) - .it('runs hello', ctx => { - expect(ctx.stdout).to.contain('hello world') - }) - - test - .stdout() - .command(['api:validate', '--name', 'jeff']) - .it('runs hello --name jeff', ctx => { - expect(ctx.stdout).to.contain('hello jeff') - }) -}) diff --git a/test/commands/hello.test.ts b/test/commands/hello.test.ts deleted file mode 100644 index 5d22255c..00000000 --- a/test/commands/hello.test.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {expect, test} from '@oclif/test' - -describe('hello', () => { - test - .stdout() - .command(['hello']) - .it('runs hello', ctx => { - expect(ctx.stdout).to.contain('hello world') - }) - - test - .stdout() - .command(['hello', '--name', 'jeff']) - .it('runs hello --name jeff', ctx => { - expect(ctx.stdout).to.contain('hello jeff') - }) -}) diff --git a/test/commands/portal/generate.test.ts b/test/commands/portal/generate.test.ts index 296bb490..af11b461 100644 --- a/test/commands/portal/generate.test.ts +++ b/test/commands/portal/generate.test.ts @@ -1,17 +1,248 @@ -import {expect, test} from '@oclif/test' - -describe('portal:generate', () => { - test - .stdout() - .command(['portal:generate']) - .it('runs hello', ctx => { - expect(ctx.stdout).to.contain('hello world') - }) - - test - .stdout() - .command(['portal:generate', '--name', 'jeff']) - .it('runs hello --name jeff', ctx => { - expect(ctx.stdout).to.contain('hello jeff') - }) -}) +import * as fs from "fs"; +import * as fsExtra from "fs-extra"; +import * as path from "path"; +import * as nock from "nock"; +import { expect } from "chai"; +import { runCommand } from "@oclif/test"; +import { SimpleGitOptions, simpleGit } from "simple-git"; +import { baseURL, staticPortalRepoUrl } from "../../../src/config/env"; +import { EventEmitter } from "events"; +EventEmitter.defaultMaxListeners = 50; + +const COMMAND = "portal:generate"; +const GENERATION_SUCCESS_MESSAGE = "The generated portal can be found at"; +const GENERATION_FAILURE_MESSAGE = "Something went wrong while generating your portal"; +const AUTHENTICATION_FAILURE_MESSAGE = "Authorization has been denied for this request"; +const VALIDATION_FAILURE_MESSAGE = "One or more validation errors occurred"; +const BUILD_FILE_MISSING_MESSAGE = "Build file not found"; +const SUBSCRIPTION_FAILURE_MESSAGE = "Access denied to resource"; +const SUBSCRIPTION_FAILURE_DETAILS_MESSAGE = "Requested features are not available in subscription"; + +async function setupValidBuildDirectory(targetFolder: string): Promise { + const options: Partial = { + timeout: { + block: 60 * 1000 // 1 minute timeout. + } + }; + const git = simpleGit(options); + try { + await git.clone(staticPortalRepoUrl, targetFolder); + } catch (error) { + throw new Error("Failed to setup valid build directory: " + (error as Error).message); + } + + await fsExtra.remove(path.join(targetFolder, ".git")); + await fsExtra.remove(path.join(targetFolder, ".github")); +} + +describe("apimatic portal:generate", function () { + const portalArtifactsDir = path.join(process.cwd(), "test-portal"); + const sourceBuildInputDir = path.join(process.cwd(), "test-source"); + + const cleanTestDir = () => { + if (fs.existsSync(portalArtifactsDir)) { + fs.rmSync(portalArtifactsDir, { recursive: true, force: true }); + } + if (fs.existsSync(sourceBuildInputDir)) { + fs.rmSync(sourceBuildInputDir, { recursive: true, force: true }); + } + }; + + beforeEach(() => { + cleanTestDir(); + fs.mkdirSync(sourceBuildInputDir); + fs.mkdirSync(portalArtifactsDir); + }); + + afterEach(() => { + cleanTestDir(); + nock.cleanAll(); + nock.restore(); + }); + + // Basic command execution + it("runs portal:generate with default flags and valid build input", async () => { + await setupValidBuildDirectory(sourceBuildInputDir); + const { stdout, stderr } = await runCommand([ + COMMAND, + "--folder", + sourceBuildInputDir, + "--destination", + portalArtifactsDir + ]); + expect(stderr).to.be.empty; + expect(stdout).to.contain(GENERATION_SUCCESS_MESSAGE); + expect(fs.existsSync(path.join(portalArtifactsDir, "generated_portal"))).to.be.true; + }); + + // Flag validation + it("validates source folder path exists", async () => { + const {error } = await runCommand([COMMAND, "--folder", "non-existent-folder"]); + expect(error?.message).to.contain("does not exist"); + }); + + it("validates destination path exists", async () => { + const { error } = await runCommand([COMMAND, "--destination", "non-existent-destination"]); + expect(error?.message).to.contain("does not exist"); + }); + + it("validates APIMatic build file exists", async () => { + await setupValidBuildDirectory(sourceBuildInputDir); + fs.rmSync(path.join(sourceBuildInputDir, "APIMATIC-BUILD.json")); + const { stdout } = await runCommand([ + COMMAND, + "--folder", + sourceBuildInputDir, + "--destination", + portalArtifactsDir + ]); + expect(stdout).to.contain(BUILD_FILE_MISSING_MESSAGE); + }); + + // File system operations + describe("file system operations", () => { + it("creates portal directory with correct structure", async () => { + await setupValidBuildDirectory(sourceBuildInputDir); + await runCommand([COMMAND, "--folder", sourceBuildInputDir, "--destination", portalArtifactsDir]); + expect(fs.existsSync(path.join(portalArtifactsDir, "generated_portal"))).to.be.true; + expect(fs.existsSync(path.join(portalArtifactsDir, "generated_portal", "index.html"))).to.be.true; + }); + + it("creates zip file when --zip flag is used", async () => { + await setupValidBuildDirectory(sourceBuildInputDir); + await runCommand([COMMAND, "--folder", sourceBuildInputDir, "--destination", portalArtifactsDir, "--zip"]); + expect(fs.existsSync(path.join(portalArtifactsDir, ".generated_portal.zip"))).to.be.true; + }); + + it("overwrites existing portal with --force", async () => { + await setupValidBuildDirectory(sourceBuildInputDir); + fs.mkdirSync(path.join(portalArtifactsDir, "generated_portal")); + const { stdout } = await runCommand([ + COMMAND, + "--folder", + sourceBuildInputDir, + "--destination", + portalArtifactsDir, + "--force" + ]); + expect(stdout).to.contain(GENERATION_SUCCESS_MESSAGE); + }); + + it("generates and zips portal while forcefully overwriting existing portal in one command", async () => { + await setupValidBuildDirectory(sourceBuildInputDir); + const { stdout } = await runCommand([ + COMMAND, + "--folder", + sourceBuildInputDir, + "--destination", + portalArtifactsDir, + "--zip", + "--force" + ]); + expect(stdout).to.contain(GENERATION_SUCCESS_MESSAGE); + expect(fs.existsSync(path.join(portalArtifactsDir, ".generated_portal.zip"))).to.be.true; + }); + }); + + // API error responses handling + describe("API error responses", () => { + it("throws 400 error due to invalid APIMatic build file", async () => { + await setupValidBuildDirectory(sourceBuildInputDir); + fs.writeFileSync( + path.join(sourceBuildInputDir, "APIMATIC-BUILD.json"), + JSON.stringify({ + dummy: "dummyValue" + }) + ); + const { stdout, error } = await runCommand([ + COMMAND, + "--folder", + sourceBuildInputDir, + "--destination", + portalArtifactsDir + ]); + expect(stdout).to.contain(GENERATION_FAILURE_MESSAGE); + expect(stdout).to.contain(VALIDATION_FAILURE_MESSAGE); + expect(stdout).to.contain( + "No build tasks provided. Both generatePortal and generateVersionedPortal are null" + ); + }); + + it("throws 401 error due to invalid authentication key", async () => { + await setupValidBuildDirectory(sourceBuildInputDir); + const { stdout, error } = await runCommand([ + COMMAND, + "--folder", + sourceBuildInputDir, + "--destination", + portalArtifactsDir, + "--auth-key", + "invalid-auth-key" + ]); + expect(stdout).to.contain(GENERATION_FAILURE_MESSAGE); + expect(stdout).to.contain(AUTHENTICATION_FAILURE_MESSAGE); + }); + + it("throws 403 error due to subscription error", async () => { + nock.disableNetConnect(); + await setupValidBuildDirectory(sourceBuildInputDir); + + nock(baseURL) + .post("/portal") + .matchHeader("Authorization", "X-Auth-Key valid-but-restricted-auth-key") + .matchHeader("Content-Type", (val) => val?.startsWith("multipart/form-data")) + .reply(403, { + type: "https://datatracker.ietf.org/doc/html/rfc7231#section-6.5.3", + title: "Access denied to resource.", + status: 403, + detail: "Requested features are not available in subscription", + instance: "/api/portal", + errors: { + "": ["Unsupported languages provided in build file 'CS_NET_STANDARD_LIB'"] + } + }); + + const { stdout, error } = await runCommand([ + COMMAND, + "--folder", + sourceBuildInputDir, + "--destination", + portalArtifactsDir, + "--auth-key", + "valid-but-restricted-auth-key" + ]); + expect(stdout).to.contain(GENERATION_FAILURE_MESSAGE); + expect(stdout).to.contain(SUBSCRIPTION_FAILURE_MESSAGE); + expect(stdout).to.contain(SUBSCRIPTION_FAILURE_DETAILS_MESSAGE); + expect(stdout).to.contain("Unsupported languages provided in build file 'CS_NET_STANDARD_LIB'"); + nock.enableNetConnect(); + }); + + it("throw 422 error due to validation issues related to toc", async () => { + const INVALID_TOC_YAML = `toc: + - group: My Guides + items: + - page: Guide Page 1 + file: guide1.md + - page: Guide Page 2 + `; + + await setupValidBuildDirectory(sourceBuildInputDir); + fs.writeFileSync(path.join(sourceBuildInputDir, "content", "guides", "toc.yml"), INVALID_TOC_YAML); + + const { stdout, error } = await runCommand([ + COMMAND, + "--folder", + sourceBuildInputDir, + "--destination", + portalArtifactsDir + ]); + expect(stdout).to.contain(GENERATION_FAILURE_MESSAGE); + expect(stdout).to.contain( + "An error occurred during portal generation due to an issue with the input. An error report has been written at the destination path" + ); + expect(fs.existsSync(path.join(portalArtifactsDir, "generated_portal", "apimatic-debug", "apimatic-report.html"))) + .to.be.true; + }); + }); +}); diff --git a/test/commands/sdk/generate.test.ts b/test/commands/sdk/generate.test.ts deleted file mode 100644 index 39e66020..00000000 --- a/test/commands/sdk/generate.test.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {expect, test} from '@oclif/test' - -describe('sdk:generate', () => { - test - .stdout() - .command(['sdk:generate']) - .it('runs hello', ctx => { - expect(ctx.stdout).to.contain('hello world') - }) - - test - .stdout() - .command(['sdk:generate', '--name', 'jeff']) - .it('runs hello --name jeff', ctx => { - expect(ctx.stdout).to.contain('hello jeff') - }) -}) diff --git a/test/tsconfig.json b/test/tsconfig.json index 95898fce..a257c429 100644 --- a/test/tsconfig.json +++ b/test/tsconfig.json @@ -1,7 +1,8 @@ { "extends": "../tsconfig", "compilerOptions": { - "noEmit": true + "noEmit": true, + "composite": true }, "references": [ {"path": ".."} diff --git a/tsconfig.json b/tsconfig.json index 03784fac..e121dd5e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,7 +9,10 @@ "strict": true, "target": "es2017", "lib": ["es2018", "dom"], - "inlineSourceMap": true + "paths": { + "@apimatic/sdk": ["./src/sdk"] + }, + "inlineSourceMap": true, }, "include": [ "src/**/*" From 78f2ece819a6bad66aa11e60a6ecacf529afdbf7 Mon Sep 17 00:00:00 2001 From: Ali Asghar <75574550+aliasghar98@users.noreply.github.com> Date: Tue, 17 Jun 2025 10:50:49 +0500 Subject: [PATCH 03/11] fix: improves portal generate error messaging (#80) --- src/actions/portal/generate.ts | 2 +- src/infrastructure/services/portal-service.ts | 19 ++++++++++++------- src/prompts/portal/generate.ts | 2 +- .../docsPortalManagementController.ts | 2 ++ .../internalServerErrorResponseError.ts | 18 ++++++++++++++++++ src/sdk/index.ts | 1 + 6 files changed, 35 insertions(+), 9 deletions(-) create mode 100644 src/sdk/errors/internalServerErrorResponseError.ts diff --git a/src/actions/portal/generate.ts b/src/actions/portal/generate.ts index 217c5513..5e8c93b5 100644 --- a/src/actions/portal/generate.ts +++ b/src/actions/portal/generate.ts @@ -60,7 +60,7 @@ export class PortalGenerateAction { } else { this.prompts.displayPortalGenerationErrorMessage(); this.prompts.logError( - getMessageInRedColor(`An error occurred while generating the portal: \n${portalGenerationResult.error!}`) + getMessageInRedColor(`${portalGenerationResult.error!}`) ); } } diff --git a/src/infrastructure/services/portal-service.ts b/src/infrastructure/services/portal-service.ts index 63db4dd8..a9343f06 100644 --- a/src/infrastructure/services/portal-service.ts +++ b/src/infrastructure/services/portal-service.ts @@ -1,12 +1,16 @@ import * as fsExtra from "fs-extra"; import * as fs from "fs"; -import { FileWrapper, ApiResponse, ApiError } from "@apimatic/sdk"; +import * as path from "path"; import { ContentType, DocsPortalManagementController, Client, UnauthorizedResponseError, - ProblemDetailsError + ProblemDetailsError, + FileWrapper, + ApiResponse, + ApiError, + InternalServerErrorResponseError } from "@apimatic/sdk"; import { AuthInfo, getAuthInfo } from "../../client-utils/auth-manager"; import { GeneratePortalParams, ErrorResponse } from "../../types/portal/generate"; @@ -70,7 +74,7 @@ export class PortalService { if (error instanceof UnauthorizedResponseError) { //401 const body = await this.parseErrorResponse(error); - return getMessageInRedColor(body.message ?? "Unauthorized access"); + return getMessageInRedColor(body.message ?? "Unauthorized access."); } else if (error instanceof ProblemDetailsError) { //400 & 403 const body = await this.parseErrorResponse(error); @@ -79,11 +83,11 @@ export class PortalService { } else if (error instanceof ApiError && error.statusCode === 422) { //422 return await this.saveAndExtractErrorZipFile(error, params); - } else if (error instanceof ApiError && error.statusCode === 500) { + } else if (error instanceof InternalServerErrorResponseError) { //500 - //TODO: Replace this message with the one returned by the API once we improve the messaging. + const body = await this.parseErrorResponse(error); return getMessageInRedColor( - "An internal server error occurred. Please try again or reach out to our team at support@apimatic.io for help if your problem persists." + `${body.message} Please try again or reach out to our team at support@apimatic.io for help if your problem persists.` ); } else { return getMessageInRedColor(error instanceof Error ? error.message : String(error)); @@ -109,10 +113,11 @@ export class PortalService { .on("finish", async () => { await extractZipFile(params.generatedPortalArtifactsZipFilePath, params.generatedPortalArtifactsFolderPath); await deleteFile(params.generatedPortalArtifactsZipFilePath); + await deleteFile(path.join(params.generatedPortalArtifactsFolderPath, "static")); resolve( getMessageInRedColor( "An error occurred during portal generation due to an issue with the input. An error report has been written at the destination path: " + - params.generatedPortalArtifactsFolderPath + path.join(params.generatedPortalArtifactsFolderPath, "apimatic-debug") ) ); }) diff --git a/src/prompts/portal/generate.ts b/src/prompts/portal/generate.ts index 2e58b77f..74e67378 100644 --- a/src/prompts/portal/generate.ts +++ b/src/prompts/portal/generate.ts @@ -56,7 +56,7 @@ export class PortalGeneratePrompts { } displayPortalGenerationErrorMessage(): void { - this.spin.stop(getMessageInRedColor(`Something went wrong while generating your portal.`)); + this.spin.stop(getMessageInRedColor(`Portal Generation failed.`)); } displayOutroMessage(generatedPortalPath: string): void { diff --git a/src/sdk/controllers/docsPortalManagementController.ts b/src/sdk/controllers/docsPortalManagementController.ts index cec8625f..a36232df 100644 --- a/src/sdk/controllers/docsPortalManagementController.ts +++ b/src/sdk/controllers/docsPortalManagementController.ts @@ -10,6 +10,7 @@ import { ContentType, contentTypeSchema } from '../models/contentType'; import { array, optional, string, unknown } from '../schema'; import { BaseController } from './baseController'; import { ApiError } from '@apimatic/core'; +import { InternalServerErrorResponseError } from '../errors/internalServerErrorResponseError'; import { ProblemDetailsError } from '../errors/problemDetailsError'; import { UnauthorizedResponseError } from '../errors/unauthorizedResponseError'; @@ -139,6 +140,7 @@ export class DocsPortalManagementController extends BaseController { ApiError, 'Unprocessable Entity - Contains error.zip for build issues' ); + req.throwOn(500, InternalServerErrorResponseError, 'Internal Server Error'); req.authenticate([{ authorization: true }]); return req.callAsStream(requestOptions); } diff --git a/src/sdk/errors/internalServerErrorResponseError.ts b/src/sdk/errors/internalServerErrorResponseError.ts new file mode 100644 index 00000000..618690a8 --- /dev/null +++ b/src/sdk/errors/internalServerErrorResponseError.ts @@ -0,0 +1,18 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { ApiError } from '../core'; + +/** + * Creates an instance of InternalServerErrorResponse + */ +interface InternalServerErrorResponse { + message?: string; +} + +export class InternalServerErrorResponseError extends ApiError< + InternalServerErrorResponse +> {} diff --git a/src/sdk/index.ts b/src/sdk/index.ts index 7d2c1104..aa881429 100644 --- a/src/sdk/index.ts +++ b/src/sdk/index.ts @@ -25,6 +25,7 @@ export * from './controllers/docsPortalGenerationAsyncController'; export * from './controllers/docsPortalManagementController'; export * from './controllers/transformationController'; export { ApiError } from './core'; +export * from './errors/internalServerErrorResponseError'; export * from './errors/problemDetailsError'; export * from './errors/unauthorizedResponseError'; export { Accept } from './models/accept'; From 4f154cbf08abd07d928545437f746df9d059f058 Mon Sep 17 00:00:00 2001 From: Ali Asghar <75574550+aliasghar98@users.noreply.github.com> Date: Tue, 17 Jun 2025 10:51:57 +0500 Subject: [PATCH 04/11] fix(sdk): updated sdk generation platform names and added golang (#79) Closes #72, Closes #73. --- src/commands/sdk/generate.ts | 4 ++-- src/types/sdk/generate.ts | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/commands/sdk/generate.ts b/src/commands/sdk/generate.ts index 4aeb8d67..58c2f660 100644 --- a/src/commands/sdk/generate.ts +++ b/src/commands/sdk/generate.ts @@ -17,8 +17,8 @@ export default class SdkGenerate extends Command { parse: async (input) => input.toUpperCase(), required: true, description: `language platform for sdk -Simple: CSHARP|JAVA|PYTHON|RUBY|PHP|TYPESCRIPT -Legacy: CS_NET_STANDARD_LIB|JAVA_ECLIPSE_JRE_LIB|PHP_GENERIC_LIB|PYTHON_GENERIC_LIB|RUBY_GENERIC_LIB|TS_GENERIC_LIB` +Simple: CSHARP|JAVA|PYTHON|RUBY|PHP|TYPESCRIPT|GO +Legacy: CS_NET_STANDARD_LIB|JAVA_ECLIPSE_JRE_LIB|PHP_GENERIC_LIB_V2|PYTHON_GENERIC_LIB|RUBY_GENERIC_LIB|TS_GENERIC_LIB|GO_GENERIC_LIB` }), file: Flags.string({ parse: async (input) => path.resolve(input), diff --git a/src/types/sdk/generate.ts b/src/types/sdk/generate.ts index 64cad3c8..5419c1c3 100644 --- a/src/types/sdk/generate.ts +++ b/src/types/sdk/generate.ts @@ -18,8 +18,9 @@ export type SDKGenerateUnprocessableError = { export enum SimplePlatforms { CSHARP = "CS_NET_STANDARD_LIB", JAVA = "JAVA_ECLIPSE_JRE_LIB", - PHP = "PHP_GENERIC_LIB", + PHP = "PHP_GENERIC_LIB_V2", PYTHON = "PYTHON_GENERIC_LIB", RUBY = "RUBY_GENERIC_LIB", - TYPESCRIPT = "TS_GENERIC_LIB" + TYPESCRIPT = "TS_GENERIC_LIB", + GO = "GO_GENERIC_LIB" } From f3d98956b28e0be78b048b000d63e4af2b08c69b Mon Sep 17 00:00:00 2001 From: saeedjamshaid Date: Tue, 17 Jun 2025 17:26:19 +0500 Subject: [PATCH 05/11] feat(new-command): add new command: portal:new:toc (#83) --- .vscode/launch.json | 4 + package-lock.json | 26 ++- package.json | 3 +- src/actions/portal/generate.ts | 2 +- src/actions/portal/new/toc.ts | 181 ++++++++++++++++++ src/application/portal/new/toc/sdl-parser.ts | 66 +++++++ .../portal/new/toc/toc-content-parser.ts | 48 +++++ .../portal/new/toc/toc-structure-generator.ts | 99 ++++++++++ src/commands/portal/generate.ts | 2 +- src/commands/portal/new/toc.ts | 67 +++++++ src/infrastructure/services/portal-service.ts | 43 +++++ src/prompts/portal/new/toc.ts | 50 +++++ src/types/common/result.ts | 30 ++- src/types/sdl/sdl.ts | 13 ++ src/types/toc/toc.ts | 37 ++++ 15 files changed, 658 insertions(+), 13 deletions(-) create mode 100644 src/actions/portal/new/toc.ts create mode 100644 src/application/portal/new/toc/sdl-parser.ts create mode 100644 src/application/portal/new/toc/toc-content-parser.ts create mode 100644 src/application/portal/new/toc/toc-structure-generator.ts create mode 100644 src/commands/portal/new/toc.ts create mode 100644 src/prompts/portal/new/toc.ts create mode 100644 src/types/sdl/sdl.ts create mode 100644 src/types/toc/toc.ts diff --git a/.vscode/launch.json b/.vscode/launch.json index 75cb5549..a576f17d 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -20,6 +20,10 @@ // "auth:status" // "portal:quickstart", // "portal:generate", + // "portal:new:toc", + //"--expand-endpoints", + //"--expand-models", + // "--force", // "--folder", // "test-source", // "--destination", diff --git a/package-lock.json b/package-lock.json index 319e9b33..7f62ef86 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,7 +35,8 @@ "striptags": "^3.2.0", "treeify": "^1.1.0", "tslib": "^2.5.0", - "unzipper": "^0.12.3" + "unzipper": "^0.12.3", + "yaml": "^2.8.0" }, "bin": { "apimatic": "bin/run" @@ -4998,6 +4999,15 @@ "node": ">=10" } }, + "node_modules/cosmiconfig/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/crc-32": { "version": "1.2.2", "license": "Apache-2.0", @@ -7691,8 +7701,9 @@ }, "node_modules/js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -11398,11 +11409,14 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "1.10.2", - "dev": true, - "license": "ISC", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", + "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", + "bin": { + "yaml": "bin.mjs" + }, "engines": { - "node": ">= 6" + "node": ">= 14.6" } }, "node_modules/yargs": { diff --git a/package.json b/package.json index 6429560b..229d854a 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,8 @@ "striptags": "^3.2.0", "treeify": "^1.1.0", "tslib": "^2.5.0", - "unzipper": "^0.12.3" + "unzipper": "^0.12.3", + "yaml": "^2.8.0" }, "devDependencies": { "@commitlint/cli": "^15.0.0", diff --git a/src/actions/portal/generate.ts b/src/actions/portal/generate.ts index 5e8c93b5..9f4be364 100644 --- a/src/actions/portal/generate.ts +++ b/src/actions/portal/generate.ts @@ -42,7 +42,7 @@ export class PortalGenerateAction { const portalGenerationResult = await docsPortalService.generateOnPremPortal(generatePortalParams, configDir); await deleteFile(sourceBuildInputZipFilePath); - if (portalGenerationResult.isSuccess) { + if (portalGenerationResult.isSuccess()) { await this.saveGeneratedPortalStreamToZipFile( portalGenerationResult.value!, paths.generatedPortalArtifactsZipFilePath diff --git a/src/actions/portal/new/toc.ts b/src/actions/portal/new/toc.ts new file mode 100644 index 00000000..082d9bf4 --- /dev/null +++ b/src/actions/portal/new/toc.ts @@ -0,0 +1,181 @@ +import * as path from "path"; +import * as fs from "fs-extra"; +import { PortalNewTocPrompts } from "../../../prompts/portal/new/toc"; +import { Result } from "../../../types/common/result"; +import { getMessageInRedColor } from "../../../utils/utils"; +import { SdlParser } from "../../../application/portal/new/toc/sdl-parser"; +import { TocStructureGenerator } from "../../../application/portal/new/toc/toc-structure-generator"; +import { TocContentParser } from "../../../application/portal/new/toc/toc-content-parser"; +import { TocEndpoint, TocGroup, TocModel } from "../../../types/toc/toc"; + +const DEFAULT_TOC_FILENAME = "toc.yml"; +const APIMATIC_BUILD_FILENAME = "APIMATIC-BUILD.json"; + +export class PortalNewTocAction { + private readonly prompts: PortalNewTocPrompts; + private readonly sdlParser: SdlParser; + private readonly tocGenerator: TocStructureGenerator; + private readonly contentParser: TocContentParser; + + constructor() { + this.prompts = new PortalNewTocPrompts(); + this.sdlParser = new SdlParser(); + this.tocGenerator = new TocStructureGenerator(); + this.contentParser = new TocContentParser(); + } + + async createToc( + workingDirectory: string, + configDir: string, + destination?: string, + force: boolean = false, + expandEndpoints: boolean = false, + expandModels: boolean = false + ): Promise> { + try { + const tocDir = await this.getDestinationPath(workingDirectory, destination); + const tocPath = path.join(tocDir, DEFAULT_TOC_FILENAME); + const tocCheckResult = await this.handleExistingToc(tocPath, force); + if (!tocCheckResult.isSuccess()) { + return tocCheckResult; + } + + const { endpointGroups, models } = await this.extractSdlComponents( + workingDirectory, + configDir, + expandEndpoints, + expandModels + ); + + const contentGroups = await this.extractContentGroups(workingDirectory); + + const toc = this.tocGenerator.createTocStructure( + endpointGroups, + models, + expandEndpoints, + expandModels, + contentGroups + ); + const yamlString = this.tocGenerator.transformToYaml(toc); + this.writeToc(tocPath, yamlString, "utf8"); + + this.prompts.displayOutroMessage(tocPath); + return Result.success(tocPath); + } catch (error) { + this.prompts.logError(getMessageInRedColor(`${error}`)); + return Result.failure(`❌ An unexpected error occurred while generating the TOC file.`); + } + } + + private async writeToc(path: string, content: string, encoding: string) { + await fs.ensureFile(path); + await fs.writeFile(path, content, encoding); + } + + private async handleExistingToc(tocPath: string, force: boolean): Promise> { + const shouldContinue = await this.checkExistingToc(tocPath, force); + if (!shouldContinue) { + return Result.cancelled("Operation was cancelled by the user."); + } + return Result.success("TOC check passed."); + } + + private async extractSdlComponents( + workingDirectory: string, + configDir: string, + expandEndpoints: boolean, + expandModels: boolean + ): Promise<{ endpointGroups: Map; models: TocModel[] }> { + if (!expandEndpoints && !expandModels) { + return { endpointGroups: new Map(), models: [] }; + } + + this.prompts.startProgressIndicatorWithMessage("Extracting endpoints and/or models from the API specification..."); + const specFolderPath = await this.getSpecFolderPath(workingDirectory); + + if (!(await fs.pathExists(specFolderPath))) { + this.prompts.stopProgressIndicatorWithMessage(`⚠️ Could not find the specification folder at: ${specFolderPath}`); + this.prompts.displayInfo("Falling back to default TOC structure without expanded endpoints or models..."); + return { endpointGroups: new Map(), models: [] }; + } + + const sdlResult = await this.sdlParser.getTocComponentsFromSdl(specFolderPath, workingDirectory, configDir); + + if (!sdlResult.isSuccess()) { + this.prompts.stopProgressIndicatorWithMessage(`⚠️ ${sdlResult.error!}`); + this.prompts.displayInfo("Falling back to default TOC structure without expanded endpoints or models..."); + return { endpointGroups: new Map(), models: [] }; + } + + this.prompts.stopProgressIndicatorWithMessage("✅ Successfully extracted endpoints and/or models from the specification."); + return sdlResult.value!; + + } + + private async extractContentGroups(workingDirectory: string): Promise { + const contentFolderPath = await this.getContentFolderPath(workingDirectory); + + if (!(await fs.pathExists(contentFolderPath))) { + this.prompts.displayInfo(`⚠️ Could not locate the content folder at: ${contentFolderPath}`); + this.prompts.displayInfo("Skipping custom content addition in TOC..."); + return []; + } + + return await this.contentParser.parseContentFolder(contentFolderPath, contentFolderPath); + } + + private async getDestinationPath(workingDirectory: string, providedDestination?: string): Promise { + if (providedDestination === undefined) { + const inferredDestination = await this.getContentFolderPath(workingDirectory); + return inferredDestination; + } + return providedDestination; + } + + private async checkExistingToc(tocPath: string, force: boolean): Promise { + if ((await fs.pathExists(tocPath)) && !force) { + return await this.prompts.overwriteExistingTocPrompt(); + } + return true; + } + + private async getContentFolderPath(workingDirectory: string): Promise { + const buildFilePath = path.join(workingDirectory, APIMATIC_BUILD_FILENAME); + const defaultContentFolder = path.join(workingDirectory, "content"); + + if (!(await fs.pathExists(buildFilePath))) { + return defaultContentFolder; + } + + try { + const buildConfig = await fs.readJson(buildFilePath, "utf8"); + + if (buildConfig.generatePortal?.contentFolder == null) { + return defaultContentFolder; + } + return path.join(workingDirectory, buildConfig.generatePortal.contentFolder, "content"); + } catch { + return defaultContentFolder; + } + } + + private async getSpecFolderPath(workingDirectory: string): Promise { + const buildFilePath = path.join(workingDirectory, APIMATIC_BUILD_FILENAME); + const defaultSpecFolder = path.join(workingDirectory, "spec"); + + if (!(await fs.pathExists(buildFilePath))) { + return defaultSpecFolder; + } + + try { + const buildConfig = await fs.readJson(buildFilePath, "utf8"); + + if (buildConfig.generatePortal?.apiSpecPath == null) { + return defaultSpecFolder; + } + return path.join(workingDirectory, buildConfig.generatePortal.apiSpecPath); + } catch { + return defaultSpecFolder; + } + } +} diff --git a/src/application/portal/new/toc/sdl-parser.ts b/src/application/portal/new/toc/sdl-parser.ts new file mode 100644 index 00000000..198ccf39 --- /dev/null +++ b/src/application/portal/new/toc/sdl-parser.ts @@ -0,0 +1,66 @@ +import * as path from "path"; +import { PortalService } from "../../../../infrastructure/services/portal-service"; +import { validateAndZipPortalSource, deleteFile } from "../../../../utils/utils"; +import { TocEndpoint, TocModel } from "../../../../types/toc/toc"; +import { Result } from "../../../../types/common/result"; +import { Sdl, SdlEndpoint, SdlModel } from "../../../../types/sdl/sdl"; + +export class SdlParser { + private readonly portalService: PortalService; + + constructor() { + this.portalService = new PortalService(); + } + + async getTocComponentsFromSdl(specFolderPath: string, workingDirectory: string, configDir: string): Promise;models: TocModel[];},string>> { + const sourceSpecInputZipFilePath = await validateAndZipPortalSource( + specFolderPath, + path.join(workingDirectory, ".spec_source.zip") + ); + + try { + const result = await this.portalService.generateSdl(sourceSpecInputZipFilePath, configDir); + + if (!result.isSuccess()) { + return Result.failure("Failed to extract endpoints/models from the specification. Please validate your spec using APIMatic’s interactive VS Code extension") + } + + const sdl : Sdl = result.value! + const endpointGroups = this.extractEndpointGroups(sdl); + const models = this.extractModels(sdl); + + return Result.success({ endpointGroups, models }); + } finally { + await deleteFile(sourceSpecInputZipFilePath); + } + } + + private extractEndpointGroups(sdl: Sdl): Map { + const endpointGroups = new Map(); + + const endpoints = sdl.Endpoints.map((e: SdlEndpoint): TocEndpoint => ({ + generate: null, + from: "endpoint", + endpointName: e.Name, + endpointGroup: e.Group + })); + + endpoints.forEach((endpoint: TocEndpoint) => { + const group = endpoint.endpointGroup; + if (!endpointGroups.has(group)) { + endpointGroups.set(group, []); + } + endpointGroups.get(group)!.push(endpoint); + }); + + return endpointGroups; + } + + private extractModels(sdl: Sdl): TocModel[] { + return sdl.CustomTypes.map((e: SdlModel): TocModel => ({ + generate: null, + from: "model", + modelName: e.Name + })); + } +} \ No newline at end of file diff --git a/src/application/portal/new/toc/toc-content-parser.ts b/src/application/portal/new/toc/toc-content-parser.ts new file mode 100644 index 00000000..2e7e01aa --- /dev/null +++ b/src/application/portal/new/toc/toc-content-parser.ts @@ -0,0 +1,48 @@ +import * as path from "path"; +import * as fs from "fs-extra"; +import { TocGroup, TocCustomPage } from "../../../../types/toc/toc"; + +export class TocContentParser { + async parseContentFolder(contentFolderPath: string, workingDirectory: string): Promise { + const items = await fs.readdir(contentFolderPath); + const contentItems: (TocGroup | TocCustomPage)[] = []; + + for (const item of items) { + const itemPath = path.join(contentFolderPath, item); + const stats = await fs.stat(itemPath); + + if (stats.isDirectory()) { + const subItems = await this.parseContentFolder(itemPath, workingDirectory); + if (subItems.length > 0) { + contentItems.push({ + group: item, + items: subItems[0].items // Take items from the Custom Content group + }); + } + } else if (stats.isFile() && item.endsWith(".md")) { + const relativePath = path.relative(workingDirectory, itemPath); + const pageName = path.basename(item, ".md"); + + contentItems.push({ + page: pageName, + file: this.normalizePath(relativePath) + }); + } + } + + // Return empty array if no markdown files were found + if (contentItems.length === 0) { + return []; + } + + // Wrap everything under a "Custom Content" group + return [{ + group: "Custom Content", + items: contentItems + }]; + } + + private normalizePath(path: string) : string { + return path.replace(/\\/g, '/'); + } +} \ No newline at end of file diff --git a/src/application/portal/new/toc/toc-structure-generator.ts b/src/application/portal/new/toc/toc-structure-generator.ts new file mode 100644 index 00000000..f86e33e1 --- /dev/null +++ b/src/application/portal/new/toc/toc-structure-generator.ts @@ -0,0 +1,99 @@ +import { stringify } from "yaml"; +import { Toc, TocGroup, TocEndpoint, TocModel, TocEndpointGroupOverview } from "../../../../types/toc/toc"; + +export class TocStructureGenerator { + createTocStructure( + endpointGroups: Map, + models: TocModel[], + expandEndpoints: boolean = false, + expandModels: boolean = false, + contentGroups: TocGroup[] = [] + ): Toc { + const tocStructure: Toc = { + toc: [] + }; + + // Add Getting Started section + tocStructure.toc.push({ + group: "Getting Started", + items: [ + { + generate: "How to Get Started", + from: "getting-started" + } + ] + }); + + // Add content groups + if (contentGroups.length > 0) { + tocStructure.toc.push(...contentGroups); + } + + // Add API Endpoints section + if (!expandEndpoints || endpointGroups.size === 0) { + tocStructure.toc.push({ + generate: "API Endpoints", + from: "endpoints" + }); + } else { + tocStructure.toc.push({ + group: "API Endpoints", + items: Array.from(endpointGroups).map(([groupName, endpoints]) => ({ + group: groupName, + items: [ + { + generate: null, + from: "endpoint-group-overview", + endpointGroup: groupName + } as TocEndpointGroupOverview, + ...endpoints + ] + })) + }); + } + + // Add Models section + if (!expandModels || models.length === 0) { + tocStructure.toc.push({ + generate: "Models", + from: "models" + }); + } else { + tocStructure.toc.push({ + group: "Models", + items: models + }); + } + + //Add Sdk Infra section + tocStructure.toc.push({ + generate: "SDK Infrastructure", + from: "sdk-infra" + }); + + return tocStructure; + } + + transformToYaml(toc: Toc): string { + const transformedToc = this.transformKeys(toc); + return stringify(transformedToc, { + indent: 2, + nullStr: "" + }); + } + + private transformKeys(obj: any): any { + if (Array.isArray(obj)) { + return obj.map((item) => this.transformKeys(item)); + } + if (obj !== null && typeof obj === "object") { + return Object.fromEntries( + Object.entries(obj).map(([key, value]) => [ + key.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), + this.transformKeys(value) + ]) + ); + } + return obj; + } +} \ No newline at end of file diff --git a/src/commands/portal/generate.ts b/src/commands/portal/generate.ts index d352bc58..9451d269 100644 --- a/src/commands/portal/generate.ts +++ b/src/commands/portal/generate.ts @@ -66,7 +66,7 @@ Your portal has been generated at D:/ } const validationResult = await this.validatePaths(paths); - if (!validationResult.isSuccess) { + if (validationResult.isFailed()) { this.error(validationResult.error!); } diff --git a/src/commands/portal/new/toc.ts b/src/commands/portal/new/toc.ts new file mode 100644 index 00000000..d43732f3 --- /dev/null +++ b/src/commands/portal/new/toc.ts @@ -0,0 +1,67 @@ +import * as path from "path"; +import { Command, Flags } from "@oclif/core"; +import { PortalNewTocAction } from "../../../actions/portal/new/toc"; + +const DEFAULT_FOLDER = process.cwd(); + +export default class PortalNewToc extends Command { + static description = + "Generates a new Table of Contents (TOC) file used for the generation of your API documentation portal. The output is a YAML file with the .yml extension."; + + static flags = { + destination: Flags.string({ + parse: async (input: string) => path.resolve(input), + description: "optional path where the generated TOC file will be saved. Defaults to the current working directory if not provided.", + }), + folder: Flags.string({ + parse: async (input: string) => path.resolve(input), + description: "path to the working directory containing the API project files. Defaults to the current working directory if not specified.", + default: DEFAULT_FOLDER + }), + force: Flags.boolean({ + default: false, + description: "overwrite the TOC file if one already exists at the destination.", + }), + "expand-endpoints": Flags.boolean({ + default: false, + description: "include individual entries for each endpoint in the generated TOC. Requires a valid API specification in the working directory." + }), + "expand-models": Flags.boolean({ + default: false, + description: "include individual entries for each model in the generated TOC. Requires a valid API specification in the working directory." + }) + }; + + static examples = [ + `$ apimatic portal:new:toc --destination="./portal/content/" +A new toc file has been created at ./portal/content/toc.yml +`, + `$ apimatic portal:new:toc --folder="./my-project" +A new toc file has been created at ./my-project/content/toc.yml +`, + `$ apimatic portal:new:toc --folder="./my-project" --destination="./portal/content/" +A new toc file has been created at ./portal/content/toc.yml +` + ]; + + constructor(argv: string[], config: any) { + super(argv, config); + } + + async run(): Promise { + const { flags } = await this.parse(PortalNewToc); + const portalNewTocAction = new PortalNewTocAction(); + const result = await portalNewTocAction.createToc( + flags.folder, + this.config.configDir, + flags.destination, + flags.force, + flags["expand-endpoints"], + flags["expand-models"] + ); + + if (result.isFailed()) { + this.error(result.error!); + } + } +} \ No newline at end of file diff --git a/src/infrastructure/services/portal-service.ts b/src/infrastructure/services/portal-service.ts index a9343f06..2b5422c8 100644 --- a/src/infrastructure/services/portal-service.ts +++ b/src/infrastructure/services/portal-service.ts @@ -10,12 +10,17 @@ import { FileWrapper, ApiResponse, ApiError, + TransformationController, + Transformation, + ExportFormats, InternalServerErrorResponseError } from "@apimatic/sdk"; import { AuthInfo, getAuthInfo } from "../../client-utils/auth-manager"; import { GeneratePortalParams, ErrorResponse } from "../../types/portal/generate"; import { Result } from "../../types/common/result"; import { getMessageInRedColor, parseStreamBodyToJson, extractZipFile, deleteFile } from "../../utils/utils"; +import { TransformationData } from "../../types/api/transform"; +import { Sdl } from "../../types/sdl/sdl"; export class PortalService { private readonly CONTENT_TYPE = ContentType.EnumMultipartformdata; @@ -45,6 +50,44 @@ export class PortalService { } } + async generateSdl(specPath: string, configDir: string): Promise> { + if (!(await fsExtra.pathExists(specPath))) { + return Result.failure("Spec file doesn't exist"); + } + + const authInfo: AuthInfo | null = await getAuthInfo(configDir); + const authorizationHeader = this.createAuthorizationHeader(authInfo, null); + const client = this.createApiClient(authorizationHeader); + const transformationController = new TransformationController(client); + + try { + const file = new FileWrapper(fs.createReadStream(specPath)); + const generation: ApiResponse = await transformationController.transformViaFile( + ContentType.EnumMultipartformdata, + file, + ExportFormats.APIMATIC + ); + + if (!generation.result.success) { + return this.createGenericErrorResult(); + } + + const transformationId = generation.result.id; + const { result }: TransformationData = await transformationController.downloadTransformedFile(transformationId); + if ((result as NodeJS.ReadableStream).readable) { + return Result.success((await parseStreamBodyToJson(result as NodeJS.ReadableStream)) as Sdl); + } else { + return this.createGenericErrorResult(); + } + } catch { + return this.createGenericErrorResult(); + } + } + + private createGenericErrorResult() { + return Result.failure("An unexpected error occurred"); + } + private createAuthorizationHeader = (authInfo: AuthInfo | null, overrideAuthKey: string | null): string => { const key = overrideAuthKey || authInfo?.authKey; return `X-Auth-Key ${key ?? ""}`; diff --git a/src/prompts/portal/new/toc.ts b/src/prompts/portal/new/toc.ts new file mode 100644 index 00000000..fc40f0eb --- /dev/null +++ b/src/prompts/portal/new/toc.ts @@ -0,0 +1,50 @@ +import { cancel, outro, select, spinner, isCancel, log } from "@clack/prompts"; + +export class PortalNewTocPrompts { + private readonly spin = spinner(); + + async overwriteExistingTocPrompt(): Promise { + const useExistingFile = await select({ + message: `A toc file already exists at the specified destination path, do you want to overwrite it?`, + options: [ + { value: "yes", label: "Yes" }, + { value: "no", label: "No" } + ] + }); + + if (isCancel(useExistingFile)) { + cancel("Operation cancelled."); + return process.exit(1); + } + + if (useExistingFile === "no") { + outro("Please enter a different destination path or delete the existing toc file and try again."); + } + + return useExistingFile === "yes"; + } + + startProgressIndicatorWithMessage(message: string): void { + this.spin.start(message); + } + + stopProgressIndicatorWithMessage(message: string) : void { + this.spin.stop(message); + } + + displayOutroMessage(tocPath: string): void { + outro(`✅ TOC file successfully created at: ${tocPath}`); + } + + logError(error: string): void { + outro(error); + } + + displayWarning(message: string): void { + log.warning(message); + } + + displayInfo(message: string): void { + log.step(message); + } +} \ No newline at end of file diff --git a/src/types/common/result.ts b/src/types/common/result.ts index 9a396508..f93572f2 100644 --- a/src/types/common/result.ts +++ b/src/types/common/result.ts @@ -1,15 +1,37 @@ export class Result { private constructor( - public readonly isSuccess: boolean, + private readonly Status: ResultStatus, public readonly value?: T, public readonly error?: TError ) {} public static success(value: T): Result { - return new Result(true, value, undefined); + return new Result(ResultStatus.Success, value, undefined); } public static failure(error: TError): Result { - return new Result(false, undefined, error); + return new Result(ResultStatus.Failed, undefined, error); } -} \ No newline at end of file + + public static cancelled(value: T): Result { + return new Result(ResultStatus.Cancelled, value, undefined); + } + + public isFailed(): boolean { + return this.Status == ResultStatus.Failed; + } + + public isCancelled(): boolean { + return this.Status == ResultStatus.Cancelled; + } + + public isSuccess(): boolean { + return this.Status == ResultStatus.Success; + } +} + +export enum ResultStatus { + Success, + Failed, + Cancelled +} diff --git a/src/types/sdl/sdl.ts b/src/types/sdl/sdl.ts new file mode 100644 index 00000000..d82b3784 --- /dev/null +++ b/src/types/sdl/sdl.ts @@ -0,0 +1,13 @@ +export interface Sdl { + readonly Endpoints: SdlEndpoint[], + readonly CustomTypes: SdlModel[] +} + +export interface SdlEndpoint { + readonly Name: string, + readonly Group: string +} + +export interface SdlModel { + readonly Name: string +} \ No newline at end of file diff --git a/src/types/toc/toc.ts b/src/types/toc/toc.ts new file mode 100644 index 00000000..de81fc3c --- /dev/null +++ b/src/types/toc/toc.ts @@ -0,0 +1,37 @@ +export interface Toc { + toc: Array +}; + +export interface TocGroup { + readonly group: string, + readonly items: Array +}; + +export interface TocGenerated { + readonly generate: string; + readonly from: string; +}; + +export interface TocEndpointGroupOverview { + readonly generate: null; + readonly from: "endpoint-group-overview"; + readonly endpointGroup: string; +}; + +export interface TocEndpoint { + readonly generate: null; + readonly from: "endpoint"; + readonly endpointName: string; + readonly endpointGroup: string; +}; + +export interface TocModel { + readonly generate: null; + readonly from: "model"; + readonly modelName: string; +}; + +export interface TocCustomPage { + readonly page: string; + readonly file: string; +}; \ No newline at end of file From baa7ca90f6caa602e803651070740401ec23bc19 Mon Sep 17 00:00:00 2001 From: Ali Asghar <75574550+aliasghar98@users.noreply.github.com> Date: Fri, 20 Jun 2025 10:58:35 +0500 Subject: [PATCH 06/11] feat: updates apimatic sdk with recommended codegen settings (#89) --- package-lock.json | 4 +- package.json | 2 +- src/client-utils/sdk-client.ts | 8 +- src/commands/api/transform.ts | 2 +- src/commands/api/validate.ts | 4 +- src/commands/portal/quickstart.ts | 6 +- src/commands/sdk/generate.ts | 4 +- src/controllers/api/transform.ts | 2 +- src/controllers/api/validate.ts | 10 +- src/controllers/portal/quickstart.ts | 15 +- src/controllers/sdk/generate.ts | 12 +- src/infrastructure/services/portal-service.ts | 2 +- src/sdk/client.ts | 33 +++-- src/sdk/configuration.ts | 4 +- ...troller.ts => apIsManagementController.ts} | 18 +-- ...=> apiValidationExternalApIsController.ts} | 6 +- ...=> apiValidationImportedApIsController.ts} | 6 +- ...> codeGenerationExternalApIsController.ts} | 8 +- ...> codeGenerationImportedApIsController.ts} | 24 +-- .../docsPortalGenerationAsyncController.ts | 8 +- .../docsPortalManagementController.ts | 2 +- .../controllers/transformationController.ts | 2 +- src/sdk/defaultConfiguration.ts | 18 ++- .../internalServerErrorResponseError.ts | 1 + .../portalGenerationForbiddenResponseError.ts | 23 --- ...lGenerationValidationErrorResponseError.ts | 23 --- src/sdk/errors/problemDetailsError.ts | 1 + src/sdk/errors/unauthorizedResponseError.ts | 1 + src/sdk/index.ts | 17 ++- src/sdk/models/accept2.ts | 2 +- src/sdk/models/apiEntity.ts | 62 +++++--- ...neration.ts => apiEntityCodeGeneration.ts} | 18 ++- src/sdk/models/apiEntityDetailed.ts | 66 +++++---- src/sdk/models/apiValidationSummary.ts | 27 +++- src/sdk/models/attributes.ts | 17 ++- src/sdk/models/authScope.ts | 25 +++- src/sdk/models/authentication.ts | 25 ++-- src/sdk/models/authorIdentifiers.ts | 18 ++- src/sdk/models/cSNETSTANDARDLIB.ts | 36 ----- src/sdk/models/codeGenSettings.ts | 139 ++++++++++-------- src/sdk/models/codeGeneration.ts | 34 +++-- src/sdk/models/csnetstandardlib.ts | 47 ++++++ src/sdk/models/customType.ts | 31 ++-- src/sdk/models/docsValidationSummary.ts | 17 ++- src/sdk/models/endpoint.ts | 44 +++--- src/sdk/models/endpointsGroup.ts | 18 ++- src/sdk/models/exportFormats.ts | 28 ++-- src/sdk/models/field.ts | 45 ++++-- src/sdk/models/generateSdkViaUrlRequest.ts | 15 +- src/sdk/models/id.ts | 2 +- .../models/importApiVersionViaUrlRequest.ts | 15 +- src/sdk/models/importApiViaUrlRequest.ts | 15 +- src/sdk/models/importValidationSummary.ts | 17 ++- .../models/inplaceImportApiViaUrlRequest.ts | 15 +- src/sdk/models/inputParameter.ts | 28 +++- src/sdk/models/links.ts | 18 ++- src/sdk/models/mEnvironment.ts | 25 +++- src/sdk/models/metaData.ts | 35 +++-- .../models/packageDeploymentInformation.ts | 16 +- src/sdk/models/packageRepositories.ts | 2 +- src/sdk/models/parameter.ts | 47 +++--- src/sdk/models/platforms.ts | 14 +- src/sdk/models/publishPackageInput.ts | 33 +++-- src/sdk/models/publishedPackage.ts | 47 ++++-- src/sdk/models/response.ts | 41 ++++-- src/sdk/models/server.ts | 19 ++- src/sdk/models/serverConfiguration.ts | 29 +++- .../templatesPackageDeploymentInformation.ts | 17 ++- src/sdk/models/testCase.ts | 53 ++++--- src/sdk/models/testGenSettings.ts | 23 ++- src/sdk/models/transformViaUrlRequest.ts | 15 +- src/sdk/models/transformation.ts | 49 +++--- .../updatePackageDeploymentInformation.ts | 9 +- ...teTemplatesPackageDeploymentInformation.ts | 17 ++- src/sdk/models/userCodeGeneration.ts | 38 +++-- src/sdk/models/validationException.ts | 18 ++- 76 files changed, 1017 insertions(+), 620 deletions(-) rename src/sdk/controllers/{apisManagementController.ts => apIsManagementController.ts} (97%) rename src/sdk/controllers/{aPIValidationExternalApisController.ts => apiValidationExternalApIsController.ts} (96%) rename src/sdk/controllers/{aPIValidationImportedApisController.ts => apiValidationImportedApIsController.ts} (95%) rename src/sdk/controllers/{codeGenerationExternalApisController.ts => codeGenerationExternalApIsController.ts} (98%) rename src/sdk/controllers/{codeGenerationImportedApisController.ts => codeGenerationImportedApIsController.ts} (90%) delete mode 100644 src/sdk/errors/portalGenerationForbiddenResponseError.ts delete mode 100644 src/sdk/errors/portalGenerationValidationErrorResponseError.ts rename src/sdk/models/{aPIEntityCodeGeneration.ts => apiEntityCodeGeneration.ts} (78%) delete mode 100644 src/sdk/models/cSNETSTANDARDLIB.ts create mode 100644 src/sdk/models/csnetstandardlib.ts diff --git a/package-lock.json b/package-lock.json index 7f62ef86..931d6b49 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@apimatic/cli", - "version": "1.0.1-alpha.11", + "version": "1.1.0-alpha.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@apimatic/cli", - "version": "1.0.1-alpha.11", + "version": "1.1.0-alpha.6", "license": "MIT", "dependencies": { "@apimatic/authentication-adapters": "^0.5.4", diff --git a/package.json b/package.json index 229d854a..9950045a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@apimatic/cli", "description": "The official CLI for APIMatic.", - "version": "1.0.1-alpha.11", + "version": "1.1.0-alpha.6", "author": "APIMatic", "bin": { "apimatic": "./bin/run" diff --git a/src/client-utils/sdk-client.ts b/src/client-utils/sdk-client.ts index c3733f10..48021fb6 100644 --- a/src/client-utils/sdk-client.ts +++ b/src/client-utils/sdk-client.ts @@ -105,7 +105,9 @@ export class SDKClient { if (overrideAuthKey) { return new Client({ timeout: 0, - authorization: `X-Auth-Key ${overrideAuthKey}` + customHeaderAuthenticationCredentials: { + 'Authorization': `X-Auth-Key ${overrideAuthKey}` + } }); } let storedAuthInfo: AuthInfo | null = await getAuthInfo(configDir); @@ -117,7 +119,9 @@ export class SDKClient { if (storedAuthInfo.authKey !== "") { return new Client({ timeout: 0, - authorization: `X-Auth-Key ${storedAuthInfo.authKey}` + customHeaderAuthenticationCredentials: { + 'Authorization': `X-Auth-Key ${storedAuthInfo.authKey}` + } }); } else { throw new Error("Please login first or provide an authKey"); diff --git a/src/commands/api/transform.ts b/src/commands/api/transform.ts index 3b60420c..1186d2dd 100644 --- a/src/commands/api/transform.ts +++ b/src/commands/api/transform.ts @@ -26,7 +26,7 @@ Success! Your transformed file is located at D:/swagger_raml.yaml static flags = { format: Flags.string({ - parse: async (format: string) => getValidFormat(format.toUpperCase()), + parse: async (format: string) => getValidFormat(format), required: true, description: `specification format to transform API specification into ${formats}` diff --git a/src/commands/api/validate.ts b/src/commands/api/validate.ts index f8be1471..9b2d9c6f 100644 --- a/src/commands/api/validate.ts +++ b/src/commands/api/validate.ts @@ -1,7 +1,7 @@ import * as fs from "fs-extra"; import { ux, Flags, Command } from "@oclif/core"; -import { ApiError, APIValidationExternalApisController, ApiValidationSummary, Client } from "@apimatic/sdk"; +import { ApiError, ApiValidationExternalApIsController, ApiValidationSummary, Client } from "@apimatic/sdk"; import { AuthenticationError, loggers } from "../../types/utils"; import { SDKClient } from "../../client-utils/sdk-client"; @@ -42,7 +42,7 @@ Specification file provided is valid const overrideAuthKey = flags["auth-key"] ? flags["auth-key"] : null; const client: Client = await SDKClient.getInstance().getClient(overrideAuthKey, this.config.configDir); - const apiValidationController: APIValidationExternalApisController = new APIValidationExternalApisController( + const apiValidationController: ApiValidationExternalApIsController = new ApiValidationExternalApIsController( client ); diff --git a/src/commands/portal/quickstart.ts b/src/commands/portal/quickstart.ts index e0423fbc..5f34451c 100644 --- a/src/commands/portal/quickstart.ts +++ b/src/commands/portal/quickstart.ts @@ -1,5 +1,5 @@ import { Command } from "@oclif/core"; -import { APIValidationExternalApisController, ApiValidationSummary, Client } from "@apimatic/sdk"; +import { ApiValidationExternalApIsController, ApiValidationSummary, Client } from "@apimatic/sdk"; import { SDKClient } from "../../client-utils/sdk-client"; import { PortalQuickstartPrompts } from "../../prompts/portal/quickstart"; import { PortalQuickstartController } from "../../controllers/portal/quickstart"; @@ -28,7 +28,7 @@ export default class PortalQuickstart extends Command { prompts: PortalQuickstartPrompts, controller: PortalQuickstartController, specFile: SpecFile, - apiValidationController: APIValidationExternalApisController + apiValidationController: ApiValidationExternalApIsController ): Promise { const apiValidationSummary = await controller.getSpecValidationSummary(prompts, specFile, apiValidationController); @@ -99,7 +99,7 @@ export default class PortalQuickstart extends Command { } const client: Client = await SDKClient.getInstance().getClient(null, this.config.configDir); - const apiValidationController: APIValidationExternalApisController = new APIValidationExternalApisController( + const apiValidationController: ApiValidationExternalApIsController = new ApiValidationExternalApIsController( client ); diff --git a/src/commands/sdk/generate.ts b/src/commands/sdk/generate.ts index 58c2f660..b1dc6718 100644 --- a/src/commands/sdk/generate.ts +++ b/src/commands/sdk/generate.ts @@ -3,7 +3,7 @@ import * as fs from "fs-extra"; import { Command, Flags } from "@oclif/core"; import { SDKClient } from "../../client-utils/sdk-client"; -import { ApiError, Client, CodeGenerationExternalApisController } from "@apimatic/sdk"; +import { ApiError, Client, CodeGenerationExternalApIsController } from "@apimatic/sdk"; import { replaceHTML, isJSONParsable, getFileNameFromPath } from "../../utils/utils"; import { getSDKGenerationId, downloadGeneratedSDK } from "../../controllers/sdk/generate"; @@ -83,7 +83,7 @@ Success! Your SDK is located at swagger_sdk_csharp const overrideAuthKey = flags["auth-key"] ? flags["auth-key"] : null; const client: Client = await SDKClient.getInstance().getClient(overrideAuthKey, this.config.configDir); - const sdkGenerationController: CodeGenerationExternalApisController = new CodeGenerationExternalApisController( + const sdkGenerationController: CodeGenerationExternalApIsController = new CodeGenerationExternalApIsController( client ); diff --git a/src/controllers/api/transform.ts b/src/controllers/api/transform.ts index 8472ee3b..01bcbf89 100644 --- a/src/controllers/api/transform.ts +++ b/src/controllers/api/transform.ts @@ -32,7 +32,7 @@ export const getTransformationId = async ( url: url, exportFormat: format as ExportFormats }; - generation = await transformationController.transformViaURL(body); + generation = await transformationController.transformViaUrl(body); } else { throw new Error("Please provide a specification file"); } diff --git a/src/controllers/api/validate.ts b/src/controllers/api/validate.ts index d250ce33..3e59ca31 100644 --- a/src/controllers/api/validate.ts +++ b/src/controllers/api/validate.ts @@ -1,11 +1,11 @@ import * as fs from "fs-extra"; -import { ApiResponse, APIValidationExternalApisController, ApiValidationSummary, ContentType, FileWrapper } from "@apimatic/sdk"; +import { ApiResponse, ApiValidationExternalApIsController, ApiValidationSummary, ContentType, FileWrapper } from "@apimatic/sdk"; import { GetValidationParams } from "../../types/api/validate"; import { createTempDirectory, deleteFile, zipDirectory } from "../../utils/utils"; export const getValidationSummary = async ( { file, url }: GetValidationParams, - apiValidationController: APIValidationExternalApisController + apiValidationController: ApiValidationExternalApIsController ): Promise => { let validation: ApiResponse; @@ -15,17 +15,17 @@ export const getValidationSummary = async ( const tempDir = await createTempDirectory(); const zipPath = await zipDirectory(file, tempDir); const zipFile = new FileWrapper(fs.createReadStream(zipPath)); - validation = await apiValidationController.validateAPIViaFile(ContentType.EnumMultipartformdata, zipFile); + validation = await apiValidationController.validateApiViaFile(ContentType.EnumMultipartformdata, zipFile); await deleteFile(zipPath); await fs.remove(tempDir); } else { const fileDescriptor = new FileWrapper(fs.createReadStream(file)); - validation = await apiValidationController.validateAPIViaFile(ContentType.EnumMultipartformdata, fileDescriptor); + validation = await apiValidationController.validateApiViaFile(ContentType.EnumMultipartformdata, fileDescriptor); } } else if (url) { - validation = await apiValidationController.validateAPIViaURL(url); + validation = await apiValidationController.validateApiViaUrl(url); } else { throw new Error("Please provide a specification file"); } diff --git a/src/controllers/portal/quickstart.ts b/src/controllers/portal/quickstart.ts index bb18b1b8..5b3c2475 100644 --- a/src/controllers/portal/quickstart.ts +++ b/src/controllers/portal/quickstart.ts @@ -5,7 +5,7 @@ import * as filetype from "file-type"; import * as fs from "fs"; import * as fsextra from "fs-extra"; import { getAuthInfo } from "../../client-utils/auth-manager"; -import { ApiError, APIValidationExternalApisController, ApiValidationSummary } from "@apimatic/sdk"; +import { ApiError, ApiValidationExternalApIsController, ApiValidationSummary } from "@apimatic/sdk"; import { LoginCredentials, SpecFile } from "../../types/portal/quickstart"; import { SDKClient } from "../../client-utils/sdk-client"; import { @@ -134,7 +134,7 @@ export class PortalQuickstartController { async getSpecValidationSummary( prompts: PortalQuickstartPrompts, specFile: SpecFile, - apiValidationController: APIValidationExternalApisController + apiValidationController: ApiValidationExternalApIsController ): Promise { const validationFlags: GetValidationParams = { file: specFile.filePath, @@ -189,18 +189,13 @@ export class PortalQuickstartController { } } else if ((error as ApiError).result) { const apiError = error as ApiError; - const result = apiError.result as APIValidateError; - if (result.modelState["exception Error"] && apiError.statusCode === 400) { - throw new Error( - `The provided spec file is not valid. Please ensure that the spec file you have provided is a valid API definition file.` - ); - } else if ((error as AuthorizationError).body && apiError.statusCode === 401) { - throw new Error("You are not authorized to perform this action"); + if ((error as AuthorizationError).body && apiError.statusCode === 401) { + throw new Error("You are not authorized to perform this action."); } else { throw new Error((error as Error).message); } } else if ((error as AuthenticationError).statusCode === 401) { - throw new Error("You are not authorized to perform this action"); + throw new Error("You are not authorized to perform this action."); } else if ( (error as AuthenticationError).statusCode === 402 && (error as AuthenticationError).body && diff --git a/src/controllers/sdk/generate.ts b/src/controllers/sdk/generate.ts index 97754c2b..620ae809 100644 --- a/src/controllers/sdk/generate.ts +++ b/src/controllers/sdk/generate.ts @@ -2,7 +2,7 @@ import * as fs from "fs-extra"; import { ux } from "@oclif/core"; import { ApiResponse, - CodeGenerationExternalApisController, + CodeGenerationExternalApIsController, UserCodeGeneration, Platforms, GenerateSdkViaUrlRequest, @@ -12,7 +12,7 @@ import { unzipFile, writeFileUsingReadableStream } from "../../utils/utils"; export const getSDKGenerationId = async ( { file, url, platform }: GenerationIdParams, - sdkGenerationController: CodeGenerationExternalApisController + sdkGenerationController: CodeGenerationExternalApIsController ): Promise => { ux.action.start("Generating SDK"); @@ -20,14 +20,14 @@ export const getSDKGenerationId = async ( const sdkPlatform = getSDKPlatform(platform) as Platforms; if (file) { const fileDescriptor = new FileWrapper(fs.createReadStream(file)); - generation = await sdkGenerationController.generateSDKViaFile(fileDescriptor, sdkPlatform); + generation = await sdkGenerationController.generateSdkViaFile(fileDescriptor, sdkPlatform); } else if (url) { // If url to spec file is provided const body: GenerateSdkViaUrlRequest = { url: url, template: sdkPlatform }; - generation = await sdkGenerationController.generateSDKViaURL(body); + generation = await sdkGenerationController.generateSdkViaUrl(body); } else { throw new Error("Please provide a specification file"); } @@ -50,10 +50,10 @@ const getSDKPlatform = (platform: string): Platforms | SimplePlatforms => { // Download Platform export const downloadGeneratedSDK = async ( { codeGenId, zippedSDKPath, sdkFolderPath, zip }: DownloadSDKParams, - sdkGenerationController: CodeGenerationExternalApisController + sdkGenerationController: CodeGenerationExternalApIsController ): Promise => { ux.action.start("Downloading SDK"); - const { result }: ApiResponse = await sdkGenerationController.downloadSDK(codeGenId); + const { result }: ApiResponse = await sdkGenerationController.downloadSdk(codeGenId); if ((result as NodeJS.ReadableStream).readable) { if (!zip) { await unzipFile(result as NodeJS.ReadableStream, sdkFolderPath); diff --git a/src/infrastructure/services/portal-service.ts b/src/infrastructure/services/portal-service.ts index 2b5422c8..d503656b 100644 --- a/src/infrastructure/services/portal-service.ts +++ b/src/infrastructure/services/portal-service.ts @@ -65,7 +65,7 @@ export class PortalService { const generation: ApiResponse = await transformationController.transformViaFile( ContentType.EnumMultipartformdata, file, - ExportFormats.APIMATIC + ExportFormats.Apimatic ); if (!generation.result.success) { diff --git a/src/sdk/client.ts b/src/sdk/client.ts index 4fde72bd..c5ac6583 100644 --- a/src/sdk/client.ts +++ b/src/sdk/client.ts @@ -16,7 +16,9 @@ import { Configuration, Environment } from './configuration'; import { DEFAULT_CONFIGURATION, DEFAULT_RETRY_CONFIG, + DEFAULT_LOGGING_OPTIONS, } from './defaultConfiguration'; +import { ApiLogger, LoggingOptions, mergeLoggingOptions } from './core'; import { ApiError } from './core'; import { setHeader } from './core'; import { updateUserAgent } from './core'; @@ -33,6 +35,7 @@ export class Client implements ClientInterface { private _config: Readonly; private _timeout: number; private _retryConfig: RetryConfiguration; + private _loggingOp: LoggingOptions; private _requestBuilderFactory: SdkRequestBuilderFactory; private _userAgent: string; @@ -45,22 +48,22 @@ export class Client implements ClientInterface { ...DEFAULT_RETRY_CONFIG, ...this._config.httpClientOptions?.retryConfig, }; + this._loggingOp = this._config.logging + ? mergeLoggingOptions(this._config.logging ?? {}) + : mergeLoggingOptions( + this._config.logging ?? {}, + DEFAULT_LOGGING_OPTIONS + ); this._timeout = typeof this._config.httpClientOptions?.timeout != 'undefined' ? this._config.httpClientOptions.timeout : this._config.timeout; - const clonedConfig = { - ...this._config, - customHeaderAuthenticationCredentials: this._config - .customHeaderAuthenticationCredentials || { - Authorization: this._config.authorization || '', - }, - }; - - this._userAgent = updateUserAgent('APIMatic CLI'); + this._userAgent = updateUserAgent( + 'TypeScript-SDK/3.0.0 [OS: {os-info}, Engine: {engine}/{engine-version}]' + ); this._requestBuilderFactory = createRequestHandlerFactory( (server) => getBaseUri(server, this._config), - createAuthProviderFromConfig(clonedConfig), + createAuthProviderFromConfig(this._config), new HttpClient(AbortError, { timeout: this._timeout, clientConfigOverrides: this._config.unstable_httpClientOptions, @@ -72,7 +75,8 @@ export class Client implements ClientInterface { withUserAgent(this._userAgent), withAuthenticationByDefault, ], - this._retryConfig + this._retryConfig, + this._loggingOp ); } @@ -108,14 +112,17 @@ function createRequestHandlerFactory( authProvider: AuthenticatorInterface, httpClient: HttpClient, addons: ((rb: SdkRequestBuilder) => void)[], - retryConfig: RetryConfiguration + retryConfig: RetryConfiguration, + loggingOptions: LoggingOptions ): SdkRequestBuilderFactory { const requestBuilderFactory = createRequestBuilderFactory( createHttpClientAdapter(httpClient), baseUrlProvider, ApiError, authProvider, - retryConfig + retryConfig, + undefined, + new ApiLogger(loggingOptions) ); return tap(requestBuilderFactory, ...addons); diff --git a/src/sdk/configuration.ts b/src/sdk/configuration.ts index 754c5227..9fd3ec39 100644 --- a/src/sdk/configuration.ts +++ b/src/sdk/configuration.ts @@ -5,18 +5,18 @@ */ import { HttpClientOptions } from './clientAdapter'; +import { PartialLoggingOptions } from './core'; /** An interface for all configuration parameters required by the SDK. */ export interface Configuration { timeout: number; environment: Environment; - /** @deprecated use customHeaderAuthenticationCredentials field instead */ - authorization?: string; customHeaderAuthenticationCredentials?: { 'Authorization': string; }; httpClientOptions?: Partial; unstable_httpClientOptions?: any; + logging?: PartialLoggingOptions; } /** Environments available for API */ diff --git a/src/sdk/controllers/apisManagementController.ts b/src/sdk/controllers/apIsManagementController.ts similarity index 97% rename from src/sdk/controllers/apisManagementController.ts rename to src/sdk/controllers/apIsManagementController.ts index 0dee825c..1124471a 100644 --- a/src/sdk/controllers/apisManagementController.ts +++ b/src/sdk/controllers/apIsManagementController.ts @@ -26,7 +26,7 @@ import { string } from '../schema'; import { BaseController } from './baseController'; import { ApiError } from '@apimatic/core'; -export class ApisManagementController extends BaseController { +export class ApIsManagementController extends BaseController { /** * Import an API into the APIMatic Dashboard by uploading the API specification file. * @@ -40,7 +40,7 @@ export class ApisManagementController extends BaseController { * transformer/overview-transformer#supported-input-formats). * @return Response from the API call */ - async importAPIViaFile( + async importApiViaFile( contentType: ContentType, file: FileWrapper, requestOptions?: RequestOptions @@ -69,7 +69,7 @@ export class ApisManagementController extends BaseController { * @param body Request Body * @return Response from the API call */ - async importAPIViaURL( + async importApiViaUrl( body: ImportApiViaUrlRequest, requestOptions?: RequestOptions ): Promise> { @@ -110,7 +110,7 @@ export class ApisManagementController extends BaseController { * transformer/overview-transformer#supported-input-formats). * @return Response from the API call */ - async importNewAPIVersionViaFile( + async importNewApiVersionViaFile( apiGroupId: string, accept: Accept, versionOverride: string, @@ -144,7 +144,7 @@ export class ApisManagementController extends BaseController { * @param body Request Body * @return Response from the API call */ - async importNewAPIVersionViaURL( + async importNewApiVersionViaUrl( apiGroupId: string, accept: Accept, body: ImportApiVersionViaUrlRequest, @@ -182,7 +182,7 @@ export class ApisManagementController extends BaseController { * transformer/overview-transformer#supported-input-formats). * @return Response from the API call */ - async inplaceAPIImportViaFile( + async inplaceApiImportViaFile( apiEntityId: string, accept: Accept2, file: FileWrapper, @@ -212,7 +212,7 @@ export class ApisManagementController extends BaseController { * @param body Request Body * @return Response from the API call */ - async inplaceAPIImportViaURL( + async inplaceApiImportViaUrl( apiEntityId: string, body: InplaceImportApiViaUrlRequest, requestOptions?: RequestOptions @@ -238,7 +238,7 @@ export class ApisManagementController extends BaseController { * @param apiEntityId The ID of the API Entity to fetch. * @return Response from the API call */ - async fetchAPIEntity( + async fetchApiEntity( apiEntityId: string, requestOptions?: RequestOptions ): Promise> { @@ -259,7 +259,7 @@ export class ApisManagementController extends BaseController { * transformer#supported-input-formats). * @return Response from the API call */ - async downloadApisPecification( + async downloadApiSpecification( apiEntityId: string, format: ExportFormats, requestOptions?: RequestOptions diff --git a/src/sdk/controllers/aPIValidationExternalApisController.ts b/src/sdk/controllers/apiValidationExternalApIsController.ts similarity index 96% rename from src/sdk/controllers/aPIValidationExternalApisController.ts rename to src/sdk/controllers/apiValidationExternalApIsController.ts index 70b097b8..6f2c21a9 100644 --- a/src/sdk/controllers/aPIValidationExternalApisController.ts +++ b/src/sdk/controllers/apiValidationExternalApIsController.ts @@ -14,7 +14,7 @@ import { string } from '../schema'; import { BaseController } from './baseController'; import { ApiError } from '@apimatic/core'; -export class APIValidationExternalApisController extends BaseController { +export class ApiValidationExternalApIsController extends BaseController { /** * Validate an API by uploading the API specification file. * @@ -28,7 +28,7 @@ export class APIValidationExternalApisController extends BaseController { * transformer/overview-transformer#supported-input-formats). * @return Response from the API call */ - async validateAPIViaFile( + async validateApiViaFile( contentType: ContentType, file: FileWrapper, requestOptions?: RequestOptions @@ -59,7 +59,7 @@ export class APIValidationExternalApisController extends BaseController { * publicly accessible. * @return Response from the API call */ - async validateAPIViaURL( + async validateApiViaUrl( descriptionUrl: string, requestOptions?: RequestOptions ): Promise> { diff --git a/src/sdk/controllers/aPIValidationImportedApisController.ts b/src/sdk/controllers/apiValidationImportedApIsController.ts similarity index 95% rename from src/sdk/controllers/aPIValidationImportedApisController.ts rename to src/sdk/controllers/apiValidationImportedApIsController.ts index 31e29f33..8c960c58 100644 --- a/src/sdk/controllers/aPIValidationImportedApisController.ts +++ b/src/sdk/controllers/apiValidationImportedApIsController.ts @@ -17,7 +17,7 @@ import { string } from '../schema'; import { BaseController } from './baseController'; import { ApiError } from '@apimatic/core'; -export class APIValidationImportedApisController extends BaseController { +export class ApiValidationImportedApIsController extends BaseController { /** * Validate an API using the [APIMatic Validator](https://docs.apimatic.io/generate-sdks/overview- * sdks#step-2-api-validation). @@ -25,7 +25,7 @@ export class APIValidationImportedApisController extends BaseController { * @param apiEntityId The ID of the API Entity to perform validation for. * @return Response from the API call */ - async validateAPI( + async validateApi( apiEntityId: string, requestOptions?: RequestOptions ): Promise> { @@ -48,7 +48,7 @@ export class APIValidationImportedApisController extends BaseController { * @param apiEntityId The ID of the API Entity to perform validation for. * @return Response from the API call */ - async validateAPIForDocs( + async validateApiForDocs( apiEntityId: string, requestOptions?: RequestOptions ): Promise> { diff --git a/src/sdk/controllers/codeGenerationExternalApisController.ts b/src/sdk/controllers/codeGenerationExternalApIsController.ts similarity index 98% rename from src/sdk/controllers/codeGenerationExternalApisController.ts rename to src/sdk/controllers/codeGenerationExternalApIsController.ts index acfa981e..f6788265 100644 --- a/src/sdk/controllers/codeGenerationExternalApisController.ts +++ b/src/sdk/controllers/codeGenerationExternalApIsController.ts @@ -17,7 +17,7 @@ import { import { array, string } from '../schema'; import { BaseController } from './baseController'; -export class CodeGenerationExternalApisController extends BaseController { +export class CodeGenerationExternalApIsController extends BaseController { /** * Generate an SDK for an API by by uploading the API specification file. * @@ -33,7 +33,7 @@ export class CodeGenerationExternalApisController extends BaseController { * in. * @return Response from the API call */ - async generateSDKViaFile( + async generateSdkViaFile( file: FileWrapper, template: Platforms, requestOptions?: RequestOptions @@ -59,7 +59,7 @@ export class CodeGenerationExternalApisController extends BaseController { * @param body Request Body * @return Response from the API call */ - async generateSDKViaURL( + async generateSdkViaUrl( body: GenerateSdkViaUrlRequest, requestOptions?: RequestOptions ): Promise> { @@ -90,7 +90,7 @@ export class CodeGenerationExternalApisController extends BaseController { * generation-external-apis/generate-sdk-via-url) calls. * @return Response from the API call */ - async downloadSDK( + async downloadSdk( codegenId: string, requestOptions?: RequestOptions ): Promise> { diff --git a/src/sdk/controllers/codeGenerationImportedApisController.ts b/src/sdk/controllers/codeGenerationImportedApIsController.ts similarity index 90% rename from src/sdk/controllers/codeGenerationImportedApisController.ts rename to src/sdk/controllers/codeGenerationImportedApIsController.ts index 1bc44c71..c616316f 100644 --- a/src/sdk/controllers/codeGenerationImportedApisController.ts +++ b/src/sdk/controllers/codeGenerationImportedApIsController.ts @@ -6,14 +6,14 @@ import { ApiResponse, RequestOptions } from '../core'; import { - APIEntityCodeGeneration, - aPIEntityCodeGenerationSchema, -} from '../models/aPIEntityCodeGeneration'; + ApiEntityCodeGeneration, + apiEntityCodeGenerationSchema, +} from '../models/apiEntityCodeGeneration'; import { Platforms, platformsSchema } from '../models/platforms'; import { array, string } from '../schema'; import { BaseController } from './baseController'; -export class CodeGenerationImportedApisController extends BaseController { +export class CodeGenerationImportedApIsController extends BaseController { /** * Generate an SDK for an API Version. * @@ -25,11 +25,11 @@ export class CodeGenerationImportedApisController extends BaseController { * Docs in. * @return Response from the API call */ - async generateSDK( + async generateSdk( apiEntityId: string, template: Platforms, requestOptions?: RequestOptions - ): Promise> { + ): Promise> { const req = this.createRequest('POST'); const mapped = req.prepareArgs({ apiEntityId: [apiEntityId, string()], @@ -39,7 +39,7 @@ export class CodeGenerationImportedApisController extends BaseController { req.form({ template: mapped.template }); req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/code-generations/generate`; req.authenticate([{ authorization: true }]); - return req.callAsJson(aPIEntityCodeGenerationSchema, requestOptions); + return req.callAsJson(apiEntityCodeGenerationSchema, requestOptions); } /** @@ -52,7 +52,7 @@ export class CodeGenerationImportedApisController extends BaseController { * generation-imported-apis/generate-sdk). * @return Response from the API call */ - async downloadSDK( + async downloadSdk( apiEntityId: string, codegenId: string, requestOptions?: RequestOptions @@ -76,12 +76,12 @@ export class CodeGenerationImportedApisController extends BaseController { async listAllCodeGenerations( apiEntityId: string, requestOptions?: RequestOptions - ): Promise> { + ): Promise> { const req = this.createRequest('GET'); const mapped = req.prepareArgs({ apiEntityId: [apiEntityId, string()] }); req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/code-generations`; req.authenticate([{ authorization: true }]); - return req.callAsJson(array(aPIEntityCodeGenerationSchema), requestOptions); + return req.callAsJson(array(apiEntityCodeGenerationSchema), requestOptions); } /** @@ -98,7 +98,7 @@ export class CodeGenerationImportedApisController extends BaseController { apiEntityId: string, codegenId: string, requestOptions?: RequestOptions - ): Promise> { + ): Promise> { const req = this.createRequest('GET'); const mapped = req.prepareArgs({ apiEntityId: [apiEntityId, string()], @@ -106,7 +106,7 @@ export class CodeGenerationImportedApisController extends BaseController { }); req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/code-generations/${mapped.codegenId}`; req.authenticate([{ authorization: true }]); - return req.callAsJson(aPIEntityCodeGenerationSchema, requestOptions); + return req.callAsJson(apiEntityCodeGenerationSchema, requestOptions); } /** diff --git a/src/sdk/controllers/docsPortalGenerationAsyncController.ts b/src/sdk/controllers/docsPortalGenerationAsyncController.ts index ea2841e1..bb42b08d 100644 --- a/src/sdk/controllers/docsPortalGenerationAsyncController.ts +++ b/src/sdk/controllers/docsPortalGenerationAsyncController.ts @@ -25,23 +25,23 @@ export class DocsPortalGenerationAsyncController extends BaseController { * * @param contentType * @param file The input file to the Portal Generator. Must contain the build file. - * @param xAPIMaticCallbackUrl Optional header containing callback url. This url will be called by + * @param xApiMaticCallbackUrl Optional header containing callback url. This url will be called by * the server once the portal generation completes * @return Response from the API call */ async generateOnPremPortalViaBuildInputAsync( contentType: ContentType, file: FileWrapper, - xAPIMaticCallbackUrl?: string, + xApiMaticCallbackUrl?: string, requestOptions?: RequestOptions ): Promise> { const req = this.createRequest('POST', '/portal/v2'); const mapped = req.prepareArgs({ contentType: [contentType, contentTypeSchema], - xAPIMaticCallbackUrl: [xAPIMaticCallbackUrl, optional(string())], + xApiMaticCallbackUrl: [xApiMaticCallbackUrl, optional(string())], }); req.header('Content-Type', mapped.contentType); - req.header('X-APIMatic-CallbackUrl', mapped.xAPIMaticCallbackUrl); + req.header('X-APIMatic-CallbackUrl', mapped.xApiMaticCallbackUrl); req.formData({ file: file }); req.throwOn(400, ApiError, 'Bad Request'); req.throwOn(401, ApiError, 'Unauthorized'); diff --git a/src/sdk/controllers/docsPortalManagementController.ts b/src/sdk/controllers/docsPortalManagementController.ts index a36232df..0eab4e4d 100644 --- a/src/sdk/controllers/docsPortalManagementController.ts +++ b/src/sdk/controllers/docsPortalManagementController.ts @@ -90,7 +90,7 @@ export class DocsPortalManagementController extends BaseController { * @param accept Example: application/zip * @return Response from the API call */ - async generateOnPremPortalViaAPIEntity( + async generateOnPremPortalViaApiEntity( apiEntityId: string, accept: Accept3, requestOptions?: RequestOptions diff --git a/src/sdk/controllers/transformationController.ts b/src/sdk/controllers/transformationController.ts index aa2a0fba..233fc887 100644 --- a/src/sdk/controllers/transformationController.ts +++ b/src/sdk/controllers/transformationController.ts @@ -61,7 +61,7 @@ export class TransformationController extends BaseController { * @param body Request Body * @return Response from the API call */ - async transformViaURL( + async transformViaUrl( body: TransformViaUrlRequest, requestOptions?: RequestOptions ): Promise> { diff --git a/src/sdk/defaultConfiguration.ts b/src/sdk/defaultConfiguration.ts index efdf395e..b58264f5 100644 --- a/src/sdk/defaultConfiguration.ts +++ b/src/sdk/defaultConfiguration.ts @@ -5,11 +5,16 @@ */ import { Configuration, Environment } from './configuration'; -import { RetryConfiguration } from './core'; +import { + LoggingOptions, + mergeLoggingOptions, + NullLogger, + RetryConfiguration, +} from './core'; /** Default values for the configuration parameters of the client. */ export const DEFAULT_CONFIGURATION: Configuration = { - timeout: 0, + timeout: 30000, environment: Environment.Production, }; @@ -20,6 +25,11 @@ export const DEFAULT_RETRY_CONFIG: RetryConfiguration = { retryInterval: 1, maximumRetryWaitTime: 0, backoffFactor: 2, - httpStatusCodesToRetry: [408, 413, 429, 500, 502, 503, 504, 521, 522, 524, 408, 413, 429, 500, 502, 503, 504, 521, 522, 524, 408, 413, 429, 500, 502, 503, 504, 521, 522, 524], - httpMethodsToRetry: ['GET', 'PUT', 'GET', 'PUT', 'GET', 'PUT'], + httpStatusCodesToRetry: [408, 413, 429, 500, 502, 503, 504, 521, 522, 524], + httpMethodsToRetry: ['GET', 'PUT'], }; + +/** Default values for logging options. */ +export const DEFAULT_LOGGING_OPTIONS: LoggingOptions = mergeLoggingOptions({ + logger: new NullLogger(), +}); diff --git a/src/sdk/errors/internalServerErrorResponseError.ts b/src/sdk/errors/internalServerErrorResponseError.ts index 618690a8..59da0c46 100644 --- a/src/sdk/errors/internalServerErrorResponseError.ts +++ b/src/sdk/errors/internalServerErrorResponseError.ts @@ -11,6 +11,7 @@ import { ApiError } from '../core'; */ interface InternalServerErrorResponse { message?: string; + additionalProperties?: Record; } export class InternalServerErrorResponseError extends ApiError< diff --git a/src/sdk/errors/portalGenerationForbiddenResponseError.ts b/src/sdk/errors/portalGenerationForbiddenResponseError.ts deleted file mode 100644 index a9d9cf9c..00000000 --- a/src/sdk/errors/portalGenerationForbiddenResponseError.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { ApiError } from '../core'; - -/** - * Creates an instance of PortalGenerationForbiddenResponse - */ -interface PortalGenerationForbiddenResponse { - type?: string; - title?: string; - status?: number; - detail?: string; - instance?: string; - errors?: Record; -} - -export class PortalGenerationForbiddenResponseError extends ApiError< - PortalGenerationForbiddenResponse -> {} diff --git a/src/sdk/errors/portalGenerationValidationErrorResponseError.ts b/src/sdk/errors/portalGenerationValidationErrorResponseError.ts deleted file mode 100644 index 3cbabe57..00000000 --- a/src/sdk/errors/portalGenerationValidationErrorResponseError.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { ApiError } from '../core'; - -/** - * Creates an instance of PortalGenerationValidationErrorResponse - */ -interface PortalGenerationValidationErrorResponse { - type?: string; - title?: string; - status?: number; - detail?: string; - instance?: string; - errors?: Record; -} - -export class PortalGenerationValidationErrorResponseError extends ApiError< - PortalGenerationValidationErrorResponse -> {} diff --git a/src/sdk/errors/problemDetailsError.ts b/src/sdk/errors/problemDetailsError.ts index 98b56811..2167b0f7 100644 --- a/src/sdk/errors/problemDetailsError.ts +++ b/src/sdk/errors/problemDetailsError.ts @@ -16,6 +16,7 @@ interface ProblemDetails { detail?: string; instance?: string; errors?: Record; + additionalProperties?: Record; } export class ProblemDetailsError extends ApiError {} diff --git a/src/sdk/errors/unauthorizedResponseError.ts b/src/sdk/errors/unauthorizedResponseError.ts index 9491a0fa..ea0017c5 100644 --- a/src/sdk/errors/unauthorizedResponseError.ts +++ b/src/sdk/errors/unauthorizedResponseError.ts @@ -11,6 +11,7 @@ import { ApiError } from '../core'; */ interface UnauthorizedResponse { message?: string; + additionalProperties?: Record; } export class UnauthorizedResponseError extends ApiError {} diff --git a/src/sdk/index.ts b/src/sdk/index.ts index aa881429..be0e5726 100644 --- a/src/sdk/index.ts +++ b/src/sdk/index.ts @@ -14,13 +14,16 @@ export { FileWrapper, isFileWrapper, ResponseValidationError, + LoggerInterface, + LogLevel, + ConsoleLogger, } from './core'; export * from './defaultConfiguration'; -export * from './controllers/aPIValidationExternalApisController'; -export * from './controllers/aPIValidationImportedApisController'; -export * from './controllers/apisManagementController'; -export * from './controllers/codeGenerationExternalApisController'; -export * from './controllers/codeGenerationImportedApisController'; +export * from './controllers/apiValidationExternalApIsController'; +export * from './controllers/apiValidationImportedApIsController'; +export * from './controllers/apIsManagementController'; +export * from './controllers/codeGenerationExternalApIsController'; +export * from './controllers/codeGenerationImportedApIsController'; export * from './controllers/docsPortalGenerationAsyncController'; export * from './controllers/docsPortalManagementController'; export * from './controllers/transformationController'; @@ -32,7 +35,7 @@ export { Accept } from './models/accept'; export { Accept2 } from './models/accept2'; export { Accept3 } from './models/accept3'; export type { ApiEntity } from './models/apiEntity'; -export type { APIEntityCodeGeneration } from './models/aPIEntityCodeGeneration'; +export type { ApiEntityCodeGeneration } from './models/apiEntityCodeGeneration'; export type { ApiEntityDetailed } from './models/apiEntityDetailed'; export type { ApiValidationSummary } from './models/apiValidationSummary'; export type { Attributes } from './models/attributes'; @@ -42,7 +45,7 @@ export type { AuthScope } from './models/authScope'; export type { CodeGeneration } from './models/codeGeneration'; export type { CodeGenSettings } from './models/codeGenSettings'; export { ContentType } from './models/contentType'; -export type { CSNETSTANDARDLIB } from './models/cSNETSTANDARDLIB'; +export type { Csnetstandardlib } from './models/csnetstandardlib'; export type { CustomType } from './models/customType'; export type { DocsValidationSummary } from './models/docsValidationSummary'; export type { Endpoint } from './models/endpoint'; diff --git a/src/sdk/models/accept2.ts b/src/sdk/models/accept2.ts index 7f0c36ae..eadaa464 100644 --- a/src/sdk/models/accept2.ts +++ b/src/sdk/models/accept2.ts @@ -10,7 +10,7 @@ import { Schema, stringEnum } from '../schema'; * Enum for Accept2 */ export enum Accept2 { - EnumApplicationvndapimaticapiEntityfullv1json = 'application/vnd.apimatic.apiEntity.full.v1+json', + EnumApplicationvndapimaticapiEntityfullv1Json = 'application/vnd.apimatic.apiEntity.full.v1+json', } /** diff --git a/src/sdk/models/apiEntity.ts b/src/sdk/models/apiEntity.ts index bcca7cec..ee157d41 100644 --- a/src/sdk/models/apiEntity.ts +++ b/src/sdk/models/apiEntity.ts @@ -4,7 +4,16 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { array, boolean, lazy, object, Schema, string } from '../schema'; +import { + array, + boolean, + lazy, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; import { Authentication, authenticationSchema } from './authentication'; import { CodeGenSettings, codeGenSettingsSchema } from './codeGenSettings'; import { EndpointsGroup, endpointsGroupSchema } from './endpointsGroup'; @@ -52,28 +61,33 @@ export interface ApiEntity { /** API Endpoint Groups */ endpointsGroup: EndpointsGroup[]; metaData: MetaData; + additionalProperties?: Record; } -export const apiEntitySchema: Schema = object({ - id: ['id', string()], - encryptedId: ['encryptedId', string()], - apiKey: ['apiKey', string()], - apiGroupId: ['apiGroupId', string()], - imageUri: ['imageUri', string()], - creationDate: ['creationDate', string()], - mPublic: ['public', boolean()], - name: ['name', string()], - description: ['description', string()], - version: ['version', string()], - additionalHeaders: ['additionalHeaders', array(string())], - authentication: ['authentication', lazy(() => authenticationSchema)], - codeGenSettings: ['codeGenSettings', lazy(() => codeGenSettingsSchema)], - testGenSettings: ['testGenSettings', lazy(() => testGenSettingsSchema)], - errors: ['errors', array(string())], - serverConfiguration: [ - 'serverConfiguration', - lazy(() => serverConfigurationSchema), - ], - endpointsGroup: ['endpointsGroup', array(lazy(() => endpointsGroupSchema))], - metaData: ['metaData', lazy(() => metaDataSchema)], -}); +export const apiEntitySchema: Schema = typedExpandoObject( + { + id: ['id', string()], + encryptedId: ['encryptedId', string()], + apiKey: ['apiKey', string()], + apiGroupId: ['apiGroupId', string()], + imageUri: ['imageUri', string()], + creationDate: ['creationDate', string()], + mPublic: ['public', boolean()], + name: ['name', string()], + description: ['description', string()], + version: ['version', string()], + additionalHeaders: ['additionalHeaders', array(string())], + authentication: ['authentication', lazy(() => authenticationSchema)], + codeGenSettings: ['codeGenSettings', lazy(() => codeGenSettingsSchema)], + testGenSettings: ['testGenSettings', lazy(() => testGenSettingsSchema)], + errors: ['errors', array(string())], + serverConfiguration: [ + 'serverConfiguration', + lazy(() => serverConfigurationSchema), + ], + endpointsGroup: ['endpointsGroup', array(lazy(() => endpointsGroupSchema))], + metaData: ['metaData', lazy(() => metaDataSchema)], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/aPIEntityCodeGeneration.ts b/src/sdk/models/apiEntityCodeGeneration.ts similarity index 78% rename from src/sdk/models/aPIEntityCodeGeneration.ts rename to src/sdk/models/apiEntityCodeGeneration.ts index dd617661..2cfba104 100644 --- a/src/sdk/models/aPIEntityCodeGeneration.ts +++ b/src/sdk/models/apiEntityCodeGeneration.ts @@ -4,11 +4,18 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { boolean, object, Schema, string } from '../schema'; +import { + boolean, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; import { Platforms, platformsSchema } from './platforms'; /** The Code Generation structure encapsulates all the the details of an SDK generation performed against an API Entity */ -export interface APIEntityCodeGeneration { +export interface ApiEntityCodeGeneration { /** Unique Code Generation Identifier */ id: string; /** The structure contains platforms that APIMatic CodeGen can generate SDKs and Docs in. */ @@ -27,9 +34,10 @@ export interface APIEntityCodeGeneration { success: boolean; /** Unique API Entity Identifier */ apiEntityId: string; + additionalProperties?: Record; } -export const aPIEntityCodeGenerationSchema: Schema = object( +export const apiEntityCodeGenerationSchema: Schema = typedExpandoObject( { id: ['id', string()], template: ['template', platformsSchema], @@ -40,5 +48,7 @@ export const aPIEntityCodeGenerationSchema: Schema = ob codeGenVersion: ['codeGenVersion', string()], success: ['success', boolean()], apiEntityId: ['apiEntityId', string()], - } + }, + 'additionalProperties', + optional(unknown()) ); diff --git a/src/sdk/models/apiEntityDetailed.ts b/src/sdk/models/apiEntityDetailed.ts index fffc75c4..291c9225 100644 --- a/src/sdk/models/apiEntityDetailed.ts +++ b/src/sdk/models/apiEntityDetailed.ts @@ -4,7 +4,16 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { array, boolean, lazy, object, Schema, string } from '../schema'; +import { + array, + boolean, + lazy, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; import { Authentication, authenticationSchema } from './authentication'; import { CodeGenSettings, codeGenSettingsSchema } from './codeGenSettings'; import { CustomType, customTypeSchema } from './customType'; @@ -58,30 +67,35 @@ export interface ApiEntityDetailed { endpoints: Endpoint[]; /** Complex Custom Model Types */ customTypes: CustomType[]; + additionalProperties?: Record; } -export const apiEntityDetailedSchema: Schema = object({ - id: ['id', string()], - encryptedId: ['encryptedId', string()], - apiKey: ['apiKey', string()], - apiGroupId: ['apiGroupId', string()], - imageUri: ['imageUri', string()], - creationDate: ['creationDate', string()], - mPublic: ['public', boolean()], - name: ['name', string()], - description: ['description', string()], - version: ['version', string()], - additionalHeaders: ['additionalHeaders', array(string())], - authentication: ['authentication', lazy(() => authenticationSchema)], - codeGenSettings: ['codeGenSettings', lazy(() => codeGenSettingsSchema)], - testGenSettings: ['testGenSettings', lazy(() => testGenSettingsSchema)], - errors: ['errors', array(string())], - serverConfiguration: [ - 'serverConfiguration', - lazy(() => serverConfigurationSchema), - ], - endpointsGroup: ['endpointsGroup', array(lazy(() => endpointsGroupSchema))], - metaData: ['metaData', lazy(() => metaDataSchema)], - endpoints: ['endpoints', array(lazy(() => endpointSchema))], - customTypes: ['customTypes', array(lazy(() => customTypeSchema))], -}); +export const apiEntityDetailedSchema: Schema = typedExpandoObject( + { + id: ['id', string()], + encryptedId: ['encryptedId', string()], + apiKey: ['apiKey', string()], + apiGroupId: ['apiGroupId', string()], + imageUri: ['imageUri', string()], + creationDate: ['creationDate', string()], + mPublic: ['public', boolean()], + name: ['name', string()], + description: ['description', string()], + version: ['version', string()], + additionalHeaders: ['additionalHeaders', array(string())], + authentication: ['authentication', lazy(() => authenticationSchema)], + codeGenSettings: ['codeGenSettings', lazy(() => codeGenSettingsSchema)], + testGenSettings: ['testGenSettings', lazy(() => testGenSettingsSchema)], + errors: ['errors', array(string())], + serverConfiguration: [ + 'serverConfiguration', + lazy(() => serverConfigurationSchema), + ], + endpointsGroup: ['endpointsGroup', array(lazy(() => endpointsGroupSchema))], + metaData: ['metaData', lazy(() => metaDataSchema)], + endpoints: ['endpoints', array(lazy(() => endpointSchema))], + customTypes: ['customTypes', array(lazy(() => customTypeSchema))], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/apiValidationSummary.ts b/src/sdk/models/apiValidationSummary.ts index cb2cbd5a..2a0fdd32 100644 --- a/src/sdk/models/apiValidationSummary.ts +++ b/src/sdk/models/apiValidationSummary.ts @@ -4,18 +4,31 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { array, boolean, object, Schema, string } from '../schema'; +import { + array, + boolean, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; export interface ApiValidationSummary { success: boolean; errors: string[]; warnings: string[]; messages: string[]; + additionalProperties?: Record; } -export const apiValidationSummarySchema: Schema = object({ - success: ['success', boolean()], - errors: ['errors', array(string())], - warnings: ['warnings', array(string())], - messages: ['messages', array(string())], -}); +export const apiValidationSummarySchema: Schema = typedExpandoObject( + { + success: ['success', boolean()], + errors: ['errors', array(string())], + warnings: ['warnings', array(string())], + messages: ['messages', array(string())], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/attributes.ts b/src/sdk/models/attributes.ts index 8629d4b1..89072633 100644 --- a/src/sdk/models/attributes.ts +++ b/src/sdk/models/attributes.ts @@ -4,14 +4,23 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { object, Schema, string } from '../schema'; +import { + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; /** The structure contain attribute details of a parameter type. */ export interface Attributes { /** Unique Attribute Identifier */ id: string; + additionalProperties?: Record; } -export const attributesSchema: Schema = object({ - id: ['id', string()], -}); +export const attributesSchema: Schema = typedExpandoObject( + { id: ['id', string()] }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/authScope.ts b/src/sdk/models/authScope.ts index 9cd14031..11fcd88c 100644 --- a/src/sdk/models/authScope.ts +++ b/src/sdk/models/authScope.ts @@ -4,7 +4,13 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { object, Schema, string } from '../schema'; +import { + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; export interface AuthScope { /** Scope Id */ @@ -15,11 +21,16 @@ export interface AuthScope { value: string; /** Scope Description */ description: string; + additionalProperties?: Record; } -export const authScopeSchema: Schema = object({ - id: ['id', string()], - name: ['name', string()], - value: ['value', string()], - description: ['description', string()], -}); +export const authScopeSchema: Schema = typedExpandoObject( + { + id: ['id', string()], + name: ['name', string()], + value: ['value', string()], + description: ['description', string()], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/authentication.ts b/src/sdk/models/authentication.ts index 5015269d..26cde7c0 100644 --- a/src/sdk/models/authentication.ts +++ b/src/sdk/models/authentication.ts @@ -7,10 +7,10 @@ import { array, lazy, - object, optional, Schema, string, + typedExpandoObject, unknown, } from '../schema'; import { AuthScope, authScopeSchema } from './authScope'; @@ -31,14 +31,19 @@ export interface Authentication { authGrantTypes: string[]; /** Paramater Formats */ paramFormats?: unknown; + additionalProperties?: Record; } -export const authenticationSchema: Schema = object({ - id: ['id', string()], - authType: ['authType', string()], - scopes: ['scopes', array(lazy(() => authScopeSchema))], - parameters: ['parameters', array(string())], - authScopes: ['authScopes', array(string())], - authGrantTypes: ['authGrantTypes', array(string())], - paramFormats: ['paramFormats', optional(unknown())], -}); +export const authenticationSchema: Schema = typedExpandoObject( + { + id: ['id', string()], + authType: ['authType', string()], + scopes: ['scopes', array(lazy(() => authScopeSchema))], + parameters: ['parameters', array(string())], + authScopes: ['authScopes', array(string())], + authGrantTypes: ['authGrantTypes', array(string())], + paramFormats: ['paramFormats', optional(unknown())], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/authorIdentifiers.ts b/src/sdk/models/authorIdentifiers.ts index 332f294e..ce94755d 100644 --- a/src/sdk/models/authorIdentifiers.ts +++ b/src/sdk/models/authorIdentifiers.ts @@ -4,14 +4,22 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { object, Schema, string } from '../schema'; +import { + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; export interface AuthorIdentifiers { email: string; userName: string; + additionalProperties?: Record; } -export const authorIdentifiersSchema: Schema = object({ - email: ['Email', string()], - userName: ['UserName', string()], -}); +export const authorIdentifiersSchema: Schema = typedExpandoObject( + { email: ['Email', string()], userName: ['UserName', string()] }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/cSNETSTANDARDLIB.ts b/src/sdk/models/cSNETSTANDARDLIB.ts deleted file mode 100644 index ce1afb2f..00000000 --- a/src/sdk/models/cSNETSTANDARDLIB.ts +++ /dev/null @@ -1,36 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { object, optional, Schema, string, unknown } from '../schema'; -import { Id, idSchema } from './id'; -import { Link, linkSchema } from './link'; - -/** This structure contains all details that goes into package deployment. */ -export interface CSNETSTANDARDLIB { - /** Unique package identifier */ - id?: Id; - /** Package Repository as per platform */ - packageRepository: string; - /** Package Name */ - packageName: string; - version: string; - /** Any additional platform specific deployment detail */ - additionalDeploymentInformation?: unknown; - /** Link of deployed package */ - link?: Link; -} - -export const cSNETSTANDARDLIBSchema: Schema = object({ - id: ['id', optional(idSchema)], - packageRepository: ['packageRepository', string()], - packageName: ['packageName', string()], - version: ['version', string()], - additionalDeploymentInformation: [ - 'additionalDeploymentInformation', - optional(unknown()), - ], - link: ['link', optional(linkSchema)], -}); diff --git a/src/sdk/models/codeGenSettings.ts b/src/sdk/models/codeGenSettings.ts index 8e1302e6..82d189e8 100644 --- a/src/sdk/models/codeGenSettings.ts +++ b/src/sdk/models/codeGenSettings.ts @@ -4,7 +4,16 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { array, boolean, number, object, Schema, string } from '../schema'; +import { + array, + boolean, + number, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; /** APIMatic’s code generation engine has various code generation configurations to customise the behaviour and outlook across the generated SDKS. This structure encapsulates all settings for CodeGeneration. */ export interface CodeGenSettings { @@ -43,7 +52,7 @@ export interface CodeGenSettings { preserveParameterOrder: boolean; /** Append JSON/XML accept and content-type headers */ appendContentHeaders: boolean; - modelSerializationIsJSON: boolean; + modelSerializationIsJson: boolean; /** Return a null value on HTTP 404 */ nullify404: boolean; /** Validate required parameters to be Not Null */ @@ -95,7 +104,7 @@ export interface CodeGenSettings { /** Files/dependencies used for linting are not generated if this option is enabled */ disableLinting: boolean; /** Create a configuration option in SDKs to optionally skip certificate verification when establishing HTTPS connections. */ - allowSkippingSSLCertVerification: boolean; + allowSkippingSslCertVerification: boolean; /** Apply Customisations */ applyCustomizations: string[]; /** Enabling this will stop splitting of words when converting identifiers from API specification to language-specific identifiers. */ @@ -104,63 +113,71 @@ export interface CodeGenSettings { sortResources: boolean; /** Enable a global user agent */ enableGlobalUserAgent: boolean; + additionalProperties?: Record; } -export const codeGenSettingsSchema: Schema = object({ - isAsync: ['isAsync', boolean()], - useHttpMethodPrefix: ['useHttpMethodPrefix', boolean()], - useModelPrefix: ['useModelPrefix', boolean()], - useEnumPrefix: ['useEnumPrefix', boolean()], - useConstructorsForConfig: ['useConstructorsForConfig', boolean()], - useCommonSdkLibrary: ['useCommonSdkLibrary', boolean()], - generateInterfaces: ['generateInterfaces', boolean()], - generateAppveyorConfig: ['generateAppveyorConfig', boolean()], - generateCircleConfig: ['generateCircleConfig', boolean()], - generateJenkinsConfig: ['generateJenkinsConfig', boolean()], - generateTravisConfig: ['generateTravisConfig', boolean()], - androidUseAppManifest: ['androidUseAppManifest', boolean()], - iosUseAppInfoPlist: ['iosUseAppInfoPlist', boolean()], - iosGenerateCoreData: ['iosGenerateCoreData', boolean()], - runscopeEnabled: ['runscopeEnabled', boolean()], - collapseParamsToArray: ['collapseParamsToArray', boolean()], - preserveParameterOrder: ['preserveParameterOrder', boolean()], - appendContentHeaders: ['appendContentHeaders', boolean()], - modelSerializationIsJSON: ['modelSerializationIsJSON', boolean()], - nullify404: ['nullify404', boolean()], - validateRequiredParameters: ['validateRequiredParameters', boolean()], - enableAdditionalModelProperties: [ - 'enableAdditionalModelProperties', - boolean(), - ], - javaUsePropertiesConfig: ['javaUsePropertiesConfig', boolean()], - useControllerPrefix: ['useControllerPrefix', boolean()], - useExceptionPrefix: ['useExceptionPrefix', boolean()], - parameterArrayFormat: ['parameterArrayFormat', string()], - objCHttpClient: ['objCHttpClient', string()], - cSharpHttpClient: ['cSharpHttpClient', string()], - androidHttpClient: ['androidHttpClient', string()], - nodeHttpClient: ['nodeHttpClient', string()], - phpHttpClient: ['phpHttpClient', string()], - bodySerialization: ['bodySerialization', number()], - arraySerialization: ['arraySerialization', string()], - timeout: ['timeout', number()], - enableLogging: ['enableLogging', boolean()], - enableHttpCache: ['enableHttpCache', boolean()], - retries: ['retries', number()], - retryInterval: ['retryInterval', number()], - generateAdvancedDocs: ['generateAdvancedDocs', boolean()], - storeTimezoneInformation: ['storeTimezoneInformation', boolean()], - enablePhpComposerVersionString: ['enablePhpComposerVersionString', boolean()], - securityProtocols: ['securityProtocols', array(string())], - underscoreNumbers: ['underscoreNumbers', boolean()], - useSingletonPattern: ['useSingletonPattern', boolean()], - disableLinting: ['disableLinting', boolean()], - allowSkippingSSLCertVerification: [ - 'allowSkippingSSLCertVerification', - boolean(), - ], - applyCustomizations: ['applyCustomizations', array(string())], - doNotSplitWords: ['doNotSplitWords', array(string())], - sortResources: ['sortResources', boolean()], - enableGlobalUserAgent: ['enableGlobalUserAgent', boolean()], -}); +export const codeGenSettingsSchema: Schema = typedExpandoObject( + { + isAsync: ['isAsync', boolean()], + useHttpMethodPrefix: ['useHttpMethodPrefix', boolean()], + useModelPrefix: ['useModelPrefix', boolean()], + useEnumPrefix: ['useEnumPrefix', boolean()], + useConstructorsForConfig: ['useConstructorsForConfig', boolean()], + useCommonSdkLibrary: ['useCommonSdkLibrary', boolean()], + generateInterfaces: ['generateInterfaces', boolean()], + generateAppveyorConfig: ['generateAppveyorConfig', boolean()], + generateCircleConfig: ['generateCircleConfig', boolean()], + generateJenkinsConfig: ['generateJenkinsConfig', boolean()], + generateTravisConfig: ['generateTravisConfig', boolean()], + androidUseAppManifest: ['androidUseAppManifest', boolean()], + iosUseAppInfoPlist: ['iosUseAppInfoPlist', boolean()], + iosGenerateCoreData: ['iosGenerateCoreData', boolean()], + runscopeEnabled: ['runscopeEnabled', boolean()], + collapseParamsToArray: ['collapseParamsToArray', boolean()], + preserveParameterOrder: ['preserveParameterOrder', boolean()], + appendContentHeaders: ['appendContentHeaders', boolean()], + modelSerializationIsJson: ['modelSerializationIsJSON', boolean()], + nullify404: ['nullify404', boolean()], + validateRequiredParameters: ['validateRequiredParameters', boolean()], + enableAdditionalModelProperties: [ + 'enableAdditionalModelProperties', + boolean(), + ], + javaUsePropertiesConfig: ['javaUsePropertiesConfig', boolean()], + useControllerPrefix: ['useControllerPrefix', boolean()], + useExceptionPrefix: ['useExceptionPrefix', boolean()], + parameterArrayFormat: ['parameterArrayFormat', string()], + objCHttpClient: ['objCHttpClient', string()], + cSharpHttpClient: ['cSharpHttpClient', string()], + androidHttpClient: ['androidHttpClient', string()], + nodeHttpClient: ['nodeHttpClient', string()], + phpHttpClient: ['phpHttpClient', string()], + bodySerialization: ['bodySerialization', number()], + arraySerialization: ['arraySerialization', string()], + timeout: ['timeout', number()], + enableLogging: ['enableLogging', boolean()], + enableHttpCache: ['enableHttpCache', boolean()], + retries: ['retries', number()], + retryInterval: ['retryInterval', number()], + generateAdvancedDocs: ['generateAdvancedDocs', boolean()], + storeTimezoneInformation: ['storeTimezoneInformation', boolean()], + enablePhpComposerVersionString: [ + 'enablePhpComposerVersionString', + boolean(), + ], + securityProtocols: ['securityProtocols', array(string())], + underscoreNumbers: ['underscoreNumbers', boolean()], + useSingletonPattern: ['useSingletonPattern', boolean()], + disableLinting: ['disableLinting', boolean()], + allowSkippingSslCertVerification: [ + 'allowSkippingSSLCertVerification', + boolean(), + ], + applyCustomizations: ['applyCustomizations', array(string())], + doNotSplitWords: ['doNotSplitWords', array(string())], + sortResources: ['sortResources', boolean()], + enableGlobalUserAgent: ['enableGlobalUserAgent', boolean()], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/codeGeneration.ts b/src/sdk/models/codeGeneration.ts index aea38f0a..a221c75b 100644 --- a/src/sdk/models/codeGeneration.ts +++ b/src/sdk/models/codeGeneration.ts @@ -4,7 +4,14 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { boolean, object, Schema, string } from '../schema'; +import { + boolean, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; import { Platforms, platformsSchema } from './platforms'; /** The Code Generation structure encapsulates all the the details of an SDK generation performed against an API Entity */ @@ -25,15 +32,20 @@ export interface CodeGeneration { codeGenVersion: string; /** Generation Status */ success: boolean; + additionalProperties?: Record; } -export const codeGenerationSchema: Schema = object({ - id: ['id', string()], - template: ['template', platformsSchema], - generatedFile: ['generatedFile', string()], - generatedOn: ['generatedOn', string()], - hashCode: ['hashCode', string()], - codeGenerationSource: ['codeGenerationSource', string()], - codeGenVersion: ['codeGenVersion', string()], - success: ['success', boolean()], -}); +export const codeGenerationSchema: Schema = typedExpandoObject( + { + id: ['id', string()], + template: ['template', platformsSchema], + generatedFile: ['generatedFile', string()], + generatedOn: ['generatedOn', string()], + hashCode: ['hashCode', string()], + codeGenerationSource: ['codeGenerationSource', string()], + codeGenVersion: ['codeGenVersion', string()], + success: ['success', boolean()], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/csnetstandardlib.ts b/src/sdk/models/csnetstandardlib.ts new file mode 100644 index 00000000..f9798efe --- /dev/null +++ b/src/sdk/models/csnetstandardlib.ts @@ -0,0 +1,47 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; +import { Id, idSchema } from './id'; +import { Link, linkSchema } from './link'; + +/** This structure contains all details that goes into package deployment. */ +export interface Csnetstandardlib { + /** Unique package identifier */ + id?: Id; + /** Package Repository as per platform */ + packageRepository: string; + /** Package Name */ + packageName: string; + version: string; + /** Any additional platform specific deployment detail */ + additionalDeploymentInformation?: unknown; + /** Link of deployed package */ + link?: Link; + additionalProperties?: Record; +} + +export const csnetstandardlibSchema: Schema = typedExpandoObject( + { + id: ['id', optional(idSchema)], + packageRepository: ['packageRepository', string()], + packageName: ['packageName', string()], + version: ['version', string()], + additionalDeploymentInformation: [ + 'additionalDeploymentInformation', + optional(unknown()), + ], + link: ['link', optional(linkSchema)], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/customType.ts b/src/sdk/models/customType.ts index 6c410d1c..e52056e7 100644 --- a/src/sdk/models/customType.ts +++ b/src/sdk/models/customType.ts @@ -4,7 +4,15 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { array, lazy, object, Schema, string } from '../schema'; +import { + array, + lazy, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; import { Field, fieldSchema } from './field'; import { ImplementationType, @@ -25,13 +33,18 @@ export interface CustomType { implementationType: ImplementationType; /** Type Fields */ fields: Field[]; + additionalProperties?: Record; } -export const customTypeSchema: Schema = object({ - id: ['id', string()], - apiId: ['apiId', string()], - name: ['name', string()], - baseType: ['baseType', string()], - implementationType: ['implementationType', implementationTypeSchema], - fields: ['fields', array(lazy(() => fieldSchema))], -}); +export const customTypeSchema: Schema = typedExpandoObject( + { + id: ['id', string()], + apiId: ['apiId', string()], + name: ['name', string()], + baseType: ['baseType', string()], + implementationType: ['implementationType', implementationTypeSchema], + fields: ['fields', array(lazy(() => fieldSchema))], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/docsValidationSummary.ts b/src/sdk/models/docsValidationSummary.ts index 52835df6..8d364fe8 100644 --- a/src/sdk/models/docsValidationSummary.ts +++ b/src/sdk/models/docsValidationSummary.ts @@ -4,20 +4,31 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { array, boolean, object, Schema, string } from '../schema'; +import { + array, + boolean, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; export interface DocsValidationSummary { success: boolean; errors: string[]; warnings: string[]; messages: string[]; + additionalProperties?: Record; } -export const docsValidationSummarySchema: Schema = object( +export const docsValidationSummarySchema: Schema = typedExpandoObject( { success: ['success', boolean()], errors: ['errors', array(string())], warnings: ['warnings', array(string())], messages: ['messages', array(string())], - } + }, + 'additionalProperties', + optional(unknown()) ); diff --git a/src/sdk/models/endpoint.ts b/src/sdk/models/endpoint.ts index 72f6cda7..e8ed9c70 100644 --- a/src/sdk/models/endpoint.ts +++ b/src/sdk/models/endpoint.ts @@ -8,9 +8,10 @@ import { array, boolean, lazy, - object, + optional, Schema, string, + typedExpandoObject, unknown, } from '../schema'; import { Parameter, parameterSchema } from './parameter'; @@ -51,23 +52,28 @@ export interface Endpoint { errors: unknown[]; /** Test Cases associated with Endpoint */ testCases: TestCase[]; + additionalProperties?: Record; } -export const endpointSchema: Schema = object({ - id: ['id', string()], - apiId: ['apiId', string()], - name: ['name', string()], - httpMethod: ['httpMethod', string()], - group: ['group', string()], - skipAuthentication: ['skipAuthentication', boolean()], - route: ['route', string()], - response: ['response', lazy(() => responseSchema)], - hasOptionalQueryParams: ['hasOptionalQueryParams', boolean()], - hasOptionalFieldParams: ['hasOptionalFieldParams', boolean()], - collectParameters: ['collectParameters', boolean()], - wrapBodyInObject: ['wrapBodyInObject', boolean()], - requiredScopes: ['requiredScopes', array(string())], - parameters: ['parameters', array(lazy(() => parameterSchema))], - errors: ['errors', array(unknown())], - testCases: ['testCases', array(lazy(() => testCaseSchema))], -}); +export const endpointSchema: Schema = typedExpandoObject( + { + id: ['id', string()], + apiId: ['apiId', string()], + name: ['name', string()], + httpMethod: ['httpMethod', string()], + group: ['group', string()], + skipAuthentication: ['skipAuthentication', boolean()], + route: ['route', string()], + response: ['response', lazy(() => responseSchema)], + hasOptionalQueryParams: ['hasOptionalQueryParams', boolean()], + hasOptionalFieldParams: ['hasOptionalFieldParams', boolean()], + collectParameters: ['collectParameters', boolean()], + wrapBodyInObject: ['wrapBodyInObject', boolean()], + requiredScopes: ['requiredScopes', array(string())], + parameters: ['parameters', array(lazy(() => parameterSchema))], + errors: ['errors', array(unknown())], + testCases: ['testCases', array(lazy(() => testCaseSchema))], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/endpointsGroup.ts b/src/sdk/models/endpointsGroup.ts index c6c49e03..8027388e 100644 --- a/src/sdk/models/endpointsGroup.ts +++ b/src/sdk/models/endpointsGroup.ts @@ -4,15 +4,23 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { object, Schema, string } from '../schema'; +import { + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; /** This structure encapsulates all the attributes of an API Endpoints Group. */ export interface EndpointsGroup { name: string; description: string; + additionalProperties?: Record; } -export const endpointsGroupSchema: Schema = object({ - name: ['name', string()], - description: ['description', string()], -}); +export const endpointsGroupSchema: Schema = typedExpandoObject( + { name: ['name', string()], description: ['description', string()] }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/exportFormats.ts b/src/sdk/models/exportFormats.ts index 56e2958e..3b8ed252 100644 --- a/src/sdk/models/exportFormats.ts +++ b/src/sdk/models/exportFormats.ts @@ -10,20 +10,20 @@ import { Schema, stringEnum } from '../schema'; * Enum for ExportFormats */ export enum ExportFormats { - APIMATIC = 'APIMATIC', - WADL2009 = 'WADL2009', - WSDL = 'WSDL', - SWAGGER10 = 'Swagger10', - SWAGGER20 = 'Swagger20', - SWAGGERYAML = 'SwaggerYaml', - OAS3 = 'OpenApi3Json', - OPENAPI3YAML = 'OpenApi3Yaml', - APIBLUEPRINT = 'APIBluePrint', - RAML = 'RAML', - RAML10 = 'RAML10', - POSTMAN10 = 'Postman10', - POSTMAN20 = 'Postman20', - GRAPHQLSCHEMA = 'GraphQlSchema', + Apimatic = 'APIMATIC', + Wadl2009 = 'WADL2009', + Wsdl = 'WSDL', + Swagger10 = 'Swagger10', + Swagger20 = 'Swagger20', + Swaggeryaml = 'SwaggerYaml', + Oas3 = 'OpenApi3Json', + Openapi3Yaml = 'OpenApi3Yaml', + Apiblueprint = 'APIBluePrint', + Raml = 'RAML', + Raml10 = 'RAML10', + Postman10 = 'Postman10', + Postman20 = 'Postman20', + Graphqlschema = 'GraphQlSchema', } /** diff --git a/src/sdk/models/field.ts b/src/sdk/models/field.ts index 7443b819..decb214f 100644 --- a/src/sdk/models/field.ts +++ b/src/sdk/models/field.ts @@ -4,7 +4,15 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { boolean, lazy, object, Schema, string } from '../schema'; +import { + boolean, + lazy, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; import { Attributes, attributesSchema } from './attributes'; /** This structure encapsulates all details of a parameter. */ @@ -32,20 +40,25 @@ export interface Field { description: string; /** Default Values of a Parameter */ defaultValue: string; + additionalProperties?: Record; } -export const fieldSchema: Schema = object({ - optional: ['optional', boolean()], - type: ['type', string()], - constant: ['constant', boolean()], - isArray: ['isArray', boolean()], - isStream: ['isStream', boolean()], - isAttribute: ['isAttribute', boolean()], - isMap: ['isMap', boolean()], - attributes: ['attributes', lazy(() => attributesSchema)], - nullable: ['nullable', boolean()], - id: ['id', string()], - name: ['name', string()], - description: ['description', string()], - defaultValue: ['defaultValue', string()], -}); +export const fieldSchema: Schema = typedExpandoObject( + { + optional: ['optional', boolean()], + type: ['type', string()], + constant: ['constant', boolean()], + isArray: ['isArray', boolean()], + isStream: ['isStream', boolean()], + isAttribute: ['isAttribute', boolean()], + isMap: ['isMap', boolean()], + attributes: ['attributes', lazy(() => attributesSchema)], + nullable: ['nullable', boolean()], + id: ['id', string()], + name: ['name', string()], + description: ['description', string()], + defaultValue: ['defaultValue', string()], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/generateSdkViaUrlRequest.ts b/src/sdk/models/generateSdkViaUrlRequest.ts index 10ca34bf..2534200b 100644 --- a/src/sdk/models/generateSdkViaUrlRequest.ts +++ b/src/sdk/models/generateSdkViaUrlRequest.ts @@ -4,7 +4,13 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { object, Schema, string } from '../schema'; +import { + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; import { Platforms, platformsSchema } from './platforms'; export interface GenerateSdkViaUrlRequest { @@ -12,8 +18,11 @@ export interface GenerateSdkViaUrlRequest { url: string; /** The structure contains platforms that APIMatic CodeGen can generate SDKs and Docs in. */ template: Platforms; + additionalProperties?: Record; } -export const generateSdkViaUrlRequestSchema: Schema = object( - { url: ['url', string()], template: ['template', platformsSchema] } +export const generateSdkViaUrlRequestSchema: Schema = typedExpandoObject( + { url: ['url', string()], template: ['template', platformsSchema] }, + 'additionalProperties', + optional(unknown()) ); diff --git a/src/sdk/models/id.ts b/src/sdk/models/id.ts index 66bc133c..79109083 100644 --- a/src/sdk/models/id.ts +++ b/src/sdk/models/id.ts @@ -10,7 +10,7 @@ import { Schema, stringEnum } from '../schema'; * Enum for Id */ export enum Id { - Enum5dcd2b5893c3e31a206f30c4 = '5dcd2b5893c3e31a206f30c4', + Enum5Dcd2B5893C3E31A206F30C4 = '5dcd2b5893c3e31a206f30c4', } /** diff --git a/src/sdk/models/importApiVersionViaUrlRequest.ts b/src/sdk/models/importApiVersionViaUrlRequest.ts index 88715aba..5b47808e 100644 --- a/src/sdk/models/importApiVersionViaUrlRequest.ts +++ b/src/sdk/models/importApiVersionViaUrlRequest.ts @@ -4,7 +4,13 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { object, Schema, string } from '../schema'; +import { + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; /** This structure contains details of importing a new API Version */ export interface ImportApiVersionViaUrlRequest { @@ -12,8 +18,11 @@ export interface ImportApiVersionViaUrlRequest { versionOverride: string; /** The URL for the API specification file.

**Note:** This URL should be publicly accessible. */ url: string; + additionalProperties?: Record; } -export const importApiVersionViaUrlRequestSchema: Schema = object( - { versionOverride: ['version_override', string()], url: ['url', string()] } +export const importApiVersionViaUrlRequestSchema: Schema = typedExpandoObject( + { versionOverride: ['version_override', string()], url: ['url', string()] }, + 'additionalProperties', + optional(unknown()) ); diff --git a/src/sdk/models/importApiViaUrlRequest.ts b/src/sdk/models/importApiViaUrlRequest.ts index 9d647960..98c1c897 100644 --- a/src/sdk/models/importApiViaUrlRequest.ts +++ b/src/sdk/models/importApiViaUrlRequest.ts @@ -4,14 +4,23 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { object, Schema, string } from '../schema'; +import { + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; /** Contains a url field to allow Apis to be imported via url */ export interface ImportApiViaUrlRequest { /** The URL for the API specification file.

**Note:** This URL should be publicly accessible. */ url: string; + additionalProperties?: Record; } -export const importApiViaUrlRequestSchema: Schema = object( - { url: ['url', string()] } +export const importApiViaUrlRequestSchema: Schema = typedExpandoObject( + { url: ['url', string()] }, + 'additionalProperties', + optional(unknown()) ); diff --git a/src/sdk/models/importValidationSummary.ts b/src/sdk/models/importValidationSummary.ts index de3b1c4b..2df24359 100644 --- a/src/sdk/models/importValidationSummary.ts +++ b/src/sdk/models/importValidationSummary.ts @@ -4,20 +4,31 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { array, boolean, object, Schema, string } from '../schema'; +import { + array, + boolean, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; export interface ImportValidationSummary { success: boolean; errors: string[]; warnings: string[]; messages: string[]; + additionalProperties?: Record; } -export const importValidationSummarySchema: Schema = object( +export const importValidationSummarySchema: Schema = typedExpandoObject( { success: ['success', boolean()], errors: ['errors', array(string())], warnings: ['warnings', array(string())], messages: ['messages', array(string())], - } + }, + 'additionalProperties', + optional(unknown()) ); diff --git a/src/sdk/models/inplaceImportApiViaUrlRequest.ts b/src/sdk/models/inplaceImportApiViaUrlRequest.ts index 0901f702..6327fd64 100644 --- a/src/sdk/models/inplaceImportApiViaUrlRequest.ts +++ b/src/sdk/models/inplaceImportApiViaUrlRequest.ts @@ -4,14 +4,23 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { object, Schema, string } from '../schema'; +import { + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; /** Contains a url field to allow Apis to be imported via url */ export interface InplaceImportApiViaUrlRequest { /** The URL for the API specification file.

**Note:** This URL should be publicly accessible. */ url: string; + additionalProperties?: Record; } -export const inplaceImportApiViaUrlRequestSchema: Schema = object( - { url: ['url', string()] } +export const inplaceImportApiViaUrlRequestSchema: Schema = typedExpandoObject( + { url: ['url', string()] }, + 'additionalProperties', + optional(unknown()) ); diff --git a/src/sdk/models/inputParameter.ts b/src/sdk/models/inputParameter.ts index 48c1eba5..14c795cb 100644 --- a/src/sdk/models/inputParameter.ts +++ b/src/sdk/models/inputParameter.ts @@ -4,7 +4,14 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { boolean, object, Schema, string } from '../schema'; +import { + boolean, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; /** This structure helps specify details of an input parameter. */ export interface InputParameter { @@ -18,12 +25,17 @@ export interface InputParameter { name: string; /** Parameter Value */ value: string; + additionalProperties?: Record; } -export const inputParameterSchema: Schema = object({ - isNull: ['isNull', boolean()], - endpointInputPrameterId: ['endpointInputPrameterId', string()], - id: ['id', string()], - name: ['name', string()], - value: ['value', string()], -}); +export const inputParameterSchema: Schema = typedExpandoObject( + { + isNull: ['isNull', boolean()], + endpointInputPrameterId: ['endpointInputPrameterId', string()], + id: ['id', string()], + name: ['name', string()], + value: ['value', string()], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/links.ts b/src/sdk/models/links.ts index 4de41cc1..ee50d3cc 100644 --- a/src/sdk/models/links.ts +++ b/src/sdk/models/links.ts @@ -4,14 +4,22 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { object, Schema, string } from '../schema'; +import { + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; export interface Links { status: string; download: string; + additionalProperties?: Record; } -export const linksSchema: Schema = object({ - status: ['status', string()], - download: ['download', string()], -}); +export const linksSchema: Schema = typedExpandoObject( + { status: ['status', string()], download: ['download', string()] }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/mEnvironment.ts b/src/sdk/models/mEnvironment.ts index c91a840e..45829dca 100644 --- a/src/sdk/models/mEnvironment.ts +++ b/src/sdk/models/mEnvironment.ts @@ -4,7 +4,15 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { array, lazy, object, Schema, string } from '../schema'; +import { + array, + lazy, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; import { Server, serverSchema } from './server'; /** An environment consists of a set of servers with base URL values. The environment can be changed programatically allowing rapid switching between different environments. For example the user can specify a Production and Testing Environment and switch between them in the generated SDK. */ @@ -15,10 +23,15 @@ export interface MEnvironment { name: string; /** The user can specify multiple servers within an environment. A server comprises of a name and a url. */ servers: Server[]; + additionalProperties?: Record; } -export const mEnvironmentSchema: Schema = object({ - id: ['id', string()], - name: ['name', string()], - servers: ['servers', array(lazy(() => serverSchema))], -}); +export const mEnvironmentSchema: Schema = typedExpandoObject( + { + id: ['id', string()], + name: ['name', string()], + servers: ['servers', array(lazy(() => serverSchema))], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/metaData.ts b/src/sdk/models/metaData.ts index 3900a88b..3a2d5c7e 100644 --- a/src/sdk/models/metaData.ts +++ b/src/sdk/models/metaData.ts @@ -4,7 +4,7 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { lazy, object, Schema } from '../schema'; +import { lazy, optional, Schema, typedExpandoObject, unknown } from '../schema'; import { ApiValidationSummary, apiValidationSummarySchema, @@ -22,19 +22,24 @@ export interface MetaData { importValidationSummary: ImportValidationSummary; apiValidationSummary: ApiValidationSummary; docsValidationSummary: DocsValidationSummary; + additionalProperties?: Record; } -export const metaDataSchema: Schema = object({ - importValidationSummary: [ - 'importValidationSummary', - lazy(() => importValidationSummarySchema), - ], - apiValidationSummary: [ - 'apiValidationSummary', - lazy(() => apiValidationSummarySchema), - ], - docsValidationSummary: [ - 'docsValidationSummary', - lazy(() => docsValidationSummarySchema), - ], -}); +export const metaDataSchema: Schema = typedExpandoObject( + { + importValidationSummary: [ + 'importValidationSummary', + lazy(() => importValidationSummarySchema), + ], + apiValidationSummary: [ + 'apiValidationSummary', + lazy(() => apiValidationSummarySchema), + ], + docsValidationSummary: [ + 'docsValidationSummary', + lazy(() => docsValidationSummarySchema), + ], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/packageDeploymentInformation.ts b/src/sdk/models/packageDeploymentInformation.ts index db709a79..812cb528 100644 --- a/src/sdk/models/packageDeploymentInformation.ts +++ b/src/sdk/models/packageDeploymentInformation.ts @@ -4,7 +4,14 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { lazy, object, Schema, string } from '../schema'; +import { + lazy, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; import { TemplatesPackageDeploymentInformation, templatesPackageDeploymentInformationSchema, @@ -16,14 +23,17 @@ export interface PackageDeploymentInformation { id: string; /** This structure encapsulates all package deployment details. */ templatesPackageDeploymentInformation: TemplatesPackageDeploymentInformation; + additionalProperties?: Record; } -export const packageDeploymentInformationSchema: Schema = object( +export const packageDeploymentInformationSchema: Schema = typedExpandoObject( { id: ['id', string()], templatesPackageDeploymentInformation: [ 'templatesPackageDeploymentInformation', lazy(() => templatesPackageDeploymentInformationSchema), ], - } + }, + 'additionalProperties', + optional(unknown()) ); diff --git a/src/sdk/models/packageRepositories.ts b/src/sdk/models/packageRepositories.ts index f1f50918..267b4efa 100644 --- a/src/sdk/models/packageRepositories.ts +++ b/src/sdk/models/packageRepositories.ts @@ -11,7 +11,7 @@ import { Schema, stringEnum } from '../schema'; */ export enum PackageRepositories { Npm = 'Npm', - PyPI = 'PyPI', + PyPi = 'PyPI', RubyGems = 'RubyGems', } diff --git a/src/sdk/models/parameter.ts b/src/sdk/models/parameter.ts index 442838b4..fc9466b1 100644 --- a/src/sdk/models/parameter.ts +++ b/src/sdk/models/parameter.ts @@ -4,7 +4,15 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { boolean, lazy, object, Schema, string } from '../schema'; +import { + boolean, + lazy, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; import { Attributes, attributesSchema } from './attributes'; /** Parameters are options passed with the endpoint */ @@ -34,21 +42,26 @@ export interface Parameter { defaultValue: string; /** Specify Parameter Format */ paramFormat: string; + additionalProperties?: Record; } -export const parameterSchema: Schema = object({ - optional: ['optional', boolean()], - type: ['type', string()], - constant: ['constant', boolean()], - isArray: ['isArray', boolean()], - isStream: ['isStream', boolean()], - isAttribute: ['isAttribute', boolean()], - isMap: ['isMap', boolean()], - attributes: ['attributes', lazy(() => attributesSchema)], - nullable: ['nullable', boolean()], - id: ['id', string()], - name: ['name', string()], - description: ['description', string()], - defaultValue: ['defaultValue', string()], - paramFormat: ['ParamFormat', string()], -}); +export const parameterSchema: Schema = typedExpandoObject( + { + optional: ['optional', boolean()], + type: ['type', string()], + constant: ['constant', boolean()], + isArray: ['isArray', boolean()], + isStream: ['isStream', boolean()], + isAttribute: ['isAttribute', boolean()], + isMap: ['isMap', boolean()], + attributes: ['attributes', lazy(() => attributesSchema)], + nullable: ['nullable', boolean()], + id: ['id', string()], + name: ['name', string()], + description: ['description', string()], + defaultValue: ['defaultValue', string()], + paramFormat: ['ParamFormat', string()], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/platforms.ts b/src/sdk/models/platforms.ts index 3799765f..d51f9fb7 100644 --- a/src/sdk/models/platforms.ts +++ b/src/sdk/models/platforms.ts @@ -10,13 +10,13 @@ import { Schema, stringEnum } from '../schema'; * Enum for Platforms */ export enum Platforms { - CSNETSTANDARDLIB = 'CS_NET_STANDARD_LIB', - JAVAECLIPSEJRELIB = 'JAVA_ECLIPSE_JRE_LIB', - PHPGENERICLIBV2 = 'PHP_GENERIC_LIB_V2', - PYTHONGENERICLIB = 'PYTHON_GENERIC_LIB', - RUBYGENERICLIB = 'RUBY_GENERIC_LIB', - TSGENERICLIB = 'TS_GENERIC_LIB', - GOGENERICLIB = 'GO_GENERIC_LIB', + CsNetStandardLib = 'CS_NET_STANDARD_LIB', + JavaEclipseJreLib = 'JAVA_ECLIPSE_JRE_LIB', + PhpGenericLibV2 = 'PHP_GENERIC_LIB_V2', + PythonGenericLib = 'PYTHON_GENERIC_LIB', + RubyGenericLib = 'RUBY_GENERIC_LIB', + TsGenericLib = 'TS_GENERIC_LIB', + GoGenericLib = 'GO_GENERIC_LIB', } /** diff --git a/src/sdk/models/publishPackageInput.ts b/src/sdk/models/publishPackageInput.ts index 5709b3fe..102ce384 100644 --- a/src/sdk/models/publishPackageInput.ts +++ b/src/sdk/models/publishPackageInput.ts @@ -4,7 +4,13 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { object, optional, Schema, string, unknown } from '../schema'; +import { + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; import { PackageRepositories, packageRepositoriesSchema, @@ -18,15 +24,20 @@ export interface PublishPackageInput { packageName: string; version: string; additionalDeploymentInformation?: unknown; + additionalProperties?: Record; } -export const publishPackageInputSchema: Schema = object({ - packageRepository: ['packageRepository', packageRepositoriesSchema], - template: ['template', platformsSchema], - packageName: ['packageName', string()], - version: ['version', string()], - additionalDeploymentInformation: [ - 'additionalDeploymentInformation', - optional(unknown()), - ], -}); +export const publishPackageInputSchema: Schema = typedExpandoObject( + { + packageRepository: ['packageRepository', packageRepositoriesSchema], + template: ['template', platformsSchema], + packageName: ['packageName', string()], + version: ['version', string()], + additionalDeploymentInformation: [ + 'additionalDeploymentInformation', + optional(unknown()), + ], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/publishedPackage.ts b/src/sdk/models/publishedPackage.ts index 3ae24acf..d22882f0 100644 --- a/src/sdk/models/publishedPackage.ts +++ b/src/sdk/models/publishedPackage.ts @@ -4,7 +4,14 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { lazy, object, optional, Schema, string, unknown } from '../schema'; +import { + lazy, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; import { AuthorIdentifiers, authorIdentifiersSchema, @@ -21,20 +28,28 @@ export interface PublishedPackage { additionalDeploymentInformation?: unknown; authorIdentifiers: AuthorIdentifiers; link: string; + additionalProperties?: Record; } -export const publishedPackageSchema: Schema = object({ - id: ['id', string()], - createdOn: ['createdOn', string()], - apiEntityId: ['apiEntityId', string()], - packageRepository: ['packageRepository', string()], - template: ['template', string()], - packageName: ['packageName', string()], - version: ['version', string()], - additionalDeploymentInformation: [ - 'additionalDeploymentInformation', - optional(unknown()), - ], - authorIdentifiers: ['authorIdentifiers', lazy(() => authorIdentifiersSchema)], - link: ['link', string()], -}); +export const publishedPackageSchema: Schema = typedExpandoObject( + { + id: ['id', string()], + createdOn: ['createdOn', string()], + apiEntityId: ['apiEntityId', string()], + packageRepository: ['packageRepository', string()], + template: ['template', string()], + packageName: ['packageName', string()], + version: ['version', string()], + additionalDeploymentInformation: [ + 'additionalDeploymentInformation', + optional(unknown()), + ], + authorIdentifiers: [ + 'authorIdentifiers', + lazy(() => authorIdentifiersSchema), + ], + link: ['link', string()], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/response.ts b/src/sdk/models/response.ts index b39e1e3a..681d427a 100644 --- a/src/sdk/models/response.ts +++ b/src/sdk/models/response.ts @@ -4,7 +4,15 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { boolean, lazy, object, Schema, string } from '../schema'; +import { + boolean, + lazy, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; import { Attributes, attributesSchema } from './attributes'; /** The structure encapsulates all details of a request response */ @@ -31,18 +39,23 @@ export interface Response { id: string; /** Response name */ name: string; + additionalProperties?: Record; } -export const responseSchema: Schema = object({ - optional: ['optional', boolean()], - type: ['type', string()], - constant: ['constant', boolean()], - isArray: ['isArray', boolean()], - isStream: ['isStream', boolean()], - isAttribute: ['isAttribute', boolean()], - isMap: ['isMap', boolean()], - attributes: ['attributes', lazy(() => attributesSchema)], - nullable: ['nullable', boolean()], - id: ['id', string()], - name: ['name', string()], -}); +export const responseSchema: Schema = typedExpandoObject( + { + optional: ['optional', boolean()], + type: ['type', string()], + constant: ['constant', boolean()], + isArray: ['isArray', boolean()], + isStream: ['isStream', boolean()], + isAttribute: ['isAttribute', boolean()], + isMap: ['isMap', boolean()], + attributes: ['attributes', lazy(() => attributesSchema)], + nullable: ['nullable', boolean()], + id: ['id', string()], + name: ['name', string()], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/server.ts b/src/sdk/models/server.ts index 6af68e83..eebb1ab0 100644 --- a/src/sdk/models/server.ts +++ b/src/sdk/models/server.ts @@ -4,7 +4,13 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { object, Schema, string } from '../schema'; +import { + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; /** The user can specify multiple servers within an environment. A server comprises of a name and a URL. The names of the hosts remain consistent over different environments but their values may vary. The URL values can contain any number of parameters defined. */ export interface Server { @@ -14,10 +20,11 @@ export interface Server { name: string; /** Server URL */ url: string; + additionalProperties?: Record; } -export const serverSchema: Schema = object({ - id: ['id', string()], - name: ['name', string()], - url: ['url', string()], -}); +export const serverSchema: Schema = typedExpandoObject( + { id: ['id', string()], name: ['name', string()], url: ['url', string()] }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/serverConfiguration.ts b/src/sdk/models/serverConfiguration.ts index 4ca1cd9b..4c794d5b 100644 --- a/src/sdk/models/serverConfiguration.ts +++ b/src/sdk/models/serverConfiguration.ts @@ -4,7 +4,15 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { array, lazy, object, Schema, string } from '../schema'; +import { + array, + lazy, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; import { MEnvironment, mEnvironmentSchema } from './mEnvironment'; import { Parameter, parameterSchema } from './parameter'; @@ -20,12 +28,17 @@ export interface ServerConfiguration { environments: MEnvironment[]; /** Parameter Attributes */ parameters: Parameter[]; + additionalProperties?: Record; } -export const serverConfigurationSchema: Schema = object({ - id: ['id', string()], - defaultEnvironment: ['defaultEnvironment', string()], - defaultServer: ['defaultServer', string()], - environments: ['environments', array(lazy(() => mEnvironmentSchema))], - parameters: ['parameters', array(lazy(() => parameterSchema))], -}); +export const serverConfigurationSchema: Schema = typedExpandoObject( + { + id: ['id', string()], + defaultEnvironment: ['defaultEnvironment', string()], + defaultServer: ['defaultServer', string()], + environments: ['environments', array(lazy(() => mEnvironmentSchema))], + parameters: ['parameters', array(lazy(() => parameterSchema))], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/templatesPackageDeploymentInformation.ts b/src/sdk/models/templatesPackageDeploymentInformation.ts index effd3009..231987f4 100644 --- a/src/sdk/models/templatesPackageDeploymentInformation.ts +++ b/src/sdk/models/templatesPackageDeploymentInformation.ts @@ -4,20 +4,23 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { lazy, object, Schema } from '../schema'; -import { CSNETSTANDARDLIB, cSNETSTANDARDLIBSchema } from './cSNETSTANDARDLIB'; +import { lazy, optional, Schema, typedExpandoObject, unknown } from '../schema'; +import { Csnetstandardlib, csnetstandardlibSchema } from './csnetstandardlib'; /** This structure encapsulates all package deployment details. */ export interface TemplatesPackageDeploymentInformation { /** This structure contains all details that goes into package deployment. */ - cSNETSTANDARDLIB: CSNETSTANDARDLIB; + csNetStandardLib: Csnetstandardlib; + additionalProperties?: Record; } -export const templatesPackageDeploymentInformationSchema: Schema = object( +export const templatesPackageDeploymentInformationSchema: Schema = typedExpandoObject( { - cSNETSTANDARDLIB: [ + csNetStandardLib: [ 'CS_NET_STANDARD_LIB', - lazy(() => cSNETSTANDARDLIBSchema), + lazy(() => csnetstandardlibSchema), ], - } + }, + 'additionalProperties', + optional(unknown()) ); diff --git a/src/sdk/models/testCase.ts b/src/sdk/models/testCase.ts index 764b92c8..337f1e00 100644 --- a/src/sdk/models/testCase.ts +++ b/src/sdk/models/testCase.ts @@ -4,7 +4,16 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { array, boolean, lazy, object, Schema, string } from '../schema'; +import { + array, + boolean, + lazy, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; import { InputParameter, inputParameterSchema } from './inputParameter'; /** APIMatic lets you define test cases for endpoints using the API Editor. The test cases are automatically generated for each language. This structure encapsulates all details of a Test Case. To find out more about defining Test Cases visit: https://docs.apimatic.io/testing/defining-your-first-test-case/ */ @@ -37,22 +46,30 @@ export interface TestCase { /** If enabled, this will ensure that the response body contains the same number of elements in the array as does the expected body. */ expectedArrayCheckCount: boolean; responseMatchSchema: boolean; + additionalProperties?: Record; } -export const testCaseSchema: Schema = object({ - id: ['id', string()], - endpointId: ['endpointId', string()], - apiId: ['apiId', string()], - name: ['name', string()], - enabled: ['enabled', boolean()], - shouldPass: ['shouldPass', boolean()], - inputParameters: ['inputParameters', array(lazy(() => inputParameterSchema))], - expectedStatus: ['expectedStatus', string()], - expectedHeaders: ['expectedHeaders', array(string())], - expectedHeadersAllowExtra: ['expectedHeadersAllowExtra', boolean()], - expectedBody: ['expectedBody', string()], - expectedBodyMatchMode: ['expectedBodyMatchMode', string()], - expectedArrayOrderedMatching: ['expectedArrayOrderedMatching', boolean()], - expectedArrayCheckCount: ['expectedArrayCheckCount', boolean()], - responseMatchSchema: ['responseMatchSchema', boolean()], -}); +export const testCaseSchema: Schema = typedExpandoObject( + { + id: ['id', string()], + endpointId: ['endpointId', string()], + apiId: ['apiId', string()], + name: ['name', string()], + enabled: ['enabled', boolean()], + shouldPass: ['shouldPass', boolean()], + inputParameters: [ + 'inputParameters', + array(lazy(() => inputParameterSchema)), + ], + expectedStatus: ['expectedStatus', string()], + expectedHeaders: ['expectedHeaders', array(string())], + expectedHeadersAllowExtra: ['expectedHeadersAllowExtra', boolean()], + expectedBody: ['expectedBody', string()], + expectedBodyMatchMode: ['expectedBodyMatchMode', string()], + expectedArrayOrderedMatching: ['expectedArrayOrderedMatching', boolean()], + expectedArrayCheckCount: ['expectedArrayCheckCount', boolean()], + responseMatchSchema: ['responseMatchSchema', boolean()], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/testGenSettings.ts b/src/sdk/models/testGenSettings.ts index 4a522efc..1ef8b05b 100644 --- a/src/sdk/models/testGenSettings.ts +++ b/src/sdk/models/testGenSettings.ts @@ -4,7 +4,13 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { number, object, optional, Schema, unknown } from '../schema'; +import { + number, + optional, + Schema, + typedExpandoObject, + unknown, +} from '../schema'; /** This structure helps specify additional test configurations which affects how test cases are generated. */ export interface TestGenSettings { @@ -14,10 +20,15 @@ export interface TestGenSettings { testTimeout: number; /** The parameters allows to provide values for configuration file for use in the test environment */ configuration?: unknown; + additionalProperties?: Record; } -export const testGenSettingsSchema: Schema = object({ - precisionDelta: ['precisionDelta', number()], - testTimeout: ['testTimeout', number()], - configuration: ['configuration', optional(unknown())], -}); +export const testGenSettingsSchema: Schema = typedExpandoObject( + { + precisionDelta: ['precisionDelta', number()], + testTimeout: ['testTimeout', number()], + configuration: ['configuration', optional(unknown())], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/transformViaUrlRequest.ts b/src/sdk/models/transformViaUrlRequest.ts index 640712d5..3eefc8d9 100644 --- a/src/sdk/models/transformViaUrlRequest.ts +++ b/src/sdk/models/transformViaUrlRequest.ts @@ -4,7 +4,13 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { object, Schema, string } from '../schema'; +import { + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; import { ExportFormats, exportFormatsSchema } from './exportFormats'; /** This structure puts together the URL of the file to be transformed, along with the desired export format. */ @@ -13,11 +19,14 @@ export interface TransformViaUrlRequest { url: string; /** The structure contains API specification formats that Transformer can convert to. */ exportFormat: ExportFormats; + additionalProperties?: Record; } -export const transformViaUrlRequestSchema: Schema = object( +export const transformViaUrlRequestSchema: Schema = typedExpandoObject( { url: ['url', string()], exportFormat: ['export_format', exportFormatsSchema], - } + }, + 'additionalProperties', + optional(unknown()) ); diff --git a/src/sdk/models/transformation.ts b/src/sdk/models/transformation.ts index 1a9fc8a2..e9d84b7f 100644 --- a/src/sdk/models/transformation.ts +++ b/src/sdk/models/transformation.ts @@ -4,7 +4,15 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { boolean, lazy, object, Schema, string } from '../schema'; +import { + boolean, + lazy, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; import { ApiValidationSummary, apiValidationSummarySchema, @@ -34,22 +42,27 @@ export interface Transformation { success: boolean; importSummary: ApiValidationSummary; apiValidationSummary: ApiValidationSummary; + additionalProperties?: Record; } -export const transformationSchema: Schema = object({ - id: ['id', string()], - transformedOn: ['transformedOn', string()], - userId: ['userId', string()], - inputtedFile: ['inputtedFile', string()], - generatedFile: ['generatedFile', string()], - exportFormat: ['exportFormat', string()], - transformationSource: ['transformationSource', string()], - transformationInput: ['transformationInput', string()], - codeGenVersion: ['codeGenVersion', string()], - success: ['success', boolean()], - importSummary: ['importSummary', lazy(() => apiValidationSummarySchema)], - apiValidationSummary: [ - 'apiValidationSummary', - lazy(() => apiValidationSummarySchema), - ], -}); +export const transformationSchema: Schema = typedExpandoObject( + { + id: ['id', string()], + transformedOn: ['transformedOn', string()], + userId: ['userId', string()], + inputtedFile: ['inputtedFile', string()], + generatedFile: ['generatedFile', string()], + exportFormat: ['exportFormat', string()], + transformationSource: ['transformationSource', string()], + transformationInput: ['transformationInput', string()], + codeGenVersion: ['codeGenVersion', string()], + success: ['success', boolean()], + importSummary: ['importSummary', lazy(() => apiValidationSummarySchema)], + apiValidationSummary: [ + 'apiValidationSummary', + lazy(() => apiValidationSummarySchema), + ], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/updatePackageDeploymentInformation.ts b/src/sdk/models/updatePackageDeploymentInformation.ts index 7b3f9ed6..4d1d3bcb 100644 --- a/src/sdk/models/updatePackageDeploymentInformation.ts +++ b/src/sdk/models/updatePackageDeploymentInformation.ts @@ -4,7 +4,7 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { lazy, object, Schema } from '../schema'; +import { lazy, optional, Schema, typedExpandoObject, unknown } from '../schema'; import { UpdateTemplatesPackageDeploymentInformation, updateTemplatesPackageDeploymentInformationSchema, @@ -14,13 +14,16 @@ import { export interface UpdatePackageDeploymentInformation { /** This structure helps update package deployment details. */ templatesPackageDeploymentInformation: UpdateTemplatesPackageDeploymentInformation; + additionalProperties?: Record; } -export const updatePackageDeploymentInformationSchema: Schema = object( +export const updatePackageDeploymentInformationSchema: Schema = typedExpandoObject( { templatesPackageDeploymentInformation: [ 'templatesPackageDeploymentInformation', lazy(() => updateTemplatesPackageDeploymentInformationSchema), ], - } + }, + 'additionalProperties', + optional(unknown()) ); diff --git a/src/sdk/models/updateTemplatesPackageDeploymentInformation.ts b/src/sdk/models/updateTemplatesPackageDeploymentInformation.ts index 1b504ae4..c9c6cf5c 100644 --- a/src/sdk/models/updateTemplatesPackageDeploymentInformation.ts +++ b/src/sdk/models/updateTemplatesPackageDeploymentInformation.ts @@ -4,20 +4,23 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { lazy, object, Schema } from '../schema'; -import { CSNETSTANDARDLIB, cSNETSTANDARDLIBSchema } from './cSNETSTANDARDLIB'; +import { lazy, optional, Schema, typedExpandoObject, unknown } from '../schema'; +import { Csnetstandardlib, csnetstandardlibSchema } from './csnetstandardlib'; /** This structure helps update package deployment details. */ export interface UpdateTemplatesPackageDeploymentInformation { /** This structure contains all details that goes into package deployment. */ - cSNETSTANDARDLIB: CSNETSTANDARDLIB; + csNetStandardLib: Csnetstandardlib; + additionalProperties?: Record; } -export const updateTemplatesPackageDeploymentInformationSchema: Schema = object( +export const updateTemplatesPackageDeploymentInformationSchema: Schema = typedExpandoObject( { - cSNETSTANDARDLIB: [ + csNetStandardLib: [ 'CS_NET_STANDARD_LIB', - lazy(() => cSNETSTANDARDLIBSchema), + lazy(() => csnetstandardlibSchema), ], - } + }, + 'additionalProperties', + optional(unknown()) ); diff --git a/src/sdk/models/userCodeGeneration.ts b/src/sdk/models/userCodeGeneration.ts index 7d7bb0f5..8d2d7258 100644 --- a/src/sdk/models/userCodeGeneration.ts +++ b/src/sdk/models/userCodeGeneration.ts @@ -4,7 +4,14 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { boolean, object, Schema, string } from '../schema'; +import { + boolean, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; import { Platforms, platformsSchema } from './platforms'; /** The Code Generation structure encapsulates all the the details of an SDK generation performed by a user. */ @@ -29,17 +36,22 @@ export interface UserCodeGeneration { userId: string; /** API Specification file in a supported format */ inputFile: string; + additionalProperties?: Record; } -export const userCodeGenerationSchema: Schema = object({ - id: ['id', string()], - template: ['template', platformsSchema], - generatedFile: ['generatedFile', string()], - generatedOn: ['generatedOn', string()], - hashCode: ['hashCode', string()], - codeGenerationSource: ['codeGenerationSource', string()], - codeGenVersion: ['codeGenVersion', string()], - success: ['success', boolean()], - userId: ['userId', string()], - inputFile: ['inputFile', string()], -}); +export const userCodeGenerationSchema: Schema = typedExpandoObject( + { + id: ['id', string()], + template: ['template', platformsSchema], + generatedFile: ['generatedFile', string()], + generatedOn: ['generatedOn', string()], + hashCode: ['hashCode', string()], + codeGenerationSource: ['codeGenerationSource', string()], + codeGenVersion: ['codeGenVersion', string()], + success: ['success', boolean()], + userId: ['userId', string()], + inputFile: ['inputFile', string()], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/validationException.ts b/src/sdk/models/validationException.ts index 78640998..222fb4c6 100644 --- a/src/sdk/models/validationException.ts +++ b/src/sdk/models/validationException.ts @@ -4,16 +4,24 @@ * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ -import { object, optional, Schema, string } from '../schema'; +import { + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; /** Validation exception contains information, warnings, messages and errors. */ export interface ValidationException { reason: string; /** Validation Summary of the API in case validation failed */ summary?: string; + additionalProperties?: Record; } -export const validationExceptionSchema: Schema = object({ - reason: ['reason', string()], - summary: ['summary', optional(string())], -}); +export const validationExceptionSchema: Schema = typedExpandoObject( + { reason: ['reason', string()], summary: ['summary', optional(string())] }, + 'additionalProperties', + optional(unknown()) +); From 37fbcb0c0367a7216677ab812777eebd528432ef Mon Sep 17 00:00:00 2001 From: saeedjamshaid Date: Mon, 23 Jun 2025 16:30:29 +0500 Subject: [PATCH 07/11] test(portal:new:toc): add tests for the portal:new:toc command (#86) Co-authored-by: Ali Asghar <75574550+aliasghar98@users.noreply.github.com> --- .gitignore | 2 + package-lock.json | 19 ++ package.json | 1 + src/actions/portal/generate.ts | 2 + src/actions/portal/new/toc.ts | 6 +- src/application/portal/new/toc/sdl-parser.ts | 8 +- test/actions/portal/new/toc.test.ts | 66 +++++++ .../portal/new/toc/sdl-parser.test.ts | 146 +++++++++++++++ .../portal/new/toc/toc-content-parser.test.ts | 129 ++++++++++++++ .../new/toc/toc-structure-generator.test.ts | 168 ++++++++++++++++++ test/commands/portal/generate.test.ts | 10 +- 11 files changed, 543 insertions(+), 14 deletions(-) create mode 100644 test/actions/portal/new/toc.test.ts create mode 100644 test/application/portal/new/toc/sdl-parser.test.ts create mode 100644 test/application/portal/new/toc/toc-content-parser.test.ts create mode 100644 test/application/portal/new/toc/toc-structure-generator.test.ts diff --git a/.gitignore b/.gitignore index 37a3356b..c0242cdc 100644 --- a/.gitignore +++ b/.gitignore @@ -176,3 +176,5 @@ $RECYCLE.BIN/ lib/ tmp/ .vscode/launch.json +test-source/ +test-portal/ \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 931d6b49..8953a486 100644 --- a/package-lock.json +++ b/package-lock.json @@ -71,6 +71,7 @@ "oclif": "^4.17.34", "prettier": "^2.4.1", "rimraf": "^6.0.1", + "tmp-promise": "^3.0.3", "ts-node": "^8.10.2", "typescript": "^5.2.2" }, @@ -10764,6 +10765,24 @@ "node": ">=0.6.0" } }, + "node_modules/tmp-promise": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "dev": true, + "dependencies": { + "tmp": "^0.2.0" + } + }, + "node_modules/tmp-promise/node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, + "engines": { + "node": ">=14.14" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "license": "MIT", diff --git a/package.json b/package.json index 9950045a..2bf3d75d 100644 --- a/package.json +++ b/package.json @@ -102,6 +102,7 @@ "oclif": "^4.17.34", "prettier": "^2.4.1", "rimraf": "^6.0.1", + "tmp-promise": "^3.0.3", "ts-node": "^8.10.2", "typescript": "^5.2.2" }, diff --git a/src/actions/portal/generate.ts b/src/actions/portal/generate.ts index 9f4be364..385abf62 100644 --- a/src/actions/portal/generate.ts +++ b/src/actions/portal/generate.ts @@ -49,7 +49,9 @@ export class PortalGenerateAction { ); if (flags.zip) { + this.prompts.displayPortalGenerationSuccessMessage(); this.prompts.displayOutroMessage(paths.generatedPortalArtifactsZipFilePath); + return; } await extractZipFile(paths.generatedPortalArtifactsZipFilePath, paths.generatedPortalArtifactsFolderPath); diff --git a/src/actions/portal/new/toc.ts b/src/actions/portal/new/toc.ts index 082d9bf4..a4b59c91 100644 --- a/src/actions/portal/new/toc.ts +++ b/src/actions/portal/new/toc.ts @@ -7,6 +7,7 @@ import { SdlParser } from "../../../application/portal/new/toc/sdl-parser"; import { TocStructureGenerator } from "../../../application/portal/new/toc/toc-structure-generator"; import { TocContentParser } from "../../../application/portal/new/toc/toc-content-parser"; import { TocEndpoint, TocGroup, TocModel } from "../../../types/toc/toc"; +import { PortalService } from "../../../infrastructure/services/portal-service"; const DEFAULT_TOC_FILENAME = "toc.yml"; const APIMATIC_BUILD_FILENAME = "APIMATIC-BUILD.json"; @@ -19,7 +20,7 @@ export class PortalNewTocAction { constructor() { this.prompts = new PortalNewTocPrompts(); - this.sdlParser = new SdlParser(); + this.sdlParser = new SdlParser(new PortalService()); this.tocGenerator = new TocStructureGenerator(); this.contentParser = new TocContentParser(); } @@ -57,7 +58,7 @@ export class PortalNewTocAction { contentGroups ); const yamlString = this.tocGenerator.transformToYaml(toc); - this.writeToc(tocPath, yamlString, "utf8"); + await this.writeToc(tocPath, yamlString, "utf8"); this.prompts.displayOutroMessage(tocPath); return Result.success(tocPath); @@ -109,7 +110,6 @@ export class PortalNewTocAction { this.prompts.stopProgressIndicatorWithMessage("✅ Successfully extracted endpoints and/or models from the specification."); return sdlResult.value!; - } private async extractContentGroups(workingDirectory: string): Promise { diff --git a/src/application/portal/new/toc/sdl-parser.ts b/src/application/portal/new/toc/sdl-parser.ts index 198ccf39..4abd855c 100644 --- a/src/application/portal/new/toc/sdl-parser.ts +++ b/src/application/portal/new/toc/sdl-parser.ts @@ -6,11 +6,7 @@ import { Result } from "../../../../types/common/result"; import { Sdl, SdlEndpoint, SdlModel } from "../../../../types/sdl/sdl"; export class SdlParser { - private readonly portalService: PortalService; - - constructor() { - this.portalService = new PortalService(); - } + constructor(private readonly portalService: PortalService) {} async getTocComponentsFromSdl(specFolderPath: string, workingDirectory: string, configDir: string): Promise;models: TocModel[];},string>> { const sourceSpecInputZipFilePath = await validateAndZipPortalSource( @@ -22,7 +18,7 @@ export class SdlParser { const result = await this.portalService.generateSdl(sourceSpecInputZipFilePath, configDir); if (!result.isSuccess()) { - return Result.failure("Failed to extract endpoints/models from the specification. Please validate your spec using APIMatic’s interactive VS Code extension") + return Result.failure("Failed to extract endpoints/models from the specification. Please validate your spec using APIMatic's interactive VS Code extension") } const sdl : Sdl = result.value! diff --git a/test/actions/portal/new/toc.test.ts b/test/actions/portal/new/toc.test.ts new file mode 100644 index 00000000..f758f931 --- /dev/null +++ b/test/actions/portal/new/toc.test.ts @@ -0,0 +1,66 @@ +import { expect } from "chai"; +import * as path from "path"; +import * as fs from "fs-extra"; +import { dir as tmpDir, DirectoryResult } from "tmp-promise"; +import { PortalNewTocAction } from "../../../../src/actions/portal/new/toc"; + +describe("PortalNewTocAction", () => { + let TEST_WORKING_DIR: string; + let TEST_CONFIG_DIR: string; + let portalNewTocAction: PortalNewTocAction; + let tmpDirResult: DirectoryResult; + + beforeEach(async () => { + tmpDirResult = await tmpDir({ unsafeCleanup: true }); + TEST_WORKING_DIR = tmpDirResult.path; + TEST_CONFIG_DIR = path.join(TEST_WORKING_DIR, "config"); + portalNewTocAction = new PortalNewTocAction(); + + await fs.ensureDir(TEST_WORKING_DIR); + await fs.ensureDir(path.join(TEST_WORKING_DIR, "content")); + }); + + afterEach(async () => { + await tmpDirResult.cleanup(); + }); + + describe("createToc", () => { + it("should create TOC file at default location", async () => { + const expectedTocPath = path.join(TEST_WORKING_DIR, "content", "toc.yml"); + + const result = await portalNewTocAction.createToc( + TEST_WORKING_DIR, + TEST_CONFIG_DIR, + undefined, + true + ); + + expect(result.isSuccess()).to.be.true; + expect(await fs.pathExists(expectedTocPath)).to.be.true; + + const tocContent = await fs.readFile(expectedTocPath, "utf8"); + expect(tocContent).to.include("Getting Started"); + expect(tocContent).to.include("API Endpoints"); + expect(tocContent).to.include("Models"); + expect(tocContent).to.include("SDK Infrastructure"); + }); + + it("should create TOC file at custom location", async () => { + const customDestination = path.join(TEST_WORKING_DIR, "custom"); + await fs.ensureDir(customDestination); + const expectedTocPath = path.join(customDestination, "toc.yml"); + + const result = await portalNewTocAction.createToc( + TEST_WORKING_DIR, + TEST_CONFIG_DIR, + customDestination, + true + ); + + expect(result.isSuccess()).to.be.true; + expect(await fs.pathExists(expectedTocPath)).to.be.true; + + await fs.remove(customDestination); + }); + }); +}); \ No newline at end of file diff --git a/test/application/portal/new/toc/sdl-parser.test.ts b/test/application/portal/new/toc/sdl-parser.test.ts new file mode 100644 index 00000000..0d2cbd4f --- /dev/null +++ b/test/application/portal/new/toc/sdl-parser.test.ts @@ -0,0 +1,146 @@ +import { expect } from "chai"; +import * as path from "path"; +import * as fs from "fs-extra"; +import { SdlParser } from "../../../../../src/application/portal/new/toc/sdl-parser"; +import { PortalService } from "../../../../../src/infrastructure/services/portal-service"; +import { Result } from "../../../../../src/types/common/result"; +import { Sdl } from "../../../../../src/types/sdl/sdl"; +import { dir as tmpDir, DirectoryResult } from "tmp-promise"; + +describe("SdlParser", () => { + let TEST_CONFIG_DIR: string; + let TEST_SPEC_DIR: string; + let tmpDirResult: DirectoryResult; + let sdlParser: SdlParser; + let portalServiceStub: Partial; + + beforeEach(async () => { + tmpDirResult = await tmpDir({ unsafeCleanup: true }); + TEST_CONFIG_DIR = tmpDirResult.path; + TEST_SPEC_DIR = path.join(TEST_CONFIG_DIR, "spec"); + await fs.ensureDir(TEST_SPEC_DIR); + + const sdlContent: Sdl = { + Endpoints: [ + { + Name: "Login", + Group: "Authentication" + }, + { + Name: "Logout", + Group: "Authentication" + }, + { + Name: "GetProducts", + Group: "Products" + } + ], + CustomTypes: [ + { + Name: "User" + }, + { + Name: "Product" + } + ] + }; + await fs.writeJson(path.join(TEST_SPEC_DIR, "sdl.json"), sdlContent); + + portalServiceStub = { + generateSdl: async () => Result.success(sdlContent) + }; + + sdlParser = new SdlParser(portalServiceStub as PortalService); + }); + + afterEach(async () => { + await tmpDirResult.cleanup(); + }); + + describe("getTocComponentsFromSdl", () => { + it("should extract endpoint groups correctly", async () => { + const result = await sdlParser.getTocComponentsFromSdl(TEST_SPEC_DIR, TEST_SPEC_DIR, TEST_CONFIG_DIR); + + expect(result.isSuccess()).to.be.true; + const { endpointGroups } = result.value!; + + const authEndpoints = endpointGroups.get("Authentication"); + expect(authEndpoints).to.have.lengthOf(2); + expect(authEndpoints![0]).to.deep.include({ + generate: null, + from: "endpoint", + endpointName: "Login", + endpointGroup: "Authentication" + }); + expect(authEndpoints![1]).to.deep.include({ + generate: null, + from: "endpoint", + endpointName: "Logout", + endpointGroup: "Authentication" + }); + + const productEndpoints = endpointGroups.get("Products"); + expect(productEndpoints).to.have.lengthOf(1); + expect(productEndpoints![0]).to.deep.include({ + generate: null, + from: "endpoint", + endpointName: "GetProducts", + endpointGroup: "Products" + }); + }); + + it("should extract models correctly", async () => { + const result = await sdlParser.getTocComponentsFromSdl(TEST_SPEC_DIR, TEST_SPEC_DIR, TEST_CONFIG_DIR); + + expect(result.isSuccess()).to.be.true; + const { models } = result.value!; + + expect(models).to.have.lengthOf(2); + expect(models[0]).to.deep.include({ + generate: null, + from: "model", + modelName: "User" + }); + expect(models[1]).to.deep.include({ + generate: null, + from: "model", + modelName: "Product" + }); + }); + + it("should handle empty SDL", async () => { + const emptySdl: Sdl = { + Endpoints: [], + CustomTypes: [] + }; + portalServiceStub.generateSdl = async () => Result.success(emptySdl); + + const result = await sdlParser.getTocComponentsFromSdl(TEST_SPEC_DIR, TEST_SPEC_DIR, TEST_CONFIG_DIR); + + expect(result.isSuccess()).to.be.true; + const { endpointGroups, models } = result.value!; + expect(endpointGroups.size).to.equal(0); + expect(models).to.have.lengthOf(0); + }); + + it("should handle malformed SDL", async () => { + portalServiceStub.generateSdl = async () => Result.failure("Invalid SDL"); + + const result = await sdlParser.getTocComponentsFromSdl(TEST_SPEC_DIR, TEST_SPEC_DIR, TEST_CONFIG_DIR); + + expect(result.isSuccess()).to.be.false; + expect(result.error).to.equal( + "Failed to extract endpoints/models from the specification. Please validate your spec using APIMatic's interactive VS Code extension" + ); + }); + + it("should maintain endpoint group ordering", async () => { + const result = await sdlParser.getTocComponentsFromSdl(TEST_SPEC_DIR, TEST_SPEC_DIR, TEST_CONFIG_DIR); + + expect(result.isSuccess()).to.be.true; + const { endpointGroups } = result.value!; + const groupNames = Array.from(endpointGroups.keys()); + expect(groupNames).to.deep.equal(["Authentication", "Products"]); + }); + }); +}); diff --git a/test/application/portal/new/toc/toc-content-parser.test.ts b/test/application/portal/new/toc/toc-content-parser.test.ts new file mode 100644 index 00000000..5a101dde --- /dev/null +++ b/test/application/portal/new/toc/toc-content-parser.test.ts @@ -0,0 +1,129 @@ +import { expect } from "chai"; +import * as path from "path"; +import * as fs from "fs-extra"; +import { TocContentParser } from "../../../../../src/application/portal/new/toc/toc-content-parser"; +import { TocGroup } from "../../../../../src/types/toc/toc"; +import { dir as tmpDir, DirectoryResult } from "tmp-promise"; + +describe("TocContentParser", () => { + let TEST_CONFIG_DIR: string; + let TEST_CONTENT_DIR: string; + let tmpDirResult: DirectoryResult; + let tocContentParser: TocContentParser; + + beforeEach(async () => { + tmpDirResult = await tmpDir({ unsafeCleanup: true }); + TEST_CONFIG_DIR = tmpDirResult.path; + TEST_CONTENT_DIR = path.join(TEST_CONFIG_DIR, "content"); + tocContentParser = new TocContentParser(); + await fs.ensureDir(TEST_CONTENT_DIR); + }); + + afterEach(async () => { + await tmpDirResult.cleanup(); + }); + + describe("parseContentFolder", () => { + it("should parse flat directory structure", async () => { + await fs.writeFile(path.join(TEST_CONTENT_DIR, "guide1.md"), "# Guide 1"); + await fs.writeFile(path.join(TEST_CONTENT_DIR, "guide2.md"), "# Guide 2"); + + const result = await tocContentParser.parseContentFolder(TEST_CONTENT_DIR, TEST_CONTENT_DIR); + + expect(result).to.have.lengthOf(1); + const customContentGroup = result[0] as TocGroup; + expect(customContentGroup.group).to.equal("Custom Content"); + expect(customContentGroup.items).to.have.lengthOf(2); + expect(customContentGroup.items[0]).to.deep.include({ + page: "guide1", + file: "guide1.md" + }); + expect(customContentGroup.items[1]).to.deep.include({ + page: "guide2", + file: "guide2.md" + }); + }); + + it("should parse nested directory structure", async () => { + const nestedDir = path.join(TEST_CONTENT_DIR, "guides"); + await fs.ensureDir(nestedDir); + await fs.writeFile(path.join(nestedDir, "guide1.md"), "# Guide 1"); + await fs.writeFile(path.join(nestedDir, "guide2.md"), "# Guide 2"); + + const result = await tocContentParser.parseContentFolder(TEST_CONTENT_DIR, TEST_CONTENT_DIR); + + expect(result).to.have.lengthOf(1); + const customContentGroup = result[0] as TocGroup; + expect(customContentGroup.group).to.equal("Custom Content"); + expect(customContentGroup.items).to.have.lengthOf(1); + + const guidesGroup = customContentGroup.items[0] as TocGroup; + expect(guidesGroup.group).to.equal("guides"); + expect(guidesGroup.items).to.have.lengthOf(2); + expect(guidesGroup.items[0]).to.deep.include({ + page: "guide1", + file: "guides/guide1.md" + }); + expect(guidesGroup.items[1]).to.deep.include({ + page: "guide2", + file: "guides/guide2.md" + }); + }); + + it("should handle empty directories", async () => { + const result = await tocContentParser.parseContentFolder(TEST_CONTENT_DIR, TEST_CONTENT_DIR); + expect(result).to.have.lengthOf(0); + }); + + it("should only include markdown files", async () => { + await fs.writeFile(path.join(TEST_CONTENT_DIR, "guide1.md"), "# Guide 1"); + await fs.writeFile(path.join(TEST_CONTENT_DIR, "image.png"), "binary content"); + await fs.writeFile(path.join(TEST_CONTENT_DIR, "data.json"), "{}"); + + const result = await tocContentParser.parseContentFolder(TEST_CONTENT_DIR, TEST_CONTENT_DIR); + + expect(result).to.have.lengthOf(1); + const customContentGroup = result[0] as TocGroup; + expect(customContentGroup.items).to.have.lengthOf(1); + expect(customContentGroup.items[0]).to.deep.include({ + page: "guide1", + file: "guide1.md" + }); + }); + + it("should generate correct relative paths", async () => { + const workingDir = path.join(TEST_CONTENT_DIR, ".."); + const nestedDir = path.join(TEST_CONTENT_DIR, "guides"); + await fs.ensureDir(nestedDir); + await fs.writeFile(path.join(nestedDir, "guide1.md"), "# Guide 1"); + + const result = await tocContentParser.parseContentFolder(TEST_CONTENT_DIR, workingDir); + + const customContentGroup = result[0] as TocGroup; + const guidesGroup = customContentGroup.items[0] as TocGroup; + expect(guidesGroup.items[0]).to.deep.include({ + page: "guide1", + file: "content/guides/guide1.md" + }); + }); + }); + + describe("normalizePath", () => { + it("should convert Windows paths to forward slashes", () => { + const windowsPath = "content\\guides\\guide1.md"; + const result = tocContentParser["normalizePath"](windowsPath); + expect(result).to.equal("content/guides/guide1.md"); + }); + + it("should handle already normalized paths", () => { + const normalizedPath = "content/guides/guide1.md"; + const result = tocContentParser["normalizePath"](normalizedPath); + expect(result).to.equal("content/guides/guide1.md"); + }); + + it("should handle empty paths", () => { + const result = tocContentParser["normalizePath"](""); + expect(result).to.equal(""); + }); + }); +}); \ No newline at end of file diff --git a/test/application/portal/new/toc/toc-structure-generator.test.ts b/test/application/portal/new/toc/toc-structure-generator.test.ts new file mode 100644 index 00000000..7b5e56e2 --- /dev/null +++ b/test/application/portal/new/toc/toc-structure-generator.test.ts @@ -0,0 +1,168 @@ +import { expect } from "chai"; +import { TocStructureGenerator } from "../../../../../src/application/portal/new/toc/toc-structure-generator"; +import { TocEndpoint, TocGroup, TocModel, Toc, TocCustomPage } from "../../../../../src/types/toc/toc"; + +describe("TocStructureGenerator", () => { + let tocStructureGenerator: TocStructureGenerator; + + beforeEach(() => { + tocStructureGenerator = new TocStructureGenerator(); + }); + + describe("createTocStructure", () => { + it("should create basic TOC structure with default sections", () => { + const endpointGroups = new Map(); + const models: TocModel[] = []; + const contentGroups: TocGroup[] = []; + + const result = tocStructureGenerator.createTocStructure( + endpointGroups, + models, + false, + false, + contentGroups + ); + + expect(result.toc).to.be.an("array"); + expect(result.toc).to.have.lengthOf(4); + + expect(result.toc[0]).to.deep.include({ + group: "Getting Started", + items: [{ + generate: "How to Get Started", + from: "getting-started" + }] + }); + + expect(result.toc[1]).to.deep.include({ + generate: "API Endpoints", + from: "endpoints" + }); + + expect(result.toc[2]).to.deep.include({ + generate: "Models", + from: "models" + }); + + expect(result.toc[3]).to.deep.include({ + generate: "SDK Infrastructure", + from: "sdk-infra" + }); + }); + + it("should include content groups when provided", () => { + const endpointGroups = new Map(); + const models: TocModel[] = []; + const contentGroups: TocGroup[] = [{ + group: "Custom Content", + items: [{ + page: "Guide 1", + file: "guides/guide1.md" + }] + }]; + + const result = tocStructureGenerator.createTocStructure( + endpointGroups, + models, + false, + false, + contentGroups + ); + + expect(result.toc).to.have.lengthOf(5); + expect(result.toc[1]).to.deep.equal(contentGroups[0]); + }); + + it("should create expanded endpoints structure when flag is true", () => { + const endpointGroups = new Map(); + endpointGroups.set("Authentication", [{ + generate: null, + from: "endpoint", + endpointName: "Login", + endpointGroup: "Authentication" + }]); + + const result = tocStructureGenerator.createTocStructure( + endpointGroups, + [], + true, + false, + [] + ); + + const apiEndpointsSection = result.toc.find(section => + 'group' in section && section.group === "API Endpoints" + ) as TocGroup; + + expect(apiEndpointsSection).to.exist; + expect(apiEndpointsSection.items).to.be.an("array"); + const authGroup = apiEndpointsSection.items[0] as TocGroup; + expect(authGroup.group).to.equal("Authentication"); + expect(authGroup.items).to.have.lengthOf(2); + }); + + it("should create expanded models structure when flag is true", () => { + const models: TocModel[] = [{ + generate: null, + from: "model", + modelName: "User" + }]; + + const result = tocStructureGenerator.createTocStructure( + new Map(), + models, + false, + true, + [] + ); + + const modelsSection = result.toc.find(section => + 'group' in section && section.group === "Models" + ) as TocGroup; + + expect(modelsSection).to.exist; + expect(modelsSection.items).to.be.an("array"); + expect(modelsSection.items).to.deep.include(models[0]); + }); + }); + + describe("transformToYaml", () => { + it("should generate valid YAML", () => { + const toc: Toc = { + toc: [{ + group: "Test Group", + items: [{ + page: "Test Page", + file: "test.md" + } as TocCustomPage] + } as TocGroup] + }; + + const result = tocStructureGenerator.transformToYaml(toc); + + expect(result).to.include("toc:"); + expect(result).to.include("group: Test Group"); + expect(result).to.include("page: Test Page"); + expect(result).to.include("file: test.md"); + }); + + it("should handle null values correctly", () => { + const toc: Toc = { + toc: [{ + group: "Test Group", + items: [{ + generate: null, + from: "endpoint", + endpointName: "Test", + endpointGroup: "Test Group" + } as TocEndpoint] + } as TocGroup] + }; + + const result = tocStructureGenerator.transformToYaml(toc); + + expect(result).to.include("generate:"); + expect(result).to.not.include("generate: null"); + }); + }); +}); \ No newline at end of file diff --git a/test/commands/portal/generate.test.ts b/test/commands/portal/generate.test.ts index af11b461..8c07612b 100644 --- a/test/commands/portal/generate.test.ts +++ b/test/commands/portal/generate.test.ts @@ -11,7 +11,7 @@ EventEmitter.defaultMaxListeners = 50; const COMMAND = "portal:generate"; const GENERATION_SUCCESS_MESSAGE = "The generated portal can be found at"; -const GENERATION_FAILURE_MESSAGE = "Something went wrong while generating your portal"; +const GENERATION_FAILURE_MESSAGE = "Portal Generation failed"; const AUTHENTICATION_FAILURE_MESSAGE = "Authorization has been denied for this request"; const VALIDATION_FAILURE_MESSAGE = "One or more validation errors occurred"; const BUILD_FILE_MISSING_MESSAGE = "Build file not found"; @@ -154,7 +154,7 @@ describe("apimatic portal:generate", function () { dummy: "dummyValue" }) ); - const { stdout, error } = await runCommand([ + const { stdout } = await runCommand([ COMMAND, "--folder", sourceBuildInputDir, @@ -170,7 +170,7 @@ describe("apimatic portal:generate", function () { it("throws 401 error due to invalid authentication key", async () => { await setupValidBuildDirectory(sourceBuildInputDir); - const { stdout, error } = await runCommand([ + const { stdout } = await runCommand([ COMMAND, "--folder", sourceBuildInputDir, @@ -202,7 +202,7 @@ describe("apimatic portal:generate", function () { } }); - const { stdout, error } = await runCommand([ + const { stdout } = await runCommand([ COMMAND, "--folder", sourceBuildInputDir, @@ -230,7 +230,7 @@ describe("apimatic portal:generate", function () { await setupValidBuildDirectory(sourceBuildInputDir); fs.writeFileSync(path.join(sourceBuildInputDir, "content", "guides", "toc.yml"), INVALID_TOC_YAML); - const { stdout, error } = await runCommand([ + const { stdout } = await runCommand([ COMMAND, "--folder", sourceBuildInputDir, From 8bee7b80876d86bed52ac330639fe2fd65751491 Mon Sep 17 00:00:00 2001 From: Ali Asghar <75574550+aliasghar98@users.noreply.github.com> Date: Mon, 23 Jun 2025 17:55:08 +0500 Subject: [PATCH 08/11] feat: add published sdk dependency (#94) --- package-lock.json | 18 +- package.json | 2 +- src/commands/api/transform.ts | 4 +- src/controllers/api/transform.ts | 12 +- src/sdk/authProvider.ts | 26 -- src/sdk/authentication.ts | 7 - src/sdk/client.ts | 158 ---------- src/sdk/clientAdapter.ts | 7 - src/sdk/clientInterface.ts | 27 -- src/sdk/configuration.ts | 25 -- .../controllers/apIsManagementController.ts | 277 ------------------ .../apiValidationExternalApIsController.ts | 79 ----- .../apiValidationImportedApIsController.ts | 66 ----- src/sdk/controllers/baseController.ts | 17 -- .../codeGenerationExternalApIsController.ts | 184 ------------ .../codeGenerationImportedApIsController.ts | 136 --------- .../docsPortalGenerationAsyncController.ts | 102 ------- .../docsPortalManagementController.ts | 223 -------------- .../controllers/transformationController.ts | 196 ------------- src/sdk/core.ts | 7 - src/sdk/defaultConfiguration.ts | 35 --- .../internalServerErrorResponseError.ts | 19 -- src/sdk/errors/problemDetailsError.ts | 22 -- src/sdk/errors/unauthorizedResponseError.ts | 17 -- src/sdk/index.ts | 87 ------ src/sdk/models/accept.ts | 19 -- src/sdk/models/accept2.ts | 19 -- src/sdk/models/accept3.ts | 19 -- src/sdk/models/apiEntity.ts | 93 ------ src/sdk/models/apiEntityCodeGeneration.ts | 54 ---- src/sdk/models/apiEntityDetailed.ts | 101 ------- src/sdk/models/apiValidationSummary.ts | 34 --- src/sdk/models/attributes.ts | 26 -- src/sdk/models/authScope.ts | 36 --- src/sdk/models/authentication.ts | 49 ---- src/sdk/models/authorIdentifiers.ts | 25 -- src/sdk/models/codeGenSettings.ts | 183 ------------ src/sdk/models/codeGeneration.ts | 51 ---- src/sdk/models/contentType.ts | 19 -- src/sdk/models/csnetstandardlib.ts | 47 --- src/sdk/models/customType.ts | 50 ---- src/sdk/models/docsValidationSummary.ts | 34 --- src/sdk/models/endpoint.ts | 79 ----- src/sdk/models/endpointsGroup.ts | 26 -- src/sdk/models/exportFormats.ts | 34 --- src/sdk/models/field.ts | 64 ---- src/sdk/models/generateSdkViaUrlRequest.ts | 28 -- src/sdk/models/id.ts | 19 -- src/sdk/models/implementationType.ts | 23 -- .../models/importApiVersionViaUrlRequest.ts | 28 -- src/sdk/models/importApiViaUrlRequest.ts | 26 -- src/sdk/models/importValidationSummary.ts | 34 --- .../models/inplaceImportApiViaUrlRequest.ts | 26 -- src/sdk/models/inputParameter.ts | 41 --- src/sdk/models/link.ts | 19 -- src/sdk/models/links.ts | 25 -- src/sdk/models/mEnvironment.ts | 37 --- src/sdk/models/metaData.ts | 45 --- .../models/packageDeploymentInformation.ts | 39 --- src/sdk/models/packageRepositories.ts | 23 -- src/sdk/models/parameter.ts | 67 ----- src/sdk/models/platforms.ts | 25 -- .../models/portalGenerationAsyncResponse.ts | 17 -- .../models/portalGenerationStatusResponse.ts | 16 - src/sdk/models/publishPackageInput.ts | 43 --- src/sdk/models/publishedPackage.ts | 55 ---- src/sdk/models/response.ts | 61 ---- src/sdk/models/server.ts | 30 -- src/sdk/models/serverConfiguration.ts | 44 --- src/sdk/models/status.ts | 21 -- .../templatesPackageDeploymentInformation.ts | 26 -- src/sdk/models/testCase.ts | 75 ----- src/sdk/models/testGenSettings.ts | 34 --- src/sdk/models/transformViaUrlRequest.ts | 32 -- src/sdk/models/transformation.ts | 68 ----- .../updatePackageDeploymentInformation.ts | 29 -- ...teTemplatesPackageDeploymentInformation.ts | 26 -- src/sdk/models/userCodeGeneration.ts | 57 ---- src/sdk/models/validationException.ts | 27 -- src/sdk/schema.ts | 7 - src/types/api/transform.ts | 17 ++ 81 files changed, 41 insertions(+), 3964 deletions(-) delete mode 100644 src/sdk/authProvider.ts delete mode 100644 src/sdk/authentication.ts delete mode 100644 src/sdk/client.ts delete mode 100644 src/sdk/clientAdapter.ts delete mode 100644 src/sdk/clientInterface.ts delete mode 100644 src/sdk/configuration.ts delete mode 100644 src/sdk/controllers/apIsManagementController.ts delete mode 100644 src/sdk/controllers/apiValidationExternalApIsController.ts delete mode 100644 src/sdk/controllers/apiValidationImportedApIsController.ts delete mode 100644 src/sdk/controllers/baseController.ts delete mode 100644 src/sdk/controllers/codeGenerationExternalApIsController.ts delete mode 100644 src/sdk/controllers/codeGenerationImportedApIsController.ts delete mode 100644 src/sdk/controllers/docsPortalGenerationAsyncController.ts delete mode 100644 src/sdk/controllers/docsPortalManagementController.ts delete mode 100644 src/sdk/controllers/transformationController.ts delete mode 100644 src/sdk/core.ts delete mode 100644 src/sdk/defaultConfiguration.ts delete mode 100644 src/sdk/errors/internalServerErrorResponseError.ts delete mode 100644 src/sdk/errors/problemDetailsError.ts delete mode 100644 src/sdk/errors/unauthorizedResponseError.ts delete mode 100644 src/sdk/index.ts delete mode 100644 src/sdk/models/accept.ts delete mode 100644 src/sdk/models/accept2.ts delete mode 100644 src/sdk/models/accept3.ts delete mode 100644 src/sdk/models/apiEntity.ts delete mode 100644 src/sdk/models/apiEntityCodeGeneration.ts delete mode 100644 src/sdk/models/apiEntityDetailed.ts delete mode 100644 src/sdk/models/apiValidationSummary.ts delete mode 100644 src/sdk/models/attributes.ts delete mode 100644 src/sdk/models/authScope.ts delete mode 100644 src/sdk/models/authentication.ts delete mode 100644 src/sdk/models/authorIdentifiers.ts delete mode 100644 src/sdk/models/codeGenSettings.ts delete mode 100644 src/sdk/models/codeGeneration.ts delete mode 100644 src/sdk/models/contentType.ts delete mode 100644 src/sdk/models/csnetstandardlib.ts delete mode 100644 src/sdk/models/customType.ts delete mode 100644 src/sdk/models/docsValidationSummary.ts delete mode 100644 src/sdk/models/endpoint.ts delete mode 100644 src/sdk/models/endpointsGroup.ts delete mode 100644 src/sdk/models/exportFormats.ts delete mode 100644 src/sdk/models/field.ts delete mode 100644 src/sdk/models/generateSdkViaUrlRequest.ts delete mode 100644 src/sdk/models/id.ts delete mode 100644 src/sdk/models/implementationType.ts delete mode 100644 src/sdk/models/importApiVersionViaUrlRequest.ts delete mode 100644 src/sdk/models/importApiViaUrlRequest.ts delete mode 100644 src/sdk/models/importValidationSummary.ts delete mode 100644 src/sdk/models/inplaceImportApiViaUrlRequest.ts delete mode 100644 src/sdk/models/inputParameter.ts delete mode 100644 src/sdk/models/link.ts delete mode 100644 src/sdk/models/links.ts delete mode 100644 src/sdk/models/mEnvironment.ts delete mode 100644 src/sdk/models/metaData.ts delete mode 100644 src/sdk/models/packageDeploymentInformation.ts delete mode 100644 src/sdk/models/packageRepositories.ts delete mode 100644 src/sdk/models/parameter.ts delete mode 100644 src/sdk/models/platforms.ts delete mode 100644 src/sdk/models/portalGenerationAsyncResponse.ts delete mode 100644 src/sdk/models/portalGenerationStatusResponse.ts delete mode 100644 src/sdk/models/publishPackageInput.ts delete mode 100644 src/sdk/models/publishedPackage.ts delete mode 100644 src/sdk/models/response.ts delete mode 100644 src/sdk/models/server.ts delete mode 100644 src/sdk/models/serverConfiguration.ts delete mode 100644 src/sdk/models/status.ts delete mode 100644 src/sdk/models/templatesPackageDeploymentInformation.ts delete mode 100644 src/sdk/models/testCase.ts delete mode 100644 src/sdk/models/testGenSettings.ts delete mode 100644 src/sdk/models/transformViaUrlRequest.ts delete mode 100644 src/sdk/models/transformation.ts delete mode 100644 src/sdk/models/updatePackageDeploymentInformation.ts delete mode 100644 src/sdk/models/updateTemplatesPackageDeploymentInformation.ts delete mode 100644 src/sdk/models/userCodeGeneration.ts delete mode 100644 src/sdk/models/validationException.ts delete mode 100644 src/sdk/schema.ts diff --git a/package-lock.json b/package-lock.json index 8953a486..d6ca589b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "@apimatic/axios-client-adapter": "^0.3.7", "@apimatic/core": "^0.10.16", "@apimatic/schema": "^0.7.14", - "@apimatic/sdk": "file:./lib/sdk", + "@apimatic/sdk": "^0.2.0-alpha.1", "@clack/prompts": "^0.11.0", "@oclif/core": "^4.2.8", "@oclif/plugin-autocomplete": "^3.2.24", @@ -106,7 +106,6 @@ "node": ">=14.17.0" } }, - "lib/sdk": {}, "node_modules/@ampproject/remapping": { "version": "2.3.0", "dev": true, @@ -275,8 +274,19 @@ } }, "node_modules/@apimatic/sdk": { - "resolved": "lib/sdk", - "link": true + "version": "0.2.0-alpha.1", + "resolved": "https://registry.npmjs.org/@apimatic/sdk/-/sdk-0.2.0-alpha.1.tgz", + "integrity": "sha512-PDO6vN+DhiWcoUmDzND8Fwro/CNAg+Jbr2jBqXbGssVDw4P2BikKRqnhZoZPlPNYwEUaUr7/SIQwsP7Qx/1zMQ==", + "license": "MIT", + "dependencies": { + "@apimatic/authentication-adapters": "^0.5.4", + "@apimatic/axios-client-adapter": "^0.3.7", + "@apimatic/core": "^0.10.16", + "@apimatic/schema": "^0.7.14" + }, + "engines": { + "node": ">=14.17.0" + } }, "node_modules/@aws-crypto/crc32": { "version": "5.2.0", diff --git a/package.json b/package.json index 2bf3d75d..c537730b 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@apimatic/axios-client-adapter": "^0.3.7", "@apimatic/core": "^0.10.16", "@apimatic/schema": "^0.7.14", - "@apimatic/sdk": "file:./lib/sdk", + "@apimatic/sdk": "^0.2.0-alpha.1", "@clack/prompts": "^0.11.0", "@oclif/core": "^4.2.8", "@oclif/plugin-autocomplete": "^3.2.24", diff --git a/src/commands/api/transform.ts b/src/commands/api/transform.ts index 1186d2dd..61fa5315 100644 --- a/src/commands/api/transform.ts +++ b/src/commands/api/transform.ts @@ -8,10 +8,10 @@ import { AuthenticationError, loggers } from "../../types/utils"; import { SDKClient } from "../../client-utils/sdk-client"; import { printValidationMessages } from "../../utils/utils"; import { getFileNameFromPath, replaceHTML } from "../../utils/utils"; -import { DestinationFormats } from "../../types/api/transform"; +import { DestinationFormats, TransformationFormats } from "../../types/api/transform"; import { getValidFormat, getTransformationId, downloadTransformationFile } from "../../controllers/api/transform"; -const formats: string = Object.keys(ExportFormats).join("|"); +const formats: string = Object.keys(TransformationFormats).join("|"); export default class Transform extends Command { static description = `Transform API specifications from one format to another. Supports [10+ different formats](https://www.apimatic.io/transformer/#supported-formats) including OpenApi/Swagger, RAML, WSDL and Postman Collections.`; diff --git a/src/controllers/api/transform.ts b/src/controllers/api/transform.ts index 01bcbf89..f8a86c2e 100644 --- a/src/controllers/api/transform.ts +++ b/src/controllers/api/transform.ts @@ -2,7 +2,7 @@ import { ux } from "@oclif/core"; import * as fs from "fs-extra"; import { writeFileUsingReadableStream } from "../../utils/utils"; -import { DownloadTransformationParams, TransformationData, TransformationIdParams } from "../../types/api/transform"; +import { DownloadTransformationParams, TransformationData, TransformationFormats, TransformationIdParams } from "../../types/api/transform"; import { ApiResponse, ContentType, @@ -59,10 +59,12 @@ export const downloadTransformationFile = async ({ }; // Get valid platform from user's input, convert simple platform to valid Platforms enum value export const getValidFormat = (format: string) => { - if (Object.keys(ExportFormats).find((exportFormat) => exportFormat === format)) { - return ExportFormats[format as keyof typeof ExportFormats]; + const key = Object.keys(TransformationFormats).find((value) => value === format) as keyof typeof TransformationFormats | undefined; + if (key) { + const transformationFormat = TransformationFormats[key] as keyof typeof ExportFormats; + return ExportFormats[transformationFormat]; } else { - const formats = Object.keys(ExportFormats).join("|"); - throw new Error(`Please provide a valid platform i.e. ${formats}`); + const formats = Object.keys(TransformationFormats).join("|"); + throw new Error(`Please provide a valid platform, e.g. ${formats}`); } }; diff --git a/src/sdk/authProvider.ts b/src/sdk/authProvider.ts deleted file mode 100644 index a0de3a41..00000000 --- a/src/sdk/authProvider.ts +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - compositeAuthenticationProvider, - customHeaderAuthenticationProvider, -} from './authentication'; -import { Configuration } from './configuration'; - -export function createAuthProviderFromConfig(config: Partial) { - const authConfig = { - authorization: - config.customHeaderAuthenticationCredentials && - customHeaderAuthenticationProvider( - config.customHeaderAuthenticationCredentials - ), - }; - - return compositeAuthenticationProvider< - keyof typeof authConfig, - typeof authConfig - >(authConfig); -} diff --git a/src/sdk/authentication.ts b/src/sdk/authentication.ts deleted file mode 100644 index 8d775190..00000000 --- a/src/sdk/authentication.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -export * from '@apimatic/authentication-adapters'; diff --git a/src/sdk/client.ts b/src/sdk/client.ts deleted file mode 100644 index c5ac6583..00000000 --- a/src/sdk/client.ts +++ /dev/null @@ -1,158 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { createAuthProviderFromConfig } from './authProvider'; -import { - AuthParams, - ClientInterface, - SdkRequestBuilder, - SdkRequestBuilderFactory, - Server, -} from './clientInterface'; -import { Configuration, Environment } from './configuration'; -import { - DEFAULT_CONFIGURATION, - DEFAULT_RETRY_CONFIG, - DEFAULT_LOGGING_OPTIONS, -} from './defaultConfiguration'; -import { ApiLogger, LoggingOptions, mergeLoggingOptions } from './core'; -import { ApiError } from './core'; -import { setHeader } from './core'; -import { updateUserAgent } from './core'; -import { - AbortError, - AuthenticatorInterface, - createRequestBuilderFactory, - HttpClientInterface, - RetryConfiguration, -} from './core'; -import { HttpClient } from './clientAdapter'; - -export class Client implements ClientInterface { - private _config: Readonly; - private _timeout: number; - private _retryConfig: RetryConfiguration; - private _loggingOp: LoggingOptions; - private _requestBuilderFactory: SdkRequestBuilderFactory; - private _userAgent: string; - - constructor(config?: Partial) { - this._config = { - ...DEFAULT_CONFIGURATION, - ...config, - }; - this._retryConfig = { - ...DEFAULT_RETRY_CONFIG, - ...this._config.httpClientOptions?.retryConfig, - }; - this._loggingOp = this._config.logging - ? mergeLoggingOptions(this._config.logging ?? {}) - : mergeLoggingOptions( - this._config.logging ?? {}, - DEFAULT_LOGGING_OPTIONS - ); - this._timeout = - typeof this._config.httpClientOptions?.timeout != 'undefined' - ? this._config.httpClientOptions.timeout - : this._config.timeout; - this._userAgent = updateUserAgent( - 'TypeScript-SDK/3.0.0 [OS: {os-info}, Engine: {engine}/{engine-version}]' - ); - this._requestBuilderFactory = createRequestHandlerFactory( - (server) => getBaseUri(server, this._config), - createAuthProviderFromConfig(this._config), - new HttpClient(AbortError, { - timeout: this._timeout, - clientConfigOverrides: this._config.unstable_httpClientOptions, - httpAgent: this._config.httpClientOptions?.httpAgent, - httpsAgent: this._config.httpClientOptions?.httpsAgent, - }), - [ - withErrorHandlers, - withUserAgent(this._userAgent), - withAuthenticationByDefault, - ], - this._retryConfig, - this._loggingOp - ); - } - - public getRequestBuilderFactory(): SdkRequestBuilderFactory { - return this._requestBuilderFactory; - } - - /** - * Clone this client and override given configuration options - */ - public withConfiguration(config: Partial) { - return new Client({ ...this._config, ...config }); - } -} - -function createHttpClientAdapter(client: HttpClient): HttpClientInterface { - return async (request, requestOptions) => { - return await client.executeRequest(request, requestOptions); - }; -} - -function getBaseUri(server: Server = 'default', config: Configuration): string { - if (config.environment === Environment.Production) { - if (server === 'default') { - return 'https://api.apimatic.io'; - } - } - throw new Error('Could not get Base URL. Invalid environment or server.'); -} - -function createRequestHandlerFactory( - baseUrlProvider: (server?: Server) => string, - authProvider: AuthenticatorInterface, - httpClient: HttpClient, - addons: ((rb: SdkRequestBuilder) => void)[], - retryConfig: RetryConfiguration, - loggingOptions: LoggingOptions -): SdkRequestBuilderFactory { - const requestBuilderFactory = createRequestBuilderFactory( - createHttpClientAdapter(httpClient), - baseUrlProvider, - ApiError, - authProvider, - retryConfig, - undefined, - new ApiLogger(loggingOptions) - ); - - return tap(requestBuilderFactory, ...addons); -} - -function tap( - requestBuilderFactory: SdkRequestBuilderFactory, - ...callback: ((requestBuilder: SdkRequestBuilder) => void)[] -): SdkRequestBuilderFactory { - return (...args) => { - const requestBuilder = requestBuilderFactory(...args); - callback.forEach((c) => c(requestBuilder)); - return requestBuilder; - }; -} - -function withErrorHandlers(rb: SdkRequestBuilder) { - rb.defaultToError(ApiError); -} - -function withUserAgent(userAgent: string) { - return (rb: SdkRequestBuilder) => { - rb.interceptRequest((request) => { - const headers = request.headers ?? {}; - setHeader(headers, 'user-agent', userAgent); - return { ...request, headers }; - }); - }; -} - -function withAuthenticationByDefault(rb: SdkRequestBuilder) { - rb.authenticate([{ authorization: true }]); -} diff --git a/src/sdk/clientAdapter.ts b/src/sdk/clientAdapter.ts deleted file mode 100644 index b9c7096b..00000000 --- a/src/sdk/clientAdapter.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -export * from '@apimatic/axios-client-adapter'; diff --git a/src/sdk/clientInterface.ts b/src/sdk/clientInterface.ts deleted file mode 100644 index df8e394d..00000000 --- a/src/sdk/clientInterface.ts +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { createAuthProviderFromConfig } from './authProvider'; -import { AuthenticatorInterface, RequestBuilderFactory } from './core'; - -export interface ClientInterface { - getRequestBuilderFactory(): SdkRequestBuilderFactory; -} - -export type SdkRequestBuilderFactory = RequestBuilderFactory< - Server, - AuthParams ->; - -export type SdkRequestBuilder = ReturnType; - -export type Server = 'default'; - -export type AuthParams = ReturnType< - typeof createAuthProviderFromConfig -> extends AuthenticatorInterface - ? X - : never; diff --git a/src/sdk/configuration.ts b/src/sdk/configuration.ts deleted file mode 100644 index 9fd3ec39..00000000 --- a/src/sdk/configuration.ts +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { HttpClientOptions } from './clientAdapter'; -import { PartialLoggingOptions } from './core'; - -/** An interface for all configuration parameters required by the SDK. */ -export interface Configuration { - timeout: number; - environment: Environment; - customHeaderAuthenticationCredentials?: { - 'Authorization': string; - }; - httpClientOptions?: Partial; - unstable_httpClientOptions?: any; - logging?: PartialLoggingOptions; -} - -/** Environments available for API */ -export enum Environment { - Production = 'production', -} diff --git a/src/sdk/controllers/apIsManagementController.ts b/src/sdk/controllers/apIsManagementController.ts deleted file mode 100644 index 1124471a..00000000 --- a/src/sdk/controllers/apIsManagementController.ts +++ /dev/null @@ -1,277 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { ApiResponse, FileWrapper, RequestOptions } from '../core'; -import { Accept, acceptSchema } from '../models/accept'; -import { Accept2, accept2Schema } from '../models/accept2'; -import { ApiEntity, apiEntitySchema } from '../models/apiEntity'; -import { ContentType, contentTypeSchema } from '../models/contentType'; -import { ExportFormats, exportFormatsSchema } from '../models/exportFormats'; -import { - ImportApiVersionViaUrlRequest, - importApiVersionViaUrlRequestSchema, -} from '../models/importApiVersionViaUrlRequest'; -import { - ImportApiViaUrlRequest, - importApiViaUrlRequestSchema, -} from '../models/importApiViaUrlRequest'; -import { - InplaceImportApiViaUrlRequest, - inplaceImportApiViaUrlRequestSchema, -} from '../models/inplaceImportApiViaUrlRequest'; -import { string } from '../schema'; -import { BaseController } from './baseController'; -import { ApiError } from '@apimatic/core'; - -export class ApIsManagementController extends BaseController { - /** - * Import an API into the APIMatic Dashboard by uploading the API specification file. - * - * You can also specify [API Metadata](https://docs.apimatic.io/manage-apis/apimatic-metadata) while - * importing the API using this endpoint. When specifying Metadata, the uploaded file will be a zip - * file containing the API specification file and the `APIMATIC-META` json file. - * - * @param contentType - * @param file The API specification file.
The type of the specification file should be - * any of the [supported formats](https://docs.apimatic.io/api- - * transformer/overview-transformer#supported-input-formats). - * @return Response from the API call - */ - async importApiViaFile( - contentType: ContentType, - file: FileWrapper, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('POST', '/api-entities/import-via-file'); - const mapped = req.prepareArgs({ - contentType: [contentType, contentTypeSchema], - }); - req.header('Content-Type', mapped.contentType); - req.formData({ file: file }); - req.throwOn(400, ApiError, 'Bad Request'); - req.throwOn(412, ApiError, 'Precondition Failed'); - req.throwOn(422, ApiError, 'Unprocessable Entity'); - req.throwOn(500, ApiError, 'Internal Server Error'); - req.authenticate([{ authorization: true }]); - return req.callAsJson(apiEntitySchema, requestOptions); - } - - /** - * Import an API into the APIMatic Dashboard by providing the URL of the API specification file. - * - * You can also specify [API Metadata](https://docs.apimatic.io/manage-apis/apimatic-metadata) while - * importing the API using this endpoint. When specifying Metadata, the URL provided will be that of a - * zip file containing the API specification file and the `APIMATIC-META` json file. - * - * @param body Request Body - * @return Response from the API call - */ - async importApiViaUrl( - body: ImportApiViaUrlRequest, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('POST', '/api-entities/import-via-url'); - const mapped = req.prepareArgs({ - body: [body, importApiViaUrlRequestSchema], - }); - req.header( - 'Content-Type', - 'application/vnd.apimatic.apiEntityUrlImportDto.v1+json' - ); - req.json(mapped.body); - req.throwOn(400, ApiError, 'Bad Request'); - req.throwOn(412, ApiError, 'Precondition Failed'); - req.throwOn(422, ApiError, 'Unprocessable Entity'); - req.throwOn(500, ApiError, 'Internal Server Error'); - req.authenticate([{ authorization: true }]); - return req.callAsJson(apiEntitySchema, requestOptions); - } - - /** - * Import a new version for an API, against an existing API Group, by uploading the API specification - * file. - * - * You can also specify [API Metadata](https://docs.apimatic.io/manage-apis/apimatic-metadata) while - * importing the API version using this endpoint. When specifying Metadata, the uploaded file will be a - * zip file containing the API specification file and the `APIMATIC-META` json file. - * - * @param apiGroupId The ID of the API Group for which to import a new API version. - * @param accept - * @param versionOverride The version number with which the new API version will be imported. This - * version number will override the version specified in the API specification - * file.
APIMatic recommends versioning the API with the [versioning - * scheme](https://docs.apimatic.io/define-apis/basic-settings/#version) - * documented in the docs. - * @param file The API specification file.
The type of the specification file should - * be any of the [supported formats](https://docs.apimatic.io/api- - * transformer/overview-transformer#supported-input-formats). - * @return Response from the API call - */ - async importNewApiVersionViaFile( - apiGroupId: string, - accept: Accept, - versionOverride: string, - file: FileWrapper, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('POST'); - const mapped = req.prepareArgs({ - apiGroupId: [apiGroupId, string()], - accept: [accept, acceptSchema], - versionOverride: [versionOverride, string()], - }); - req.header('Accept', mapped.accept); - req.formData({ version_override: mapped.versionOverride, file: file }); - req.appendTemplatePath`/api-groups/${mapped.apiGroupId}/api-entities/import-via-file`; - req.authenticate([{ authorization: true }]); - return req.callAsJson(apiEntitySchema, requestOptions); - } - - /** - * Import a new version for an API, against an existing API Group, by providing the URL of the API - * specification file. - * - * You can also specify [API Metadata](https://docs.apimatic.io/manage-apis/apimatic-metadata) while - * importing the API version using this endpoint. When specifying Metadata, the URL provided will be - * that of a zip file containing the API specification file and the `APIMATIC-META` json file. - * - * @param apiGroupId The ID of the API Group for which to import a new API - * version. - * @param accept - * @param body Request Body - * @return Response from the API call - */ - async importNewApiVersionViaUrl( - apiGroupId: string, - accept: Accept, - body: ImportApiVersionViaUrlRequest, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('POST'); - const mapped = req.prepareArgs({ - apiGroupId: [apiGroupId, string()], - accept: [accept, acceptSchema], - body: [body, importApiVersionViaUrlRequestSchema], - }); - req.header('Accept', mapped.accept); - req.header( - 'Content-Type', - 'application/vnd.apimatic.apiGroupApiEntityUrlImportDto.v1+json' - ); - req.json(mapped.body); - req.appendTemplatePath`/api-groups/${mapped.apiGroupId}/api-entities/import-via-url`; - req.authenticate([{ authorization: true }]); - return req.callAsJson(apiEntitySchema, requestOptions); - } - - /** - * Replace an API version of an API Group, by uploading the API specification file that will replace - * the current version. - * - * You can also specify [API Metadata](https://docs.apimatic.io/manage-apis/apimatic-metadata) while - * importing the API version using this endpoint. When specifying Metadata, the uploaded file will be a - * zip file containing the API specification file and the `APIMATIC-META` json file. - * - * @param apiEntityId The ID of the API Entity to replace. - * @param accept - * @param file The API specification file.
The type of the specification file should be - * any of the [supported formats](https://docs.apimatic.io/api- - * transformer/overview-transformer#supported-input-formats). - * @return Response from the API call - */ - async inplaceApiImportViaFile( - apiEntityId: string, - accept: Accept2, - file: FileWrapper, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('PUT'); - const mapped = req.prepareArgs({ - apiEntityId: [apiEntityId, string()], - accept: [accept, accept2Schema], - }); - req.header('Accept', mapped.accept); - req.formData({ file: file }); - req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/import-via-file`; - req.authenticate([{ authorization: true }]); - return req.call(requestOptions); - } - - /** - * Replace an API version of an API Group, by providing the URL of the API specification file that will - * replace the current version. - * - * You can also specify [API Metadata](https://docs.apimatic.io/manage-apis/apimatic-metadata) while - * importing the API version using this endpoint. When specifying Metadata, the URL provided will be - * that of a zip file containing the API specification file and the `APIMATIC-META` json file. - * - * @param apiEntityId The ID of the API Entity to replace. - * @param body Request Body - * @return Response from the API call - */ - async inplaceApiImportViaUrl( - apiEntityId: string, - body: InplaceImportApiViaUrlRequest, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('PUT'); - const mapped = req.prepareArgs({ - apiEntityId: [apiEntityId, string()], - body: [body, inplaceImportApiViaUrlRequestSchema], - }); - req.header( - 'Content-Type', - 'application/vnd.apimatic.apiEntityUrlImportDto.v1+json' - ); - req.json(mapped.body); - req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/import-via-url`; - req.authenticate([{ authorization: true }]); - return req.call(requestOptions); - } - - /** - * Fetch an API Entity. - * - * @param apiEntityId The ID of the API Entity to fetch. - * @return Response from the API call - */ - async fetchApiEntity( - apiEntityId: string, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('GET'); - const mapped = req.prepareArgs({ apiEntityId: [apiEntityId, string()] }); - req.appendTemplatePath`/api-entities/${mapped.apiEntityId}`; - req.authenticate([{ authorization: true }]); - return req.callAsJson(apiEntitySchema, requestOptions); - } - - /** - * Download the API Specification file for a an API Version in any of the API Specification formats - * supported by APIMatic. - * - * @param apiEntityId The ID of the API Entity to download. - * @param format The format in which to download the API.
The format can be any of the - * [supported formats](https://docs.apimatic.io/api-transformer/overview- - * transformer#supported-input-formats). - * @return Response from the API call - */ - async downloadApiSpecification( - apiEntityId: string, - format: ExportFormats, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('GET'); - const mapped = req.prepareArgs({ - apiEntityId: [apiEntityId, string()], - format: [format, exportFormatsSchema], - }); - req.query('format', mapped.format); - req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/api-description`; - req.authenticate([{ authorization: true }]); - return req.callAsStream(requestOptions); - } -} diff --git a/src/sdk/controllers/apiValidationExternalApIsController.ts b/src/sdk/controllers/apiValidationExternalApIsController.ts deleted file mode 100644 index 6f2c21a9..00000000 --- a/src/sdk/controllers/apiValidationExternalApIsController.ts +++ /dev/null @@ -1,79 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { ApiResponse, FileWrapper, RequestOptions } from '../core'; -import { - ApiValidationSummary, - apiValidationSummarySchema, -} from '../models/apiValidationSummary'; -import { ContentType, contentTypeSchema } from '../models/contentType'; -import { string } from '../schema'; -import { BaseController } from './baseController'; -import { ApiError } from '@apimatic/core'; - -export class ApiValidationExternalApIsController extends BaseController { - /** - * Validate an API by uploading the API specification file. - * - * You can also specify [API Metadata](https://docs.apimatic.io/manage-apis/apimatic-metadata) while - * validating the API using this endpoint. When specifying Metadata, the uploaded file will be a zip - * file containing the API specification file and the `APIMATIC-META` json file. - * - * @param contentType - * @param file The API specification file.
The type of the specification file should be - * any of the [supported formats](https://docs.apimatic.io/api- - * transformer/overview-transformer#supported-input-formats). - * @return Response from the API call - */ - async validateApiViaFile( - contentType: ContentType, - file: FileWrapper, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('POST', '/validation/validate-via-file'); - req.baseUrl('default'); - const mapped = req.prepareArgs({ - contentType: [contentType, contentTypeSchema], - }); - req.header('Content-Type', mapped.contentType); - req.formData({ file: file }); - req.throwOn(400, ApiError, 'Bad Request'); - req.throwOn(401, ApiError, 'Unauthenticated'); - req.throwOn(403, ApiError, 'Forbidden'); - req.throwOn(500, ApiError, 'Internal Server Error'); - req.authenticate([{ authorization: true }]); - return req.callAsJson(apiValidationSummarySchema, requestOptions); - } - - /** - * Validate an API by providing the URL of the API specification file. - * - * You can also specify [API Metadata](https://docs.apimatic.io/manage-apis/apimatic-metadata) while - * validating the API using this endpoint. When specifying Metadata, the URL provided will be that of a - * zip file containing the API specification file and the `APIMATIC-META` json file. - * - * @param descriptionUrl The URL for the API specification file.

**Note:** This URL should be - * publicly accessible. - * @return Response from the API call - */ - async validateApiViaUrl( - descriptionUrl: string, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('GET', '/validation/validate-via-url'); - req.baseUrl('default'); - const mapped = req.prepareArgs({ - descriptionUrl: [descriptionUrl, string()], - }); - req.query('descriptionUrl', mapped.descriptionUrl); - req.throwOn(400, ApiError, 'Bad Request'); - req.throwOn(401, ApiError, 'Unauthenticated'); - req.throwOn(403, ApiError, 'Forbidden'); - req.throwOn(500, ApiError, 'Internal Server Error'); - req.authenticate([{ authorization: true }]); - return req.callAsJson(apiValidationSummarySchema, requestOptions); - } -} diff --git a/src/sdk/controllers/apiValidationImportedApIsController.ts b/src/sdk/controllers/apiValidationImportedApIsController.ts deleted file mode 100644 index 8c960c58..00000000 --- a/src/sdk/controllers/apiValidationImportedApIsController.ts +++ /dev/null @@ -1,66 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { ApiResponse, RequestOptions } from '../core'; -import { - ApiValidationSummary, - apiValidationSummarySchema, -} from '../models/apiValidationSummary'; -import { - DocsValidationSummary, - docsValidationSummarySchema, -} from '../models/docsValidationSummary'; -import { string } from '../schema'; -import { BaseController } from './baseController'; -import { ApiError } from '@apimatic/core'; - -export class ApiValidationImportedApIsController extends BaseController { - /** - * Validate an API using the [APIMatic Validator](https://docs.apimatic.io/generate-sdks/overview- - * sdks#step-2-api-validation). - * - * @param apiEntityId The ID of the API Entity to perform validation for. - * @return Response from the API call - */ - async validateApi( - apiEntityId: string, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('GET'); - req.baseUrl('default'); - const mapped = req.prepareArgs({ apiEntityId: [apiEntityId, string()] }); - req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/api-validation-summary`; - req.throwOn(400, ApiError, 'Bad Request'); - req.throwOn(403, ApiError, 'Forbidden'); - req.throwOn(404, ApiError, 'API not found'); - req.throwOn(500, ApiError, 'Internal Server Error'); - req.authenticate([{ authorization: true }]); - return req.callAsJson(apiValidationSummarySchema, requestOptions); - } - - /** - * Validate an API for documentation generation. This process validates the API for missing examples or - * missing descriptions. - * - * @param apiEntityId The ID of the API Entity to perform validation for. - * @return Response from the API call - */ - async validateApiForDocs( - apiEntityId: string, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('GET'); - req.baseUrl('default'); - const mapped = req.prepareArgs({ apiEntityId: [apiEntityId, string()] }); - req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/docs-validation-summary`; - req.throwOn(400, ApiError, 'Bad Request'); - req.throwOn(403, ApiError, 'Forbidden'); - req.throwOn(404, ApiError, 'API not found'); - req.throwOn(500, ApiError, 'Internal Server Error'); - req.authenticate([{ authorization: true }]); - return req.callAsJson(docsValidationSummarySchema, requestOptions); - } -} diff --git a/src/sdk/controllers/baseController.ts b/src/sdk/controllers/baseController.ts deleted file mode 100644 index 6dfb201e..00000000 --- a/src/sdk/controllers/baseController.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { ClientInterface, SdkRequestBuilderFactory } from '../clientInterface'; - -/** Base class for all controllers */ -export class BaseController { - /** Create a request builder */ - protected createRequest: SdkRequestBuilderFactory; - - constructor(client: ClientInterface) { - this.createRequest = client.getRequestBuilderFactory(); - } -} diff --git a/src/sdk/controllers/codeGenerationExternalApIsController.ts b/src/sdk/controllers/codeGenerationExternalApIsController.ts deleted file mode 100644 index f6788265..00000000 --- a/src/sdk/controllers/codeGenerationExternalApIsController.ts +++ /dev/null @@ -1,184 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { ApiResponse, FileWrapper, RequestOptions } from '../core'; -import { - GenerateSdkViaUrlRequest, - generateSdkViaUrlRequestSchema, -} from '../models/generateSdkViaUrlRequest'; -import { Platforms, platformsSchema } from '../models/platforms'; -import { - UserCodeGeneration, - userCodeGenerationSchema, -} from '../models/userCodeGeneration'; -import { array, string } from '../schema'; -import { BaseController } from './baseController'; - -export class CodeGenerationExternalApIsController extends BaseController { - /** - * Generate an SDK for an API by by uploading the API specification file. - * - * This endpoint generates and then uploads the generated SDK to APIMatic's cloud storage. An ID for - * the generation performed is returned as part of the response. - * - * This endpoint does not import an API into APIMatic. - * - * @param file The API specification file.
The type of the specification file should be any of - * the [supported formats](https://docs.apimatic.io/api-transformer/overview- - * transformer#supported-input-formats). - * @param template The structure contains platforms that APIMatic CodeGen can generate SDKs and Docs - * in. - * @return Response from the API call - */ - async generateSdkViaFile( - file: FileWrapper, - template: Platforms, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest( - 'POST', - '/code-generations/generate-via-file' - ); - const mapped = req.prepareArgs({ template: [template, platformsSchema] }); - req.formData({ file: file, template: mapped.template }); - req.authenticate([{ authorization: true }]); - return req.callAsJson(userCodeGenerationSchema, requestOptions); - } - - /** - * Generate an SDK for an API by providing the URL of the API specification file. - * - * This endpoint generates and then uploads the generated SDK to APIMatic's cloud storage. An ID for - * the generation performed is returned as part of the response. - * - * This endpoint does not import an API into APIMatic. - * - * @param body Request Body - * @return Response from the API call - */ - async generateSdkViaUrl( - body: GenerateSdkViaUrlRequest, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest( - 'POST', - '/code-generations/generate-via-url' - ); - const mapped = req.prepareArgs({ - body: [body, generateSdkViaUrlRequestSchema], - }); - req.header( - 'Content-Type', - 'application/vnd.apimatic.userCodeGenerationDto.v1+json' - ); - req.json(mapped.body); - req.authenticate([{ authorization: true }]); - return req.callAsJson(userCodeGenerationSchema, requestOptions); - } - - /** - * Download the SDK generated via the Generate SDK endpoints. - * - * @param codegenId The ID of code generation received in the response of the [Generate SDK Via - * File](https://www.apimatic.io/api-docs- - * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api-endpoints/code-generation- - * external-apis/generate-sdk-via-file) or [Generate SDK Via URL ](https://www.apimatic. - * io/api-docs-preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api-endpoints/code- - * generation-external-apis/generate-sdk-via-url) calls. - * @return Response from the API call - */ - async downloadSdk( - codegenId: string, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('GET'); - const mapped = req.prepareArgs({ codegenId: [codegenId, string()] }); - req.appendTemplatePath`/code-generations/${mapped.codegenId}/generated-sdk`; - req.authenticate([{ authorization: true }]); - return req.callAsStream(requestOptions); - } - - /** - * Get a list of all SDK generations performed with external APIs via the Generate SDK endpoints. - * - * @return Response from the API call - */ - async listAllCodeGenerations( - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('GET', '/code-generations'); - req.authenticate([{ authorization: true }]); - return req.callAsJson(array(userCodeGenerationSchema), requestOptions); - } - - /** - * Download the API Specification file used as input for a specific SDK generation performed via the - * Generate SDK endpoints. - * - * @param codegenId The ID of the code generation to download the API specification for. The code - * generation ID is received in the response of the [Generate SDK Via File](https://www. - * apimatic.io/api-docs-preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api- - * endpoints/code-generation-external-apis/generate-sdk-via-file) or [Generate SDK Via - * URL ](https://www.apimatic.io/api-docs- - * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api-endpoints/code-generation- - * external-apis/generate-sdk-via-url) calls - * @return Response from the API call - */ - async downloadInputFile( - codegenId: string, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('GET'); - const mapped = req.prepareArgs({ codegenId: [codegenId, string()] }); - req.appendTemplatePath`/code-generations/${mapped.codegenId}/input-file`; - req.authenticate([{ authorization: true }]); - return req.callAsStream(requestOptions); - } - - /** - * Get details on an SDK generation performed for an external API via the Generate SDK endpoints. - * - * @param codegenId The ID of the code generation to fetch. The code generation ID is received in the - * response of the [Generate SDK Via File](https://www.apimatic.io/api-docs- - * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api-endpoints/code-generation- - * external-apis/generate-sdk-via-file) or [Generate SDK Via URL ](https://www.apimatic. - * io/api-docs-preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api-endpoints/code- - * generation-external-apis/generate-sdk-via-url) calls. - * @return Response from the API call - */ - async getACodeGeneration( - codegenId: string, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('GET'); - const mapped = req.prepareArgs({ codegenId: [codegenId, string()] }); - req.appendTemplatePath`/code-generations/${mapped.codegenId}`; - req.authenticate([{ authorization: true }]); - return req.callAsJson(userCodeGenerationSchema, requestOptions); - } - - /** - * Delete an SDK generation performed for an API via the Generate SDK endpoints. - * - * @param codegenId The ID of the code generation to delete. The code generation ID is received in the - * response of the [Generate SDK Via File](https://www.apimatic.io/api-docs- - * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api-endpoints/code-generation- - * external-apis/generate-sdk-via-file) or [Generate SDK Via URL ](https://www.apimatic. - * io/api-docs-preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api-endpoints/code- - * generation-external-apis/generate-sdk-via-url) calls. - * @return Response from the API call - */ - async deleteCodeGeneration1( - codegenId: string, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('DELETE'); - const mapped = req.prepareArgs({ codegenId: [codegenId, string()] }); - req.appendTemplatePath`/code-generations/${mapped.codegenId}`; - req.authenticate([{ authorization: true }]); - return req.call(requestOptions); - } -} diff --git a/src/sdk/controllers/codeGenerationImportedApIsController.ts b/src/sdk/controllers/codeGenerationImportedApIsController.ts deleted file mode 100644 index c616316f..00000000 --- a/src/sdk/controllers/codeGenerationImportedApIsController.ts +++ /dev/null @@ -1,136 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { ApiResponse, RequestOptions } from '../core'; -import { - ApiEntityCodeGeneration, - apiEntityCodeGenerationSchema, -} from '../models/apiEntityCodeGeneration'; -import { Platforms, platformsSchema } from '../models/platforms'; -import { array, string } from '../schema'; -import { BaseController } from './baseController'; - -export class CodeGenerationImportedApIsController extends BaseController { - /** - * Generate an SDK for an API Version. - * - * This endpoint generates and then uploads the generated SDK to APIMatic's cloud storage. An ID for - * the generation performed is returned as part of the response. - * - * @param apiEntityId The ID of the API Entity to generate the SDK for. - * @param template The structure contains platforms that APIMatic CodeGen can generate SDKs and - * Docs in. - * @return Response from the API call - */ - async generateSdk( - apiEntityId: string, - template: Platforms, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('POST'); - const mapped = req.prepareArgs({ - apiEntityId: [apiEntityId, string()], - template: [template, platformsSchema], - }); - req.header('Content-Type', 'application/x-www-form-urlencoded'); - req.form({ template: mapped.template }); - req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/code-generations/generate`; - req.authenticate([{ authorization: true }]); - return req.callAsJson(apiEntityCodeGenerationSchema, requestOptions); - } - - /** - * Download the SDK generated via the Generate SDK endpoint. - * - * @param apiEntityId The ID of the API Entity for which the SDK was generated. - * @param codegenId The ID of code generation received in the response of the [SDK generation - * call](https://www.apimatic.io/api-docs- - * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api-endpoints/code- - * generation-imported-apis/generate-sdk). - * @return Response from the API call - */ - async downloadSdk( - apiEntityId: string, - codegenId: string, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('GET'); - const mapped = req.prepareArgs({ - apiEntityId: [apiEntityId, string()], - codegenId: [codegenId, string()], - }); - req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/code-generations/${mapped.codegenId}/generated-sdk`; - req.authenticate([{ authorization: true }]); - return req.callAsStream(requestOptions); - } - - /** - * Get a list of all SDK generations done against an API Version via the Generate SDK endpoint. - * - * @param apiEntityId The ID of the API Entity for which to list code generations. - * @return Response from the API call - */ - async listAllCodeGenerations( - apiEntityId: string, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('GET'); - const mapped = req.prepareArgs({ apiEntityId: [apiEntityId, string()] }); - req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/code-generations`; - req.authenticate([{ authorization: true }]); - return req.callAsJson(array(apiEntityCodeGenerationSchema), requestOptions); - } - - /** - * Get details on an SDK generation performed via the Generate SDK endpoint. - * - * @param apiEntityId The ID of the API Entity to fetch the code generation for. - * @param codegenId The ID of the code generation to fetch. The code generation ID is received in the - * response of the [SDK generation call](https://www.apimatic.io/api-docs- - * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api-endpoints/code- - * generation-imported-apis/generate-sdk). - * @return Response from the API call - */ - async getACodeGeneration( - apiEntityId: string, - codegenId: string, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('GET'); - const mapped = req.prepareArgs({ - apiEntityId: [apiEntityId, string()], - codegenId: [codegenId, string()], - }); - req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/code-generations/${mapped.codegenId}`; - req.authenticate([{ authorization: true }]); - return req.callAsJson(apiEntityCodeGenerationSchema, requestOptions); - } - - /** - * Delete an SDK generation performed for an API Version via the Generate SDK endpoint. - * - * @param apiEntityId The ID of the API Entity to delete the code generation for. - * @param codegenId The ID of the code generation to delete. The code generation ID is received in the - * response of the [SDK generation call](https://www.apimatic.io/api-docs- - * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api-endpoints/code- - * generation-imported-apis/generate-sdk). - * @return Response from the API call - */ - async deleteCodeGeneration( - apiEntityId: string, - codegenId: string, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('DELETE'); - const mapped = req.prepareArgs({ - apiEntityId: [apiEntityId, string()], - codegenId: [codegenId, string()], - }); - req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/code-generations/${mapped.codegenId}`; - req.authenticate([{ authorization: true }]); - return req.call(requestOptions); - } -} diff --git a/src/sdk/controllers/docsPortalGenerationAsyncController.ts b/src/sdk/controllers/docsPortalGenerationAsyncController.ts deleted file mode 100644 index bb42b08d..00000000 --- a/src/sdk/controllers/docsPortalGenerationAsyncController.ts +++ /dev/null @@ -1,102 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { ApiResponse, FileWrapper, RequestOptions } from '../core'; -import { ContentType, contentTypeSchema } from '../models/contentType'; -import { - PortalGenerationAsyncResponse, - portalGenerationAsyncResponseSchema, -} from '../models/portalGenerationAsyncResponse'; -import { - PortalGenerationStatusResponse, - portalGenerationStatusResponseSchema, -} from '../models/portalGenerationStatusResponse'; -import { optional, string } from '../schema'; -import { BaseController } from './baseController'; -import { ApiError } from '@apimatic/core'; - -export class DocsPortalGenerationAsyncController extends BaseController { - /** - * Create an async On-premise Documentation Portal Generation request by providing a Portal Build - * Input - * - * @param contentType - * @param file The input file to the Portal Generator. Must contain the build file. - * @param xApiMaticCallbackUrl Optional header containing callback url. This url will be called by - * the server once the portal generation completes - * @return Response from the API call - */ - async generateOnPremPortalViaBuildInputAsync( - contentType: ContentType, - file: FileWrapper, - xApiMaticCallbackUrl?: string, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('POST', '/portal/v2'); - const mapped = req.prepareArgs({ - contentType: [contentType, contentTypeSchema], - xApiMaticCallbackUrl: [xApiMaticCallbackUrl, optional(string())], - }); - req.header('Content-Type', mapped.contentType); - req.header('X-APIMatic-CallbackUrl', mapped.xApiMaticCallbackUrl); - req.formData({ file: file }); - req.throwOn(400, ApiError, 'Bad Request'); - req.throwOn(401, ApiError, 'Unauthorized'); - req.throwOn(402, ApiError, 'Subscription Issue'); - req.authenticate([{ authorization: true }]); - return req.callAsJson(portalGenerationAsyncResponseSchema, requestOptions); - } - - /** - * Get the status of a portal generation request - * - * @param id - * @return Response from the API call - */ - async getPortalGenerationStatus( - id: string, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('GET'); - const mapped = req.prepareArgs({ id: [id, string()] }); - req.appendTemplatePath`/portal/v2/${mapped.id}/status`; - req.throwOn(400, ApiError, 'Bad Request'); - req.throwOn(401, ApiError, 'Unauthorized'); - req.throwOn(402, ApiError, 'Subscription Issue'); - req.authenticate([{ authorization: true }]); - return req.callAsJson(portalGenerationStatusResponseSchema, requestOptions); - } - - /** - * Downloads the portal artifacts. The generated artifacts include: - * - * - * 1. SDKs - * - * 2. Docs - * - * 3. API Specification files - * - * - * The endpoint returns a zip file that contains a static Site and can be hosted on any Web Server. - * - * @param id - * @return Response from the API call - */ - async downloadGeneratedPortal( - id: string, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('GET'); - const mapped = req.prepareArgs({ id: [id, string()] }); - req.appendTemplatePath`/portal/v2/${mapped.id}/download`; - req.throwOn(400, ApiError, 'Bad Request'); - req.throwOn(401, ApiError, 'Unauthorized'); - req.throwOn(402, ApiError, 'Subscription Issue'); - req.authenticate([{ authorization: true }]); - return req.callAsStream(requestOptions); - } -} diff --git a/src/sdk/controllers/docsPortalManagementController.ts b/src/sdk/controllers/docsPortalManagementController.ts deleted file mode 100644 index 0eab4e4d..00000000 --- a/src/sdk/controllers/docsPortalManagementController.ts +++ /dev/null @@ -1,223 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { ApiResponse, FileWrapper, RequestOptions } from '../core'; -import { Accept3, accept3Schema } from '../models/accept3'; -import { ContentType, contentTypeSchema } from '../models/contentType'; -import { array, optional, string, unknown } from '../schema'; -import { BaseController } from './baseController'; -import { ApiError } from '@apimatic/core'; -import { InternalServerErrorResponseError } from '../errors/internalServerErrorResponseError'; -import { ProblemDetailsError } from '../errors/problemDetailsError'; -import { UnauthorizedResponseError } from '../errors/unauthorizedResponseError'; - -export class DocsPortalManagementController extends BaseController { - /** - * Publish artifacts for a Hosted Portal. - * - * This endpoint regenerates all the artifacts for a hosted portal and uploads them to APIMatic's cloud - * storage, from where the Portal fetches them. These artifacts include: - * - * 1. SDKs - * 2. Docs - * 3. API Specification files - * - * Call this endpoint to update your Hosted Portal after you update an API Entity via any of the Import - * API Endpoints. - * - * __**Note: If you have an embedded portal against the same API Entity, artifacts for that portal will - * get updated as well.**__ - * - * @param apiEntityId The ID of the API Entity to update the portal artifacts for. - * @return Response from the API call - */ - async publishHostedPortal( - apiEntityId: string, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('PUT'); - const mapped = req.prepareArgs({ apiEntityId: [apiEntityId, string()] }); - req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/hosted-portal`; - req.authenticate([{ authorization: true }]); - return req.call(requestOptions); - } - - /** - * Publish artifacts for an Embedded Portal and get the Portal Embed script. - * - * This endpoint regenerates all the artifacts for an embedded portal and uploads them to APIMatic's - * cloud storage, from where the Portal fetches them. These artifacts include: - * - * 1. SDKs - * 2. Docs - * 3. API Specification files - * - * Call this endpoint to update your Embedded Portal after you update an API Entity via any of the - * Import API Endpoints. This endpoint returns the Portal Embed script in the response. - * - * __**Note: If you have a hosted portal against the same API Entity, artifacts for that portal will - * get updated as well.**__ - * - * @param apiEntityId The ID of the API Entity to update the portal artifacts for. - * @return Response from the API call - */ - async publishEmbeddedPortal( - apiEntityId: string, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('PUT'); - const mapped = req.prepareArgs({ apiEntityId: [apiEntityId, string()] }); - req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/embedded-portal`; - req.authenticate([{ authorization: true }]); - return req.call(requestOptions); - } - - /** - * Generate an On-premise Documentation Portal for an API Entity. This endpoint generates all artifacts - * for the Portal and packages them together into a zip file along with the required HTML, CSS and JS - * files. The generated artifacts include: - * - * 1. SDKs - * 2. Docs - * 3. API Specification files - * - * The endpoint returns a zip file that contains a static Site and can be hosted on any Web Server. - * - * @param apiEntityId The ID of the API Entity to generate the Portal for. - * @param accept Example: application/zip - * @return Response from the API call - */ - async generateOnPremPortalViaApiEntity( - apiEntityId: string, - accept: Accept3, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('GET'); - const mapped = req.prepareArgs({ - apiEntityId: [apiEntityId, string()], - accept: [accept, accept3Schema], - }); - req.header('Accept', mapped.accept); - req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/on-prem-portal`; - req.authenticate([{ authorization: true }]); - return req.call(requestOptions); - } - - /** - * Generate an On-premise Documentation Portal by uploading a Portal Build Input. This endpoint - * generates all artifacts for the Portal and packages them together into a zip file along with the - * required HTML, CSS and JS files. The generated artifacts include: - * - * 1. SDKs - * 2. Docs - * 3. API Specification files - * - * The endpoint returns a zip file that contains a static Site and can be hosted on any Web Server. - * - * @param contentType - * @param file The input file to the Portal Generator. Must contain the build file. - * @return Response from the API call - */ - async generateOnPremPortalViaBuildInput( - contentType: ContentType, - file: FileWrapper, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('POST', '/portal'); - const mapped = req.prepareArgs({ - contentType: [contentType, contentTypeSchema], - }); - req.header('Content-Type', mapped.contentType); - req.formData({ file: file }); - req.throwOn(400, ProblemDetailsError, 'Bad Request'); - req.throwOn(401, UnauthorizedResponseError, 'Unauthorized'); - req.throwOn(403, ProblemDetailsError, 'Subscription Issue'); - req.throwOn( - 422, - ApiError, - 'Unprocessable Entity - Contains error.zip for build issues' - ); - req.throwOn(500, InternalServerErrorResponseError, 'Internal Server Error'); - req.authenticate([{ authorization: true }]); - return req.callAsStream(requestOptions); - } - - /** - * Generate Build Input for a Portal created using the UI workflow. The Build Input will correspond to - * the draft version of the Portal i.e. unpublished changes will also be included. - * This can be used to create a backup of your Portal or to migrate from the UI workflow to the docs as - * code workflow. - * - * @param apiGroupId - * @param apiEntities - * @return Response from the API call - */ - async generateBuildInputForUnpublishedPortal( - apiGroupId: string, - apiEntities?: string[], - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('GET'); - const mapped = req.prepareArgs({ - apiGroupId: [apiGroupId, string()], - apiEntities: [apiEntities, optional(array(string()))], - }); - req.query('apiEntities', mapped.apiEntities); - req.appendTemplatePath`/portal/build/${mapped.apiGroupId}/draft`; - req.authenticate([{ authorization: true }]); - return req.callAsJson(optional(unknown()), requestOptions); - } - - /** - * Generate Build Input for a Portal created using the UI workflow. The Build Input will correspond to - * the published version of the Portal i.e. unpublished changes will not be inlcuded. - * This can be used to create a backup of your Portal or to migrate from the UI workflow to the docs as - * code workflow. - * - * @param apiGroupId - * @param apiEntities - * @return Response from the API call - */ - async generateBuildInputForPublishedPortal( - apiGroupId: string, - apiEntities?: string[], - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('GET'); - const mapped = req.prepareArgs({ - apiGroupId: [apiGroupId, string()], - apiEntities: [apiEntities, optional(array(string()))], - }); - req.query('apiEntities', mapped.apiEntities); - req.appendTemplatePath`/portal/build/${mapped.apiGroupId}/published`; - req.authenticate([{ authorization: true }]); - return req.callAsJson(optional(unknown()), requestOptions); - } - - /** - * Unpublish a Hosted or Embedded Portal published for an API Entity. Calling this endpoint deletes all - * the published artifacts for a Portal from APIMatic's cloud storage. - * - * In case of a Hosted Portal, to completely remove the Portal, this endpoint needs to be called - * against all API versions that the Portal hosts. - * - * In case of an Embedded Portal, to completely remove the Portal, the user needs to manually remove - * the Portal Embed script from the embedding site. - * - * @param apiEntityId The ID of the API Entity to unpublish the Portal artifacts for. - * @return Response from the API call - */ - async unpublishPortal( - apiEntityId: string, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('DELETE'); - const mapped = req.prepareArgs({ apiEntityId: [apiEntityId, string()] }); - req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/portal`; - req.authenticate([{ authorization: true }]); - return req.call(requestOptions); - } -} diff --git a/src/sdk/controllers/transformationController.ts b/src/sdk/controllers/transformationController.ts deleted file mode 100644 index 233fc887..00000000 --- a/src/sdk/controllers/transformationController.ts +++ /dev/null @@ -1,196 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { ApiResponse, FileWrapper, RequestOptions } from '../core'; -import { ContentType, contentTypeSchema } from '../models/contentType'; -import { ExportFormats, exportFormatsSchema } from '../models/exportFormats'; -import { Transformation, transformationSchema } from '../models/transformation'; -import { - TransformViaUrlRequest, - transformViaUrlRequestSchema, -} from '../models/transformViaUrlRequest'; -import { array, string } from '../schema'; -import { BaseController } from './baseController'; - -export class TransformationController extends BaseController { - /** - * Transform an API into any of the supported API specification formats by uploading the API - * specification file. - * - * This endpoint transforms and then uploads the transformed API specification to APIMatic's cloud - * storage. An ID for the transformation performed is returned as part of the response. - * - * @param contentType - * @param file The API specification file.
The type of the specification file should be - * any of the [supported formats](https://docs.apimatic.io/api- - * transformer/overview-transformer#supported-input-formats). - * @param exportFormat The structure contains API specification formats that Transformer can - * convert to. - * @return Response from the API call - */ - async transformViaFile( - contentType: ContentType, - file: FileWrapper, - exportFormat: ExportFormats, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest( - 'POST', - '/transformations/transform-via-file' - ); - const mapped = req.prepareArgs({ - contentType: [contentType, contentTypeSchema], - exportFormat: [exportFormat, exportFormatsSchema], - }); - req.header('Content-Type', mapped.contentType); - req.formData({ file: file, export_format: mapped.exportFormat }); - req.authenticate([{ authorization: true }]); - return req.callAsJson(transformationSchema, requestOptions); - } - - /** - * Transform an API into any of the supported API specification formats by providing the URL of the API - * specification file. - * - * This endpoint transforms and then uploads the transformed API specification to APIMatic's cloud - * storage. An ID for the transformation performed is returned as part of the response. - * - * @param body Request Body - * @return Response from the API call - */ - async transformViaUrl( - body: TransformViaUrlRequest, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest( - 'POST', - '/transformations/transform-via-url' - ); - const mapped = req.prepareArgs({ - body: [body, transformViaUrlRequestSchema], - }); - req.header( - 'Content-Type', - 'application/vnd.apimatic.urlTransformDto.v1+json' - ); - req.json(mapped.body); - req.authenticate([{ authorization: true }]); - return req.callAsJson(transformationSchema, requestOptions); - } - - /** - * Download the transformed API specification file transformed via the Transformation endpoints. - * - * @param transformationId The ID of transformation received in the response of the [Transform Via File - * ](https://www.apimatic.io/api-docs- - * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api- - * endpoints/transformation/transform-via-file) or [Transform Via URL ](https: - * //www.apimatic.io/api-docs- - * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api- - * endpoints/transformation/transform-via-url) calls. - * @return Response from the API call - */ - async downloadTransformedFile( - transformationId: string, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('GET'); - const mapped = req.prepareArgs({ - transformationId: [transformationId, string()], - }); - req.appendTemplatePath`/transformations/${mapped.transformationId}/converted-file`; - req.authenticate([{ authorization: true }]); - return req.callAsStream(requestOptions); - } - - /** - * Download the API Specification file used as input for a particular Transformation performed via the - * Transformation endpoints. - * - * @param transformationId The ID of the transformation to download the API specification for. The - * transformation ID is received in the response of the [Transform Via File - * ](https://www.apimatic.io/api-docs- - * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api- - * endpoints/transformation/transform-via-file) or [Transform Via URL](https://www. - * apimatic.io/api-docs-preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api- - * endpoints/transformation/transform-via-url) calls. - * @return Response from the API call - */ - async downloadInputFile( - transformationId: string, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('GET'); - const mapped = req.prepareArgs({ - transformationId: [transformationId, string()], - }); - req.appendTemplatePath`/transformations/${mapped.transformationId}/input-file`; - req.authenticate([{ authorization: true }]); - return req.callAsStream(requestOptions); - } - - /** - * Get a list of all API transformations performed. - * - * @return Response from the API call - */ - async listAllTransformations( - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('GET', '/transformations'); - req.authenticate([{ authorization: true }]); - return req.callAsJson(array(transformationSchema), requestOptions); - } - - /** - * Get details on a particular Transformation performed via the Transformation endpoints. - * - * @param transformationId The ID of the transformation to fetch. The transformation ID is received in - * the response of the [Transform Via File ](https://www.apimatic.io/api-docs- - * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api- - * endpoints/transformation/transform-via-file) or [Transform Via URL ](https: - * //www.apimatic.io/api-docs- - * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api- - * endpoints/transformation/transform-via-url) calls. - * @return Response from the API call - */ - async getATransformation( - transformationId: string, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('GET'); - const mapped = req.prepareArgs({ - transformationId: [transformationId, string()], - }); - req.appendTemplatePath`/transformations/${mapped.transformationId}`; - req.authenticate([{ authorization: true }]); - return req.callAsJson(transformationSchema, requestOptions); - } - - /** - * Delete a particular Transformation performed for an API via the Transformation endpoints. - * - * @param transformationId The ID of the transformation to delete. The transformation ID is received in - * the response of the [Transform Via File ](https://www.apimatic.io/api-docs- - * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api- - * endpoints/transformation/transform-via-file) or [Transform Via URL](https://www. - * apimatic.io/api-docs-preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api- - * endpoints/transformation/transform-via-url) calls. - * @return Response from the API call - */ - async deleteTransformation( - transformationId: string, - requestOptions?: RequestOptions - ): Promise> { - const req = this.createRequest('DELETE'); - const mapped = req.prepareArgs({ - transformationId: [transformationId, string()], - }); - req.appendTemplatePath`/transformations/${mapped.transformationId}`; - req.authenticate([{ authorization: true }]); - return req.call(requestOptions); - } -} diff --git a/src/sdk/core.ts b/src/sdk/core.ts deleted file mode 100644 index 6b9d56b6..00000000 --- a/src/sdk/core.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -export * from '@apimatic/core'; diff --git a/src/sdk/defaultConfiguration.ts b/src/sdk/defaultConfiguration.ts deleted file mode 100644 index b58264f5..00000000 --- a/src/sdk/defaultConfiguration.ts +++ /dev/null @@ -1,35 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { Configuration, Environment } from './configuration'; -import { - LoggingOptions, - mergeLoggingOptions, - NullLogger, - RetryConfiguration, -} from './core'; - -/** Default values for the configuration parameters of the client. */ -export const DEFAULT_CONFIGURATION: Configuration = { - timeout: 30000, - environment: Environment.Production, -}; - -/** Default values for retry configuration parameters. */ -export const DEFAULT_RETRY_CONFIG: RetryConfiguration = { - maxNumberOfRetries: 0, - retryOnTimeout: true, - retryInterval: 1, - maximumRetryWaitTime: 0, - backoffFactor: 2, - httpStatusCodesToRetry: [408, 413, 429, 500, 502, 503, 504, 521, 522, 524], - httpMethodsToRetry: ['GET', 'PUT'], -}; - -/** Default values for logging options. */ -export const DEFAULT_LOGGING_OPTIONS: LoggingOptions = mergeLoggingOptions({ - logger: new NullLogger(), -}); diff --git a/src/sdk/errors/internalServerErrorResponseError.ts b/src/sdk/errors/internalServerErrorResponseError.ts deleted file mode 100644 index 59da0c46..00000000 --- a/src/sdk/errors/internalServerErrorResponseError.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { ApiError } from '../core'; - -/** - * Creates an instance of InternalServerErrorResponse - */ -interface InternalServerErrorResponse { - message?: string; - additionalProperties?: Record; -} - -export class InternalServerErrorResponseError extends ApiError< - InternalServerErrorResponse -> {} diff --git a/src/sdk/errors/problemDetailsError.ts b/src/sdk/errors/problemDetailsError.ts deleted file mode 100644 index 2167b0f7..00000000 --- a/src/sdk/errors/problemDetailsError.ts +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { ApiError } from '../core'; - -/** - * Creates an instance of ProblemDetails - */ -interface ProblemDetails { - type?: string; - title?: string; - status?: number; - detail?: string; - instance?: string; - errors?: Record; - additionalProperties?: Record; -} - -export class ProblemDetailsError extends ApiError {} diff --git a/src/sdk/errors/unauthorizedResponseError.ts b/src/sdk/errors/unauthorizedResponseError.ts deleted file mode 100644 index ea0017c5..00000000 --- a/src/sdk/errors/unauthorizedResponseError.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { ApiError } from '../core'; - -/** - * Creates an instance of UnauthorizedResponse - */ -interface UnauthorizedResponse { - message?: string; - additionalProperties?: Record; -} - -export class UnauthorizedResponseError extends ApiError {} diff --git a/src/sdk/index.ts b/src/sdk/index.ts deleted file mode 100644 index be0e5726..00000000 --- a/src/sdk/index.ts +++ /dev/null @@ -1,87 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -export * from './client'; -export * from './configuration'; -export type { ApiResponse } from './core'; -export { - AbortError, - ArgumentsValidationError, - cloneFileWrapper, - FileWrapper, - isFileWrapper, - ResponseValidationError, - LoggerInterface, - LogLevel, - ConsoleLogger, -} from './core'; -export * from './defaultConfiguration'; -export * from './controllers/apiValidationExternalApIsController'; -export * from './controllers/apiValidationImportedApIsController'; -export * from './controllers/apIsManagementController'; -export * from './controllers/codeGenerationExternalApIsController'; -export * from './controllers/codeGenerationImportedApIsController'; -export * from './controllers/docsPortalGenerationAsyncController'; -export * from './controllers/docsPortalManagementController'; -export * from './controllers/transformationController'; -export { ApiError } from './core'; -export * from './errors/internalServerErrorResponseError'; -export * from './errors/problemDetailsError'; -export * from './errors/unauthorizedResponseError'; -export { Accept } from './models/accept'; -export { Accept2 } from './models/accept2'; -export { Accept3 } from './models/accept3'; -export type { ApiEntity } from './models/apiEntity'; -export type { ApiEntityCodeGeneration } from './models/apiEntityCodeGeneration'; -export type { ApiEntityDetailed } from './models/apiEntityDetailed'; -export type { ApiValidationSummary } from './models/apiValidationSummary'; -export type { Attributes } from './models/attributes'; -export type { Authentication } from './models/authentication'; -export type { AuthorIdentifiers } from './models/authorIdentifiers'; -export type { AuthScope } from './models/authScope'; -export type { CodeGeneration } from './models/codeGeneration'; -export type { CodeGenSettings } from './models/codeGenSettings'; -export { ContentType } from './models/contentType'; -export type { Csnetstandardlib } from './models/csnetstandardlib'; -export type { CustomType } from './models/customType'; -export type { DocsValidationSummary } from './models/docsValidationSummary'; -export type { Endpoint } from './models/endpoint'; -export type { EndpointsGroup } from './models/endpointsGroup'; -export { ExportFormats } from './models/exportFormats'; -export type { Field } from './models/field'; -export type { GenerateSdkViaUrlRequest } from './models/generateSdkViaUrlRequest'; -export { Id } from './models/id'; -export { ImplementationType } from './models/implementationType'; -export type { ImportApiVersionViaUrlRequest } from './models/importApiVersionViaUrlRequest'; -export type { ImportApiViaUrlRequest } from './models/importApiViaUrlRequest'; -export type { ImportValidationSummary } from './models/importValidationSummary'; -export type { InplaceImportApiViaUrlRequest } from './models/inplaceImportApiViaUrlRequest'; -export type { InputParameter } from './models/inputParameter'; -export { Link } from './models/link'; -export type { Links } from './models/links'; -export type { MEnvironment } from './models/mEnvironment'; -export type { MetaData } from './models/metaData'; -export type { PackageDeploymentInformation } from './models/packageDeploymentInformation'; -export { PackageRepositories } from './models/packageRepositories'; -export type { Parameter } from './models/parameter'; -export { Platforms } from './models/platforms'; -export type { PortalGenerationAsyncResponse } from './models/portalGenerationAsyncResponse'; -export type { PortalGenerationStatusResponse } from './models/portalGenerationStatusResponse'; -export type { PublishedPackage } from './models/publishedPackage'; -export type { PublishPackageInput } from './models/publishPackageInput'; -export type { Response } from './models/response'; -export type { Server } from './models/server'; -export type { ServerConfiguration } from './models/serverConfiguration'; -export { Status } from './models/status'; -export type { TemplatesPackageDeploymentInformation } from './models/templatesPackageDeploymentInformation'; -export type { TestCase } from './models/testCase'; -export type { TestGenSettings } from './models/testGenSettings'; -export type { Transformation } from './models/transformation'; -export type { TransformViaUrlRequest } from './models/transformViaUrlRequest'; -export type { UpdatePackageDeploymentInformation } from './models/updatePackageDeploymentInformation'; -export type { UpdateTemplatesPackageDeploymentInformation } from './models/updateTemplatesPackageDeploymentInformation'; -export type { UserCodeGeneration } from './models/userCodeGeneration'; -export type { ValidationException } from './models/validationException'; diff --git a/src/sdk/models/accept.ts b/src/sdk/models/accept.ts deleted file mode 100644 index d5c32a5d..00000000 --- a/src/sdk/models/accept.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { Schema, stringEnum } from '../schema'; - -/** - * Enum for Accept - */ -export enum Accept { - EnumApplicationjson = 'application/json', -} - -/** - * Schema for Accept - */ -export const acceptSchema: Schema = stringEnum(Accept); diff --git a/src/sdk/models/accept2.ts b/src/sdk/models/accept2.ts deleted file mode 100644 index eadaa464..00000000 --- a/src/sdk/models/accept2.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { Schema, stringEnum } from '../schema'; - -/** - * Enum for Accept2 - */ -export enum Accept2 { - EnumApplicationvndapimaticapiEntityfullv1Json = 'application/vnd.apimatic.apiEntity.full.v1+json', -} - -/** - * Schema for Accept2 - */ -export const accept2Schema: Schema = stringEnum(Accept2); diff --git a/src/sdk/models/accept3.ts b/src/sdk/models/accept3.ts deleted file mode 100644 index d626261e..00000000 --- a/src/sdk/models/accept3.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { Schema, stringEnum } from '../schema'; - -/** - * Enum for Accept3 - */ -export enum Accept3 { - EnumApplicationzip = 'application/zip', -} - -/** - * Schema for Accept3 - */ -export const accept3Schema: Schema = stringEnum(Accept3); diff --git a/src/sdk/models/apiEntity.ts b/src/sdk/models/apiEntity.ts deleted file mode 100644 index ee157d41..00000000 --- a/src/sdk/models/apiEntity.ts +++ /dev/null @@ -1,93 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - array, - boolean, - lazy, - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; -import { Authentication, authenticationSchema } from './authentication'; -import { CodeGenSettings, codeGenSettingsSchema } from './codeGenSettings'; -import { EndpointsGroup, endpointsGroupSchema } from './endpointsGroup'; -import { MetaData, metaDataSchema } from './metaData'; -import { - ServerConfiguration, - serverConfigurationSchema, -} from './serverConfiguration'; -import { TestGenSettings, testGenSettingsSchema } from './testGenSettings'; - -/** The API Entity Structure encapsulates all the details of an API Entity. An API entity is a unique API Version. */ -export interface ApiEntity { - /** Unique API Entity identifier */ - id: string; - /** Enrcypted API Entity Id */ - encryptedId: string; - /** API Integration Key. Obtain from API Card on Dashboard. */ - apiKey: string; - /** Unique API Group Identifier */ - apiGroupId: string; - /** Cover Image */ - imageUri: string; - /** Entity creation date */ - creationDate: string; - /** API Status (Deprecated) */ - mPublic: boolean; - /** API Entity Name */ - name: string; - /** Description of the API */ - description: string; - /** Entity Version Number */ - version: string; - /** Header Content */ - additionalHeaders: string[]; - /** This Structure encapsulates all details of API authentication. */ - authentication: Authentication; - /** APIMatic’s code generation engine has various code generation configurations to customise the behaviour and outlook across the generated SDKS. This structure encapsulates all settings for CodeGeneration. */ - codeGenSettings: CodeGenSettings; - /** This structure helps specify additional test configurations which affects how test cases are generated. */ - testGenSettings: TestGenSettings; - /** API Errors */ - errors: string[]; - /** Server configurations can be used to create multiple environments, multiple servers that can be used with specific endpoints and server URLs with template paramters. */ - serverConfiguration: ServerConfiguration; - /** API Endpoint Groups */ - endpointsGroup: EndpointsGroup[]; - metaData: MetaData; - additionalProperties?: Record; -} - -export const apiEntitySchema: Schema = typedExpandoObject( - { - id: ['id', string()], - encryptedId: ['encryptedId', string()], - apiKey: ['apiKey', string()], - apiGroupId: ['apiGroupId', string()], - imageUri: ['imageUri', string()], - creationDate: ['creationDate', string()], - mPublic: ['public', boolean()], - name: ['name', string()], - description: ['description', string()], - version: ['version', string()], - additionalHeaders: ['additionalHeaders', array(string())], - authentication: ['authentication', lazy(() => authenticationSchema)], - codeGenSettings: ['codeGenSettings', lazy(() => codeGenSettingsSchema)], - testGenSettings: ['testGenSettings', lazy(() => testGenSettingsSchema)], - errors: ['errors', array(string())], - serverConfiguration: [ - 'serverConfiguration', - lazy(() => serverConfigurationSchema), - ], - endpointsGroup: ['endpointsGroup', array(lazy(() => endpointsGroupSchema))], - metaData: ['metaData', lazy(() => metaDataSchema)], - }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/apiEntityCodeGeneration.ts b/src/sdk/models/apiEntityCodeGeneration.ts deleted file mode 100644 index 2cfba104..00000000 --- a/src/sdk/models/apiEntityCodeGeneration.ts +++ /dev/null @@ -1,54 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - boolean, - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; -import { Platforms, platformsSchema } from './platforms'; - -/** The Code Generation structure encapsulates all the the details of an SDK generation performed against an API Entity */ -export interface ApiEntityCodeGeneration { - /** Unique Code Generation Identifier */ - id: string; - /** The structure contains platforms that APIMatic CodeGen can generate SDKs and Docs in. */ - template: Platforms; - /** The generated SDK */ - generatedFile: string; - /** Generation Date and Time */ - generatedOn: string; - /** The md5 hash of the API Description */ - hashCode: string; - /** Generation Source */ - codeGenerationSource: string; - /** Generation Version */ - codeGenVersion: string; - /** Generation Status */ - success: boolean; - /** Unique API Entity Identifier */ - apiEntityId: string; - additionalProperties?: Record; -} - -export const apiEntityCodeGenerationSchema: Schema = typedExpandoObject( - { - id: ['id', string()], - template: ['template', platformsSchema], - generatedFile: ['generatedFile', string()], - generatedOn: ['generatedOn', string()], - hashCode: ['hashCode', string()], - codeGenerationSource: ['codeGenerationSource', string()], - codeGenVersion: ['codeGenVersion', string()], - success: ['success', boolean()], - apiEntityId: ['apiEntityId', string()], - }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/apiEntityDetailed.ts b/src/sdk/models/apiEntityDetailed.ts deleted file mode 100644 index 291c9225..00000000 --- a/src/sdk/models/apiEntityDetailed.ts +++ /dev/null @@ -1,101 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - array, - boolean, - lazy, - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; -import { Authentication, authenticationSchema } from './authentication'; -import { CodeGenSettings, codeGenSettingsSchema } from './codeGenSettings'; -import { CustomType, customTypeSchema } from './customType'; -import { Endpoint, endpointSchema } from './endpoint'; -import { EndpointsGroup, endpointsGroupSchema } from './endpointsGroup'; -import { MetaData, metaDataSchema } from './metaData'; -import { - ServerConfiguration, - serverConfigurationSchema, -} from './serverConfiguration'; -import { TestGenSettings, testGenSettingsSchema } from './testGenSettings'; - -/** The structure collects API Endpoints and Custom Types to display detailed information on API Entity. */ -export interface ApiEntityDetailed { - /** Unique API Entity identifier */ - id: string; - /** Enrcypted API Entity Id */ - encryptedId: string; - /** API Integration Key. Obtain from API Card on Dashboard. */ - apiKey: string; - /** Unique API Group Identifier */ - apiGroupId: string; - /** Cover Image */ - imageUri: string; - /** Entity creation date */ - creationDate: string; - /** API Status (Deprecated) */ - mPublic: boolean; - /** API Entity Name */ - name: string; - /** Description of the API */ - description: string; - /** Entity Version Number */ - version: string; - /** Header Content */ - additionalHeaders: string[]; - /** This Structure encapsulates all details of API authentication. */ - authentication: Authentication; - /** APIMatic’s code generation engine has various code generation configurations to customise the behaviour and outlook across the generated SDKS. This structure encapsulates all settings for CodeGeneration. */ - codeGenSettings: CodeGenSettings; - /** This structure helps specify additional test configurations which affects how test cases are generated. */ - testGenSettings: TestGenSettings; - /** API Errors */ - errors: string[]; - /** Server configurations can be used to create multiple environments, multiple servers that can be used with specific endpoints and server URLs with template paramters. */ - serverConfiguration: ServerConfiguration; - /** API Endpoint Groups */ - endpointsGroup: EndpointsGroup[]; - metaData: MetaData; - /** API Endpoints */ - endpoints: Endpoint[]; - /** Complex Custom Model Types */ - customTypes: CustomType[]; - additionalProperties?: Record; -} - -export const apiEntityDetailedSchema: Schema = typedExpandoObject( - { - id: ['id', string()], - encryptedId: ['encryptedId', string()], - apiKey: ['apiKey', string()], - apiGroupId: ['apiGroupId', string()], - imageUri: ['imageUri', string()], - creationDate: ['creationDate', string()], - mPublic: ['public', boolean()], - name: ['name', string()], - description: ['description', string()], - version: ['version', string()], - additionalHeaders: ['additionalHeaders', array(string())], - authentication: ['authentication', lazy(() => authenticationSchema)], - codeGenSettings: ['codeGenSettings', lazy(() => codeGenSettingsSchema)], - testGenSettings: ['testGenSettings', lazy(() => testGenSettingsSchema)], - errors: ['errors', array(string())], - serverConfiguration: [ - 'serverConfiguration', - lazy(() => serverConfigurationSchema), - ], - endpointsGroup: ['endpointsGroup', array(lazy(() => endpointsGroupSchema))], - metaData: ['metaData', lazy(() => metaDataSchema)], - endpoints: ['endpoints', array(lazy(() => endpointSchema))], - customTypes: ['customTypes', array(lazy(() => customTypeSchema))], - }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/apiValidationSummary.ts b/src/sdk/models/apiValidationSummary.ts deleted file mode 100644 index 2a0fdd32..00000000 --- a/src/sdk/models/apiValidationSummary.ts +++ /dev/null @@ -1,34 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - array, - boolean, - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; - -export interface ApiValidationSummary { - success: boolean; - errors: string[]; - warnings: string[]; - messages: string[]; - additionalProperties?: Record; -} - -export const apiValidationSummarySchema: Schema = typedExpandoObject( - { - success: ['success', boolean()], - errors: ['errors', array(string())], - warnings: ['warnings', array(string())], - messages: ['messages', array(string())], - }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/attributes.ts b/src/sdk/models/attributes.ts deleted file mode 100644 index 89072633..00000000 --- a/src/sdk/models/attributes.ts +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; - -/** The structure contain attribute details of a parameter type. */ -export interface Attributes { - /** Unique Attribute Identifier */ - id: string; - additionalProperties?: Record; -} - -export const attributesSchema: Schema = typedExpandoObject( - { id: ['id', string()] }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/authScope.ts b/src/sdk/models/authScope.ts deleted file mode 100644 index 11fcd88c..00000000 --- a/src/sdk/models/authScope.ts +++ /dev/null @@ -1,36 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; - -export interface AuthScope { - /** Scope Id */ - id: string; - /** Scope Name */ - name: string; - /** Scope Value */ - value: string; - /** Scope Description */ - description: string; - additionalProperties?: Record; -} - -export const authScopeSchema: Schema = typedExpandoObject( - { - id: ['id', string()], - name: ['name', string()], - value: ['value', string()], - description: ['description', string()], - }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/authentication.ts b/src/sdk/models/authentication.ts deleted file mode 100644 index 26cde7c0..00000000 --- a/src/sdk/models/authentication.ts +++ /dev/null @@ -1,49 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - array, - lazy, - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; -import { AuthScope, authScopeSchema } from './authScope'; - -/** This Structure encapsulates all details of API authentication. */ -export interface Authentication { - /** Auth Id */ - id: string; - /** Auth Type */ - authType: string; - /** Scope */ - scopes: AuthScope[]; - /** Auth Params */ - parameters: string[]; - /** Auth Scopes */ - authScopes: string[]; - /** Auth Grant Types */ - authGrantTypes: string[]; - /** Paramater Formats */ - paramFormats?: unknown; - additionalProperties?: Record; -} - -export const authenticationSchema: Schema = typedExpandoObject( - { - id: ['id', string()], - authType: ['authType', string()], - scopes: ['scopes', array(lazy(() => authScopeSchema))], - parameters: ['parameters', array(string())], - authScopes: ['authScopes', array(string())], - authGrantTypes: ['authGrantTypes', array(string())], - paramFormats: ['paramFormats', optional(unknown())], - }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/authorIdentifiers.ts b/src/sdk/models/authorIdentifiers.ts deleted file mode 100644 index ce94755d..00000000 --- a/src/sdk/models/authorIdentifiers.ts +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; - -export interface AuthorIdentifiers { - email: string; - userName: string; - additionalProperties?: Record; -} - -export const authorIdentifiersSchema: Schema = typedExpandoObject( - { email: ['Email', string()], userName: ['UserName', string()] }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/codeGenSettings.ts b/src/sdk/models/codeGenSettings.ts deleted file mode 100644 index 82d189e8..00000000 --- a/src/sdk/models/codeGenSettings.ts +++ /dev/null @@ -1,183 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - array, - boolean, - number, - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; - -/** APIMatic’s code generation engine has various code generation configurations to customise the behaviour and outlook across the generated SDKS. This structure encapsulates all settings for CodeGeneration. */ -export interface CodeGenSettings { - /** Generate asynchronous code for API Calls and deserialization */ - isAsync: boolean; - /** Use HTTP Method prefixes for endpoint wrappers */ - useHttpMethodPrefix: boolean; - /** Use "Model" postfixes for generated class names */ - useModelPrefix: boolean; - /** Use "Enum" postfixes for enumerated types */ - useEnumPrefix: boolean; - useConstructorsForConfig: boolean; - /** Use common SDK library to reduce code duplication */ - useCommonSdkLibrary: boolean; - /** Generates interfaces for controller classes in the generated SDKs */ - generateInterfaces: boolean; - /** Generate Appveyor configuration file */ - generateAppveyorConfig: boolean; - /** Generate CircleCI configuration file */ - generateCircleConfig: boolean; - /** Generate Jenkins configuration file */ - generateJenkinsConfig: boolean; - /** Generate Travis CI configuration file */ - generateTravisConfig: boolean; - /** Use "AndroidManifest.xml" for config variables in Android */ - androidUseAppManifest: boolean; - /** Use "App-Info.plist" file for config variables in iOS */ - iosUseAppInfoPlist: boolean; - /** Generate "CoreData" schema and entity classes in iOS? */ - iosGenerateCoreData: boolean; - /** Enable runscope */ - runscopeEnabled: boolean; - /** Collect Parameters as arrays */ - collapseParamsToArray: boolean; - /** Attempts to preserve parameter order for endpoints */ - preserveParameterOrder: boolean; - /** Append JSON/XML accept and content-type headers */ - appendContentHeaders: boolean; - modelSerializationIsJson: boolean; - /** Return a null value on HTTP 404 */ - nullify404: boolean; - /** Validate required parameters to be Not Null */ - validateRequiredParameters: boolean; - /** Allow models to have additional runtime properties */ - enableAdditionalModelProperties: boolean; - javaUsePropertiesConfig: boolean; - /** Use "Controller" postfixes for generated controller classes */ - useControllerPrefix: boolean; - /** Use Exception Prefixes */ - useExceptionPrefix: boolean; - /** Parameter Array format with index or without */ - parameterArrayFormat: string; - /** Configure the HTTP client for Objective C */ - objCHttpClient: string; - /** Configure the HTTP client for C# */ - cSharpHttpClient: string; - /** Configure the HTTP client for Android */ - androidHttpClient: string; - /** Configure the HTTP client for node */ - nodeHttpClient: string; - /** Configure the HTTP client for PHP */ - phpHttpClient: string; - bodySerialization: number; - /** Specify type of array serialisation */ - arraySerialization: string; - /** This option specifies the duration (in seconds) after which requests would timeout */ - timeout: number; - /** Enabling this generates code in the SDKs for logging events in the API cycle using a library. */ - enableLogging: boolean; - /** Enabling caching of responses (not available in all languages) */ - enableHttpCache: boolean; - /** Specify number of retries */ - retries: number; - /** Specify retry interval in case of failures */ - retryInterval: number; - /** Generate advanced read me files */ - generateAdvancedDocs: boolean; - /** Store Timezone information for the generation */ - storeTimezoneInformation: boolean; - /** Use "Controller" postfixes for generated controller classes */ - enablePhpComposerVersionString: boolean; - /** Specify Security Protocols */ - securityProtocols: string[]; - /** Use underscores before and after numbers for underscore case */ - underscoreNumbers: boolean; - /** Allow usage of a Singleton Pattern */ - useSingletonPattern: boolean; - /** Files/dependencies used for linting are not generated if this option is enabled */ - disableLinting: boolean; - /** Create a configuration option in SDKs to optionally skip certificate verification when establishing HTTPS connections. */ - allowSkippingSslCertVerification: boolean; - /** Apply Customisations */ - applyCustomizations: string[]; - /** Enabling this will stop splitting of words when converting identifiers from API specification to language-specific identifiers. */ - doNotSplitWords: string[]; - /** Sorts resources such as endpoints, endpoint groups and models in generated documentation */ - sortResources: boolean; - /** Enable a global user agent */ - enableGlobalUserAgent: boolean; - additionalProperties?: Record; -} - -export const codeGenSettingsSchema: Schema = typedExpandoObject( - { - isAsync: ['isAsync', boolean()], - useHttpMethodPrefix: ['useHttpMethodPrefix', boolean()], - useModelPrefix: ['useModelPrefix', boolean()], - useEnumPrefix: ['useEnumPrefix', boolean()], - useConstructorsForConfig: ['useConstructorsForConfig', boolean()], - useCommonSdkLibrary: ['useCommonSdkLibrary', boolean()], - generateInterfaces: ['generateInterfaces', boolean()], - generateAppveyorConfig: ['generateAppveyorConfig', boolean()], - generateCircleConfig: ['generateCircleConfig', boolean()], - generateJenkinsConfig: ['generateJenkinsConfig', boolean()], - generateTravisConfig: ['generateTravisConfig', boolean()], - androidUseAppManifest: ['androidUseAppManifest', boolean()], - iosUseAppInfoPlist: ['iosUseAppInfoPlist', boolean()], - iosGenerateCoreData: ['iosGenerateCoreData', boolean()], - runscopeEnabled: ['runscopeEnabled', boolean()], - collapseParamsToArray: ['collapseParamsToArray', boolean()], - preserveParameterOrder: ['preserveParameterOrder', boolean()], - appendContentHeaders: ['appendContentHeaders', boolean()], - modelSerializationIsJson: ['modelSerializationIsJSON', boolean()], - nullify404: ['nullify404', boolean()], - validateRequiredParameters: ['validateRequiredParameters', boolean()], - enableAdditionalModelProperties: [ - 'enableAdditionalModelProperties', - boolean(), - ], - javaUsePropertiesConfig: ['javaUsePropertiesConfig', boolean()], - useControllerPrefix: ['useControllerPrefix', boolean()], - useExceptionPrefix: ['useExceptionPrefix', boolean()], - parameterArrayFormat: ['parameterArrayFormat', string()], - objCHttpClient: ['objCHttpClient', string()], - cSharpHttpClient: ['cSharpHttpClient', string()], - androidHttpClient: ['androidHttpClient', string()], - nodeHttpClient: ['nodeHttpClient', string()], - phpHttpClient: ['phpHttpClient', string()], - bodySerialization: ['bodySerialization', number()], - arraySerialization: ['arraySerialization', string()], - timeout: ['timeout', number()], - enableLogging: ['enableLogging', boolean()], - enableHttpCache: ['enableHttpCache', boolean()], - retries: ['retries', number()], - retryInterval: ['retryInterval', number()], - generateAdvancedDocs: ['generateAdvancedDocs', boolean()], - storeTimezoneInformation: ['storeTimezoneInformation', boolean()], - enablePhpComposerVersionString: [ - 'enablePhpComposerVersionString', - boolean(), - ], - securityProtocols: ['securityProtocols', array(string())], - underscoreNumbers: ['underscoreNumbers', boolean()], - useSingletonPattern: ['useSingletonPattern', boolean()], - disableLinting: ['disableLinting', boolean()], - allowSkippingSslCertVerification: [ - 'allowSkippingSSLCertVerification', - boolean(), - ], - applyCustomizations: ['applyCustomizations', array(string())], - doNotSplitWords: ['doNotSplitWords', array(string())], - sortResources: ['sortResources', boolean()], - enableGlobalUserAgent: ['enableGlobalUserAgent', boolean()], - }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/codeGeneration.ts b/src/sdk/models/codeGeneration.ts deleted file mode 100644 index a221c75b..00000000 --- a/src/sdk/models/codeGeneration.ts +++ /dev/null @@ -1,51 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - boolean, - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; -import { Platforms, platformsSchema } from './platforms'; - -/** The Code Generation structure encapsulates all the the details of an SDK generation performed against an API Entity */ -export interface CodeGeneration { - /** Unique Code Generation Identifier */ - id: string; - /** The structure contains platforms that APIMatic CodeGen can generate SDKs and Docs in. */ - template: Platforms; - /** The generated SDK */ - generatedFile: string; - /** Generation Date and Time */ - generatedOn: string; - /** The md5 hash of the API Description */ - hashCode: string; - /** Generation Source */ - codeGenerationSource: string; - /** Generation Version */ - codeGenVersion: string; - /** Generation Status */ - success: boolean; - additionalProperties?: Record; -} - -export const codeGenerationSchema: Schema = typedExpandoObject( - { - id: ['id', string()], - template: ['template', platformsSchema], - generatedFile: ['generatedFile', string()], - generatedOn: ['generatedOn', string()], - hashCode: ['hashCode', string()], - codeGenerationSource: ['codeGenerationSource', string()], - codeGenVersion: ['codeGenVersion', string()], - success: ['success', boolean()], - }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/contentType.ts b/src/sdk/models/contentType.ts deleted file mode 100644 index 9428bc06..00000000 --- a/src/sdk/models/contentType.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { Schema, stringEnum } from '../schema'; - -/** - * Enum for ContentType - */ -export enum ContentType { - EnumMultipartformdata = 'multipart/form-data', -} - -/** - * Schema for ContentType - */ -export const contentTypeSchema: Schema = stringEnum(ContentType); diff --git a/src/sdk/models/csnetstandardlib.ts b/src/sdk/models/csnetstandardlib.ts deleted file mode 100644 index f9798efe..00000000 --- a/src/sdk/models/csnetstandardlib.ts +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; -import { Id, idSchema } from './id'; -import { Link, linkSchema } from './link'; - -/** This structure contains all details that goes into package deployment. */ -export interface Csnetstandardlib { - /** Unique package identifier */ - id?: Id; - /** Package Repository as per platform */ - packageRepository: string; - /** Package Name */ - packageName: string; - version: string; - /** Any additional platform specific deployment detail */ - additionalDeploymentInformation?: unknown; - /** Link of deployed package */ - link?: Link; - additionalProperties?: Record; -} - -export const csnetstandardlibSchema: Schema = typedExpandoObject( - { - id: ['id', optional(idSchema)], - packageRepository: ['packageRepository', string()], - packageName: ['packageName', string()], - version: ['version', string()], - additionalDeploymentInformation: [ - 'additionalDeploymentInformation', - optional(unknown()), - ], - link: ['link', optional(linkSchema)], - }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/customType.ts b/src/sdk/models/customType.ts deleted file mode 100644 index e52056e7..00000000 --- a/src/sdk/models/customType.ts +++ /dev/null @@ -1,50 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - array, - lazy, - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; -import { Field, fieldSchema } from './field'; -import { - ImplementationType, - implementationTypeSchema, -} from './implementationType'; - -/** This structure helps creates a new complex model type. */ -export interface CustomType { - /** Unique Type Identifier */ - id: string; - /** Unique API Entity identifier */ - apiId: string; - /** Custom Type Name */ - name: string; - /** Data Format */ - baseType: string; - /** The structure helps describes the nature of implementation of a custom model. A model can be of 3 types. */ - implementationType: ImplementationType; - /** Type Fields */ - fields: Field[]; - additionalProperties?: Record; -} - -export const customTypeSchema: Schema = typedExpandoObject( - { - id: ['id', string()], - apiId: ['apiId', string()], - name: ['name', string()], - baseType: ['baseType', string()], - implementationType: ['implementationType', implementationTypeSchema], - fields: ['fields', array(lazy(() => fieldSchema))], - }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/docsValidationSummary.ts b/src/sdk/models/docsValidationSummary.ts deleted file mode 100644 index 8d364fe8..00000000 --- a/src/sdk/models/docsValidationSummary.ts +++ /dev/null @@ -1,34 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - array, - boolean, - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; - -export interface DocsValidationSummary { - success: boolean; - errors: string[]; - warnings: string[]; - messages: string[]; - additionalProperties?: Record; -} - -export const docsValidationSummarySchema: Schema = typedExpandoObject( - { - success: ['success', boolean()], - errors: ['errors', array(string())], - warnings: ['warnings', array(string())], - messages: ['messages', array(string())], - }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/endpoint.ts b/src/sdk/models/endpoint.ts deleted file mode 100644 index e8ed9c70..00000000 --- a/src/sdk/models/endpoint.ts +++ /dev/null @@ -1,79 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - array, - boolean, - lazy, - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; -import { Parameter, parameterSchema } from './parameter'; -import { Response, responseSchema } from './response'; -import { TestCase, testCaseSchema } from './testCase'; - -/** This structure encapsulates all the attributes of an API Endpoint. */ -export interface Endpoint { - /** Unique Endpoint Identifier */ - id: string; - /** Unique API Identifier */ - apiId: string; - /** Endpoint Name */ - name: string; - /** Endpoint Method */ - httpMethod: string; - /** The Group Endpoint belongs to */ - group: string; - /** If Endpoint warrants authentication or not */ - skipAuthentication: boolean; - /** The Endpoint route */ - route: string; - /** The structure encapsulates all details of a request response */ - response: Response; - /** Enabling this option allows optional query parameters */ - hasOptionalQueryParams: boolean; - /** Enabling this option allows optional field parameters */ - hasOptionalFieldParams: boolean; - /** Enabling this option collects API endpoint parameters as collections */ - collectParameters: boolean; - /** Enabling this option allows wrapping of body in objects */ - wrapBodyInObject: boolean; - /** What scopes apply to an Endpoint */ - requiredScopes: string[]; - /** Endpoint Paramaters */ - parameters: Parameter[]; - /** Errors that Endpoint may output */ - errors: unknown[]; - /** Test Cases associated with Endpoint */ - testCases: TestCase[]; - additionalProperties?: Record; -} - -export const endpointSchema: Schema = typedExpandoObject( - { - id: ['id', string()], - apiId: ['apiId', string()], - name: ['name', string()], - httpMethod: ['httpMethod', string()], - group: ['group', string()], - skipAuthentication: ['skipAuthentication', boolean()], - route: ['route', string()], - response: ['response', lazy(() => responseSchema)], - hasOptionalQueryParams: ['hasOptionalQueryParams', boolean()], - hasOptionalFieldParams: ['hasOptionalFieldParams', boolean()], - collectParameters: ['collectParameters', boolean()], - wrapBodyInObject: ['wrapBodyInObject', boolean()], - requiredScopes: ['requiredScopes', array(string())], - parameters: ['parameters', array(lazy(() => parameterSchema))], - errors: ['errors', array(unknown())], - testCases: ['testCases', array(lazy(() => testCaseSchema))], - }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/endpointsGroup.ts b/src/sdk/models/endpointsGroup.ts deleted file mode 100644 index 8027388e..00000000 --- a/src/sdk/models/endpointsGroup.ts +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; - -/** This structure encapsulates all the attributes of an API Endpoints Group. */ -export interface EndpointsGroup { - name: string; - description: string; - additionalProperties?: Record; -} - -export const endpointsGroupSchema: Schema = typedExpandoObject( - { name: ['name', string()], description: ['description', string()] }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/exportFormats.ts b/src/sdk/models/exportFormats.ts deleted file mode 100644 index 3b8ed252..00000000 --- a/src/sdk/models/exportFormats.ts +++ /dev/null @@ -1,34 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { Schema, stringEnum } from '../schema'; - -/** - * Enum for ExportFormats - */ -export enum ExportFormats { - Apimatic = 'APIMATIC', - Wadl2009 = 'WADL2009', - Wsdl = 'WSDL', - Swagger10 = 'Swagger10', - Swagger20 = 'Swagger20', - Swaggeryaml = 'SwaggerYaml', - Oas3 = 'OpenApi3Json', - Openapi3Yaml = 'OpenApi3Yaml', - Apiblueprint = 'APIBluePrint', - Raml = 'RAML', - Raml10 = 'RAML10', - Postman10 = 'Postman10', - Postman20 = 'Postman20', - Graphqlschema = 'GraphQlSchema', -} - -/** - * Schema for ExportFormats - */ -export const exportFormatsSchema: Schema = stringEnum( - ExportFormats -); diff --git a/src/sdk/models/field.ts b/src/sdk/models/field.ts deleted file mode 100644 index decb214f..00000000 --- a/src/sdk/models/field.ts +++ /dev/null @@ -1,64 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - boolean, - lazy, - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; -import { Attributes, attributesSchema } from './attributes'; - -/** This structure encapsulates all details of a parameter. */ -export interface Field { - /** If parameter is optional */ - optional: boolean; - /** Type of Parameter */ - type: string; - /** IF Parameter is constant */ - constant: boolean; - /** If Param is collected as array */ - isArray: boolean; - isStream: boolean; - isAttribute: boolean; - isMap: boolean; - /** The structure contain attribute details of a parameter type. */ - attributes: Attributes; - /** If Parameter is nullable */ - nullable: boolean; - /** Unique Parameter identifier */ - id: string; - /** Parameter Name */ - name: string; - /** Parameter Description */ - description: string; - /** Default Values of a Parameter */ - defaultValue: string; - additionalProperties?: Record; -} - -export const fieldSchema: Schema = typedExpandoObject( - { - optional: ['optional', boolean()], - type: ['type', string()], - constant: ['constant', boolean()], - isArray: ['isArray', boolean()], - isStream: ['isStream', boolean()], - isAttribute: ['isAttribute', boolean()], - isMap: ['isMap', boolean()], - attributes: ['attributes', lazy(() => attributesSchema)], - nullable: ['nullable', boolean()], - id: ['id', string()], - name: ['name', string()], - description: ['description', string()], - defaultValue: ['defaultValue', string()], - }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/generateSdkViaUrlRequest.ts b/src/sdk/models/generateSdkViaUrlRequest.ts deleted file mode 100644 index 2534200b..00000000 --- a/src/sdk/models/generateSdkViaUrlRequest.ts +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; -import { Platforms, platformsSchema } from './platforms'; - -export interface GenerateSdkViaUrlRequest { - /** The URL for the API specification file.

**Note:** This URL should be publicly accessible. */ - url: string; - /** The structure contains platforms that APIMatic CodeGen can generate SDKs and Docs in. */ - template: Platforms; - additionalProperties?: Record; -} - -export const generateSdkViaUrlRequestSchema: Schema = typedExpandoObject( - { url: ['url', string()], template: ['template', platformsSchema] }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/id.ts b/src/sdk/models/id.ts deleted file mode 100644 index 79109083..00000000 --- a/src/sdk/models/id.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { Schema, stringEnum } from '../schema'; - -/** - * Enum for Id - */ -export enum Id { - Enum5Dcd2B5893C3E31A206F30C4 = '5dcd2b5893c3e31a206f30c4', -} - -/** - * Schema for Id - */ -export const idSchema: Schema = stringEnum(Id); diff --git a/src/sdk/models/implementationType.ts b/src/sdk/models/implementationType.ts deleted file mode 100644 index 75d89bcd..00000000 --- a/src/sdk/models/implementationType.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { Schema, stringEnum } from '../schema'; - -/** - * Enum for ImplementationType - */ -export enum ImplementationType { - Structure = 'Structure', - Enumeration = 'Enumeration', - Exception = 'Exception', -} - -/** - * Schema for ImplementationType - */ -export const implementationTypeSchema: Schema = stringEnum( - ImplementationType -); diff --git a/src/sdk/models/importApiVersionViaUrlRequest.ts b/src/sdk/models/importApiVersionViaUrlRequest.ts deleted file mode 100644 index 5b47808e..00000000 --- a/src/sdk/models/importApiVersionViaUrlRequest.ts +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; - -/** This structure contains details of importing a new API Version */ -export interface ImportApiVersionViaUrlRequest { - /** The version number with which the new API version will be imported. This version number will override the version specified in the API specification file.
APIMatic recommends versioning the API with the [versioning scheme](https://docs.apimatic.io/define-apis/basic-settings/#version) documented in the docs. */ - versionOverride: string; - /** The URL for the API specification file.

**Note:** This URL should be publicly accessible. */ - url: string; - additionalProperties?: Record; -} - -export const importApiVersionViaUrlRequestSchema: Schema = typedExpandoObject( - { versionOverride: ['version_override', string()], url: ['url', string()] }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/importApiViaUrlRequest.ts b/src/sdk/models/importApiViaUrlRequest.ts deleted file mode 100644 index 98c1c897..00000000 --- a/src/sdk/models/importApiViaUrlRequest.ts +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; - -/** Contains a url field to allow Apis to be imported via url */ -export interface ImportApiViaUrlRequest { - /** The URL for the API specification file.

**Note:** This URL should be publicly accessible. */ - url: string; - additionalProperties?: Record; -} - -export const importApiViaUrlRequestSchema: Schema = typedExpandoObject( - { url: ['url', string()] }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/importValidationSummary.ts b/src/sdk/models/importValidationSummary.ts deleted file mode 100644 index 2df24359..00000000 --- a/src/sdk/models/importValidationSummary.ts +++ /dev/null @@ -1,34 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - array, - boolean, - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; - -export interface ImportValidationSummary { - success: boolean; - errors: string[]; - warnings: string[]; - messages: string[]; - additionalProperties?: Record; -} - -export const importValidationSummarySchema: Schema = typedExpandoObject( - { - success: ['success', boolean()], - errors: ['errors', array(string())], - warnings: ['warnings', array(string())], - messages: ['messages', array(string())], - }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/inplaceImportApiViaUrlRequest.ts b/src/sdk/models/inplaceImportApiViaUrlRequest.ts deleted file mode 100644 index 6327fd64..00000000 --- a/src/sdk/models/inplaceImportApiViaUrlRequest.ts +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; - -/** Contains a url field to allow Apis to be imported via url */ -export interface InplaceImportApiViaUrlRequest { - /** The URL for the API specification file.

**Note:** This URL should be publicly accessible. */ - url: string; - additionalProperties?: Record; -} - -export const inplaceImportApiViaUrlRequestSchema: Schema = typedExpandoObject( - { url: ['url', string()] }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/inputParameter.ts b/src/sdk/models/inputParameter.ts deleted file mode 100644 index 14c795cb..00000000 --- a/src/sdk/models/inputParameter.ts +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - boolean, - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; - -/** This structure helps specify details of an input parameter. */ -export interface InputParameter { - /** If parameter is null */ - isNull: boolean; - /** Unique parameter identifier for each endpoint */ - endpointInputPrameterId: string; - /** Unique parameter identifier */ - id: string; - /** Parameter Name */ - name: string; - /** Parameter Value */ - value: string; - additionalProperties?: Record; -} - -export const inputParameterSchema: Schema = typedExpandoObject( - { - isNull: ['isNull', boolean()], - endpointInputPrameterId: ['endpointInputPrameterId', string()], - id: ['id', string()], - name: ['name', string()], - value: ['value', string()], - }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/link.ts b/src/sdk/models/link.ts deleted file mode 100644 index 6a57b1be..00000000 --- a/src/sdk/models/link.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { Schema, stringEnum } from '../schema'; - -/** - * Enum for Link - */ -export enum Link { - EnumHttpswwwnugetorgpackagesmyPackage111 = 'https://www.nuget.org/packages/myPackage/1.1.1', -} - -/** - * Schema for Link - */ -export const linkSchema: Schema = stringEnum(Link); diff --git a/src/sdk/models/links.ts b/src/sdk/models/links.ts deleted file mode 100644 index ee50d3cc..00000000 --- a/src/sdk/models/links.ts +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; - -export interface Links { - status: string; - download: string; - additionalProperties?: Record; -} - -export const linksSchema: Schema = typedExpandoObject( - { status: ['status', string()], download: ['download', string()] }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/mEnvironment.ts b/src/sdk/models/mEnvironment.ts deleted file mode 100644 index 45829dca..00000000 --- a/src/sdk/models/mEnvironment.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - array, - lazy, - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; -import { Server, serverSchema } from './server'; - -/** An environment consists of a set of servers with base URL values. The environment can be changed programatically allowing rapid switching between different environments. For example the user can specify a Production and Testing Environment and switch between them in the generated SDK. */ -export interface MEnvironment { - /** Unique Environment Identifier */ - id: string; - /** Environment Name */ - name: string; - /** The user can specify multiple servers within an environment. A server comprises of a name and a url. */ - servers: Server[]; - additionalProperties?: Record; -} - -export const mEnvironmentSchema: Schema = typedExpandoObject( - { - id: ['id', string()], - name: ['name', string()], - servers: ['servers', array(lazy(() => serverSchema))], - }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/metaData.ts b/src/sdk/models/metaData.ts deleted file mode 100644 index 3a2d5c7e..00000000 --- a/src/sdk/models/metaData.ts +++ /dev/null @@ -1,45 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { lazy, optional, Schema, typedExpandoObject, unknown } from '../schema'; -import { - ApiValidationSummary, - apiValidationSummarySchema, -} from './apiValidationSummary'; -import { - DocsValidationSummary, - docsValidationSummarySchema, -} from './docsValidationSummary'; -import { - ImportValidationSummary, - importValidationSummarySchema, -} from './importValidationSummary'; - -export interface MetaData { - importValidationSummary: ImportValidationSummary; - apiValidationSummary: ApiValidationSummary; - docsValidationSummary: DocsValidationSummary; - additionalProperties?: Record; -} - -export const metaDataSchema: Schema = typedExpandoObject( - { - importValidationSummary: [ - 'importValidationSummary', - lazy(() => importValidationSummarySchema), - ], - apiValidationSummary: [ - 'apiValidationSummary', - lazy(() => apiValidationSummarySchema), - ], - docsValidationSummary: [ - 'docsValidationSummary', - lazy(() => docsValidationSummarySchema), - ], - }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/packageDeploymentInformation.ts b/src/sdk/models/packageDeploymentInformation.ts deleted file mode 100644 index 812cb528..00000000 --- a/src/sdk/models/packageDeploymentInformation.ts +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - lazy, - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; -import { - TemplatesPackageDeploymentInformation, - templatesPackageDeploymentInformationSchema, -} from './templatesPackageDeploymentInformation'; - -/** The structure contains Package Deployment Information along with Id. */ -export interface PackageDeploymentInformation { - /** Package Deployment Identifier */ - id: string; - /** This structure encapsulates all package deployment details. */ - templatesPackageDeploymentInformation: TemplatesPackageDeploymentInformation; - additionalProperties?: Record; -} - -export const packageDeploymentInformationSchema: Schema = typedExpandoObject( - { - id: ['id', string()], - templatesPackageDeploymentInformation: [ - 'templatesPackageDeploymentInformation', - lazy(() => templatesPackageDeploymentInformationSchema), - ], - }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/packageRepositories.ts b/src/sdk/models/packageRepositories.ts deleted file mode 100644 index 267b4efa..00000000 --- a/src/sdk/models/packageRepositories.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { Schema, stringEnum } from '../schema'; - -/** - * Enum for PackageRepositories - */ -export enum PackageRepositories { - Npm = 'Npm', - PyPi = 'PyPI', - RubyGems = 'RubyGems', -} - -/** - * Schema for PackageRepositories - */ -export const packageRepositoriesSchema: Schema = stringEnum( - PackageRepositories -); diff --git a/src/sdk/models/parameter.ts b/src/sdk/models/parameter.ts deleted file mode 100644 index fc9466b1..00000000 --- a/src/sdk/models/parameter.ts +++ /dev/null @@ -1,67 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - boolean, - lazy, - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; -import { Attributes, attributesSchema } from './attributes'; - -/** Parameters are options passed with the endpoint */ -export interface Parameter { - /** If parameter is optional */ - optional: boolean; - /** Type of Parameter */ - type: string; - /** IF Parameter is constant */ - constant: boolean; - /** If Param is collected as array */ - isArray: boolean; - isStream: boolean; - isAttribute: boolean; - isMap: boolean; - /** The structure contain attribute details of a parameter type. */ - attributes: Attributes; - /** If Parameter is nullable */ - nullable: boolean; - /** Unique Parameter identifier */ - id: string; - /** Parameter Name */ - name: string; - /** Parameter Description */ - description: string; - /** Default Values of a Parameter */ - defaultValue: string; - /** Specify Parameter Format */ - paramFormat: string; - additionalProperties?: Record; -} - -export const parameterSchema: Schema = typedExpandoObject( - { - optional: ['optional', boolean()], - type: ['type', string()], - constant: ['constant', boolean()], - isArray: ['isArray', boolean()], - isStream: ['isStream', boolean()], - isAttribute: ['isAttribute', boolean()], - isMap: ['isMap', boolean()], - attributes: ['attributes', lazy(() => attributesSchema)], - nullable: ['nullable', boolean()], - id: ['id', string()], - name: ['name', string()], - description: ['description', string()], - defaultValue: ['defaultValue', string()], - paramFormat: ['ParamFormat', string()], - }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/platforms.ts b/src/sdk/models/platforms.ts deleted file mode 100644 index d51f9fb7..00000000 --- a/src/sdk/models/platforms.ts +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { Schema, stringEnum } from '../schema'; - -/** - * Enum for Platforms - */ -export enum Platforms { - CsNetStandardLib = 'CS_NET_STANDARD_LIB', - JavaEclipseJreLib = 'JAVA_ECLIPSE_JRE_LIB', - PhpGenericLibV2 = 'PHP_GENERIC_LIB_V2', - PythonGenericLib = 'PYTHON_GENERIC_LIB', - RubyGenericLib = 'RUBY_GENERIC_LIB', - TsGenericLib = 'TS_GENERIC_LIB', - GoGenericLib = 'GO_GENERIC_LIB', -} - -/** - * Schema for Platforms - */ -export const platformsSchema: Schema = stringEnum(Platforms); diff --git a/src/sdk/models/portalGenerationAsyncResponse.ts b/src/sdk/models/portalGenerationAsyncResponse.ts deleted file mode 100644 index b90808c2..00000000 --- a/src/sdk/models/portalGenerationAsyncResponse.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { lazy, object, Schema, string } from '../schema'; -import { Links, linksSchema } from './links'; - -export interface PortalGenerationAsyncResponse { - id: string; - links: Links; -} - -export const portalGenerationAsyncResponseSchema: Schema = object( - { id: ['id', string()], links: ['links', lazy(() => linksSchema)] } -); diff --git a/src/sdk/models/portalGenerationStatusResponse.ts b/src/sdk/models/portalGenerationStatusResponse.ts deleted file mode 100644 index 1b3cc9fb..00000000 --- a/src/sdk/models/portalGenerationStatusResponse.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { object, Schema } from '../schema'; -import { Status, statusSchema } from './status'; - -export interface PortalGenerationStatusResponse { - status: Status; -} - -export const portalGenerationStatusResponseSchema: Schema = object( - { status: ['status', statusSchema] } -); diff --git a/src/sdk/models/publishPackageInput.ts b/src/sdk/models/publishPackageInput.ts deleted file mode 100644 index 102ce384..00000000 --- a/src/sdk/models/publishPackageInput.ts +++ /dev/null @@ -1,43 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; -import { - PackageRepositories, - packageRepositoriesSchema, -} from './packageRepositories'; -import { Platforms, platformsSchema } from './platforms'; - -export interface PublishPackageInput { - packageRepository: PackageRepositories; - /** The structure contains platforms that APIMatic CodeGen can generate SDKs and Docs in. */ - template: Platforms; - packageName: string; - version: string; - additionalDeploymentInformation?: unknown; - additionalProperties?: Record; -} - -export const publishPackageInputSchema: Schema = typedExpandoObject( - { - packageRepository: ['packageRepository', packageRepositoriesSchema], - template: ['template', platformsSchema], - packageName: ['packageName', string()], - version: ['version', string()], - additionalDeploymentInformation: [ - 'additionalDeploymentInformation', - optional(unknown()), - ], - }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/publishedPackage.ts b/src/sdk/models/publishedPackage.ts deleted file mode 100644 index d22882f0..00000000 --- a/src/sdk/models/publishedPackage.ts +++ /dev/null @@ -1,55 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - lazy, - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; -import { - AuthorIdentifiers, - authorIdentifiersSchema, -} from './authorIdentifiers'; - -export interface PublishedPackage { - id: string; - createdOn: string; - apiEntityId: string; - packageRepository: string; - template: string; - packageName: string; - version: string; - additionalDeploymentInformation?: unknown; - authorIdentifiers: AuthorIdentifiers; - link: string; - additionalProperties?: Record; -} - -export const publishedPackageSchema: Schema = typedExpandoObject( - { - id: ['id', string()], - createdOn: ['createdOn', string()], - apiEntityId: ['apiEntityId', string()], - packageRepository: ['packageRepository', string()], - template: ['template', string()], - packageName: ['packageName', string()], - version: ['version', string()], - additionalDeploymentInformation: [ - 'additionalDeploymentInformation', - optional(unknown()), - ], - authorIdentifiers: [ - 'authorIdentifiers', - lazy(() => authorIdentifiersSchema), - ], - link: ['link', string()], - }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/response.ts b/src/sdk/models/response.ts deleted file mode 100644 index 681d427a..00000000 --- a/src/sdk/models/response.ts +++ /dev/null @@ -1,61 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - boolean, - lazy, - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; -import { Attributes, attributesSchema } from './attributes'; - -/** The structure encapsulates all details of a request response */ -export interface Response { - /** Specify if response is optional or not */ - optional: boolean; - /** Specify response type */ - type: string; - /** Specify if response is constant */ - constant: boolean; - /** Specify if response is array */ - isArray: boolean; - /** Specify if response is stream */ - isStream: boolean; - /** Specify if response has attributes */ - isAttribute: boolean; - /** Specify if response is collected as map */ - isMap: boolean; - /** The structure contain attribute details of a parameter type. */ - attributes: Attributes; - /** Specify is response is nullable */ - nullable: boolean; - /** Unique response identifier */ - id: string; - /** Response name */ - name: string; - additionalProperties?: Record; -} - -export const responseSchema: Schema = typedExpandoObject( - { - optional: ['optional', boolean()], - type: ['type', string()], - constant: ['constant', boolean()], - isArray: ['isArray', boolean()], - isStream: ['isStream', boolean()], - isAttribute: ['isAttribute', boolean()], - isMap: ['isMap', boolean()], - attributes: ['attributes', lazy(() => attributesSchema)], - nullable: ['nullable', boolean()], - id: ['id', string()], - name: ['name', string()], - }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/server.ts b/src/sdk/models/server.ts deleted file mode 100644 index eebb1ab0..00000000 --- a/src/sdk/models/server.ts +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; - -/** The user can specify multiple servers within an environment. A server comprises of a name and a URL. The names of the hosts remain consistent over different environments but their values may vary. The URL values can contain any number of parameters defined. */ -export interface Server { - /** Unique Server identifier */ - id: string; - /** Server Name */ - name: string; - /** Server URL */ - url: string; - additionalProperties?: Record; -} - -export const serverSchema: Schema = typedExpandoObject( - { id: ['id', string()], name: ['name', string()], url: ['url', string()] }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/serverConfiguration.ts b/src/sdk/models/serverConfiguration.ts deleted file mode 100644 index 4c794d5b..00000000 --- a/src/sdk/models/serverConfiguration.ts +++ /dev/null @@ -1,44 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - array, - lazy, - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; -import { MEnvironment, mEnvironmentSchema } from './mEnvironment'; -import { Parameter, parameterSchema } from './parameter'; - -/** Server configurations can be used to create multiple environments, multiple servers that can be used with specific endpoints and server URLs with template paramters. */ -export interface ServerConfiguration { - /** Server Config Identifier */ - id: string; - /** Default Environment */ - defaultEnvironment: string; - /** Default Server */ - defaultServer: string; - /** Environment Identifier and Name */ - environments: MEnvironment[]; - /** Parameter Attributes */ - parameters: Parameter[]; - additionalProperties?: Record; -} - -export const serverConfigurationSchema: Schema = typedExpandoObject( - { - id: ['id', string()], - defaultEnvironment: ['defaultEnvironment', string()], - defaultServer: ['defaultServer', string()], - environments: ['environments', array(lazy(() => mEnvironmentSchema))], - parameters: ['parameters', array(lazy(() => parameterSchema))], - }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/status.ts b/src/sdk/models/status.ts deleted file mode 100644 index 19ed2770..00000000 --- a/src/sdk/models/status.ts +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { Schema, stringEnum } from '../schema'; - -/** - * Enum for Status - */ -export enum Status { - Completed = 'Completed', - InProgress = 'InProgress', - Failed = 'Failed', -} - -/** - * Schema for Status - */ -export const statusSchema: Schema = stringEnum(Status); diff --git a/src/sdk/models/templatesPackageDeploymentInformation.ts b/src/sdk/models/templatesPackageDeploymentInformation.ts deleted file mode 100644 index 231987f4..00000000 --- a/src/sdk/models/templatesPackageDeploymentInformation.ts +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { lazy, optional, Schema, typedExpandoObject, unknown } from '../schema'; -import { Csnetstandardlib, csnetstandardlibSchema } from './csnetstandardlib'; - -/** This structure encapsulates all package deployment details. */ -export interface TemplatesPackageDeploymentInformation { - /** This structure contains all details that goes into package deployment. */ - csNetStandardLib: Csnetstandardlib; - additionalProperties?: Record; -} - -export const templatesPackageDeploymentInformationSchema: Schema = typedExpandoObject( - { - csNetStandardLib: [ - 'CS_NET_STANDARD_LIB', - lazy(() => csnetstandardlibSchema), - ], - }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/testCase.ts b/src/sdk/models/testCase.ts deleted file mode 100644 index 337f1e00..00000000 --- a/src/sdk/models/testCase.ts +++ /dev/null @@ -1,75 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - array, - boolean, - lazy, - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; -import { InputParameter, inputParameterSchema } from './inputParameter'; - -/** APIMatic lets you define test cases for endpoints using the API Editor. The test cases are automatically generated for each language. This structure encapsulates all details of a Test Case. To find out more about defining Test Cases visit: https://docs.apimatic.io/testing/defining-your-first-test-case/ */ -export interface TestCase { - /** Unique Test Case identifier */ - id: string; - /** The Endpoint, test case is associated with */ - endpointId: string; - /** The API Entity, test case is associated with */ - apiId: string; - /** The Test Case name */ - name: string; - /** Enable/Disable a Test Case */ - enabled: boolean; - shouldPass: boolean; - /** Test case parameters */ - inputParameters: InputParameter[]; - /** Expected response status. We expect the status code to be 200 if the operation is successful, hence we input the value 200. */ - expectedStatus: string; - /** Expected Headers */ - expectedHeaders: string[]; - /** If this flag is disabled, it will cause the test case to fail if the response contains other headers than those listed in the expected headers list. */ - expectedHeadersAllowExtra: boolean; - /** Expected response goes in the expected body */ - expectedBody: string; - /** Specifies what to match */ - expectedBodyMatchMode: string; - /** If enabled, this will involve ensuring that the response body contains the array elements in the same order as the expected body. */ - expectedArrayOrderedMatching: boolean; - /** If enabled, this will ensure that the response body contains the same number of elements in the array as does the expected body. */ - expectedArrayCheckCount: boolean; - responseMatchSchema: boolean; - additionalProperties?: Record; -} - -export const testCaseSchema: Schema = typedExpandoObject( - { - id: ['id', string()], - endpointId: ['endpointId', string()], - apiId: ['apiId', string()], - name: ['name', string()], - enabled: ['enabled', boolean()], - shouldPass: ['shouldPass', boolean()], - inputParameters: [ - 'inputParameters', - array(lazy(() => inputParameterSchema)), - ], - expectedStatus: ['expectedStatus', string()], - expectedHeaders: ['expectedHeaders', array(string())], - expectedHeadersAllowExtra: ['expectedHeadersAllowExtra', boolean()], - expectedBody: ['expectedBody', string()], - expectedBodyMatchMode: ['expectedBodyMatchMode', string()], - expectedArrayOrderedMatching: ['expectedArrayOrderedMatching', boolean()], - expectedArrayCheckCount: ['expectedArrayCheckCount', boolean()], - responseMatchSchema: ['responseMatchSchema', boolean()], - }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/testGenSettings.ts b/src/sdk/models/testGenSettings.ts deleted file mode 100644 index 1ef8b05b..00000000 --- a/src/sdk/models/testGenSettings.ts +++ /dev/null @@ -1,34 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - number, - optional, - Schema, - typedExpandoObject, - unknown, -} from '../schema'; - -/** This structure helps specify additional test configurations which affects how test cases are generated. */ -export interface TestGenSettings { - /** Error margin for comparing values in decimal places */ - precisionDelta: number; - /** Number of seconds after which if the endpoint is not returning any response, the test is forced to fail e.g. a timeout of 60 */ - testTimeout: number; - /** The parameters allows to provide values for configuration file for use in the test environment */ - configuration?: unknown; - additionalProperties?: Record; -} - -export const testGenSettingsSchema: Schema = typedExpandoObject( - { - precisionDelta: ['precisionDelta', number()], - testTimeout: ['testTimeout', number()], - configuration: ['configuration', optional(unknown())], - }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/transformViaUrlRequest.ts b/src/sdk/models/transformViaUrlRequest.ts deleted file mode 100644 index 3eefc8d9..00000000 --- a/src/sdk/models/transformViaUrlRequest.ts +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; -import { ExportFormats, exportFormatsSchema } from './exportFormats'; - -/** This structure puts together the URL of the file to be transformed, along with the desired export format. */ -export interface TransformViaUrlRequest { - /** The URL for the API specification file.

**Note:** This URL should be publicly accessible. */ - url: string; - /** The structure contains API specification formats that Transformer can convert to. */ - exportFormat: ExportFormats; - additionalProperties?: Record; -} - -export const transformViaUrlRequestSchema: Schema = typedExpandoObject( - { - url: ['url', string()], - exportFormat: ['export_format', exportFormatsSchema], - }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/transformation.ts b/src/sdk/models/transformation.ts deleted file mode 100644 index e9d84b7f..00000000 --- a/src/sdk/models/transformation.ts +++ /dev/null @@ -1,68 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - boolean, - lazy, - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; -import { - ApiValidationSummary, - apiValidationSummarySchema, -} from './apiValidationSummary'; - -/** Transformation structure encapsulates all the details of a Transformation. */ -export interface Transformation { - /** Unique Transformation Identifier */ - id: string; - /** Transformation Date and Time */ - transformedOn: string; - /** Unique User Identifier */ - userId: string; - /** API Specification file to be transformed */ - inputtedFile: string; - /** API Specification file transformed to desired format */ - generatedFile: string; - /** Desired Specification format */ - exportFormat: string; - /** Source of Transformation */ - transformationSource: string; - /** Via File or URL */ - transformationInput: string; - /** CodeGen Engine Version */ - codeGenVersion: string; - /** Successful Transformation Flag */ - success: boolean; - importSummary: ApiValidationSummary; - apiValidationSummary: ApiValidationSummary; - additionalProperties?: Record; -} - -export const transformationSchema: Schema = typedExpandoObject( - { - id: ['id', string()], - transformedOn: ['transformedOn', string()], - userId: ['userId', string()], - inputtedFile: ['inputtedFile', string()], - generatedFile: ['generatedFile', string()], - exportFormat: ['exportFormat', string()], - transformationSource: ['transformationSource', string()], - transformationInput: ['transformationInput', string()], - codeGenVersion: ['codeGenVersion', string()], - success: ['success', boolean()], - importSummary: ['importSummary', lazy(() => apiValidationSummarySchema)], - apiValidationSummary: [ - 'apiValidationSummary', - lazy(() => apiValidationSummarySchema), - ], - }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/updatePackageDeploymentInformation.ts b/src/sdk/models/updatePackageDeploymentInformation.ts deleted file mode 100644 index 4d1d3bcb..00000000 --- a/src/sdk/models/updatePackageDeploymentInformation.ts +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { lazy, optional, Schema, typedExpandoObject, unknown } from '../schema'; -import { - UpdateTemplatesPackageDeploymentInformation, - updateTemplatesPackageDeploymentInformationSchema, -} from './updateTemplatesPackageDeploymentInformation'; - -/** This structure is used to update package deployment details. */ -export interface UpdatePackageDeploymentInformation { - /** This structure helps update package deployment details. */ - templatesPackageDeploymentInformation: UpdateTemplatesPackageDeploymentInformation; - additionalProperties?: Record; -} - -export const updatePackageDeploymentInformationSchema: Schema = typedExpandoObject( - { - templatesPackageDeploymentInformation: [ - 'templatesPackageDeploymentInformation', - lazy(() => updateTemplatesPackageDeploymentInformationSchema), - ], - }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/updateTemplatesPackageDeploymentInformation.ts b/src/sdk/models/updateTemplatesPackageDeploymentInformation.ts deleted file mode 100644 index c9c6cf5c..00000000 --- a/src/sdk/models/updateTemplatesPackageDeploymentInformation.ts +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { lazy, optional, Schema, typedExpandoObject, unknown } from '../schema'; -import { Csnetstandardlib, csnetstandardlibSchema } from './csnetstandardlib'; - -/** This structure helps update package deployment details. */ -export interface UpdateTemplatesPackageDeploymentInformation { - /** This structure contains all details that goes into package deployment. */ - csNetStandardLib: Csnetstandardlib; - additionalProperties?: Record; -} - -export const updateTemplatesPackageDeploymentInformationSchema: Schema = typedExpandoObject( - { - csNetStandardLib: [ - 'CS_NET_STANDARD_LIB', - lazy(() => csnetstandardlibSchema), - ], - }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/userCodeGeneration.ts b/src/sdk/models/userCodeGeneration.ts deleted file mode 100644 index 8d2d7258..00000000 --- a/src/sdk/models/userCodeGeneration.ts +++ /dev/null @@ -1,57 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - boolean, - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; -import { Platforms, platformsSchema } from './platforms'; - -/** The Code Generation structure encapsulates all the the details of an SDK generation performed by a user. */ -export interface UserCodeGeneration { - /** Unique Code Generation Identifier */ - id: string; - /** The structure contains platforms that APIMatic CodeGen can generate SDKs and Docs in. */ - template: Platforms; - /** The generated SDK */ - generatedFile: string; - /** Generation Date and Time */ - generatedOn: string; - /** The md5 hash of the API Description */ - hashCode: string; - /** Generation Source */ - codeGenerationSource: string; - /** Generation Version */ - codeGenVersion: string; - /** Generation Status */ - success: boolean; - /** Unique User Identifier */ - userId: string; - /** API Specification file in a supported format */ - inputFile: string; - additionalProperties?: Record; -} - -export const userCodeGenerationSchema: Schema = typedExpandoObject( - { - id: ['id', string()], - template: ['template', platformsSchema], - generatedFile: ['generatedFile', string()], - generatedOn: ['generatedOn', string()], - hashCode: ['hashCode', string()], - codeGenerationSource: ['codeGenerationSource', string()], - codeGenVersion: ['codeGenVersion', string()], - success: ['success', boolean()], - userId: ['userId', string()], - inputFile: ['inputFile', string()], - }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/models/validationException.ts b/src/sdk/models/validationException.ts deleted file mode 100644 index 222fb4c6..00000000 --- a/src/sdk/models/validationException.ts +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -import { - optional, - Schema, - string, - typedExpandoObject, - unknown, -} from '../schema'; - -/** Validation exception contains information, warnings, messages and errors. */ -export interface ValidationException { - reason: string; - /** Validation Summary of the API in case validation failed */ - summary?: string; - additionalProperties?: Record; -} - -export const validationExceptionSchema: Schema = typedExpandoObject( - { reason: ['reason', string()], summary: ['summary', optional(string())] }, - 'additionalProperties', - optional(unknown()) -); diff --git a/src/sdk/schema.ts b/src/sdk/schema.ts deleted file mode 100644 index f84e93f6..00000000 --- a/src/sdk/schema.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Apimatic APILib - * - * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). - */ - -export * from '@apimatic/schema'; diff --git a/src/types/api/transform.ts b/src/types/api/transform.ts index af18531d..4cb0b40f 100644 --- a/src/types/api/transform.ts +++ b/src/types/api/transform.ts @@ -31,3 +31,20 @@ export const DestinationFormats = { Postman20: "json", GraphQlSchema: "json" }; + +export enum TransformationFormats { + APIMATIC = 'Apimatic', + WADL2009 = 'Wadl2009', + WSDL = 'Wsdl', + SWAGGER10 = 'Swagger10', + SWAGGER20 = 'Swagger20', + SWAGGERYAML = 'Swaggeryaml', + OAS3 = 'Oas3', + OPENAPI3YAML = 'Openapi3Yaml', + APIBLUEPRINT = 'Apiblueprint', + RAML = 'Raml', + RAML10 = 'Raml10', + POSTMAN10 = 'Postman10', + POSTMAN20 = 'Postman20', + GRAPHQLSCHEMA = 'Graphqlschema', +} From 016881ed8eedc243b8cd2cfc0a15c8bca3d57069 Mon Sep 17 00:00:00 2001 From: saeedjamshaid Date: Mon, 23 Jun 2025 18:06:59 +0500 Subject: [PATCH 09/11] docs: update readme file with new toc command instructions (#95) --- README.md | 128 +++++++++++++++++++++------------ src/commands/portal/new/toc.ts | 11 ++- 2 files changed, 92 insertions(+), 47 deletions(-) diff --git a/README.md b/README.md index a1f3eff2..2685fcf0 100644 --- a/README.md +++ b/README.md @@ -17,10 +17,6 @@ To get started with APIMatic's CLI using a step by step wizard, run the followin $ apimatic portal:quickstart ``` - -* [Usage](#usage) -* [Commands](#commands) - # Usage ```sh-session @@ -28,7 +24,7 @@ $ npm install -g @apimatic/cli $ apimatic COMMAND running command... $ apimatic (--version) -@apimatic/cli/0.0.0-alpha.0 win32-x64 node-v20.18.3 +@apimatic/cli/1.1.0-alpha.7 win32-x64 node-v23.4.0 $ apimatic --help [COMMAND] USAGE $ apimatic COMMAND @@ -46,6 +42,7 @@ USAGE * [`apimatic autocomplete [SHELL]`](#apimatic-autocomplete-shell) * [`apimatic help [COMMAND]`](#apimatic-help-command) * [`apimatic portal:generate`](#apimatic-portalgenerate) +* [`apimatic portal:new:toc`](#apimatic-portalnewtoc) * [`apimatic portal:quickstart`](#apimatic-portalquickstart) * [`apimatic portal:serve`](#apimatic-portalserve) * [`apimatic sdk:generate`](#apimatic-sdkgenerate) @@ -61,18 +58,13 @@ USAGE FLAGS -f, --force overwrite if same file exist in the destination - --auth-key=auth-key override current authentication state with an authentication key - - --destination=destination [default: /home/runner/work/apimatic-cli/apimatic-cli/cli] directory to download - transformed file to - - --file=file path to the API specification file to transform - - --format=format (required) specification format to transform API specification into + --auth-key= override current authentication state with an authentication key + --destination= [default: ./] directory to download transformed file to + --file= path to the API specification file to transform + --format= (required) specification format to transform API specification into APIMATIC|WADL2009|WSDL|SWAGGER10|SWAGGER20|SWAGGERYAML|OAS3|OPENAPI3YAML|APIBLUEPRINT|RAML| RAML10|POSTMAN10|POSTMAN20|GRAPHQLSCHEMA - - --url=url URL to the API specification file to transform. Can be used in place of the --file option + --url= URL to the API specification file to transform. Can be used in place of the --file option if the API specification is publicly available. DESCRIPTION @@ -99,11 +91,10 @@ USAGE $ apimatic api:validate [--file ] [--url ] [--auth-key ] FLAGS - --auth-key=auth-key override current authentication state with an authentication key - --file=file Path to the API specification file to validate - - --url=url URL to the specification file to validate. Can be used in place of the --file option if the API - specification is publicly available. + --auth-key= override current authentication state with an authentication key + --file= Path to the API specification file to validate + --url= URL to the specification file to validate. Can be used in place of the --file option if the API + specification is publicly available. DESCRIPTION Validate the syntactic and semantic correctness of an API specification @@ -127,16 +118,15 @@ USAGE $ apimatic auth:login [--auth-key ] FLAGS - --auth-key=auth-key Set authentication key for all commands + --auth-key= Set authentication key for all commands DESCRIPTION Login using your APIMatic credentials or an API Key EXAMPLES $ apimatic auth:login - Please enter your registered email: apimatic-user@gmail.com + Enter your registered email: apimatic-user@gmail.com Please enter your password: ********* - You have successfully logged into APIMatic $ apimatic auth:login --auth-key=xxxxxx @@ -213,10 +203,13 @@ Display help for apimatic. ``` USAGE - $ apimatic help [COMMAND] + $ apimatic help [COMMAND...] [-n] ARGUMENTS - COMMAND command to show help for + COMMAND... Command to show help for. + +FLAGS + -n, --nested-commands Include all nested commands in the output. DESCRIPTION Display help for apimatic. @@ -234,6 +227,11 @@ USAGE FLAGS -f, --force overwrite if a portal exists in the destination + --auth-key= override current authentication state with an authentication key + --destination= [default: ./generated_portal] path to the downloaded portal + --folder= [default: ./] path to the input directory containing API specifications and config files + --zip download the generated portal as a .zip archive + DESCRIPTION Generate and download a static API Documentation portal. Requires an input directory containing API specifications, a config file and optionally, markdown guides. For details, refer to the [documentation](https://docs.apimatic.io/platfo @@ -246,22 +244,66 @@ EXAMPLES _See code: [src/commands/portal/generate.ts](https://github.com/apimatic/apimatic-cli/blob/alpha/src/commands/portal/generate.ts)_ +## `apimatic portal:new:toc` + +Generates a TOC file based on the content directory and spec folder provided in your working directory + +``` +USAGE + $ apimatic portal:new:toc [--destination ] [--folder ] [--force] [--expand-endpoints] + [--expand-models] + +FLAGS + --destination= optional path where the generated TOC file will be saved. Defaults to the current working + directory if not provided. + --expand-endpoints include individual entries for each endpoint in the generated TOC. Requires a valid API + specification in the working directory. + --expand-models include individual entries for each model in the generated TOC. Requires a valid API + specification in the working directory. + --folder= [default: ./] path to the working directory containing the API project + files. Defaults to the current working directory if not specified. + --force overwrite the TOC file if one already exists at the destination. + +DESCRIPTION + Generates a TOC file based on the content directory and spec folder provided in your working directory + + This command generates a new Table of Contents (TOC) file used in the + generation of your API documentation portal. + + The output is a YAML file with the .yml extension. + + To learn more about the TOC file and APIMatic build directory structure, visit: + https://docs.apimatic.io/platform-api/#/http/guides/generating-on-prem-api-portal/overview-generating-api-portal + +EXAMPLES + $ apimatic portal:new:toc --destination="./portal/content/" + A new toc file has been created at ./portal/content/toc.yml + + $ apimatic portal:new:toc --folder="./my-project" + A new toc file has been created at ./my-project/content/toc.yml + + $ apimatic portal:new:toc --folder="./my-project" --destination="./portal/content/" + A new toc file has been created at ./portal/content/toc.yml +``` + +_See code: [src/commands/portal/new/toc.ts](https://github.com/apimatic/apimatic-cli/blob/alpha/src/commands/portal/new/toc.ts)_ + ## `apimatic portal:quickstart` -Create your first API Portal using APIMatic’s Docs as Code offering. +Create your first API Portal using APIMatic's Docs as Code offering. ``` USAGE $ apimatic portal:quickstart DESCRIPTION - Create your first API Portal using APIMatic’s Docs as Code offering. + Create your first API Portal using APIMatic's Docs as Code offering. EXAMPLES $ apimatic portal:quickstart ``` -_See code: [src/commands/portal/quickstart.ts](https://github.com/apimatic/apimatic-cli/blob/v1.0.1-alpha.11/src/commands/portal/quickstart.ts)_ +_See code: [src/commands/portal/quickstart.ts](https://github.com/apimatic/apimatic-cli/blob/alpha/src/commands/portal/quickstart.ts)_ ## `apimatic portal:serve` @@ -269,7 +311,8 @@ Generate and deploy a Docs as Code portal with hot reload. ``` USAGE - $ apimatic portal:serve [-p ] [-d ] [-s ] [-o] [--no-reload] [-i ] [--auth-key ] + $ apimatic portal:serve [-p ] [-d ] [-s ] [-o] [--no-reload] [-i ] [--auth-key + ] FLAGS -d, --destination= [default: ./generated_portal] Directory to store and serve the generated portal. @@ -288,7 +331,7 @@ EXAMPLES $ apimatic portal:serve --source="./" --destination="./generated_portal" --port=3000 --open --no-reload ``` -_See code: [src/commands/portal/serve.ts](https://github.com/apimatic/apimatic-cli/blob/v1.0.1-alpha.11/src/commands/portal/serve.ts)_ +_See code: [src/commands/portal/serve.ts](https://github.com/apimatic/apimatic-cli/blob/alpha/src/commands/portal/serve.ts)_ ## `apimatic sdk:generate` @@ -296,24 +339,19 @@ Generate SDK for your APIs ``` USAGE - $ apimatic sdk:generate --platform [--file ] [--url ] [--destination ] [-f] [--zip] [--auth-key ] + $ apimatic sdk:generate --platform [--file ] [--url ] [--destination ] [-f] [--zip] + [--auth-key ] FLAGS -f, --force overwrite if an SDK already exists in the destination - --auth-key=auth-key override current authentication state with an authentication key - - --destination=destination [default: /home/runner/work/apimatic-cli/apimatic-cli/cli] directory to download the - generated SDK to - - --file=file path to the API specification to generate SDKs for - - --platform=platform (required) language platform for sdk - Simple: CSHARP|JAVA|PYTHON|RUBY|PHP|TYPESCRIPT - Legacy: CS_NET_STANDARD_LIB|CS_PORTABLE_NET_LIB|CS_UNIVERSAL_WINDOWS_PLATFORM_LIB| - JAVA_ECLIPSE_JRE_LIB|PHP_GENERIC_LIB|PYTHON_GENERIC_LIB|RUBY_GENERIC_LIB| - TS_GENERIC_LIB - - --url=url URL to the API specification to generate SDKs for. Can be used in place of the --file + --auth-key= override current authentication state with an authentication key + --destination= [default: ./] directory to download the generated SDK to + --file= path to the API specification to generate SDKs for + --platform= (required) language platform for sdk + Simple: CSHARP|JAVA|PYTHON|RUBY|PHP|TYPESCRIPT|GO + Legacy: CS_NET_STANDARD_LIB|JAVA_ECLIPSE_JRE_LIB|PHP_GENERIC_LIB_V2|PYTHON_GENERIC_LIB|RUBY + _GENERIC_LIB|TS_GENERIC_LIB|GO_GENERIC_LIB + --url= URL to the API specification to generate SDKs for. Can be used in place of the --file option if the API specification is publicly available. --zip download the generated SDK as a .zip archive diff --git a/src/commands/portal/new/toc.ts b/src/commands/portal/new/toc.ts index d43732f3..8690c50e 100644 --- a/src/commands/portal/new/toc.ts +++ b/src/commands/portal/new/toc.ts @@ -5,8 +5,15 @@ import { PortalNewTocAction } from "../../../actions/portal/new/toc"; const DEFAULT_FOLDER = process.cwd(); export default class PortalNewToc extends Command { - static description = - "Generates a new Table of Contents (TOC) file used for the generation of your API documentation portal. The output is a YAML file with the .yml extension."; + static summary = 'Generates a TOC file based on the content directory and spec folder provided in your working directory'; + + static description = `This command generates a new Table of Contents (TOC) file used in the +generation of your API documentation portal. + +The output is a YAML file with the .yml extension. + +To learn more about the TOC file and APIMatic build directory structure, visit: +https://docs.apimatic.io/platform-api/#/http/guides/generating-on-prem-api-portal/overview-generating-api-portal`; static flags = { destination: Flags.string({ From 926dea9bd45302270b143352854bf004c4f6e7aa Mon Sep 17 00:00:00 2001 From: saeedjamshaid Date: Mon, 23 Jun 2025 18:10:22 +0500 Subject: [PATCH 10/11] chore: update package version to 1.1.0-alpha.7 --- README.md | 2 +- package-lock.json | 35 ++--------------------------------- package.json | 6 +----- tsconfig.json | 3 --- 4 files changed, 4 insertions(+), 42 deletions(-) diff --git a/README.md b/README.md index 2685fcf0..9f51b627 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ $ npm install -g @apimatic/cli $ apimatic COMMAND running command... $ apimatic (--version) -@apimatic/cli/1.1.0-alpha.7 win32-x64 node-v23.4.0 +@apimatic/cli/1.1.0-alpha.8 win32-x64 node-v23.4.0 $ apimatic --help [COMMAND] USAGE $ apimatic COMMAND diff --git a/package-lock.json b/package-lock.json index d6ca589b..b811f840 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,14 @@ { "name": "@apimatic/cli", - "version": "1.1.0-alpha.6", + "version": "1.1.0-alpha.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@apimatic/cli", - "version": "1.1.0-alpha.6", + "version": "1.1.0-alpha.8", "license": "MIT", "dependencies": { - "@apimatic/authentication-adapters": "^0.5.4", - "@apimatic/axios-client-adapter": "^0.3.7", - "@apimatic/core": "^0.10.16", - "@apimatic/schema": "^0.7.14", "@apimatic/sdk": "^0.2.0-alpha.1", "@clack/prompts": "^0.11.0", "@oclif/core": "^4.2.8", @@ -79,33 +75,6 @@ "node": ">=20.0.0" } }, - "../apimatic-sdk-for-js-updated": { - "name": "apimatic-apilib", - "version": "3.0.0", - "extraneous": true, - "license": "MIT", - "dependencies": { - "@apimatic/authentication-adapters": "^0.5.4", - "@apimatic/axios-client-adapter": "^0.3.7", - "@apimatic/core": "^0.10.16", - "@apimatic/schema": "^0.7.14" - }, - "devDependencies": { - "@apimatic/test-utilities": "^0.0.1", - "@types/jest": "^29.4.0", - "@typescript-eslint/eslint-plugin": "^5.52.0", - "@typescript-eslint/parser": "^5.52.0", - "eslint": "^8.34.0", - "jest": "^29.4.3", - "rimraf": "^3.0.2", - "ts-jest": "29.2.6", - "tslib": "^2.5.0", - "typescript": "^4.9.5" - }, - "engines": { - "node": ">=14.17.0" - } - }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "dev": true, diff --git a/package.json b/package.json index c537730b..ebe7e419 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@apimatic/cli", "description": "The official CLI for APIMatic.", - "version": "1.1.0-alpha.6", + "version": "1.1.0-alpha.8", "author": "APIMatic", "bin": { "apimatic": "./bin/run" @@ -43,10 +43,6 @@ "lint:fix": "eslint --fix \"src/**/*.{js,ts}\" --quiet" }, "dependencies": { - "@apimatic/authentication-adapters": "^0.5.4", - "@apimatic/axios-client-adapter": "^0.3.7", - "@apimatic/core": "^0.10.16", - "@apimatic/schema": "^0.7.14", "@apimatic/sdk": "^0.2.0-alpha.1", "@clack/prompts": "^0.11.0", "@oclif/core": "^4.2.8", diff --git a/tsconfig.json b/tsconfig.json index e121dd5e..2c7767cb 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,9 +9,6 @@ "strict": true, "target": "es2017", "lib": ["es2018", "dom"], - "paths": { - "@apimatic/sdk": ["./src/sdk"] - }, "inlineSourceMap": true, }, "include": [ From 478f7f198ba8609eecf16af1b93cea9f6f0e7759 Mon Sep 17 00:00:00 2001 From: saeedjamshaid Date: Wed, 25 Jun 2025 11:11:50 +0500 Subject: [PATCH 11/11] feat: rename portal:new:toc command to portal:toc:new (#97) --- .vscode/launch.json | 2 +- README.md | 14 +++++++------- src/actions/portal/{new/toc.ts => toc/new-toc.ts} | 10 +++++----- src/application/portal/{new => }/toc/sdl-parser.ts | 10 +++++----- .../portal/{new => }/toc/toc-content-parser.ts | 2 +- .../{new => }/toc/toc-structure-generator.ts | 2 +- src/commands/portal/{new/toc.ts => toc/new.ts} | 14 +++++++------- src/prompts/portal/{new/toc.ts => toc/new-toc.ts} | 0 .../{new/toc.test.ts => toc/new-toc.test.ts} | 2 +- .../portal/{new/toc => toc/new}/sdl-parser.test.ts | 4 ++-- .../toc => toc/new}/toc-content-parser.test.ts | 2 +- .../new}/toc-structure-generator.test.ts | 2 +- 12 files changed, 32 insertions(+), 32 deletions(-) rename src/actions/portal/{new/toc.ts => toc/new-toc.ts} (96%) rename src/application/portal/{new => }/toc/sdl-parser.ts (86%) rename src/application/portal/{new => }/toc/toc-content-parser.ts (95%) rename src/application/portal/{new => }/toc/toc-structure-generator.ts (98%) rename src/commands/portal/{new/toc.ts => toc/new.ts} (86%) rename src/prompts/portal/{new/toc.ts => toc/new-toc.ts} (100%) rename test/actions/portal/{new/toc.test.ts => toc/new-toc.test.ts} (99%) rename test/application/portal/{new/toc => toc/new}/sdl-parser.test.ts (99%) rename test/application/portal/{new/toc => toc/new}/toc-content-parser.test.ts (99%) rename test/application/portal/{new/toc => toc/new}/toc-structure-generator.test.ts (99%) diff --git a/.vscode/launch.json b/.vscode/launch.json index a576f17d..6507bd48 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -20,7 +20,7 @@ // "auth:status" // "portal:quickstart", // "portal:generate", - // "portal:new:toc", + // "portal:toc:new", //"--expand-endpoints", //"--expand-models", // "--force", diff --git a/README.md b/README.md index 9f51b627..4447ce30 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ USAGE * [`apimatic autocomplete [SHELL]`](#apimatic-autocomplete-shell) * [`apimatic help [COMMAND]`](#apimatic-help-command) * [`apimatic portal:generate`](#apimatic-portalgenerate) -* [`apimatic portal:new:toc`](#apimatic-portalnewtoc) +* [`apimatic portal:toc:new`](#apimatic-portaltocnew) * [`apimatic portal:quickstart`](#apimatic-portalquickstart) * [`apimatic portal:serve`](#apimatic-portalserve) * [`apimatic sdk:generate`](#apimatic-sdkgenerate) @@ -244,13 +244,13 @@ EXAMPLES _See code: [src/commands/portal/generate.ts](https://github.com/apimatic/apimatic-cli/blob/alpha/src/commands/portal/generate.ts)_ -## `apimatic portal:new:toc` +## `apimatic portal:toc:new` Generates a TOC file based on the content directory and spec folder provided in your working directory ``` USAGE - $ apimatic portal:new:toc [--destination ] [--folder ] [--force] [--expand-endpoints] + $ apimatic portal:toc:new [--destination ] [--folder ] [--force] [--expand-endpoints] [--expand-models] FLAGS @@ -276,17 +276,17 @@ DESCRIPTION https://docs.apimatic.io/platform-api/#/http/guides/generating-on-prem-api-portal/overview-generating-api-portal EXAMPLES - $ apimatic portal:new:toc --destination="./portal/content/" + $ apimatic portal:toc:new --destination="./portal/content/" A new toc file has been created at ./portal/content/toc.yml - $ apimatic portal:new:toc --folder="./my-project" + $ apimatic portal:toc:new --folder="./my-project" A new toc file has been created at ./my-project/content/toc.yml - $ apimatic portal:new:toc --folder="./my-project" --destination="./portal/content/" + $ apimatic portal:toc:new --folder="./my-project" --destination="./portal/content/" A new toc file has been created at ./portal/content/toc.yml ``` -_See code: [src/commands/portal/new/toc.ts](https://github.com/apimatic/apimatic-cli/blob/alpha/src/commands/portal/new/toc.ts)_ +_See code: [src/commands/portal/toc/new/toc.ts](https://github.com/apimatic/apimatic-cli/blob/alpha/src/commands/portal/toc/new/toc.ts)_ ## `apimatic portal:quickstart` diff --git a/src/actions/portal/new/toc.ts b/src/actions/portal/toc/new-toc.ts similarity index 96% rename from src/actions/portal/new/toc.ts rename to src/actions/portal/toc/new-toc.ts index a4b59c91..34a630ad 100644 --- a/src/actions/portal/new/toc.ts +++ b/src/actions/portal/toc/new-toc.ts @@ -1,11 +1,11 @@ import * as path from "path"; import * as fs from "fs-extra"; -import { PortalNewTocPrompts } from "../../../prompts/portal/new/toc"; +import { PortalNewTocPrompts } from "../../../prompts/portal/toc/new-toc"; import { Result } from "../../../types/common/result"; import { getMessageInRedColor } from "../../../utils/utils"; -import { SdlParser } from "../../../application/portal/new/toc/sdl-parser"; -import { TocStructureGenerator } from "../../../application/portal/new/toc/toc-structure-generator"; -import { TocContentParser } from "../../../application/portal/new/toc/toc-content-parser"; +import { SdlParser } from "../../../application/portal/toc/sdl-parser"; +import { TocStructureGenerator } from "../../../application/portal/toc/toc-structure-generator"; +import { TocContentParser } from "../../../application/portal/toc/toc-content-parser"; import { TocEndpoint, TocGroup, TocModel } from "../../../types/toc/toc"; import { PortalService } from "../../../infrastructure/services/portal-service"; @@ -178,4 +178,4 @@ export class PortalNewTocAction { return defaultSpecFolder; } } -} +} \ No newline at end of file diff --git a/src/application/portal/new/toc/sdl-parser.ts b/src/application/portal/toc/sdl-parser.ts similarity index 86% rename from src/application/portal/new/toc/sdl-parser.ts rename to src/application/portal/toc/sdl-parser.ts index 4abd855c..93325349 100644 --- a/src/application/portal/new/toc/sdl-parser.ts +++ b/src/application/portal/toc/sdl-parser.ts @@ -1,9 +1,9 @@ import * as path from "path"; -import { PortalService } from "../../../../infrastructure/services/portal-service"; -import { validateAndZipPortalSource, deleteFile } from "../../../../utils/utils"; -import { TocEndpoint, TocModel } from "../../../../types/toc/toc"; -import { Result } from "../../../../types/common/result"; -import { Sdl, SdlEndpoint, SdlModel } from "../../../../types/sdl/sdl"; +import { PortalService } from "../../../infrastructure/services/portal-service"; +import { validateAndZipPortalSource, deleteFile } from "../../../utils/utils"; +import { TocEndpoint, TocModel } from "../../../types/toc/toc"; +import { Result } from "../../../types/common/result"; +import { Sdl, SdlEndpoint, SdlModel } from "../../../types/sdl/sdl"; export class SdlParser { constructor(private readonly portalService: PortalService) {} diff --git a/src/application/portal/new/toc/toc-content-parser.ts b/src/application/portal/toc/toc-content-parser.ts similarity index 95% rename from src/application/portal/new/toc/toc-content-parser.ts rename to src/application/portal/toc/toc-content-parser.ts index 2e7e01aa..ca139f30 100644 --- a/src/application/portal/new/toc/toc-content-parser.ts +++ b/src/application/portal/toc/toc-content-parser.ts @@ -1,6 +1,6 @@ import * as path from "path"; import * as fs from "fs-extra"; -import { TocGroup, TocCustomPage } from "../../../../types/toc/toc"; +import { TocGroup, TocCustomPage } from "../../../types/toc/toc"; export class TocContentParser { async parseContentFolder(contentFolderPath: string, workingDirectory: string): Promise { diff --git a/src/application/portal/new/toc/toc-structure-generator.ts b/src/application/portal/toc/toc-structure-generator.ts similarity index 98% rename from src/application/portal/new/toc/toc-structure-generator.ts rename to src/application/portal/toc/toc-structure-generator.ts index f86e33e1..e6e318fc 100644 --- a/src/application/portal/new/toc/toc-structure-generator.ts +++ b/src/application/portal/toc/toc-structure-generator.ts @@ -1,5 +1,5 @@ import { stringify } from "yaml"; -import { Toc, TocGroup, TocEndpoint, TocModel, TocEndpointGroupOverview } from "../../../../types/toc/toc"; +import { Toc, TocGroup, TocEndpoint, TocModel, TocEndpointGroupOverview } from "../../../types/toc/toc"; export class TocStructureGenerator { createTocStructure( diff --git a/src/commands/portal/new/toc.ts b/src/commands/portal/toc/new.ts similarity index 86% rename from src/commands/portal/new/toc.ts rename to src/commands/portal/toc/new.ts index 8690c50e..d9683407 100644 --- a/src/commands/portal/new/toc.ts +++ b/src/commands/portal/toc/new.ts @@ -1,10 +1,10 @@ import * as path from "path"; import { Command, Flags } from "@oclif/core"; -import { PortalNewTocAction } from "../../../actions/portal/new/toc"; +import { PortalNewTocAction } from "../../../actions/portal/toc/new-toc"; const DEFAULT_FOLDER = process.cwd(); -export default class PortalNewToc extends Command { +export default class PortalTocNew extends Command { static summary = 'Generates a TOC file based on the content directory and spec folder provided in your working directory'; static description = `This command generates a new Table of Contents (TOC) file used in the @@ -40,13 +40,13 @@ https://docs.apimatic.io/platform-api/#/http/guides/generating-on-prem-api-porta }; static examples = [ - `$ apimatic portal:new:toc --destination="./portal/content/" + `$ apimatic portal:toc:new --destination="./portal/content/" A new toc file has been created at ./portal/content/toc.yml `, - `$ apimatic portal:new:toc --folder="./my-project" + `$ apimatic portal:toc:new --folder="./my-project" A new toc file has been created at ./my-project/content/toc.yml `, - `$ apimatic portal:new:toc --folder="./my-project" --destination="./portal/content/" + `$ apimatic portal:toc:new --folder="./my-project" --destination="./portal/content/" A new toc file has been created at ./portal/content/toc.yml ` ]; @@ -56,7 +56,7 @@ A new toc file has been created at ./portal/content/toc.yml } async run(): Promise { - const { flags } = await this.parse(PortalNewToc); + const { flags } = await this.parse(PortalTocNew); const portalNewTocAction = new PortalNewTocAction(); const result = await portalNewTocAction.createToc( flags.folder, @@ -71,4 +71,4 @@ A new toc file has been created at ./portal/content/toc.yml this.error(result.error!); } } -} \ No newline at end of file +} \ No newline at end of file diff --git a/src/prompts/portal/new/toc.ts b/src/prompts/portal/toc/new-toc.ts similarity index 100% rename from src/prompts/portal/new/toc.ts rename to src/prompts/portal/toc/new-toc.ts diff --git a/test/actions/portal/new/toc.test.ts b/test/actions/portal/toc/new-toc.test.ts similarity index 99% rename from test/actions/portal/new/toc.test.ts rename to test/actions/portal/toc/new-toc.test.ts index f758f931..ed721d30 100644 --- a/test/actions/portal/new/toc.test.ts +++ b/test/actions/portal/toc/new-toc.test.ts @@ -2,7 +2,7 @@ import { expect } from "chai"; import * as path from "path"; import * as fs from "fs-extra"; import { dir as tmpDir, DirectoryResult } from "tmp-promise"; -import { PortalNewTocAction } from "../../../../src/actions/portal/new/toc"; +import { PortalNewTocAction } from "../../../../src/actions/portal/toc/new-toc"; describe("PortalNewTocAction", () => { let TEST_WORKING_DIR: string; diff --git a/test/application/portal/new/toc/sdl-parser.test.ts b/test/application/portal/toc/new/sdl-parser.test.ts similarity index 99% rename from test/application/portal/new/toc/sdl-parser.test.ts rename to test/application/portal/toc/new/sdl-parser.test.ts index 0d2cbd4f..0e86b838 100644 --- a/test/application/portal/new/toc/sdl-parser.test.ts +++ b/test/application/portal/toc/new/sdl-parser.test.ts @@ -1,7 +1,7 @@ import { expect } from "chai"; import * as path from "path"; import * as fs from "fs-extra"; -import { SdlParser } from "../../../../../src/application/portal/new/toc/sdl-parser"; +import { SdlParser } from "../../../../../src/application/portal/toc/sdl-parser"; import { PortalService } from "../../../../../src/infrastructure/services/portal-service"; import { Result } from "../../../../../src/types/common/result"; import { Sdl } from "../../../../../src/types/sdl/sdl"; @@ -143,4 +143,4 @@ describe("SdlParser", () => { expect(groupNames).to.deep.equal(["Authentication", "Products"]); }); }); -}); +}); \ No newline at end of file diff --git a/test/application/portal/new/toc/toc-content-parser.test.ts b/test/application/portal/toc/new/toc-content-parser.test.ts similarity index 99% rename from test/application/portal/new/toc/toc-content-parser.test.ts rename to test/application/portal/toc/new/toc-content-parser.test.ts index 5a101dde..12026eca 100644 --- a/test/application/portal/new/toc/toc-content-parser.test.ts +++ b/test/application/portal/toc/new/toc-content-parser.test.ts @@ -1,7 +1,7 @@ import { expect } from "chai"; import * as path from "path"; import * as fs from "fs-extra"; -import { TocContentParser } from "../../../../../src/application/portal/new/toc/toc-content-parser"; +import { TocContentParser } from "../../../../../src/application/portal/toc/toc-content-parser"; import { TocGroup } from "../../../../../src/types/toc/toc"; import { dir as tmpDir, DirectoryResult } from "tmp-promise"; diff --git a/test/application/portal/new/toc/toc-structure-generator.test.ts b/test/application/portal/toc/new/toc-structure-generator.test.ts similarity index 99% rename from test/application/portal/new/toc/toc-structure-generator.test.ts rename to test/application/portal/toc/new/toc-structure-generator.test.ts index 7b5e56e2..cdf48517 100644 --- a/test/application/portal/new/toc/toc-structure-generator.test.ts +++ b/test/application/portal/toc/new/toc-structure-generator.test.ts @@ -1,5 +1,5 @@ import { expect } from "chai"; -import { TocStructureGenerator } from "../../../../../src/application/portal/new/toc/toc-structure-generator"; +import { TocStructureGenerator } from "../../../../../src/application/portal/toc/toc-structure-generator"; import { TocEndpoint, TocGroup, TocModel, Toc, TocCustomPage } from "../../../../../src/types/toc/toc"; describe("TocStructureGenerator", () => {