|
1 | 1 | import "~/core/renderers/operation"; |
2 | 2 | import "~/core/renderers/parameter"; |
3 | 3 | import path from "node:path"; |
| 4 | +import getAppName from "./core/app"; |
4 | 5 | import getArgument from "./core/arguments"; |
5 | 6 | import createFile from "./core/file"; |
6 | 7 | import generateInterface from "./core/renderers/interface"; |
7 | 8 | import generateSchema from "./core/renderers/schema"; |
8 | 9 | import { resolveSchemas, resolveSchemasFromProps } from "./core/resolvers/imported-schema"; |
9 | 10 | import resolveOperations from "./core/resolvers/operation"; |
10 | 11 | import resolveProperties from "./core/resolvers/property"; |
11 | | -import readSource from "./core/source"; |
12 | | -import getSwaggerJSON from "./core/swagger"; |
| 12 | +import generateSwaggerJson from "./core/swagger"; |
13 | 13 |
|
14 | 14 | (async () => { |
15 | | - const outputFolder = await getArgument("output") ?? "src"; |
| 15 | + const sourceFolder = await getArgument("source") ?? "src"; |
| 16 | + const sourceDir = path.resolve(process.cwd(), sourceFolder); |
| 17 | + |
| 18 | + const outputFolder = await getArgument("output") ?? "dist"; |
16 | 19 | const outputDir = path.resolve(process.cwd(), outputFolder); |
17 | 20 |
|
18 | | - const source = await readSource(); |
19 | | - for (const service of source.services) { |
20 | | - const data = await getSwaggerJSON(service.url, service.specs); |
21 | | - for (const [schemaName, schema] of Object.entries(data.components.schemas)) { |
22 | | - if (schema.type === "object") { |
23 | | - const properties = resolveProperties(schema.properties, schema.required ?? []); |
24 | | - const importedSchemas = resolveSchemasFromProps(schema.properties); |
25 | | - const content = generateSchema(schemaName, properties, importedSchemas); |
26 | | - await createFile(content, `${schemaName}.ts`, outputDir, "schemas"); |
27 | | - } |
| 21 | + const data = generateSwaggerJson(sourceDir); |
| 22 | + for (const [schemaName, schema] of Object.entries(data.components.schemas)) { |
| 23 | + if (schema.type === "object") { |
| 24 | + const properties = resolveProperties(schema.properties, schema.required ?? []); |
| 25 | + const importedSchemas = resolveSchemasFromProps(schema.properties); |
| 26 | + const content = generateSchema(schemaName, properties, importedSchemas); |
| 27 | + await createFile(content, `${schemaName}.ts`, outputDir, "schemas"); |
28 | 28 | } |
29 | | - const schemas = resolveSchemas(data.paths); |
30 | | - const paths = resolveOperations(data.paths); |
31 | | - const content = generateInterface(service.url, schemas, paths); |
32 | | - await createFile(content, `${service.name}.ts`, outputDir); |
33 | 29 | } |
| 30 | + |
| 31 | + const packageName = getAppName(); |
| 32 | + const appName = packageName.split("/").pop() ?? "unknown-service"; |
| 33 | + const envName = `${appName.replace(/-/g, "_").toUpperCase()}_BASE_URL`; |
| 34 | + |
| 35 | + const schemas = resolveSchemas(data.paths); |
| 36 | + const resolvedPaths = resolveOperations(data.paths); |
| 37 | + |
| 38 | + const content = generateInterface(envName, resolvedPaths); |
| 39 | + await createFile(content, "index.js", outputDir); |
34 | 40 | })(); |
0 commit comments