Skip to content

Commit f30c1a8

Browse files
committed
fix: reusable response imports, reorganize structure again
try making project structure simpler because every time I come back it's confusing
1 parent 4f2dd2d commit f30c1a8

75 files changed

Lines changed: 360 additions & 323 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.idea/runConfigurations/build.xml

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@thechristophe/openapi-typebox",
3-
"version": "0.0.10",
3+
"version": "0.0.11",
44
"bin": "src/openapiClient/cli.js",
55
"repository": {
66
"type": "git",
@@ -14,14 +14,14 @@
1414
"homepage": "https://github.com/thechristophe/openapi-typebox#readme",
1515
"scripts": {
1616
"build": "tsc --project tsconfig.build.json && pnpm copy-files",
17-
"copy-files": "copyfiles -f src/shared/output/* ./dist/shared/output/ && copyfiles -f src/openapiClient/output/* ./dist/openapiClient/output/",
17+
"copy-files": "copyfiles -f src/output/* ./dist/output/",
1818
"clean": "rimraf dist/",
1919
"prepublishOnly": "pnpm clean && pnpm build",
2020
"lint": "eslint src",
2121
"lint:export": "eslint --output-file eslint_report.json --format json src",
2222
"lint:formatting": "prettier --check .",
23-
"type-check": "tsc --noEmit",
24-
"cli": "node ./dist/openapiClient/cli.js"
23+
"lint:types": "tsc --noEmit",
24+
"cli": "node ./dist/client-cli.js"
2525
},
2626
"devDependencies": {
2727
"@eslint-community/eslint-plugin-eslint-comments": "^4.4.1",
@@ -39,7 +39,6 @@
3939
"typescript-eslint": "^8.15.0"
4040
},
4141
"dependencies": {
42-
"@sinclair/typebox": "^0.34.11",
4342
"@types/json-schema": "^7.0.15",
4443
"@types/lodash": "^4.17.13",
4544
"@types/node": "^20.17.7",
@@ -50,6 +49,7 @@
5049
"prettier": "^3.3.3",
5150
"prettier-plugin-organize-imports": "^4.1.0",
5251
"triple-beam": "^1.4.1",
52+
"typebox": "^1.0.76",
5353
"typescript": "^5.7.2",
5454
"winston": "^3.18.3",
5555
"yaml": "^2.6.1"

pnpm-lock.yaml

Lines changed: 8 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/usr/bin/env node
22
import meow from 'meow';
3-
import configuration from '../shared/configuration.js';
4-
import openapiToClient from './openapiToClient.js';
3+
import client from './generation/client.js';
4+
import configuration from './generation/utility/configuration.js';
55

66
const cli = meow(
77
`
@@ -81,7 +81,7 @@ if (cli.flags.package) {
8181
};
8282
}
8383

84-
await openapiToClient(cli.input[0], {
84+
await client(cli.input[0], {
8585
basePath: cli.flags.output,
8686
path: '.',
8787
});
Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
import { JSONSchema7 } from 'json-schema';
22
import fs from 'node:fs';
33
import YAML from 'yaml';
4-
import configuration from '../shared/configuration.js';
5-
import generateSchemas from '../shared/generateSchemas.js';
6-
import { default as rootLogger } from '../shared/logger.js';
7-
import NotImplementedError from '../shared/NotImplementedError.js';
8-
import PathInfo, { resolveAbsolutePath } from '../shared/PathInfo.js';
9-
import sanitizeBulk from '../shared/sanitizeBulk.js';
10-
import template from '../shared/templater.js';
11-
import writeSourceFile from '../shared/writeSourceFile.js';
12-
import operationToFunction, { FunctionMetadata } from './functionGeneration/index.js';
13-
import generateResponses from './generateResponses.js';
14-
import type OpenApiSpec from './openapi/index.js';
15-
import { OpenApiMethods } from './openapi/PathItem.js';
4+
import type OpenApiSpec from '../openapi/index.js';
5+
import { OpenApiMethods } from '../openapi/PathItem.js';
6+
import operationToFunction, { FunctionMetadata } from './function.js';
7+
import generateModels from './models.js';
8+
import generateResponses from './responses.js';
9+
import configuration from './utility/configuration.js';
10+
import { NotImplementedError } from './utility/errors.js';
11+
import lintAndCheckFiles from './utility/lintAndCheckFiles.js';
12+
import { default as rootLogger } from './utility/logger.js';
13+
import PathInfo, { resolveAbsolutePath } from './utility/PathInfo.js';
14+
import template from './utility/templater.js';
15+
import writeSourceFile from './utility/writeSourceFile.js';
1616

1717
const logger = rootLogger.child({ context: 'client' });
1818

@@ -32,7 +32,7 @@ const processPaths = (
3232
};
3333
writeSourceFile(
3434
filePath,
35-
fs.readFileSync(new URL(import.meta.resolve(`./output/${file}`)), 'utf-8'),
35+
fs.readFileSync(new URL(import.meta.resolve(`../output/${file}`)), 'utf-8'),
3636
);
3737
}
3838

@@ -142,7 +142,7 @@ const generatePackage = (version: string, outDir: PathInfo) => {
142142
build: 'tsc',
143143
},
144144
dependencies: {
145-
'@sinclair/typebox': '^0.34',
145+
typebox: '^1',
146146
},
147147
devDependencies: {
148148
'@types/node': '^24',
@@ -185,7 +185,7 @@ const generatePackage = (version: string, outDir: PathInfo) => {
185185
);
186186
};
187187

188-
const openapiToClient = async (specPath: string, outPath: PathInfo) => {
188+
const client = async (specPath: string, outPath: PathInfo) => {
189189
// TODO: validation
190190
let spec: OpenApiSpec;
191191
if (['.yml', '.yaml'].some((e) => specPath.endsWith(e))) {
@@ -212,7 +212,7 @@ const openapiToClient = async (specPath: string, outPath: PathInfo) => {
212212
logger.info('Mkdir', resolveAbsolutePath(modelsDir));
213213
fs.mkdirSync(resolveAbsolutePath(modelsDir), { recursive: true });
214214
files.push(
215-
...generateSchemas(
215+
...generateModels(
216216
Object.entries(spec.components.schemas).map(([key, schema]) => ({
217217
name: key,
218218
schema: schema as JSONSchema7,
@@ -250,7 +250,7 @@ const openapiToClient = async (specPath: string, outPath: PathInfo) => {
250250
generatePackage(spec.info.version, outPath);
251251
}
252252

253-
await sanitizeBulk(outPath.basePath, files);
253+
await lintAndCheckFiles(outPath.basePath, files);
254254
};
255255

256-
export default openapiToClient;
256+
export default client;

src/openapiClient/functionGeneration/index.ts renamed to src/generation/function.ts

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
1-
import writeSourceFile from '../../shared/writeSourceFile.js';
21
import type Operation from '../openapi/Operation.js';
32
import type Parameter from '../openapi/Parameter.js';
43
import type Reference from '../openapi/Reference.js';
54
import type RequestBody from '../openapi/RequestBody.js';
6-
7-
import GenerationError from '../../shared/GenerationError.js';
8-
import { ImportCollection, ImportSource, resolveImports } from '../../shared/importSource.js';
9-
import { default as rootLogger } from '../../shared/logger.js';
10-
import PathInfo from '../../shared/PathInfo.js';
11-
import { sanitizeVariableName, uppercaseFirst } from '../../shared/sanitization.js';
12-
import template from '../../shared/templater.js';
13-
import buildResponseReturn from './buildResponseReturn.js';
14-
import buildResponseTypes, { ResponseTypes } from './buildResponseTypes.js';
15-
import buildUrl from './buildUrl.js';
16-
import destructureParameters from './destructureParameters.js';
17-
import generateFunctionParameterType from './generateFunctionParameterType.js';
18-
import commentSanitize from './helpers/commentSanitize.js';
19-
import refUnsupported from './helpers/refUnsupported.js';
20-
import routeToOperationName from './helpers/routeToOperationName.js';
5+
import writeSourceFile from './utility/writeSourceFile.js';
6+
7+
import buildUrl from './function/buildUrl.js';
8+
import commentSanitize from './function/helpers/commentSanitize.js';
9+
import refUnsupported from './function/helpers/refUnsupported.js';
10+
import routeToOperationName from './function/helpers/routeToOperationName.js';
11+
import destructureParameters from './function/parameterDestructuring.js';
12+
import generateFunctionParameterType from './function/parameterType.js';
13+
import buildResponseReturn from './function/returnStatement.js';
14+
import buildResponseTypes, { ResponseTypes } from './response/responseTypes.js';
15+
import { GenerationError } from './utility/errors.js';
16+
import { ImportCollection, ImportSource, resolveImports } from './utility/importSource.js';
17+
import { default as rootLogger } from './utility/logger.js';
18+
import PathInfo from './utility/PathInfo.js';
19+
import { sanitizeVariableName, uppercaseFirst } from './utility/sanitization.js';
20+
import template from './utility/templater.js';
2121

2222
const logger = rootLogger.child({ context: 'function' });
2323

src/openapiClient/functionGeneration/buildUrl.ts renamed to src/generation/function/buildUrl.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import template from '../../shared/templater.js';
2-
import type Parameter from '../openapi/Parameter.js';
1+
import type Parameter from '../../openapi/Parameter.js';
2+
import template from '../utility/templater.js';
33
import substituteParams from './helpers/substituteParams.js';
44

55
const buildUrl = (route: string, parameters: Parameter[]) =>

src/openapiClient/functionGeneration/helpers/commentSanitize.ts renamed to src/generation/function/helpers/commentSanitize.ts

File renamed without changes.

src/openapiClient/functionGeneration/helpers/refUnsupported.ts renamed to src/generation/function/helpers/refUnsupported.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import NotImplementedError from '../../../shared/NotImplementedError.js';
2-
import type Reference from '../../openapi/Reference.js';
1+
import type Reference from '../../../openapi/Reference.js';
2+
import { NotImplementedError } from '../../utility/errors.js';
33

44
function refUnsupported<T>(thing: Reference | T): asserts thing is T {
55
if (typeof thing === 'object' && thing != null && '$ref' in thing) {

src/openapiClient/functionGeneration/helpers/routeToOperationName.ts renamed to src/generation/function/helpers/routeToOperationName.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { lowercaseFirst, toCamelCase, uppercaseFirst } from '../../../shared/sanitization.js';
1+
import { lowercaseFirst, toCamelCase, uppercaseFirst } from '../../utility/sanitization.js';
22

33
/**
44
* Convert a route and method to a camelCase operation name

0 commit comments

Comments
 (0)