From 9ef77ab3eddd6be4146136f2fefd622ad8fd346a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thea=20Sch=C3=B6bl?= Date: Tue, 7 Nov 2023 15:23:38 +0100 Subject: [PATCH] feat: generator updates --- configuration/tsconfig/tsconfig.json | 1 + packages/openapi-generator/package.json | 23 +- .../src/generator/{index.ts => index.js} | 15 +- .../src/generator/openapi.js | 89 +++++ .../src/generator/openapi.ts | 91 ----- .../src/generator/{routes.ts => routes.js} | 48 ++- .../{resources/template.ts => template.js} | 5 +- .../src/generator/types/abstract-route.ts | 17 - .../src/{index.ts => index.js} | 20 +- .../types/route-meta.ts => types.d.ts} | 7 +- packages/tsup-plugin/package.json | 26 +- .../tsup-plugin/src/{index.ts => index.js} | 21 +- packages/tsup-plugin/src/types.d.ts | 10 + pnpm-lock.yaml | 347 +++++++++++++++--- 14 files changed, 471 insertions(+), 249 deletions(-) rename packages/openapi-generator/src/generator/{index.ts => index.js} (79%) create mode 100644 packages/openapi-generator/src/generator/openapi.js delete mode 100644 packages/openapi-generator/src/generator/openapi.ts rename packages/openapi-generator/src/generator/{routes.ts => routes.js} (52%) rename packages/openapi-generator/src/generator/{resources/template.ts => template.js} (92%) delete mode 100644 packages/openapi-generator/src/generator/types/abstract-route.ts rename packages/openapi-generator/src/{index.ts => index.js} (65%) rename packages/openapi-generator/src/{generator/types/route-meta.ts => types.d.ts} (78%) rename packages/tsup-plugin/src/{index.ts => index.js} (57%) create mode 100644 packages/tsup-plugin/src/types.d.ts diff --git a/configuration/tsconfig/tsconfig.json b/configuration/tsconfig/tsconfig.json index c957c2e7..8151da4d 100644 --- a/configuration/tsconfig/tsconfig.json +++ b/configuration/tsconfig/tsconfig.json @@ -15,6 +15,7 @@ "noFallthroughCasesInSwitch": true, "isolatedModules": true, "allowJs": true, + "checkJs": true, "resolveJsonModule": true, "allowSyntheticDefaultImports": true, "noImplicitAny": true, diff --git a/packages/openapi-generator/package.json b/packages/openapi-generator/package.json index 75d7ff52..9e353727 100644 --- a/packages/openapi-generator/package.json +++ b/packages/openapi-generator/package.json @@ -1,6 +1,6 @@ { "name": "@openstapps/openapi-generator", - "description": "Validator for @openstapps/core", + "description": "OpenAPI generator for @openstapps/core", "version": "3.0.0", "type": "module", "license": "GPL-3.0-only", @@ -13,20 +13,19 @@ "core", "validator" ], - "main": "lib/index.js", - "types": "lib/index.d.ts", + "main": "src/index.js", + "types": "src/types.d.ts", "files": [ "lib", "README.md", "CHANGELOG.md" ], "scripts": { - "build": "tsup-node --dts", "docs": "typedoc --json ./docs/docs.json --options ../../typedoc.base.json src/generator/index.ts", "format": "prettier . -c --ignore-path ../../.gitignore", "format:fix": "prettier --write . --ignore-path ../../.gitignore", - "lint": "eslint --ext .ts src/", - "lint:fix": "eslint --fix --ext .ts src/", + "lint": "tsc --noEmit && eslint --ext .js src/", + "lint:fix": "eslint --fix --ext .js src/", "test": "c8 mocha" }, "dependencies": { @@ -50,21 +49,9 @@ "mocha": "10.2.0", "mocha-junit-reporter": "2.2.0", "nock": "13.3.1", - "ts-node": "10.9.1", - "tsup": "6.7.0", "typedoc": "0.24.8", "typescript": "5.1.6" }, - "tsup": { - "entry": [ - "src/app.ts", - "src/index.ts" - ], - "sourcemap": true, - "clean": true, - "format": "esm", - "outDir": "lib" - }, "prettier": "@openstapps/prettier-config", "eslintConfig": { "extends": [ diff --git a/packages/openapi-generator/src/generator/index.ts b/packages/openapi-generator/src/generator/index.js similarity index 79% rename from packages/openapi-generator/src/generator/index.ts rename to packages/openapi-generator/src/generator/index.js index 60661317..8c7becfc 100644 --- a/packages/openapi-generator/src/generator/index.ts +++ b/packages/openapi-generator/src/generator/index.js @@ -1,17 +1,14 @@ import {getRoutes} from './routes.js'; -import {openapi3Template} from './resources/template.js'; +import {openapi3Template} from './template.js'; import {capitalize, generateOpenAPIForRoute} from './openapi.js'; -import ts from 'typescript'; /** * Generate OpenAPI definitions + * @param schemaName {string} + * @param program {import('typescript').Program} + * @param instances {Record} */ -export async function generateOpenAPI( - schemaName: string, - program: ts.Program, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - instances: Record, -) { +export async function generateOpenAPI(schemaName, program, instances) { const routes = await getRoutes(program, instances); routes.sort((a, b) => a.route.instance.urlPath.localeCompare(b.route.instance.urlPath)); @@ -20,7 +17,7 @@ export async function generateOpenAPI( routeWithMetaInformation.route.instance.urlPath = routeWithMetaInformation.route.instance.urlPath.replaceAll( /:\w+/g, - (match: string) => `{${match.replace(':', '')}}`, + match => `{${match.replace(':', '')}}`, ); } diff --git a/packages/openapi-generator/src/generator/openapi.js b/packages/openapi-generator/src/generator/openapi.js new file mode 100644 index 00000000..10157366 --- /dev/null +++ b/packages/openapi-generator/src/generator/openapi.js @@ -0,0 +1,89 @@ +/** + * Creates sentence cased string + * @param string {string | undefined} + * @returns {string} + */ +export function capitalize(string) { + return `${string?.charAt(0).toUpperCase()}${string?.slice(1).toLowerCase()}`; +} + +/** + * Generate documentation snippet for one route + * @typedef {import('../types.js').RouteMeta} RouteMeta + * + * @param routeMeta {RouteMeta} A route instance with its meta information + * @param schemaName {string} Path to directory that will contain relevant schemas for the route + * @param tagsToKeep {string[]} Tags / keywords that can be used for grouping routes + * @returns {import('openapi-types').OpenAPIV3.PathItemObject} + */ +export function generateOpenAPIForRoute({route, description, tags}, schemaName, tagsToKeep) { + /** @type {(name: string) => ({$ref: string})} */ + const schema = name => ({$ref: `./${schemaName}#/definitions/${name}`}); + + /** @type {import('openapi-types').OpenAPIV3.ResponsesObject} */ + const responses = Object.fromEntries( + route.instance.errorNames + .map(RouteError => new RouteError()) + .map(error => [ + error.statusCode, + { + description: + error.message ?? capitalize(error.name.replaceAll(/([A-Z][a-z])/g, ' $1').replace('SC ', '')), + content: { + 'application/json': { + schema: schema(error.name), + }, + }, + }, + ]), + ); + + /** @type {import('openapi-types').OpenAPIV3.ParameterObject[]} */ + const parameters = Object.entries(route.instance.obligatoryParameters ?? {}).map( + ([parameter, schemaDefinition]) => ({ + in: 'path', + name: parameter, + required: true, + schema: schema(schemaDefinition), + }), + ); + + /** @type {import('openapi-types').OpenAPIV3.OperationObject} */ + const operation = { + summary: capitalize(description?.replace(/(Route to |Route for )/gim, '')), + requestBody: { + description: route.responseBodyDescription ?? undefined, + content: { + 'application/json': { + schema: schema(route.instance.requestBodyName), + }, + }, + }, + parameters: [ + { + name: 'X-StApps-Version', + in: 'header', + schema: { + type: 'string', + example: '2.0.0', + }, + required: true, + }, + ...parameters, + ], + responses: { + 200: { + description: route.responseBodyDescription, + content: { + 'application/json': { + schema: schema(route.instance.responseBodyName), + }, + }, + }, + ...responses, + }, + tags: tags?.filter(value => tagsToKeep.includes(value)), + }; + + return {[route.instance.method.toLowerCase()]: operation}; +} diff --git a/packages/openapi-generator/src/generator/openapi.ts b/packages/openapi-generator/src/generator/openapi.ts deleted file mode 100644 index 4cf32c1f..00000000 --- a/packages/openapi-generator/src/generator/openapi.ts +++ /dev/null @@ -1,91 +0,0 @@ -import {RouteMeta} from './types/route-meta.js'; -import {OpenAPIV3} from 'openapi-types'; - -/** - * Creates sentence cased string - */ -export function capitalize(string?: string): string { - return `${string?.charAt(0).toUpperCase()}${string?.slice(1).toLowerCase()}`; -} - -/** - * Generate documentation snippet for one route - * @param routeMeta A route instance with its meta information - * @param schemaName Path to directory that will contain relevant schemas for the route - * @param tagsToKeep Tags / keywords that can be used for grouping routes - */ -export function generateOpenAPIForRoute( - routeMeta: RouteMeta, - schemaName: string, - tagsToKeep: string[], -): OpenAPIV3.PathItemObject { - const route = routeMeta.route; - const openapiPath: OpenAPIV3.PathItemObject = {}; - const schema = (name: string) => ({$ref: `./${schemaName}#/definitions/${name}`}); - - openapiPath[route.instance.method.toLowerCase() as OpenAPIV3.HttpMethods] = { - summary: capitalize(routeMeta.description?.replace(/(Route to |Route for )/gim, '')), - requestBody: { - description: route.responseBodyDescription ?? undefined, - content: { - 'application/json': { - schema: schema(route.instance.requestBodyName), - }, - }, - }, - parameters: [ - { - name: 'X-StApps-Version', - in: 'header', - schema: { - type: 'string', - example: '2.0.0', - }, - required: true, - }, - ], - responses: {}, - tags: routeMeta.tags?.filter(value => tagsToKeep.includes(value)), - }; - - openapiPath[route.instance.method.toLowerCase() as OpenAPIV3.HttpMethods]!.responses![ - route.instance.statusCodeSuccess - ] = { - description: route.responseBodyDescription, - content: { - 'application/json': { - schema: schema(route.instance.responseBodyName), - }, - }, - }; - - for (const RouteError of route.instance.errorNames) { - const error = new RouteError(); - openapiPath[route.instance.method.toLowerCase() as OpenAPIV3.HttpMethods]!.responses![error.statusCode] = - { - description: - error.message ?? capitalize(error.name.replaceAll(/([A-Z][a-z])/g, ' $1').replace('SC ', '')), - content: { - 'application/json': { - schema: schema(RouteError.name), - }, - }, - }; - } - - if (typeof route.instance.obligatoryParameters === 'object') { - for (const [parameter, schemaDefinition] of Object.entries(route.instance.obligatoryParameters)) { - const openapiParameter: OpenAPIV3.ParameterObject = { - in: 'path', - name: parameter, - required: true, - schema: schema(schemaDefinition), - }; - openapiPath[route.instance.method.toLowerCase() as OpenAPIV3.HttpMethods]?.parameters?.push( - openapiParameter, - ); - } - } - - return openapiPath; -} diff --git a/packages/openapi-generator/src/generator/routes.ts b/packages/openapi-generator/src/generator/routes.js similarity index 52% rename from packages/openapi-generator/src/generator/routes.ts rename to packages/openapi-generator/src/generator/routes.js index 0bfd32c4..6324870f 100644 --- a/packages/openapi-generator/src/generator/routes.ts +++ b/packages/openapi-generator/src/generator/routes.js @@ -12,19 +12,25 @@ * You should have received a copy of the GNU General Public License along with * this program. If not, see . */ -import {RouteMeta} from './types/route-meta.js'; import ts from 'typescript'; -import {SCAbstractRoute} from '../../../core/lib/index.js'; /** * Get all routes + * @typedef {import('../types.js').RouteMeta} RouteMeta + * @typedef {import('../types.js').SCAbstractRoute} SCAbstractRoute + * + * @param program {ts.Program} + * @param instances {Record} + * @returns {Promise} */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export async function getRoutes(program: ts.Program, instances: Record) { +export async function getRoutes(program, instances) { const checker = program.getTypeChecker(); - const routes: RouteMeta[] = []; - const interfaces = new Map(); - const routeClasses: ts.ClassDeclaration[] = []; + /** @type {RouteMeta[]} */ + const routes = []; + /** @type {Map} */ + const interfaces = new Map(); + /** @type {ts.ClassDeclaration[]} */ + const routeClasses = []; for (const sourceFile of program.getSourceFiles()) { const sourceFileSymbol = checker.getSymbolAtLocation(sourceFile); @@ -33,23 +39,31 @@ export async function getRoutes(program: ts.Program, instances: Record clause.types.some(it => it.getText() === 'SCAbstractRoute'), @@ -70,8 +86,10 @@ function extendsAbstractRoute(declaration: ts.ClassDeclaration): boolean { /** * Gets the description of a declaration + * @param declaration {ts.Declaration} + * @returns {string} */ -function getDescription(declaration: ts.Declaration) { +function getDescription(declaration) { return ts .getJSDocCommentsAndTags(declaration) .filter(ts.isJSDoc) diff --git a/packages/openapi-generator/src/generator/resources/template.ts b/packages/openapi-generator/src/generator/template.js similarity index 92% rename from packages/openapi-generator/src/generator/resources/template.ts rename to packages/openapi-generator/src/generator/template.js index f8c81509..155b1b75 100644 --- a/packages/openapi-generator/src/generator/resources/template.ts +++ b/packages/openapi-generator/src/generator/template.js @@ -12,9 +12,8 @@ * You should have received a copy of the GNU General Public License along with * this program. If not, see . */ -import {OpenAPIV3} from 'openapi-types'; - -export const openapi3Template: OpenAPIV3.Document = { +/** @type {import('openapi-types').OpenAPIV3.Document} */ +export const openapi3Template = { openapi: '3.0.3', info: { title: 'Openstapps Backend', diff --git a/packages/openapi-generator/src/generator/types/abstract-route.ts b/packages/openapi-generator/src/generator/types/abstract-route.ts deleted file mode 100644 index b70444ad..00000000 --- a/packages/openapi-generator/src/generator/types/abstract-route.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright (C) 2018-2023 StApps - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation, version 3. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program. If not, see . - */ -// sneaky import here -// noinspection ES6PreferShortImport -export type {SCAbstractRoute} from '../../../../core/src/protocol/route.js'; diff --git a/packages/openapi-generator/src/index.ts b/packages/openapi-generator/src/index.js similarity index 65% rename from packages/openapi-generator/src/index.ts rename to packages/openapi-generator/src/index.js index fb671db8..23e662dd 100644 --- a/packages/openapi-generator/src/index.ts +++ b/packages/openapi-generator/src/index.js @@ -1,25 +1,27 @@ import {generateOpenAPI} from './generator/index.js'; import path from 'path'; -import {generateFiles, Plugin} from '@openstapps/tsup-plugin'; +import {generateFiles} from '@openstapps/tsup-plugin'; import ts from 'typescript'; import {readFile} from 'fs/promises'; /** * TSUp plugin for generating OpenAPI files - * @param filename the name of the generated OpenAPI definitions - * @param schemaName the name of the generated JSON Schema for reference in the OpenAPI file + * @param filename {string} the name of the generated OpenAPI definitions + * @param schemaName {string} the name of the generated JSON Schema for reference in the OpenAPI file + * @returns {import('@openstapps/tsup-plugin').Plugin} */ -export function openapiPlugin(filename: string, schemaName: string): Plugin { +export function openapiPlugin(filename, schemaName) { return { name: 'openapi-generator', async buildEnd({writtenFiles}) { await generateFiles('OpenAPI', async function () { - const rootNames = this.options.entry as string[]; - const projectDirectory = path.dirname(this.options.tsconfig!); - const generatedFile = writtenFiles.find(it => it.name.endsWith('.js'))!; - const instances = await import(`${projectDirectory}/${generatedFile.name}`); + if (!this.options.tsconfig) throw new Error('No TSConfig path specified'); + const rootNames = /** @type {string[]} */ (this.options.entry); + const projectDirectory = path.dirname(this.options.tsconfig); + const generatedFile = writtenFiles.find(it => it.name.endsWith('.js')); + const instances = await import(`${projectDirectory}/${generatedFile?.name}`); const tsconfig = ts.parseJsonConfigFileContent( - await readFile(this.options.tsconfig!, 'utf8').then(it => JSON.parse(it)), + await readFile(this.options.tsconfig, 'utf8').then(it => JSON.parse(it)), ts.sys, projectDirectory, ); diff --git a/packages/openapi-generator/src/generator/types/route-meta.ts b/packages/openapi-generator/src/types.d.ts similarity index 78% rename from packages/openapi-generator/src/generator/types/route-meta.ts rename to packages/openapi-generator/src/types.d.ts index 26e3d8aa..6c83dd12 100644 --- a/packages/openapi-generator/src/generator/types/route-meta.ts +++ b/packages/openapi-generator/src/types.d.ts @@ -12,7 +12,10 @@ * You should have received a copy of the GNU General Public License along with * this program. If not, see . */ -import {SCAbstractRoute} from '../../../../core/src/index.js'; +// sneaky import here +// noinspection ES6PreferShortImport +import {SCAbstractRoute} from '../../core/src/protocol/route.js'; +export {SCAbstractRoute} from '../../core/src/protocol/route.js'; export interface RouteInstanceMeta { instance: SCAbstractRoute; @@ -26,3 +29,5 @@ export interface RouteMeta { route: RouteInstanceMeta; tags?: string[]; } + +export {openapiPlugin} from './index.js'; diff --git a/packages/tsup-plugin/package.json b/packages/tsup-plugin/package.json index 657c1b38..c957a29f 100644 --- a/packages/tsup-plugin/package.json +++ b/packages/tsup-plugin/package.json @@ -13,24 +13,24 @@ "core", "validator" ], - "main": "lib/index.js", - "types": "lib/index.d.ts", + "types": "src/types.d.ts", + "main": "src/index.js", "files": [ "lib", "README.md", "CHANGELOG.md" ], "scripts": { - "build": "tsup-node --dts", - "docs": "typedoc --json ./docs/docs.json --options ../../typedoc.base.json src/index.ts", + "docs": "typedoc --json ./docs/docs.json --options ../../typedoc.base.json src/index.js", "format": "prettier . -c --ignore-path ../../.gitignore", "format:fix": "prettier --write . --ignore-path ../../.gitignore", - "lint": "eslint --ext .ts src/", - "lint:fix": "eslint --fix --ext .ts src/", + "lint": "tsc --noEmit && eslint --ext .js src/", + "lint:fix": "eslint --fix --ext .js src/", "test": "c8 mocha" }, "dependencies": { - "colorette": "2.0.20" + "colorette": "2.0.20", + "tsup": "7.2.0" }, "devDependencies": { "@openstapps/eslint-config": "workspace:*", @@ -49,21 +49,9 @@ "mocha": "10.2.0", "mocha-junit-reporter": "2.2.0", "nock": "13.3.1", - "ts-node": "10.9.1", - "tsup": "6.7.0", "typedoc": "0.24.8", "typescript": "5.1.6" }, - "tsup": { - "entry": [ - "src/app.ts", - "src/index.ts" - ], - "sourcemap": true, - "clean": true, - "format": "esm", - "outDir": "lib" - }, "prettier": "@openstapps/prettier-config", "eslintConfig": { "extends": [ diff --git a/packages/tsup-plugin/src/index.ts b/packages/tsup-plugin/src/index.js similarity index 57% rename from packages/tsup-plugin/src/index.ts rename to packages/tsup-plugin/src/index.js index 340e2602..7cff7c3f 100644 --- a/packages/tsup-plugin/src/index.ts +++ b/packages/tsup-plugin/src/index.js @@ -1,22 +1,17 @@ -import {Options} from 'tsup'; import {writeFile, stat} from 'fs/promises'; import {bold, green} from 'colorette'; -type ArrayElement = ArrayType extends readonly (infer ElementType)[] - ? ElementType - : never; - -export type Plugin = ArrayElement['plugins']>; -export type PluginContext = ThisParameterType['buildEnd']>; - /** * Utility function for generating files in a TSUp plugin + * @typedef {import('./types.js').PluginContext} PluginContext + * @typedef {import('./types.js').Plugin} Plugin + * + * @param label {string} + * @param build {(this: PluginContext) => Promise>} + * @returns {(this: PluginContext) => Promise} */ -export function generateFiles( - label: string, - build: (this: PluginContext) => Promise>, -) { - return async function (this: PluginContext) { +export function generateFiles(label, build) { + return async function () { this.logger.info(label, 'Build start'); const time = performance.now(); const result = await build.call(this); diff --git a/packages/tsup-plugin/src/types.d.ts b/packages/tsup-plugin/src/types.d.ts new file mode 100644 index 00000000..d6e87230 --- /dev/null +++ b/packages/tsup-plugin/src/types.d.ts @@ -0,0 +1,10 @@ +import {Options} from 'tsup'; + +type ArrayElement = ArrayType extends readonly (infer ElementType)[] + ? ElementType + : never; + +export type Plugin = ArrayElement['plugins']>; +export type PluginContext = ThisParameterType['buildEnd']>; + +export {generateFiles} from './index.js'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d1629f2f..bd114438 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2362,12 +2362,6 @@ importers: prettier: specifier: 2.8.6 version: 2.8.6 - ts-node: - specifier: 10.9.1 - version: 10.9.1(@types/node@18.15.3)(typescript@5.1.6) - tsup: - specifier: 6.7.0 - version: 6.7.0(ts-node@10.9.1)(typescript@5.1.6) typedoc: specifier: 0.24.8 version: 0.24.8(typescript@5.1.6) @@ -2380,6 +2374,9 @@ importers: colorette: specifier: 2.0.20 version: 2.0.20 + tsup: + specifier: 7.2.0 + version: 7.2.0(typescript@5.1.6) devDependencies: '@openstapps/eslint-config': specifier: workspace:* @@ -2453,12 +2450,6 @@ importers: prettier: specifier: 2.8.6 version: 2.8.6 - ts-node: - specifier: 10.9.1 - version: 10.9.1(@types/node@18.15.3)(typescript@5.1.6) - tsup: - specifier: 6.7.0 - version: 6.7.0(ts-node@10.9.1)(typescript@5.1.6) typedoc: specifier: 0.24.8 version: 0.24.8(typescript@5.1.6) @@ -5833,6 +5824,15 @@ packages: dev: true optional: true + /@esbuild/android-arm64@0.18.20: + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true + /@esbuild/android-arm@0.17.19: resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} engines: {node: '>=12'} @@ -5842,6 +5842,15 @@ packages: dev: true optional: true + /@esbuild/android-arm@0.18.20: + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: false + optional: true + /@esbuild/android-x64@0.17.19: resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} engines: {node: '>=12'} @@ -5851,6 +5860,15 @@ packages: dev: true optional: true + /@esbuild/android-x64@0.18.20: + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: false + optional: true + /@esbuild/darwin-arm64@0.17.19: resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} engines: {node: '>=12'} @@ -5860,6 +5878,15 @@ packages: dev: true optional: true + /@esbuild/darwin-arm64@0.18.20: + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + /@esbuild/darwin-x64@0.17.19: resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} engines: {node: '>=12'} @@ -5869,6 +5896,15 @@ packages: dev: true optional: true + /@esbuild/darwin-x64@0.18.20: + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + /@esbuild/freebsd-arm64@0.17.19: resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} engines: {node: '>=12'} @@ -5878,6 +5914,15 @@ packages: dev: true optional: true + /@esbuild/freebsd-arm64@0.18.20: + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + /@esbuild/freebsd-x64@0.17.19: resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} engines: {node: '>=12'} @@ -5887,6 +5932,15 @@ packages: dev: true optional: true + /@esbuild/freebsd-x64@0.18.20: + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-arm64@0.17.19: resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} engines: {node: '>=12'} @@ -5896,6 +5950,15 @@ packages: dev: true optional: true + /@esbuild/linux-arm64@0.18.20: + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-arm@0.17.19: resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} engines: {node: '>=12'} @@ -5905,6 +5968,15 @@ packages: dev: true optional: true + /@esbuild/linux-arm@0.18.20: + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-ia32@0.17.19: resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} engines: {node: '>=12'} @@ -5914,6 +5986,15 @@ packages: dev: true optional: true + /@esbuild/linux-ia32@0.18.20: + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-loong64@0.17.19: resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} engines: {node: '>=12'} @@ -5923,6 +6004,15 @@ packages: dev: true optional: true + /@esbuild/linux-loong64@0.18.20: + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-mips64el@0.17.19: resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} engines: {node: '>=12'} @@ -5932,6 +6022,15 @@ packages: dev: true optional: true + /@esbuild/linux-mips64el@0.18.20: + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-ppc64@0.17.19: resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} engines: {node: '>=12'} @@ -5941,6 +6040,15 @@ packages: dev: true optional: true + /@esbuild/linux-ppc64@0.18.20: + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-riscv64@0.17.19: resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} engines: {node: '>=12'} @@ -5950,6 +6058,15 @@ packages: dev: true optional: true + /@esbuild/linux-riscv64@0.18.20: + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-s390x@0.17.19: resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} engines: {node: '>=12'} @@ -5959,6 +6076,15 @@ packages: dev: true optional: true + /@esbuild/linux-s390x@0.18.20: + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-x64@0.17.19: resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} engines: {node: '>=12'} @@ -5968,6 +6094,15 @@ packages: dev: true optional: true + /@esbuild/linux-x64@0.18.20: + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/netbsd-x64@0.17.19: resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} engines: {node: '>=12'} @@ -5977,6 +6112,15 @@ packages: dev: true optional: true + /@esbuild/netbsd-x64@0.18.20: + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: false + optional: true + /@esbuild/openbsd-x64@0.17.19: resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} engines: {node: '>=12'} @@ -5986,6 +6130,15 @@ packages: dev: true optional: true + /@esbuild/openbsd-x64@0.18.20: + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: false + optional: true + /@esbuild/sunos-x64@0.17.19: resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} engines: {node: '>=12'} @@ -5995,6 +6148,15 @@ packages: dev: true optional: true + /@esbuild/sunos-x64@0.18.20: + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: false + optional: true + /@esbuild/win32-arm64@0.17.19: resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} engines: {node: '>=12'} @@ -6004,6 +6166,15 @@ packages: dev: true optional: true + /@esbuild/win32-arm64@0.18.20: + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + /@esbuild/win32-ia32@0.17.19: resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} engines: {node: '>=12'} @@ -6013,6 +6184,15 @@ packages: dev: true optional: true + /@esbuild/win32-ia32@0.18.20: + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + /@esbuild/win32-x64@0.17.19: resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} engines: {node: '>=12'} @@ -6022,6 +6202,15 @@ packages: dev: true optional: true + /@esbuild/win32-x64@0.18.20: + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.43.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -6470,12 +6659,10 @@ packages: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.18 - dev: true /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/resolve-uri@3.1.1: resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} @@ -6484,7 +6671,6 @@ packages: /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/source-map@0.3.5: resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} @@ -6495,7 +6681,6 @@ packages: /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - dev: true /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} @@ -6505,7 +6690,6 @@ packages: dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 - dev: true /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} @@ -8149,7 +8333,6 @@ packages: /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: true /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} @@ -8157,7 +8340,6 @@ packages: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - dev: true /apache-crypt@1.2.6: resolution: {integrity: sha512-072WetlM4blL8PREJVeY+WHiUh1R5VNt2HfceGS8aKqttPHcmqE5pkKuXPz/ULmJOFkc8Hw3kfKl6vy7Qka6DA==} @@ -8533,7 +8715,6 @@ packages: /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} - dev: true /bindings@1.5.0: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} @@ -8743,6 +8924,16 @@ packages: load-tsconfig: 0.2.5 dev: true + /bundle-require@4.0.1(esbuild@0.18.20): + resolution: {integrity: sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + peerDependencies: + esbuild: '>=0.17' + dependencies: + esbuild: 0.18.20 + load-tsconfig: 0.2.5 + dev: false + /busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -8780,7 +8971,6 @@ packages: /cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} - dev: true /cacache@17.1.3: resolution: {integrity: sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==} @@ -8995,7 +9185,6 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.2 - dev: true /chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} @@ -9241,7 +9430,6 @@ packages: /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} - dev: true /commander@5.1.0: resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} @@ -10977,6 +11165,36 @@ packages: '@esbuild/win32-x64': 0.17.19 dev: true + /esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + dev: false + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -11291,7 +11509,6 @@ packages: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 - dev: true /executable@4.1.1: resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==} @@ -11833,7 +12050,6 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true - dev: true optional: true /fstream@1.0.12: @@ -12085,7 +12301,6 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true /glob@7.2.0: resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} @@ -12604,7 +12819,6 @@ packages: /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} - dev: true /humanize-ms@1.2.1: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} @@ -12904,7 +13118,6 @@ packages: engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 - dev: true /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} @@ -13091,7 +13304,6 @@ packages: /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - dev: true /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} @@ -13331,7 +13543,6 @@ packages: /joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} - dev: true /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -13761,7 +13972,6 @@ packages: /lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} - dev: true /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -13804,7 +14014,6 @@ packages: /load-tsconfig@0.2.5: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true /load-yaml-file@0.2.0: resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} @@ -13951,7 +14160,6 @@ packages: /lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - dev: true /lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} @@ -14237,7 +14445,6 @@ packages: /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} @@ -14306,7 +14513,6 @@ packages: /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - dev: true /mimic-response@3.1.0: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} @@ -14612,7 +14818,6 @@ packages: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 - dev: true /nan@2.17.0: resolution: {integrity: sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==} @@ -15008,7 +15213,6 @@ packages: engines: {node: '>=8'} dependencies: path-key: 3.1.1 - dev: true /npmlog@6.0.2: resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} @@ -15159,7 +15363,6 @@ packages: engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 - dev: true /open@7.4.2: resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} @@ -15621,7 +15824,6 @@ packages: /pirates@4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - dev: true /piscina@3.2.0: resolution: {integrity: sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==} @@ -15685,6 +15887,22 @@ packages: yaml: 1.10.2 dev: true + /postcss-load-config@4.0.1: + resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.1.0 + yaml: 2.3.4 + dev: false + /postcss-loader@7.3.2(postcss@8.4.24)(webpack@5.86.0): resolution: {integrity: sha512-c7qDlXErX6n0VT+LUsW+nwefVtTu3ORtVvK8EXuUIDcxo+b/euYqpuHlJAvePb0Af5e8uMjR/13e0lTuYifaig==} engines: {node: '>= 14.15.0'} @@ -16262,7 +16480,6 @@ packages: engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 - dev: true /redent@3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} @@ -16407,7 +16624,6 @@ packages: /resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - dev: true /resolve-url-loader@5.0.0: resolution: {integrity: sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==} @@ -16509,7 +16725,6 @@ packages: hasBin: true optionalDependencies: fsevents: 2.3.2 - dev: true /rsvp@3.6.2: resolution: {integrity: sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==} @@ -16857,7 +17072,6 @@ packages: /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true /signal-exit@4.0.2: resolution: {integrity: sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==} @@ -17116,7 +17330,6 @@ packages: engines: {node: '>= 8'} dependencies: whatwg-url: 7.1.0 - dev: true /sourcemap-codec@1.4.8: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} @@ -17453,7 +17666,6 @@ packages: /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} - dev: true /strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} @@ -17647,7 +17859,6 @@ packages: mz: 2.7.0 pirates: 4.0.6 ts-interface-checker: 0.1.13 - dev: true /suncalc@1.9.0: resolution: {integrity: sha512-vMJ8Byp1uIPoj+wb9c1AdK4jpkSKVAywgHX0lqY7zt6+EWRRC3Z+0Ucfjy/0yxTVO1hwwchZe4uoFNqrIC24+A==} @@ -17950,13 +18161,11 @@ packages: engines: {node: '>=0.8'} dependencies: thenify: 3.3.1 - dev: true /thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} dependencies: any-promise: 1.3.0 - dev: true /throttle-debounce@5.0.0: resolution: {integrity: sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg==} @@ -18066,7 +18275,6 @@ packages: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} dependencies: punycode: 2.3.0 - dev: true /traverse@0.6.7: resolution: {integrity: sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==} @@ -18075,7 +18283,6 @@ packages: /tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true - dev: true /treeify@1.1.0: resolution: {integrity: sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==} @@ -18106,7 +18313,6 @@ packages: /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - dev: true /ts-json-schema-generator@1.4.0: resolution: {integrity: sha512-wm8vyihmGgYpxrqRshmYkWGNwEk+sf3xV2rUgxv8Ryeh7bSpMO7pZQOht+2rS002eDkFTxR7EwRPXVzrS0WJTg==} @@ -18218,6 +18424,42 @@ packages: - ts-node dev: true + /tsup@7.2.0(typescript@5.1.6): + resolution: {integrity: sha512-vDHlczXbgUvY3rWvqFEbSqmC1L7woozbzngMqTtL2PGBODTtWlRwGDDawhvWzr5c1QjKe4OAKqJGfE1xeXUvtQ==} + engines: {node: '>=16.14'} + hasBin: true + peerDependencies: + '@swc/core': ^1 + postcss: ^8.4.12 + typescript: '>=4.1.0' + peerDependenciesMeta: + '@swc/core': + optional: true + postcss: + optional: true + typescript: + optional: true + dependencies: + bundle-require: 4.0.1(esbuild@0.18.20) + cac: 6.7.14 + chokidar: 3.5.3 + debug: 4.3.4(supports-color@8.1.1) + esbuild: 0.18.20 + execa: 5.1.1 + globby: 11.1.0 + joycon: 3.1.1 + postcss-load-config: 4.0.1 + resolve-from: 5.0.0 + rollup: 3.26.2 + source-map: 0.8.0-beta.0 + sucrase: 3.32.0 + tree-kill: 1.2.2 + typescript: 5.1.6 + transitivePeerDependencies: + - supports-color + - ts-node + dev: false + /tsutils@3.21.0(typescript@5.1.6): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} @@ -18807,7 +19049,6 @@ packages: /webidl-conversions@4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} - dev: true /webpack-bundle-analyzer@4.7.0: resolution: {integrity: sha512-j9b8ynpJS4K+zfO5GGwsAcQX4ZHpWV+yRiHDiL+bE0XHJ8NiPYLTNVQdlFYWxtpg9lfAQNlwJg16J9AJtFSXRg==} @@ -19009,7 +19250,6 @@ packages: lodash.sortby: 4.7.0 tr46: 1.0.1 webidl-conversions: 4.0.2 - dev: true /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} @@ -19278,7 +19518,6 @@ packages: /yaml@2.3.4: resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} engines: {node: '>= 14'} - dev: true /yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}