Skip to content

Commit c1739c1

Browse files
committed
feat(code-gen): support TypeScript target for router and database generators
1 parent b1d0982 commit c1739c1

File tree

27 files changed

+1778
-765
lines changed

27 files changed

+1778
-765
lines changed

gen/code-gen.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,8 +305,11 @@ export function extendWithCodeGen(generator) {
305305
"js",
306306
"ts",
307307
"jsKoaReceive",
308+
"tsKoaReceive",
308309
"jsKoaSend",
310+
"tsKoaSend",
309311
"jsPostgres",
312+
"tsPostgres",
310313
"jsAxios",
311314
"tsAxios",
312315
"jsAxiosNode",

packages/cli/src/generated/cli/validators.js

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

packages/code-gen/src/api-client/react-query.js

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -122,13 +122,18 @@ export function reactQueryGetApiClientFile(generateContext, route) {
122122
`${route.group}/reactQueries.tsx`,
123123
{
124124
importCollector: new JavascriptImportCollector(),
125+
typeImportCollector: new JavascriptImportCollector(true),
125126
},
126127
);
127128

128129
const distilledTargetInfo = apiClientDistilledTargetInfo(generateContext);
129130
const importCollector = JavascriptImportCollector.getImportCollector(file);
131+
const typeImportCollector = JavascriptImportCollector.getImportCollector(
132+
file,
133+
true,
134+
);
130135

131-
importCollector.destructure("../common/api-client-wrapper", "Pretty");
136+
typeImportCollector.destructure("../common/api-client-wrapper", "Pretty");
132137

133138
if (distilledTargetInfo.useGlobalClients) {
134139
// Import the global clients, this has affect on a bunch of the generated api's where we don't
@@ -146,27 +151,28 @@ export function reactQueryGetApiClientFile(generateContext, route) {
146151
importCollector.destructure("@tanstack/react-query", "useQueryClient");
147152

148153
if (distilledTargetInfo.isAxios) {
149-
importCollector.destructure("axios", "AxiosInstance");
154+
typeImportCollector.destructure("axios", "AxiosInstance");
150155
} else {
151-
importCollector.destructure("../common/api-client", "FetchFn");
156+
typeImportCollector.destructure("../common/api-client", "FetchFn");
152157
}
153158
}
154159

155160
// Error handling
156-
importCollector.destructure("../common/api-client", "AppErrorResponse");
161+
typeImportCollector.destructure("../common/api-client", "AppErrorResponse");
157162

158163
if (distilledTargetInfo.isAxios) {
159-
importCollector.destructure("axios", "AxiosError");
160-
importCollector.destructure("axios", "AxiosRequestConfig");
164+
typeImportCollector.destructure("axios", "AxiosRequestConfig");
161165
}
162166

163167
// @tanstack/react-query imports
164-
importCollector.destructure("@tanstack/react-query", "QueryKey");
165-
importCollector.destructure("@tanstack/react-query", "Updater");
166-
importCollector.destructure("@tanstack/react-query", "UseMutationOptions");
167-
importCollector.destructure("@tanstack/react-query", "UseMutationResult");
168-
importCollector.destructure("@tanstack/react-query", "UseQueryOptions");
169-
importCollector.destructure("@tanstack/react-query", "UseQueryResult");
168+
typeImportCollector.destructure("@tanstack/react-query", "QueryKey");
169+
typeImportCollector.destructure("@tanstack/react-query", "Updater");
170+
typeImportCollector.destructure(
171+
"@tanstack/react-query",
172+
"UseMutationOptions",
173+
);
174+
typeImportCollector.destructure("@tanstack/react-query", "UseMutationResult");
175+
typeImportCollector.destructure("@tanstack/react-query", "UseQueryOptions");
170176
importCollector.destructure("@tanstack/react-query", "useMutation");
171177
importCollector.destructure("@tanstack/react-query", "useQuery");
172178
importCollector.destructure("@tanstack/react-query", "QueryClient");

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

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,19 @@ export function tsAxiosGenerateCommonFile(generateContext) {
2828
`common/api-client.ts${includeWrapper ? "x" : ""}`,
2929
{
3030
importCollector: new JavascriptImportCollector(),
31+
typeImportCollector: new JavascriptImportCollector(true),
3132
},
3233
);
3334

3435
const importCollector = JavascriptImportCollector.getImportCollector(file);
36+
const typeImportCollector = JavascriptImportCollector.getImportCollector(
37+
file,
38+
true,
39+
);
3540

3641
if (generateContext.options.generators.apiClient?.target.globalClient) {
3742
importCollector.raw(`import axios from "axios"`);
38-
importCollector.destructure("axios", "AxiosInstance");
43+
typeImportCollector.destructure("axios", "AxiosInstance");
3944

4045
fileWrite(
4146
file,
@@ -92,20 +97,24 @@ export function tsAxiosGetApiClientFile(generateContext, route) {
9297
`${route.group}/apiClient.ts`,
9398
{
9499
importCollector: new JavascriptImportCollector(),
100+
typeImportCollector: new JavascriptImportCollector(true),
95101
},
96102
);
97103

98104
const importCollector = JavascriptImportCollector.getImportCollector(file);
99-
importCollector.destructure("axios", "AxiosRequestConfig");
105+
const typeImportCollector = JavascriptImportCollector.getImportCollector(
106+
file,
107+
true,
108+
);
109+
110+
typeImportCollector.destructure("axios", "AxiosRequestConfig");
100111

101112
if (generateContext.options.generators.apiClient?.target.globalClient) {
102-
importCollector.destructure(`../common/api-client`, "axiosInstance");
113+
importCollector.destructure(`../common/api-client.js`, "axiosInstance");
103114
} else {
104-
importCollector.destructure("axios", "AxiosInstance");
115+
typeImportCollector.destructure("axios", "AxiosInstance");
105116
}
106117

107-
importCollector.destructure("../common/api-client", "AppErrorResponse");
108-
109118
return file;
110119
}
111120

packages/code-gen/src/database/generator.js

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { AppError, noop } from "@compas/stdlib";
1+
import { AppError } from "@compas/stdlib";
22
import { structureModels } from "../processors/models.js";
33
import { targetCustomSwitch } from "../target/switcher.js";
44
import { typesCacheGet } from "../types/cache.js";
@@ -22,6 +22,18 @@ import {
2222
jsPostgresGenerateWhere,
2323
} from "./js-postgres.js";
2424
import { databasePostgresWriteDDL } from "./postgres.js";
25+
import {
26+
tsPostgresCreateFile,
27+
tsPostgresGenerateCount,
28+
tsPostgresGenerateDelete,
29+
tsPostgresGenerateInsert,
30+
tsPostgresGenerateOrderBy,
31+
tsPostgresGenerateQueryBuilder,
32+
tsPostgresGenerateUpdate,
33+
tsPostgresGenerateUpsertOnPrimaryKey,
34+
tsPostgresGenerateUtils,
35+
tsPostgresGenerateWhere,
36+
} from "./ts-postgres.js";
2537

2638
/**
2739
* @typedef {{
@@ -96,12 +108,15 @@ export function databaseGenerator(generateContext) {
96108

97109
const target = databaseFormatTarget(generateContext);
98110
/** @type {Array<import("../generated/common/types.js").StructureAnyDefinitionTarget>} */
99-
const typeTargets = ["js", "jsPostgres"];
111+
const typeTargets =
112+
generateContext.options.targetLanguage === "js" ?
113+
["js", "jsPostgres"]
114+
: ["ts", "tsPostgres"];
100115

101116
targetCustomSwitch(
102117
{
103118
jsPostgres: jsPostgresGenerateUtils,
104-
tsPostgres: noop,
119+
tsPostgres: tsPostgresGenerateUtils,
105120
},
106121
target,
107122
[generateContext],
@@ -112,7 +127,7 @@ export function databaseGenerator(generateContext) {
112127
const file = targetCustomSwitch(
113128
{
114129
jsPostgres: jsPostgresCreateFile,
115-
tsPostgres: noop,
130+
tsPostgres: tsPostgresCreateFile,
116131
},
117132
target,
118133
[generateContext, model],
@@ -229,7 +244,7 @@ export function databaseGenerator(generateContext) {
229244
targetCustomSwitch(
230245
{
231246
jsPostgres: jsPostgresGenerateWhere,
232-
tsPostgres: noop,
247+
tsPostgres: tsPostgresGenerateWhere,
233248
},
234249
target,
235250
[generateContext, file, model, contextNames],
@@ -238,7 +253,7 @@ export function databaseGenerator(generateContext) {
238253
targetCustomSwitch(
239254
{
240255
jsPostgres: jsPostgresGenerateOrderBy,
241-
tsPostgres: noop,
256+
tsPostgres: tsPostgresGenerateOrderBy,
242257
},
243258
target,
244259
[generateContext, file, model, contextNames],
@@ -247,7 +262,7 @@ export function databaseGenerator(generateContext) {
247262
targetCustomSwitch(
248263
{
249264
jsPostgres: jsPostgresGenerateCount,
250-
tsPostgres: noop,
265+
tsPostgres: tsPostgresGenerateCount,
251266
},
252267
target,
253268
[generateContext, file, model, contextNames],
@@ -257,7 +272,7 @@ export function databaseGenerator(generateContext) {
257272
targetCustomSwitch(
258273
{
259274
jsPostgres: jsPostgresGenerateInsert,
260-
tsPostgres: noop,
275+
tsPostgres: tsPostgresGenerateInsert,
261276
},
262277
target,
263278
[generateContext, file, model, contextNames],
@@ -266,7 +281,7 @@ export function databaseGenerator(generateContext) {
266281
targetCustomSwitch(
267282
{
268283
jsPostgres: jsPostgresGenerateUpsertOnPrimaryKey,
269-
tsPostgres: noop,
284+
tsPostgres: tsPostgresGenerateUpsertOnPrimaryKey,
270285
},
271286
target,
272287
[generateContext, file, model, contextNames],
@@ -275,7 +290,7 @@ export function databaseGenerator(generateContext) {
275290
targetCustomSwitch(
276291
{
277292
jsPostgres: jsPostgresGenerateUpdate,
278-
tsPostgres: noop,
293+
tsPostgres: tsPostgresGenerateUpdate,
279294
},
280295
target,
281296
[generateContext, file, model, contextNames],
@@ -284,7 +299,7 @@ export function databaseGenerator(generateContext) {
284299
targetCustomSwitch(
285300
{
286301
jsPostgres: jsPostgresGenerateDelete,
287-
tsPostgres: noop,
302+
tsPostgres: tsPostgresGenerateDelete,
288303
},
289304
target,
290305
[generateContext, file, model, contextNames],
@@ -294,7 +309,7 @@ export function databaseGenerator(generateContext) {
294309
targetCustomSwitch(
295310
{
296311
jsPostgres: jsPostgresGenerateQueryBuilder,
297-
tsPostgres: noop,
312+
tsPostgres: tsPostgresGenerateQueryBuilder,
298313
},
299314
target,
300315
[generateContext, file, model, contextNames],

0 commit comments

Comments
 (0)