@sebspark/openapi-typegen 5.0.2 → 5.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1084,3 +1084,4 @@ export {
1084
1084
  generate2 as generate,
1085
1085
  generateTypescript
1086
1086
  };
1087
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/generator/formatter.ts","../src/generator/common.ts","../src/generator/document.ts","../src/generator/args.ts","../src/generator/client.ts","../src/generator/server.ts","../src/generator/generator.ts","../src/parser/common.ts","../src/parser/schema.ts","../src/parser/headers.ts","../src/parser/parameters.ts","../src/parser/args.ts","../src/parser/responseBodies.ts","../src/parser/paths.ts","../src/parser/requestBodies.ts","../src/parser/securitySchemes.ts","../src/parser/index.ts"],"sourcesContent":["import { mkdir, readdir, readFile, stat, writeFile } from 'node:fs/promises'\nimport { parse, resolve } from 'node:path'\nimport type { OpenApiDocument } from '@sebspark/openapi-core'\nimport { pascalCase } from 'change-case'\nimport * as YAML from 'yaml'\nimport { generate as _generate, format } from './generator/index'\nimport { parseDocument } from './parser/index'\n\nexport const generateTypescript = async (\n name: string,\n doc: OpenApiDocument\n): Promise<string> => {\n const parsed = parseDocument(doc)\n const generated = _generate(name, parsed)\n const formatted = await format(generated)\n\n return formatted\n}\n\nexport const generate = async (\n input: string,\n output?: string\n): Promise<string | undefined> => {\n const docs = await readDocs(input)\n const generated = await generateDocs(docs)\n\n if (!output) return generated.map((d) => d.ts).join('\\n\\n')\n await saveDocs(output, generated)\n}\n\ntype Doc = {\n name: string\n doc: OpenApiDocument\n}\ntype GeneratedDoc = Doc & {\n ts: string\n}\nconst readDocs = async (input: string): Promise<Doc[]> => {\n const path = resolve(input)\n const stats = await stat(path)\n\n const filePaths: string[] = []\n\n if (stats.isFile()) filePaths.push(path)\n if (stats.isDirectory()) {\n const files = await readdir(path)\n filePaths.push(...files.map((f) => resolve(path, f)))\n }\n\n const readFiles: Doc[] = []\n for (const p of filePaths) {\n const { name, ext } = parse(p)\n let doc: OpenApiDocument\n switch (ext) {\n case '.json': {\n console.log(`Reading ${p}`)\n const txt = await readFile(p, 'utf8')\n doc = JSON.parse(txt) as OpenApiDocument\n break\n }\n case '.yml':\n case '.yaml': {\n console.log(`Reading ${p}`)\n const txt = await readFile(p, 'utf8')\n doc = YAML.parse(txt) as OpenApiDocument\n break\n }\n default:\n continue\n }\n readFiles.push({\n doc,\n name,\n })\n }\n return readFiles\n}\n\nconst generateDocs = async (files: Doc[]): Promise<GeneratedDoc[]> => {\n const generated: GeneratedDoc[] = []\n for (const doc of files) {\n console.log(`Generating ${doc.name}`)\n const ts = await generateTypescript(classname(doc.name), doc.doc)\n generated.push({\n ...doc,\n ts,\n })\n }\n return generated\n}\n\nconst saveDocs = async (\n output: string,\n docs: GeneratedDoc[]\n): Promise<void> => {\n const stats = await stat(output)\n const dir = stats.isDirectory() ? output : parse(output).dir\n await mkdir(dir, { recursive: true })\n for (const doc of docs) {\n const path = resolve(dir, `${filename(doc.name)}.ts`)\n console.log(`Writing ${path}`)\n await writeFile(path, doc.ts, 'utf8')\n }\n}\n\nexport const classname = (name: string): string => {\n return pascalCase(name.replace(/\\d+/g, ''))\n}\n\nexport const filename = (name: string): string => {\n return name.replace(/\\./g, '_')\n}\n","import { type Options, format as pFormat } from 'prettier'\n\nconst options: Options = {\n parser: 'typescript',\n singleQuote: true,\n semi: false,\n trailingComma: 'all',\n}\n\nexport const format = async (code: string): Promise<string> =>\n pFormat(code, options)\n","import { constantCase, pascalCase } from 'change-case'\nimport type {\n ArrayType,\n CustomType,\n Discriminator,\n DocumentableType,\n EnumType,\n Header,\n ObjectType,\n PrimitiveType,\n Property,\n RecordType,\n ResponseBody,\n TypeDefinition,\n UnknownType,\n} from '../types'\nimport { document } from './document'\n\nexport const OR = ' | '\nexport const AND = ' & '\n\nexport const generateType = (parsed: TypeDefinition): string => {\n let type: string\n switch (parsed.type) {\n case 'enum': {\n type = generateEnum(parsed as EnumType)\n break\n }\n case 'array': {\n type = generateArray(parsed as ArrayType)\n break\n }\n case 'object': {\n type = generateObject(parsed as ObjectType)\n break\n }\n case 'record': {\n type = generateRecord(parsed as RecordType)\n break\n }\n case 'unknown': {\n type = generateUnknown(parsed as UnknownType)\n break\n }\n case 'Date':\n case 'bigint':\n case 'boolean':\n case 'null':\n case 'number':\n case 'string':\n case 'symbol':\n case 'undefined':\n type = generatePrimitive(parsed as PrimitiveType)\n break\n default: {\n type = generateCustom(parsed as CustomType)\n }\n }\n return type.replace(/ [&|] \\{\\s*\\}/g, '')\n}\n\nexport const generateProperty = (property: Property): string => {\n const types = property.type.map(generateType)\n return `${document(property)}${propertyName(property.name)}${\n property.optional ? '?' : ''\n }: ${types.join(OR) || 'unknown'}`\n}\n\nexport const preamble = (type: DocumentableType): string =>\n type.name ? `${document(type)}export type ${typeName(type.name)} = ` : ''\n\nexport const rxProperVariable = /^[a-zA-Z_<>$][a-zA-Z0-9_<>$]*$/\n\nconst isValidName = (name: string): boolean => {\n const namingConventionRegex =\n /^([A-Z_]\\w*)([a-z_]\\w*)(<([a-z_]\\w*(,\\s*)?)+>)?$/\n const hasCapitalLetterRegex = /[A-Z]/\n\n // Check if the name follows the basic structural rules\n if (!namingConventionRegex.test(name)) return false\n\n if (!hasCapitalLetterRegex.test(name)) {\n return false\n }\n\n // Further check for starting lowercase without underscore in the rest of the name\n if (name[0] !== name[0].toUpperCase() && !name.includes('_')) {\n return false\n }\n\n return true\n}\n\nexport const typeName = (name: string): string => {\n // Check if the name already conforms to the naming rules\n if (isValidName(name)) {\n return name // Return the name untouched if it conforms\n }\n // Handle generics separately by processing the content within <>\n if (name.includes('<')) {\n return name.replace(\n /<([^>]+)>/,\n (_match, genericContent) => `<${typeName(genericContent)}>`\n )\n }\n\n // Directly transform domain-style names, preserving underscores for segments\n const domainStyleTransformed = name\n .split('.')\n .map((part, index, array) => {\n // Apply pascal case only to the last segment\n if (index === array.length - 1) {\n return pascalCase(part) // Using external pascalCase\n }\n return part\n })\n .join('_')\n\n // Handle names starting with numbers\n const prefixedIfNumberStart = domainStyleTransformed.match(/^\\d/)\n ? `_${domainStyleTransformed}`\n : domainStyleTransformed\n\n // For other transformations, apply pascalCase if not already handled by domain style transformation\n const finalName = prefixedIfNumberStart.includes('_')\n ? prefixedIfNumberStart\n : pascalCase(prefixedIfNumberStart)\n\n // Ensure capitalization of the first character, in case pascalCase did not apply (e.g., underscores present)\n // Modification: Check if the finalName includes '_', indicating a domain-style name or a number prefix,\n // and avoid changing the case of the entire string\n if (finalName.includes('_')) {\n // Only capitalize the segment after the last underscore if it's a domain-style name\n const lastUnderscoreIndex = finalName.lastIndexOf('_')\n if (\n lastUnderscoreIndex !== -1 &&\n lastUnderscoreIndex < finalName.length - 1\n ) {\n return (\n finalName.substring(0, lastUnderscoreIndex + 1) +\n finalName.charAt(lastUnderscoreIndex + 1).toUpperCase() +\n finalName.slice(lastUnderscoreIndex + 2)\n )\n }\n return finalName\n }\n // Apply capitalization for non-domain style names\n return finalName.charAt(0).toUpperCase() + finalName.slice(1)\n}\n\nexport const propertyName = (name: string): string => {\n if (rxProperVariable.test(name.replace(/\\./g, '_')))\n return name.replace(/\\./g, '_')\n return `'${name.replace(/\\./g, '_')}'`\n}\n\nexport const extensions = (type: ObjectType): string =>\n (type.allOf || []).map(generateType).concat('').join(AND) +\n (type.oneOf || []).map(generateType).concat('').join(OR)\n\nexport const generatePrimitive = (parsed: PrimitiveType): string =>\n `${preamble(parsed)}${parsed.type}`\n\nexport const generateCustom = (parsed: CustomType): string =>\n `${preamble(parsed)}${typeName(parsed.type)}`\n\nexport const generateUnknown = (parsed: UnknownType): string =>\n `${preamble(parsed)}unknown`\n\nexport const generateObject = (parsed: ObjectType): string => {\n const lines: string[] = []\n lines.push(`${preamble(parsed)}${extensions(parsed)}{`)\n lines.push(...parsed.properties.map(generateProperty))\n lines.push('}')\n\n if (parsed.discriminator && parsed.name) {\n lines.push(generateDiscriminator(parsed.discriminator, parsed.name))\n }\n\n return lines.join('\\n')\n}\n\nexport const generateRecord = (parsed: RecordType): string => {\n const itemType =\n parsed.items.type === 'undefined' ? 'unknown' : generateType(parsed.items)\n return `Record<string, ${itemType}>`\n}\n\nconst generateDiscriminator = (\n discriminator: Discriminator,\n name: string\n): string => {\n const lines: string[] = ['']\n lines.push(`export type ${name}Discriminator = {`)\n for (const [key, type] of Object.entries(discriminator.mapping)) {\n lines.push(`${key}: ${type.type}`)\n }\n lines.push('}')\n return lines.join('\\n')\n}\n\nexport const generateArray = (parsed: ArrayType): string => {\n const lines: string[] = []\n let items = generateType(parsed.items)\n if (parsed.items.type === 'enum' || 'oneOf' in parsed.items) {\n items = `(${items})`\n }\n lines.push(`${preamble(parsed)}${items}[]`)\n return lines.join('\\n')\n}\n\nexport const generateEnum = (parsed: EnumType): string => {\n if (parsed.name) {\n const values = parsed.values.map(serializeValue).join(', ')\n const valuesName = constantCase(`${parsed.name}_VALUES`)\n return [\n `export const ${valuesName} = [${values}] as const`,\n `${preamble(parsed)}typeof ${valuesName}[number]`,\n ].join('\\n')\n }\n\n return `${preamble(parsed)}${parsed.values.map(serializeValue).join(OR)}`\n}\n\nexport const generateHeader = (header: Header): string => {\n return `${preamble(header)}{ ${propertyName(header.name)}${\n header.optional ? '?' : ''\n }: ${generateType(header.type)} }`\n}\n\nexport const generateResponseBody = (\n type: ResponseBody | CustomType,\n optional = true\n): string => {\n const customType = (type as CustomType).type\n if (customType) return typeName(customType)\n\n const body = type as ResponseBody\n if (!body.data && !body.headers) return 'undefined'\n\n const tokens: string[] = []\n tokens.push(preamble(body))\n tokens.push('APIResponse<')\n tokens.push(\n body.data ? generateType(serialized(body.data, optional)) : 'undefined'\n )\n if (body.headers) {\n tokens.push(', ')\n tokens.push(body.headers ? generateHeaders(body.headers) : 'undefined')\n }\n tokens.push('>')\n return tokens.join('')\n}\n\nconst serialized = (orig: TypeDefinition, optional = true): TypeDefinition => {\n switch (orig.type) {\n case 'bigint':\n case 'boolean':\n case 'enum':\n case 'null':\n case 'number':\n case 'string':\n case 'symbol':\n case 'undefined': {\n return orig\n }\n case 'Date': {\n return { ...orig, type: 'string' }\n }\n case 'array': {\n return {\n ...orig,\n items: serialized((orig as ArrayType).items, optional),\n } as ArrayType\n }\n case 'object': {\n return orig\n }\n default: {\n const wrapper = optional ? 'PartiallySerialized' : 'Serialized'\n return { ...orig, type: `${wrapper}<${typeName(orig.type)}>` }\n }\n }\n}\n\nexport const generateHeaders = (headers: Header[]): string => {\n const tokens: string[] = []\n\n for (const header of headers) {\n tokens.push(\n `${propertyName(header.name)}${\n header.optional ? '?' : ''\n }: ${generateType(header.type)}`\n )\n }\n\n return `{${tokens.join(', ')}}`\n}\n\nexport const serializeValue = (value: unknown): unknown => {\n if (typeof value === 'string') return `'${value}'`\n return value\n}\n","import type {\n Args,\n DocumentableType,\n Path,\n Property,\n RequestArgs,\n} from '../types'\nimport { argsOptional } from './args'\nimport { AND, OR, rxProperVariable } from './common'\n\nexport const document = ({ title, description }: DocumentableType): string => {\n if (title || description) {\n const tokens: string[] = []\n tokens.push('/**')\n if (title) tokens.push(` * ${title}`)\n if (description) tokens.push(` * ${description}`)\n tokens.push(' */\\n')\n return tokens.join('\\n')\n }\n return ''\n}\n\nexport const documentClientPath = (path: Path, responses: string): string =>\n documentPath(\n path,\n responses,\n [param('url', 'string')],\n [param('opts', 'RequestOptions', true)]\n )\n\nexport const documentServerPath = (path: Path, responses: string): string =>\n documentPath(path, responses)\n\nconst documentPath = (\n path: Path,\n responses: string,\n argsBefore: string[] = [],\n argsAfter: string[] = []\n): string => {\n const tokens: string[] = []\n\n tokens.push('/**')\n if (path.title) tokens.push(` * ${path.title}`)\n if (path.description) tokens.push(` * ${path.description}`)\n tokens.push(' *')\n tokens.push(...argsBefore)\n if (path.args) tokens.push(...documentArgs(path.args))\n tokens.push(...argsAfter)\n tokens.push(` * @returns {Promise<${responses}>}`)\n tokens.push(' */')\n\n return tokens.join('\\n')\n}\n\nconst documentArgs = (args: RequestArgs): string[] => {\n const tokens: string[] = []\n\n tokens.push(\n param(\n 'args',\n 'Object',\n argsOptional(args),\n 'The arguments for the request.'\n )\n )\n\n // Path params\n tokens.push(...requestArgs(args.path, 'params', 'Path parameters'))\n // Query params\n tokens.push(...requestArgs(args.query, 'query', 'Query parameters'))\n // Headers\n tokens.push(...requestArgs(args.header, 'headers', 'Headers'))\n // Request body\n tokens.push(...requestArgs(args.body, 'body', 'Request body'))\n\n return tokens\n}\n\nconst buildPath = (path: string, property: string): string =>\n rxProperVariable.test(property)\n ? `${path}.${property}`\n : `${path}[\"${property}\"]`\n\nconst requestArgs = (\n args: Args | undefined,\n name: string,\n title: string\n): string[] => {\n if (!args) return []\n\n const tokens: string[] = []\n const type = (args.allOf || []).map((e) => e.type).join(AND) || 'Object'\n tokens.push(\n param(\n buildPath('args', name),\n type,\n args.optional,\n `${title} for the request.`\n )\n )\n const properties = args.properties.flatMap((prop) =>\n requestProperty(buildPath('args', name), prop)\n )\n tokens.push(...properties)\n return tokens\n}\n\nconst requestProperty = (path: string, property: Property): string[] => {\n const tokens: string[] = []\n\n const type = property.type.map((t) => t.type).join(OR)\n tokens.push(\n param(\n buildPath(path, property.name),\n type,\n property.optional,\n property.title,\n property.description\n )\n )\n\n return tokens\n}\n\nconst param = (\n name: string,\n type: string,\n optional = false,\n title = '',\n description = ''\n): string => {\n const tokens: string[] = []\n\n tokens.push(\n ` * @param {${type}} ${optional ? '[' : ''}${name}${optional ? ']' : ''}`\n )\n if (optional || title || description) {\n tokens.push(' -')\n if (optional) tokens.push(' Optional.')\n if (title) tokens.push(` ${title}`)\n if (description) tokens.push(` ${description}`)\n }\n\n return tokens.join('')\n}\n","import type { RequestArgs } from '../types'\nimport { generateType } from './common'\n\nexport const generateClientArgs = (args: RequestArgs | undefined): string =>\n generateArgs(args, false)\n\nexport const generateServerArgs = (args: RequestArgs | undefined): string =>\n args ? generateArgs(args, true) : 'args: Req'\n\nconst parts: (keyof RequestArgs)[] = ['body', 'header', 'path', 'query']\n\nconst generateArgs = (\n args: RequestArgs | undefined,\n isServer: boolean\n): string => {\n if (args) {\n const tokens: string[] = []\n for (const part of parts) {\n const arg = args[part]\n if (arg) {\n const partName =\n part === 'path' ? 'params' : part === 'header' ? 'headers' : part\n\n if (partName === 'query' && isServer) {\n tokens.push(\n `${partName}${arg.optional ? '?' : ''}: QueryParams<${generateType(arg)}>`\n )\n } else {\n tokens.push(\n `${partName}${arg.optional ? '?' : ''}: ${wrapArgs(\n generateType(arg),\n isServer && part === 'header'\n )}`\n )\n }\n }\n }\n\n if (!tokens.length) return ''\n\n const optional = argsOptional(args)\n return `args${optional ? '?' : ''}: ${\n isServer ? 'Req & ' : ''\n }{ ${tokens.join(', ')} }, `\n }\n // No params - no args\n return ''\n}\n\nconst wrapArgs = (args: string, wrap: boolean): string => {\n if (!wrap) return args\n return `LowerCaseHeaders<${args}>`\n}\n\nexport const argsOptional = (args: RequestArgs) =>\n // biome-ignore lint/style/noNonNullAssertion: will never be null\n parts.reduce((o, p) => o && (!args[p] || args[p]!.optional), true)\n","import type { Verb } from '@sebspark/openapi-core'\nimport type { Path } from '../types'\nimport { generateClientArgs } from './args'\nimport { generateResponseBody, OR, serializeValue } from './common'\nimport { documentClientPath } from './document'\n\nexport const generateClient = (name: string, paths: Path[]): string => {\n const groupedCalls: Partial<Record<Verb, string[]>> = {}\n for (const path of paths) {\n if (!groupedCalls[path.method]) {\n groupedCalls[path.method] = []\n }\n groupedCalls[path.method]?.push(generateCall(path))\n }\n const client: string[] = []\n\n const methods = Object.keys(groupedCalls).map(serializeValue).join(OR)\n client.push(`export type ${name}Client = Pick<BaseClient, ${methods}> & {`)\n\n Object.entries(groupedCalls).forEach(([method, calls]) => {\n client.push(`${method}: {`)\n client.push(...calls)\n client.push('}')\n })\n\n client.push('}')\n\n return client.join('\\n')\n}\n\nconst generateCall = (path: Path): string => {\n const responses = generateResponses(path)\n return `${documentClientPath(path, responses)}\n (\n url: '${path.url}', ${generateClientArgs(path.args)}opts?: RequestOptions,\n ): Promise<${responses}>`\n}\n\nconst generateResponses = (path: Path): string =>\n Object.entries(path.responses)\n .filter(([code]) => Number.parseInt(code, 10) < 400)\n .map(([, type]) => generateResponseBody(type, false))\n .join(OR)\n","import type { CustomType, Path, ResponseBody } from '../types'\nimport { generateServerArgs } from './args'\nimport { generateResponseBody, OR } from './common'\nimport { documentServerPath } from './document'\n\nexport const generateServer = (name: string, paths: Path[]): string => {\n const tokens: string[] = []\n\n tokens.push(`export type ${name}ServerPaths = {`)\n\n for (const [url, methods] of Object.entries(groupPathsByUrl(paths))) {\n tokens.push(generatePath(url, methods))\n }\n\n tokens.push('}')\n tokens.push('\\n')\n tokens.push(\n `export type ${name}Server = APIServerDefinition & ${name}ServerPaths`\n )\n\n return tokens.join('\\n')\n}\n\nconst groupPathsByUrl = (paths: Path[]): Record<string, Path[]> =>\n paths.reduce(\n (group, path) => {\n if (!group[path.url]) group[path.url] = []\n group[path.url].push(path)\n return group\n },\n {} as Record<string, Path[]>\n )\n\nconst generatePath = (url: string, methods: Path[]): string => `'${url}': {\n ${methods.map(generateMethod).join('\\n')}\n }`\n\nconst generateMethod = (path: Path): string => {\n const responses = generateResponses(path.responses)\n return `${path.method}: {\n ${documentServerPath(path, responses)}\n handler: (${generateServerArgs(path.args)}) => Promise<${responses}>\n pre?: GenericRouteHandler | GenericRouteHandler[]\n }`\n}\n\nconst generateResponses = (\n responses: Record<number, ResponseBody | CustomType>\n): string =>\n Object.entries(responses)\n .filter(([code]) => Number.parseInt(code, 10) < 500)\n .map(([code, response]) =>\n generateResponse(Number.parseInt(code, 10), response)\n )\n .join(OR)\n\nconst generateResponse = (code: number, response: ResponseBody): string =>\n `[${code}, ${generateResponseBody(response)}]`\n","import type { ParsedComponents, ParsedOpenApiDocument } from '../types'\nimport { generateClient } from './client'\nimport { generateHeader, generateResponseBody, generateType } from './common'\nimport { generateServer } from './server'\n\nexport { generateClient } from './client'\nexport { generateType } from './common'\nexport { generateServer } from './server'\n\nexport const generate = (name: string, doc: ParsedOpenApiDocument): string => `\n /**\n * This file was auto-generated.\n * Do not make direct changes to the file.\n */\n\n import type {\n APIResponse,\n APIServerDefinition,\n BaseClient,\n GenericRouteHandler,\n LowerCaseHeaders,\n PartiallySerialized,\n QueryParams,\n RequestOptions,\n Serialized,\n } from '@sebspark/openapi-core'\n import type { Request as ExpressRequest } from 'express-serve-static-core'\n\n type Req = Pick<ExpressRequest, 'url' | 'baseUrl' | 'cookies' | 'hostname'>\n\n /* tslint:disable */\n /* eslint-disable */\n\n ${generateComponents(doc.components)}\n\n ${doc.paths.length ? generateServer(name, doc.paths) : ''}\n\n ${doc.paths.length ? generateClient(name, doc.paths) : ''}\n\n`\n\nconst generateComponents = (components: ParsedComponents): string => {\n const tokens: string[] = []\n\n for (const schema of components.schemas) {\n tokens.push(generateType(schema))\n }\n\n for (const header of components.headers) {\n tokens.push(generateHeader(header))\n }\n\n for (const param of components.parameters) {\n tokens.push(\n generateType({\n type: 'object',\n name: param.name,\n properties: [\n {\n name: param.parameterName,\n type: [param.type],\n optional: param.optional,\n },\n ],\n })\n )\n }\n\n for (const req of components.requestBodies) {\n tokens.push(generateType(req))\n }\n\n for (const res of components.responseBodies) {\n tokens.push(generateResponseBody(res))\n }\n\n for (const param of components.securitySchemes) {\n tokens.push(\n generateType({\n type: 'object',\n name: param.name,\n properties: [\n {\n name: param.parameterName,\n type: [param.type],\n optional: param.optional,\n },\n ],\n })\n )\n }\n\n return tokens.join('\\n\\n')\n}\n","import type {\n ComponentsObject,\n HeaderObject,\n ParameterObject,\n RequestBodyObject,\n SchemaObject,\n SecuritySchemeObject,\n} from '@sebspark/openapi-core'\nimport type { EnumType } from '../types'\n\nexport const parseRef = (ref: string): string =>\n ref.substring(ref.lastIndexOf('/') + 1)\n\nexport const parseEnumType = (\n name: string | undefined,\n schema: SchemaObject\n): EnumType => ({ name, type: 'enum', values: schema.enum || [] })\n\ntype SchemaPath =\n | 'schemas'\n | 'parameters'\n | 'headers'\n | 'requestBodies'\n | 'securitySchemes'\ntype SchemaType =\n | SchemaObject\n | ParameterObject\n | HeaderObject\n | RequestBodyObject\n | SecuritySchemeObject\nexport const findRef = <T extends SchemaType>(\n components: ComponentsObject,\n ref: string\n): T => {\n const [, , path, name] = ref.split('/')\n const schemaPath = components[path as SchemaPath]\n if (!schemaPath || !schemaPath[name])\n throw new Error(`Cannot find ref ${ref}`)\n return schemaPath[name] as T\n}\n\ntype Documented = {\n title?: string\n description?: string\n}\nexport const parseDocumentation = (\n source: Partial<Documented>\n): Partial<Documented> => {\n const documented: Documented = {}\n if (source.title) documented.title = source.title\n if (source.description) documented.description = source.description\n return documented\n}\n","import type {\n ReferenceObject,\n SchemaObject,\n SchemaType,\n} from '@sebspark/openapi-core'\nimport type {\n ArrayType,\n CustomType,\n EnumType,\n ObjectType,\n Primitive,\n PrimitiveType,\n Property,\n RecordType,\n TypeDefinition,\n} from '../types'\nimport { parseDocumentation, parseEnumType, parseRef } from './common'\n\nexport const parseSchemas = (\n schemas: Record<string, SchemaObject> = {}\n): TypeDefinition[] =>\n Object.entries(schemas || {}).map(([name, schema]) =>\n parseSchema(name, schema)\n )\n\nconst marshall = (\n type: Omit<SchemaType, 'object' | 'array'>,\n format: string | undefined\n): Primitive => {\n if (type === 'integer') {\n return 'number'\n }\n if (type === 'string' && (format === 'date' || format === 'date-time')) {\n return 'Date'\n }\n return type as Primitive\n}\n\nexport const parseSchema = (\n name: string | undefined,\n schemaOrRef: SchemaObject | ReferenceObject,\n generateDocs = true\n): TypeDefinition => {\n const ref = (schemaOrRef as ReferenceObject).$ref\n if (ref) {\n return { name, type: parseRef(ref) }\n }\n\n const schema = schemaOrRef as SchemaObject\n switch (schema.type) {\n case 'array':\n return parseArraySchema(name, schema)\n case 'boolean':\n case 'integer':\n case 'number':\n case 'string':\n return schema.enum\n ? parseEnumType(name, schema)\n : name\n ? { name, type: marshall(schema.type, schema.format) }\n : parsePropertyType(schema, generateDocs)[0]\n default:\n return parseObjectSchema(name, schema)\n }\n}\n\nconst parseObjectSchema = (\n name: string | undefined,\n schema: SchemaObject\n): ObjectType => {\n const type: ObjectType = {\n name,\n type: 'object',\n properties: [],\n ...parseDocumentation(schema),\n }\n if (schema.properties) {\n type.properties = Object.entries(schema.properties).map(\n ([name, property]) => parseProperty(name, property, schema.required || [])\n )\n }\n if (schema.allOf) {\n type.allOf = schema.allOf.flatMap((s) => parsePropertyType(s))\n }\n if (schema.oneOf) {\n type.oneOf = schema.oneOf.flatMap((s) => parsePropertyType(s))\n }\n if (schema.anyOf) {\n type.oneOf = schema.anyOf.flatMap((s) => parsePropertyType(s))\n }\n if (schema.discriminator?.mapping) {\n const mapping: Record<string, CustomType> = {}\n for (const [prop, ref] of Object.entries(schema.discriminator.mapping)) {\n mapping[prop] = { type: parseRef(ref) }\n }\n type.discriminator = {\n propertyName: schema.discriminator.propertyName,\n mapping,\n }\n }\n if (schema.additionalProperties) {\n const record = parseAdditionalProperties(schema.additionalProperties)\n if (!type.allOf) {\n type.allOf = []\n }\n type.allOf.push(record)\n }\n return type\n}\n\nconst parseAdditionalProperties = (\n schema: true | SchemaObject | ReferenceObject\n): RecordType => {\n let items: TypeDefinition\n if (schema === true) {\n items = { type: 'undefined' } as PrimitiveType\n } else {\n items = parseSchema(undefined, schema)\n }\n return {\n type: 'record',\n items,\n } as RecordType\n}\n\nconst parseArraySchema = (\n name: string | undefined,\n schema: SchemaObject\n): ArrayType => {\n if (schema.type !== 'array') throw new Error('Not an array')\n return {\n name,\n type: 'array',\n items: schema.items\n ? parseSchema(undefined, schema.items, false)\n : { type: 'unknown' },\n ...parseDocumentation(schema),\n }\n}\n\nexport const parseProperty = (\n name: string,\n schema: SchemaObject | ReferenceObject,\n required: string[]\n): Property => {\n const property: Property = {\n name,\n optional: !required.includes(name),\n type: parsePropertyType(schema),\n ...parseDocumentation(schema as SchemaObject),\n }\n\n return property\n}\n\nconst parsePropertyType = (\n property: SchemaObject | ReferenceObject,\n generateDocs = true\n): TypeDefinition[] => {\n const ref = (property as ReferenceObject).$ref\n\n if (ref) {\n return [{ type: parseRef(ref) }]\n }\n const schemaObject = property as SchemaObject\n const docs = generateDocs ? parseDocumentation(schemaObject) : {}\n if (schemaObject.enum) {\n const enumType: EnumType = {\n type: 'enum',\n values: schemaObject.enum,\n ...docs,\n }\n return [enumType]\n }\n if (schemaObject.type) {\n return (\n Array.isArray(schemaObject.type) ? schemaObject.type : [schemaObject.type]\n ).map((type) => {\n switch (type) {\n case 'array': {\n return parseArraySchema(undefined, schemaObject)\n }\n case 'object': {\n return parseObjectSchema(undefined, schemaObject)\n }\n default: {\n return {\n type: marshall(type, schemaObject.format),\n ...docs,\n }\n }\n }\n })\n }\n if (schemaObject.allOf) {\n const types: TypeDefinition[] = []\n for (const allOf of schemaObject.allOf) {\n const type = parseSchema(undefined, allOf)\n delete type.name\n types.push(type)\n }\n return types\n }\n\n return []\n}\n","import type { HeaderObject } from '@sebspark/openapi-core'\nimport type { Header } from '../types'\nimport { parseDocumentation } from './common'\nimport { parseSchema } from './schema'\n\nexport const parseHeaders = (\n schemas: Record<string, HeaderObject> = {}\n): Header[] =>\n Object.entries(schemas || {}).map(([name, schema]) =>\n parseHeader(name, schema)\n )\n\nexport const parseHeader = (name: string, schema: HeaderObject): Header => {\n const header: Header = {\n name,\n optional: !schema.required,\n // biome-ignore lint/style/noNonNullAssertion: here it is always defined\n type: parseSchema(undefined, schema.schema!),\n ...parseDocumentation(schema),\n }\n\n return header\n}\n","import type { ParameterObject } from '@sebspark/openapi-core'\nimport type { Parameter } from '../types'\nimport { parseDocumentation } from './common'\nimport { parseSchema } from './schema'\n\nexport const parseParameters = (\n schemas: Record<string, ParameterObject> = {}\n): Parameter[] =>\n Object.entries(schemas || {}).map(([name, schema]) =>\n parseParameter(name, schema)\n )\n\nexport const parseParameter = (\n name: string | undefined,\n schema: ParameterObject\n): Parameter => {\n const param: Parameter = {\n name,\n in: schema.in,\n parameterName: schema.name,\n optional: !schema.required,\n // biome-ignore lint/style/noNonNullAssertion: schema is always defined here\n type: parseSchema(undefined, schema.schema!),\n ...parseDocumentation(schema),\n }\n\n return param\n}\n","import type {\n ComponentsObject,\n HeaderObject,\n OperationObject,\n ParameterObject,\n ReferenceObject,\n RequestBodyObject,\n SchemaObject,\n SecurityRequirementObject,\n SecuritySchemeObject,\n} from '@sebspark/openapi-core'\nimport type { Args, ObjectType, RequestArgs } from '../types'\nimport { findRef, parseDocumentation, parseRef } from './common'\nimport { parseSchema } from './schema'\n\nexport const parseArgs = (\n path: OperationObject,\n components?: ComponentsObject\n): RequestArgs | undefined => {\n // No parameters and no requestBody - no args\n if (!path.parameters?.length && !path.security?.length && !path.requestBody)\n return undefined\n\n const args: RequestArgs = joinArgs([\n parseParameters(path.parameters, components),\n parseSecurity(path.security, components),\n parseRequestBody(path.requestBody, components),\n ])\n\n return args\n}\n\nconst createArgs = (initializer: Partial<Args> = {}): Args => ({\n type: 'object',\n properties: [],\n optional: true,\n ...initializer,\n})\n\nconst joinArgs = (args: RequestArgs[]): RequestArgs => {\n const reqArg: RequestArgs = {}\n for (const arg of args) {\n for (const [prop, val] of Object.entries(arg)) {\n const key = prop as keyof RequestArgs\n if (reqArg[key]) {\n reqArg[key] = joinArg(reqArg[key] as Args, val)\n } else {\n reqArg[key] = val\n }\n }\n }\n return reqArg\n}\n\nconst joinArg = (arg1: Args, arg2: Args): Args => {\n const arg: Args = {\n type: 'object',\n optional: arg1.optional && arg2.optional,\n properties: arg1.properties.concat(arg2.properties),\n }\n if (arg1.allOf || arg2.allOf)\n arg.allOf = (arg1.allOf || []).concat(arg2.allOf || [])\n if (arg1.anyOf || arg2.anyOf)\n arg.anyOf = (arg1.anyOf || []).concat(arg2.anyOf || [])\n if (arg1.oneOf || arg2.oneOf)\n arg.oneOf = (arg1.oneOf || []).concat(arg2.oneOf || [])\n\n if (arg1.description || arg2.description)\n arg.description = arg1.description || arg2.description\n if (arg1.title || arg2.title) arg.title = arg1.title || arg2.title\n\n return arg\n}\n\nconst parseSecurity = (\n security: SecurityRequirementObject[] = [],\n components: ComponentsObject = {}\n): RequestArgs => {\n const args: RequestArgs = {}\n for (const secReq of security) {\n for (const [name] of Object.entries(secReq)) {\n const param = findRef<SecuritySchemeObject>(\n components,\n `#/components/securitySchemes/${name}`\n )\n const arg = args.header || createArgs({ ...parseDocumentation(param) })\n arg.optional = false\n if (!arg.allOf) arg.allOf = []\n arg.allOf.push({ type: parseRef(name) })\n args.header = arg\n }\n }\n return args\n}\n\nconst parseParameters = (\n parameters: (ParameterObject | ReferenceObject)[] = [],\n components: ComponentsObject = {}\n): RequestArgs => {\n const args: RequestArgs = {}\n\n for (const p of parameters) {\n const ref = (p as ReferenceObject).$ref\n if (ref) {\n const part = ref.split('/')[2] as keyof ComponentsObject\n switch (part) {\n case 'parameters': {\n const param = findRef<ParameterObject>(components, ref)\n const arg =\n args[param.in] || createArgs({ ...parseDocumentation(param) })\n arg.optional = arg.optional && !param.required\n\n if (!arg.allOf) arg.allOf = []\n arg.allOf.push({ type: parseRef(ref) })\n\n args[param.in] = arg\n break\n }\n case 'headers': {\n const header = findRef<HeaderObject>(components, ref)\n const arg = args.header || createArgs()\n const name = parseRef(ref)\n arg.properties.push({\n name,\n optional: !header.required,\n // biome-ignore lint/style/noNonNullAssertion: schema is never null here\n type: [{ type: parseSchema(undefined, header.schema!).type }],\n ...parseDocumentation((header.schema || {}) as SchemaObject),\n })\n args.header = arg\n break\n }\n }\n } else {\n const param = p as ParameterObject\n const arg = args[param.in] || createArgs({ ...parseDocumentation(param) })\n\n arg.properties.push({\n name: param.name,\n optional: !param.required,\n type: [parseSchema(undefined, param.schema as SchemaObject)],\n })\n\n arg.optional = arg.optional && !param.required\n\n args[param.in] = arg\n }\n }\n\n return args\n}\n\nconst parseRequestBody = (\n requestBody: ReferenceObject | RequestBodyObject | undefined,\n components: ComponentsObject = {}\n): RequestArgs => {\n const args: RequestArgs = {}\n if (!requestBody) return args\n\n const ref = (requestBody as ReferenceObject).$ref\n if (ref) {\n const refBody = findRef<RequestBodyObject>(components, ref)\n args.body = createArgs({\n optional: !refBody.required,\n allOf: [{ type: parseRef(ref) }],\n })\n } else {\n // Inline request body properties\n const body = requestBody as RequestBodyObject\n const bodyArgs: Args =\n args.body ||\n createArgs({ optional: !body.required, ...parseDocumentation(body) })\n\n if (body.content['application/json']) {\n const schema = body.content['application/json'].schema\n if (schema) {\n const parsed = parseSchema(undefined, schema)\n if (parsed.type === 'object') {\n args.body = {\n ...(parsed as ObjectType),\n optional: !body.required,\n }\n } else if (parsed.type) {\n args.body = createArgs({\n optional: !body.required,\n allOf: [parsed],\n ...parseDocumentation(body),\n })\n }\n }\n }\n if (\n bodyArgs.allOf?.length ||\n bodyArgs.oneOf?.length ||\n bodyArgs.properties.length\n ) {\n args.body = bodyArgs\n }\n }\n\n return args\n}\n","import type {\n HeaderObject,\n ReferenceObject,\n ResponseObject,\n} from '@sebspark/openapi-core'\nimport type { CustomType, ResponseBody } from '../types'\nimport { parseDocumentation, parseRef } from './common'\nimport { parseHeader } from './headers'\nimport { parseSchema } from './schema'\n\nexport const parseResponseBodies = (\n responses: Record<string, ResponseObject | ReferenceObject> = {}\n): ResponseBody[] => {\n const bodies: ResponseBody[] = []\n\n for (const [name, b] of Object.entries(responses)) {\n const body = parseResponseBody(name, b)\n bodies.push(body)\n }\n\n return bodies\n}\n\nexport const parseResponseBody = (\n name: string | undefined,\n response: ResponseObject | ReferenceObject\n): ResponseBody | CustomType => {\n const ref = (response as ReferenceObject).$ref\n if (ref) return { type: parseRef(ref) }\n\n const responseObject = response as ResponseObject\n const body: ResponseBody = {}\n if (name) body.name = name\n if (responseObject.description) body.description = responseObject.description\n\n if (responseObject.content?.['application/json']?.schema) {\n const schema = responseObject.content['application/json'].schema\n body.data = parseSchema(undefined, schema)\n }\n if (responseObject.headers) {\n body.headers = []\n for (const [headerName, header] of Object.entries(responseObject.headers)) {\n const ref = (header as ReferenceObject).$ref\n if (ref)\n body.headers.push({\n name: headerName,\n optional: false,\n type: { type: parseRef(ref) },\n ...parseDocumentation(header as HeaderObject),\n })\n else body.headers.push(parseHeader(headerName, header as HeaderObject))\n }\n }\n return body\n}\n","import type {\n ComponentsObject,\n OpenApiDocument,\n OperationObject,\n PathItemObject,\n ResponsesObject,\n Verb,\n} from '@sebspark/openapi-core'\nimport type { Path, TypeDefinition } from '../types'\nimport { parseArgs } from './args'\nimport { parseDocumentation } from './common'\nimport { parseResponseBody } from './responseBodies'\n\nexport const parsePaths = (doc: OpenApiDocument): Path[] =>\n Object.entries(doc.paths || {}).flatMap(([name, path]) =>\n parsePath(name, path as PathItemObject, doc.components)\n )\n\nexport const parsePath = (\n url: string,\n path: PathItemObject,\n components?: ComponentsObject\n): Path[] => {\n const paths: Path[] = []\n const methods: Verb[] = ['delete', 'get', 'patch', 'post', 'put']\n\n for (const method of methods) {\n if (path[method]) {\n paths.push(\n parseMethod(url, method, path[method] as OperationObject, components)\n )\n }\n }\n\n return paths\n}\n\nconst parseMethod = (\n url: string,\n method: Verb,\n operation: OperationObject,\n components?: ComponentsObject\n): Path => {\n return {\n method,\n url: parseUrl(url),\n responses: parseResponses(operation.responses),\n args: parseArgs(operation, components),\n ...parseDocumentation(operation),\n }\n}\n\nconst parseUrl = (url: string): string => url.replace(/{([^}]+)}/g, ':$1')\n\nconst parseResponses = (\n responses: ResponsesObject\n): Record<number, TypeDefinition> => {\n return Object.assign(\n {},\n ...Object.entries(responses).map(([code, response]) => {\n return {\n [Number.parseInt(code, 10)]: parseResponseBody(undefined, response),\n } as Record<number, TypeDefinition>\n })\n )\n}\n","import type { RequestBodyObject } from '@sebspark/openapi-core'\nimport type { TypeDefinition } from '../types'\nimport { parseSchema } from './schema'\n\nexport const parseRequestBodies = (\n requestBodies: Record<string, RequestBodyObject> = {}\n): TypeDefinition[] => {\n const definitions: TypeDefinition[] = []\n for (const [name, requestBody] of Object.entries(requestBodies)) {\n if (requestBody.content['application/json'].schema) {\n definitions.push(\n parseSchema(name, requestBody.content['application/json'].schema)\n )\n }\n }\n return definitions\n}\n","import type { SecuritySchemeObject } from '@sebspark/openapi-core'\nimport type { Parameter } from '../types'\n\nexport const parseSecuritySchemes = (\n schemes: Record<string, SecuritySchemeObject> = {}\n): Parameter[] => {\n const parameters: Parameter[] = []\n for (const [name, scheme] of Object.entries(schemes)) {\n parameters.push(parseSecurityScheme(name, scheme))\n }\n return parameters\n}\n\nexport const parseSecurityScheme = (\n name: string,\n scheme: SecuritySchemeObject\n): Parameter => {\n switch (scheme.type) {\n case 'apiKey':\n return parseApiKey(name, scheme)\n case 'http':\n return parseHttpSecurity(name, scheme)\n case 'oauth2':\n return parseOAuth(name, scheme)\n case 'openIdConnect':\n return parseOpenIdConnect(name, scheme)\n }\n throw new Error(`Unknown security scheme '${scheme.type}'`)\n}\n\nconst parseApiKey = (name: string, scheme: SecuritySchemeObject): Parameter => {\n const _in = scheme.in || 'header'\n const parameterName = scheme.name as string\n return {\n name,\n parameterName,\n in: _in,\n optional: false,\n type: { type: 'string' },\n }\n}\n\nconst parseHttpSecurity = (\n name: string,\n _scheme: SecuritySchemeObject\n): Parameter => ({\n name,\n in: 'header',\n parameterName: 'Authorization',\n optional: false,\n type: { type: 'string' },\n})\n\nconst parseOAuth = (\n name: string,\n _scheme: SecuritySchemeObject\n): Parameter => ({\n name,\n in: 'header',\n parameterName: 'Authorization',\n optional: false,\n type: { type: 'string' },\n})\n\nconst parseOpenIdConnect = (\n name: string,\n _scheme: SecuritySchemeObject\n): Parameter => ({\n name,\n in: 'header',\n parameterName: 'Authorization',\n optional: false,\n type: { type: 'string' },\n})\n","import type { ComponentsObject, OpenApiDocument } from '@sebspark/openapi-core'\nimport type { ParsedComponents, ParsedOpenApiDocument } from '../types'\nimport { parseHeaders } from './headers'\nimport { parseParameters } from './parameters'\nimport { parsePaths } from './paths'\nimport { parseRequestBodies } from './requestBodies'\nimport { parseResponseBodies } from './responseBodies'\nimport { parseSchemas } from './schema'\nimport { parseSecuritySchemes } from './securitySchemes'\n\nexport const parseDocument = (\n schema: OpenApiDocument\n): ParsedOpenApiDocument => ({\n paths: parsePaths(schema),\n components: parseComponents(schema.components),\n})\n\nexport const parseComponents = (\n components: ComponentsObject = {}\n): ParsedComponents => ({\n schemas: parseSchemas(components.schemas),\n headers: parseHeaders(components.headers),\n parameters: parseParameters(components.parameters),\n requestBodies: parseRequestBodies(components.requestBodies),\n responseBodies: parseResponseBodies(components.responses),\n securitySchemes: parseSecuritySchemes(components.securitySchemes),\n})\n"],"mappings":"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","names":["pascalCase","generateResponses","param","format","generateDocs","name","param","parseParameters","param","ref","generate","pascalCase"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sebspark/openapi-typegen",
3
- "version": "5.0.2",
3
+ "version": "5.0.3",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -11,7 +11,7 @@
11
11
  "cli.mjs"
12
12
  ],
13
13
  "scripts": {
14
- "build": "tsup-node src/index.ts src/cli.ts --format esm --target node22 --dts",
14
+ "build": "tsup src/index.ts src/cli.ts --config ./tsup.config.ts",
15
15
  "dev": "tsc --watch --noEmit",
16
16
  "lint": "biome check .",
17
17
  "test": "vitest run --passWithNoTests --coverage",