Skip to content

Commit 3ddbc7a

Browse files
committed
feat(code-gen): don't duplicate implementations for custom types when not needed
This resulted in duplicate generate types, which in bigger projects impacts TS performance quite a bit.
1 parent 3d360c8 commit 3ddbc7a

File tree

2 files changed

+11
-21
lines changed

2 files changed

+11
-21
lines changed

packages/code-gen/src/processors/model-query.js

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -195,8 +195,6 @@ function getQueryDefinitionReference(group, name) {
195195
return new AnyType().implementations({
196196
js: implementation,
197197
ts: implementation,
198-
jsPostgres: implementation,
199-
tsPostgres: implementation,
200198
});
201199
}
202200

@@ -229,23 +227,17 @@ type _ResolveType<T> = { [K in keyof T]: T[K] } & {};
229227
/**
230228
* Utility type to resolve the base + expansion of an entity.
231229
*/
232-
export type QueryBuilderDefinition<Base, Expansion> = {
230+
interface QueryBuilderDefinition<Base, Expansion> {
233231
base: Base;
234232
expansion: Expansion;
235-
};
236-
237-
type PickKeysThatExtend<T, Select> = {
238-
[K in keyof T as T[K] extends Select ? K : never]: T[K];
239-
};
240-
241-
type OmitKeysThatExtend<T, Select> = {
242-
[K in keyof T as T[K] extends Select ? never : K]: T[K];
243-
};
233+
}
244234
245235
/**
246236
* Omit never values
247237
*/
248-
type OmitNever<T> = OmitKeysThatExtend<T, never>;
238+
type OmitNever<T> = {
239+
[K in keyof T as T[K] extends never ? never : K]: T[K];
240+
};
249241
250242
/**
251243
* Apply Partial if the type can be undefined.
@@ -427,15 +419,13 @@ export type QueryBuilderResolver<
427419
[K in Exclude<
428420
Exclude<keyof Expansion, QueryBuilderSpecialKeys>,
429421
number | symbol
430-
>]: _ResolveType<
431-
ResolveExpansionKey<
422+
>]: ResolveExpansionKey<
432423
K,
433424
Base,
434425
Expansion,
435426
QueryBuilder,
436427
OptionalJoins
437-
>
438-
>;
428+
>;
439429
}>
440430
>
441431
>
@@ -467,7 +457,7 @@ export type QueryBuilderResolver<
467457
);
468458
fileWriteRaw(
469459
file,
470-
`${exportPrefix} type ${name}QueryResolver<QueryBuilder extends ${name}QueryBuilderInput, const OptionalJoins extends ${name}OptionalJoins = never> = QueryBuilderResolver<QueryDefinition${name}, QueryBuilder, OptionalJoins>;\n\n`,
460+
`${exportPrefix} type ${name}QueryResolver<QueryBuilder extends ${name}QueryBuilder, const OptionalJoins extends ${name}OptionalJoins = never> = QueryBuilderResolver<QueryDefinition${name}, QueryBuilder, OptionalJoins>;\n\n`,
471461
);
472462
} else if (generateContext.options.targetLanguage === "js") {
473463
fileWriteRaw(
@@ -476,7 +466,7 @@ export type QueryBuilderResolver<
476466
);
477467
fileWriteRaw(
478468
file,
479-
`${exportPrefix} type ${name}QueryResolver<QueryBuilder extends ${name}QueryBuilderInput, const OptionalJoins extends import("@compas/store").ResolveOptionalJoins<QueryExpansion${name}> = never> = import("@compas/store").QueryBuilderResolver<QueryDefinition${name}, QueryBuilder, OptionalJoins>;\n\n`,
469+
`${exportPrefix} type ${name}QueryResolver<QueryBuilder extends ${name}QueryBuilder, const OptionalJoins extends import("@compas/store").ResolveOptionalJoins<QueryExpansion${name}> = never> = import("@compas/store").QueryBuilderResolver<QueryDefinition${name}, QueryBuilder, OptionalJoins>;\n\n`,
480470
);
481471
}
482472
}

packages/code-gen/src/processors/models.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,13 @@ export function structureModels(generateContext) {
2929
*/
3030
export function modelQueryPartType() {
3131
return new AnyType().implementations({
32-
jsPostgres: {
32+
js: {
3333
validatorImport: `import { isQueryPart } from "@compas/store";`,
3434
validatorExpression: `isQueryPart($value$)`,
3535
validatorInputType: `(import("@compas/store").QueryPart<any>)`,
3636
validatorOutputType: `import("@compas/store").QueryPart<any>`,
3737
},
38-
tsPostgres: {
38+
ts: {
3939
validatorImport: `import { isQueryPart } from "@compas/store";\nimport type { QueryPart } from "@compas/store";`,
4040
validatorExpression: `isQueryPart($value$)`,
4141
validatorInputType: `(import("@compas/store").QueryPart)`,

0 commit comments

Comments
 (0)