Skip to content

Commit 2a45b24

Browse files
committed
fix(code-gen): more fixes for backend TypeScript targets
1 parent de3d2f3 commit 2a45b24

File tree

12 files changed

+87
-45
lines changed

12 files changed

+87
-45
lines changed

packages/cli/src/generated/common/types.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,3 +95,5 @@ export type CliCompletion =
9595
"specification": "boolean"|"number"|"string"|"booleanOrString";
9696
"description"?: string|undefined;
9797
};
98+
99+

packages/code-gen/package.json

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,7 @@
1010
"./package.json": "./package.json"
1111
},
1212
"type": "module",
13-
"keywords": [
14-
"compas",
15-
"generate",
16-
"router",
17-
"validation",
18-
"code-gen"
19-
],
13+
"keywords": ["compas", "generate", "router", "validation", "code-gen"],
2014
"license": "MIT",
2115
"dependencies": {
2216
"@compas/stdlib": "0.15.4"

packages/code-gen/src/api-client/ts-axios.js

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ export function tsAxiosGenerateCommonFile(generateContext) {
2929
{
3030
importCollector: new JavascriptImportCollector(),
3131
typeImportCollector: new JavascriptImportCollector(true),
32+
contents:
33+
generateContext.options.generators.router ?
34+
`// @ts-nocheck\n\n`
35+
: undefined,
3236
},
3337
);
3438

@@ -73,6 +77,61 @@ export function tsAxiosGenerateCommonFile(generateContext) {
7377
}>;
7478
`,
7579
);
80+
81+
if (generateContext.options.generators.router) {
82+
importCollector.destructure("@compas/stdlib", "AppError");
83+
importCollector.destructure("@compas/stdlib", "streamToBuffer");
84+
85+
fileWrite(
86+
file,
87+
`/**
88+
* Adds an interceptor to the provided Axios instance, wrapping any error in an AppError.
89+
* This allows directly testing against an error key or property.
90+
*/
91+
export function axiosInterceptErrorAndWrapWithAppError(axiosInstance: AxiosInstance) {
92+
axiosInstance.interceptors.response.use(undefined, async (error) => {
93+
// Validator error
94+
if (AppError.instanceOf(error)) {
95+
// If it is an AppError already, it most likely is thrown by the response
96+
// validators. So we rethrow it as is.
97+
throw error;
98+
}
99+
100+
if (typeof error?.response?.data?.pipe === "function") {
101+
const buffer = await streamToBuffer(error.response.data);
102+
try {
103+
error.response.data = JSON.parse(buffer.toString("utf-8"));
104+
} catch {
105+
// Unknown error
106+
throw new AppError(
107+
\`response.error\`,
108+
error.response?.status ?? 500,
109+
{
110+
message:
111+
"Could not decode the response body for further information.",
112+
},
113+
error,
114+
);
115+
}
116+
}
117+
118+
// Server AppError
119+
const { key, info } = error.response?.data ?? {};
120+
if (typeof key === "string" && !!info && typeof info === "object") {
121+
throw new AppError(key, error.response.status, info, error);
122+
}
123+
124+
// Unknown error
125+
throw new AppError(
126+
\`response.error\`,
127+
error.response?.status ?? 500,
128+
AppError.format(error),
129+
);
130+
});
131+
}
132+
`,
133+
);
134+
}
76135
}
77136

78137
/**

packages/code-gen/src/crud/events.js

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,6 @@ import {
3030
* @param {import("../generate.js").GenerateContext} generateContext
3131
*/
3232
export function crudEventsGenerate(generateContext) {
33-
if (generateContext.options.targetLanguage !== "js") {
34-
return;
35-
}
36-
3733
if (isNil(generateContext.options.generators.router?.target?.library)) {
3834
return;
3935
}
@@ -96,9 +92,14 @@ function crudEventsGenerateForType(generateContext, file, crud) {
9692
* @param {import("../../types/advanced-types.d.ts").NamedType<import("../generated/common/types.d.ts").StructureCrudDefinition>} crud
9793
*/
9894
function crudEventsFile(generateContext, crud) {
99-
return fileContextCreateGeneric(generateContext, `${crud.group}/events.js`, {
100-
importCollector: new JavascriptImportCollector(),
101-
});
95+
return fileContextCreateGeneric(
96+
generateContext,
97+
`${crud.group}/events.${generateContext.options.targetLanguage}`,
98+
{
99+
importCollector: new JavascriptImportCollector(),
100+
contents: "// @ts-nocheck\n\n",
101+
},
102+
);
102103
}
103104

104105
/**

packages/code-gen/src/crud/handlers.js

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,6 @@ import { crudQueryBuilderGet } from "./query-builder.js";
3636
* @param {import("../generate.js").GenerateContext} generateContext
3737
*/
3838
export function crudHandlersGenerate(generateContext) {
39-
if (generateContext.options.targetLanguage !== "js") {
40-
return;
41-
}
42-
4339
if (isNil(generateContext.options.generators.router?.target?.library)) {
4440
return;
4541
}
@@ -60,9 +56,14 @@ export function crudHandlersGenerate(generateContext) {
6056
* @param {import("../../types/advanced-types.d.ts").NamedType<import("../generated/common/types.d.ts").StructureCrudDefinition>} crud
6157
*/
6258
function crudHandlersFile(generateContext, crud) {
63-
return fileContextCreateGeneric(generateContext, `${crud.group}/crud.js`, {
64-
importCollector: new JavascriptImportCollector(),
65-
});
59+
return fileContextCreateGeneric(
60+
generateContext,
61+
`${crud.group}/crud.${generateContext.options.targetLanguage}`,
62+
{
63+
importCollector: new JavascriptImportCollector(),
64+
contents: "// @ts-nocheck\n\n",
65+
},
66+
);
6667
}
6768

6869
/**

packages/code-gen/src/database/ts-postgres.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export function tsPostgresGenerateUtils(generateContext) {
3838

3939
const indexFile = fileContextCreateGeneric(
4040
generateContext,
41-
"common/database.js",
41+
"common/database.ts",
4242
{
4343
importCollector: new JavascriptImportCollector(),
4444
typeImportCollector: new JavascriptImportCollector(true),

packages/code-gen/src/generated/common/types.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1389,3 +1389,5 @@ export type StructureTypeDefinitionInput =
13891389
|StructureReferenceDefinitionInput
13901390
|StructureRelationDefinitionInput
13911391
|StructureRouteInvalidationDefinitionInput;
1392+
1393+

packages/create-compas/package.json

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,7 @@
99
"bin": {
1010
"create-compas": "src/create-compas.js"
1111
},
12-
"keywords": [
13-
"compas",
14-
"create"
15-
],
12+
"keywords": ["compas", "create"],
1613
"license": "MIT",
1714
"dependencies": {
1815
"@compas/stdlib": "0.15.4",

packages/server/package.json

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,7 @@
1010
"./package.json": "./package.json"
1111
},
1212
"type": "module",
13-
"keywords": [
14-
"compas",
15-
"koa",
16-
"api",
17-
"http",
18-
"backend"
19-
],
13+
"keywords": ["compas", "koa", "api", "http", "backend"],
2014
"license": "MIT",
2115
"dependencies": {
2216
"@compas/stdlib": "0.15.4",

packages/stdlib/package.json

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,7 @@
1010
"./package.json": "./package.json"
1111
},
1212
"type": "module",
13-
"keywords": [
14-
"compas",
15-
"stdlib",
16-
"standard",
17-
"logger"
18-
],
13+
"keywords": ["compas", "stdlib", "standard", "logger"],
1914
"license": "MIT",
2015
"dependencies": {
2116
"@types/node": "22.9.0",

0 commit comments

Comments
 (0)