diff --git a/package-lock.json b/package-lock.json index 9bc355e9..39079019 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18255,9 +18255,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/schema2dts": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/schema2dts/-/schema2dts-5.0.1.tgz", - "integrity": "sha512-sqj+psfKPiqecRsOd+Jyg+k/XpKe5PT/m+23ylq2GOQYgMzl42G7QXCZcspW8L/a/rudtmp00djxrVv7PFXbnQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/schema2dts/-/schema2dts-5.1.0.tgz", + "integrity": "sha512-+e00B3GWvZipeHky10FKSNk7qNqJYDU3GvHzF3L2lyOE17r0CWHhDssZdIRcx/mhNXnyHux61kl+DzdEsWM4lA==", "dependencies": { "@types/json-schema": "^7.0.12", "camelcase": "^8.0.0", @@ -20427,7 +20427,7 @@ "openapi-types": "^12.1.3", "pkg-dir": "^7.0.0", "portfinder": "^1.0.32", - "schema2dts": "^5.0.1", + "schema2dts": "^5.1.0", "type-fest": "^4.2.0", "yargs-parser": "^21.1.1", "yerror": "^8.0.0" @@ -20922,7 +20922,7 @@ "parse-gitignore": "^1.0.1", "prettier": "^3.0.2", "rimraf": "^5.0.1", - "schema2dts": "^5.0.1", + "schema2dts": "^5.1.0", "ts-node": "^10.8.1", "typescript": "^5.1.6" }, diff --git a/packages/whook-create/src/services/__snapshots__/createWhook.test.ts.snap b/packages/whook-create/src/services/__snapshots__/createWhook.test.ts.snap index 413c4118..0cfde774 100644 --- a/packages/whook-create/src/services/__snapshots__/createWhook.test.ts.snap +++ b/packages/whook-create/src/services/__snapshots__/createWhook.test.ts.snap @@ -173,7 +173,7 @@ DEV_MODE=1 "parse-gitignore": "^1.0.1", "prettier": "^3.0.2", "rimraf": "^5.0.1", - "schema2dts": "^5.0.1", + "schema2dts": "^5.1.0", "ts-node": "^10.8.1", "typescript": "^5.1.6" }, @@ -513,7 +513,7 @@ DEV_MODE=1 "parse-gitignore": "^1.0.1", "prettier": "^3.0.2", "rimraf": "^5.0.1", - "schema2dts": "^5.0.1", + "schema2dts": "^5.1.0", "ts-node": "^10.8.1", "typescript": "^5.1.6" }, @@ -885,7 +885,7 @@ DEV_MODE=1 "parse-gitignore": "^1.0.1", "prettier": "^3.0.2", "rimraf": "^5.0.1", - "schema2dts": "^5.0.1", + "schema2dts": "^5.1.0", "ts-node": "^10.8.1", "typescript": "^5.1.6" }, @@ -1240,7 +1240,7 @@ DEV_MODE=1 "parse-gitignore": "^1.0.1", "prettier": "^3.0.2", "rimraf": "^5.0.1", - "schema2dts": "^5.0.1", + "schema2dts": "^5.1.0", "ts-node": "^10.8.1", "typescript": "^5.1.6" }, diff --git a/packages/whook-create/src/services/createWhook.test.ts b/packages/whook-create/src/services/createWhook.test.ts index 66429947..26a07d82 100644 --- a/packages/whook-create/src/services/createWhook.test.ts +++ b/packages/whook-create/src/services/createWhook.test.ts @@ -197,7 +197,7 @@ describe('initCreateWhook', () => { "parse-gitignore": "^1.0.1", "prettier": "^3.0.2", "rimraf": "^5.0.1", - "schema2dts": "^5.0.1", + "schema2dts": "^5.1.0", "ts-node": "^10.8.1", "typescript": "^5.1.6", }, @@ -419,7 +419,7 @@ describe('initCreateWhook', () => { "parse-gitignore": "^1.0.1", "prettier": "^3.0.2", "rimraf": "^5.0.1", - "schema2dts": "^5.0.1", + "schema2dts": "^5.1.0", "ts-node": "^10.8.1", "typescript": "^5.1.6", }, @@ -626,7 +626,7 @@ describe('initCreateWhook', () => { "parse-gitignore": "^1.0.1", "prettier": "^3.0.2", "rimraf": "^5.0.1", - "schema2dts": "^5.0.1", + "schema2dts": "^5.1.0", "ts-node": "^10.8.1", "typescript": "^5.1.6", }, diff --git a/packages/whook-example/package.json b/packages/whook-example/package.json index f0d6c544..4ac67068 100644 --- a/packages/whook-example/package.json +++ b/packages/whook-example/package.json @@ -119,7 +119,7 @@ "parse-gitignore": "^1.0.1", "prettier": "^3.0.2", "rimraf": "^5.0.1", - "schema2dts": "^5.0.1", + "schema2dts": "^5.1.0", "ts-node": "^10.8.1", "typescript": "^5.1.6" }, diff --git a/packages/whook-example/src/config/common/config.ts b/packages/whook-example/src/config/common/config.ts index 44f3166a..6fed91d1 100644 --- a/packages/whook-example/src/config/common/config.ts +++ b/packages/whook-example/src/config/common/config.ts @@ -39,6 +39,13 @@ const CONFIG: Omit = { description: 'The provided token ("$0") do not match', }, }, + OPEN_API_TYPES_CONFIG: { + baseName: 'API', + generateUnusedSchemas: false, + generateRealEnums: false, + exportNamespaces: false, + brandedTypes: [], + }, JWT: { duration: '2d', tolerance: '2h', diff --git a/packages/whook-example/src/config/local/config.ts b/packages/whook-example/src/config/local/config.ts index 9e8d9f26..9e7fb0c0 100644 --- a/packages/whook-example/src/config/local/config.ts +++ b/packages/whook-example/src/config/local/config.ts @@ -12,6 +12,10 @@ const CONFIG: AppConfig = { HOST: 'localhost', DEV_ACCESS_TOKEN: 'admin|1|1', DEFAULT_MECHANISM: 'Fake', + OPEN_API_TYPES_CONFIG: { + ...COMMON_CONFIG.OPEN_API_TYPES_CONFIG, + generateUnusedSchemas: true, + }, // This allows you to map service names depending on // the targetted environment. Here, for dev, we don't send SMS // but instead log them in the console. diff --git a/packages/whook/package.json b/packages/whook/package.json index 571cd4ed..1025ac2d 100644 --- a/packages/whook/package.json +++ b/packages/whook/package.json @@ -124,7 +124,7 @@ "openapi-types": "^12.1.3", "pkg-dir": "^7.0.0", "portfinder": "^1.0.32", - "schema2dts": "^5.0.1", + "schema2dts": "^5.1.0", "type-fest": "^4.2.0", "yargs-parser": "^21.1.1", "yerror": "^8.0.0" diff --git a/packages/whook/src/commands/generateOpenAPITypes.test.ts b/packages/whook/src/commands/generateOpenAPITypes.test.ts index 8c7e7b3a..c7c2628a 100644 --- a/packages/whook/src/commands/generateOpenAPITypes.test.ts +++ b/packages/whook/src/commands/generateOpenAPITypes.test.ts @@ -2,13 +2,20 @@ import { describe, it, beforeEach, jest, expect } from '@jest/globals'; import initGenerateOpenAPITypes from './generateOpenAPITypes.js'; import { PassThrough } from 'stream'; import { definition as initGetPingDefinition } from '../handlers/getPing.js'; -import { NodeEnv } from 'application-services'; +import type { OpenAPITypesGenerationOptions } from 'schema2dts'; import type { OpenAPIV3 } from 'openapi-types'; import type { LogService } from 'common-services'; describe('generateOpenAPITypes', () => { const getOpenAPI = jest.fn(); const log = jest.fn(); + const OPEN_API_TYPES_CONFIG: OpenAPITypesGenerationOptions = { + baseName: 'API', + generateUnusedSchemas: true, + generateRealEnums: false, + exportNamespaces: false, + brandedTypes: [], + }; const API: OpenAPIV3.Document = { openapi: '3.0.2', info: { @@ -40,7 +47,7 @@ describe('generateOpenAPITypes', () => { outstream.once('end', () => resolve(buffer.toString())); }); const generateOpenAPITypes = await initGenerateOpenAPITypes({ - ENV: { NODE_ENV: NodeEnv.Development }, + OPEN_API_TYPES_CONFIG, instream, outstream, log, diff --git a/packages/whook/src/commands/generateOpenAPITypes.ts b/packages/whook/src/commands/generateOpenAPITypes.ts index 9d5e3c69..29580f0c 100644 --- a/packages/whook/src/commands/generateOpenAPITypes.ts +++ b/packages/whook/src/commands/generateOpenAPITypes.ts @@ -1,10 +1,13 @@ import { autoService, extra } from 'knifecycle'; import { generateOpenAPITypes as generateTypes, toSource } from 'schema2dts'; -import { NodeEnv } from 'application-services'; -import type { AppEnvVars } from 'application-services'; +import type { OpenAPITypesGenerationOptions } from 'schema2dts'; import type { LogService } from 'common-services'; import type { WhookCommandDefinition } from '../services/promptArgs.js'; +export type OpenAPITypesConfig = { + OPEN_API_TYPES_CONFIG: OpenAPITypesGenerationOptions; +}; + /* Architecture Note #5.3: Examples Whook's default project comes with a few sample commands. @@ -30,12 +33,11 @@ export const definition: WhookCommandDefinition = { export default extra(definition, autoService(initGenerateOpenAPITypes)); async function initGenerateOpenAPITypes({ - ENV, + OPEN_API_TYPES_CONFIG, instream = process.stdin, outstream = process.stdout, log, -}: { - ENV: AppEnvVars; +}: OpenAPITypesConfig & { instream: NodeJS.ReadableStream; outstream: NodeJS.WritableStream; log: LogService; @@ -53,12 +55,7 @@ async function initGenerateOpenAPITypes({ }); const typesDefs = toSource( - await generateTypes(JSON.parse(openAPI), { - baseName: 'API', - generateUnusedSchemas: ENV.NODE_ENV === NodeEnv.Development, - generateRealEnums: false, - exportNamespaces: false, - }), + await generateTypes(JSON.parse(openAPI), OPEN_API_TYPES_CONFIG), ); log('warning', '📇 - Writing types...'); diff --git a/packages/whook/src/types.ts b/packages/whook/src/types.ts index d390fc14..4f6f9b15 100644 --- a/packages/whook/src/types.ts +++ b/packages/whook/src/types.ts @@ -25,6 +25,7 @@ import type { ProcessEnvConfig, ProcessServiceConfig, } from 'application-services'; +import type { OpenAPITypesConfig } from './commands/generateOpenAPITypes.js'; export type WhookBaseEnv = WhookHTTPServerEnv & WhookBaseURLEnv & @@ -44,4 +45,5 @@ export type WhookBaseConfigs = ProcessServiceConfig & WhookObfuscatorConfig & WhookAPIDefinitionsConfig & WhookCompilerConfig & - WhookWrappersConfig; + WhookWrappersConfig & + OpenAPITypesConfig; diff --git a/packages/whook/src/watch.ts b/packages/whook/src/watch.ts index 578d07c4..0fae8363 100644 --- a/packages/whook/src/watch.ts +++ b/packages/whook/src/watch.ts @@ -110,6 +110,7 @@ export async function restartDevServer({ const { ENV, + OPEN_API_TYPES_CONFIG, PROJECT_SRC, $instance: _instance, delay: _delay, @@ -125,6 +126,7 @@ export async function restartDevServer({ ...injectedNames, 'ENV', + 'OPEN_API_TYPES_CONFIG', 'PROJECT_SRC', '$instance', 'delay', @@ -157,7 +159,7 @@ export async function restartDevServer({ const bridge = new PassThrough(); const openAPITypesGenerationPromise = ( await initGenerateOpenAPITypes({ - ENV, + OPEN_API_TYPES_CONFIG, instream, outstream: bridge, log,