joist-graphql-codegen 2.3.0-next.7 → 2.3.0-next.71
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/_virtual/_rolldown/runtime.cjs +23 -0
- package/build/generateEnumDetailResolvers.cjs +40 -0
- package/build/generateEnumDetailResolvers.cjs.map +1 -0
- package/build/generateEnumDetailResolvers.d.cts +8 -0
- package/build/generateEnumDetailResolvers.d.cts.map +1 -0
- package/build/generateEnumDetailResolvers.d.mts +8 -0
- package/build/generateEnumDetailResolvers.d.mts.map +1 -0
- package/build/generateEnumDetailResolvers.js +23 -23
- package/build/generateEnumDetailResolvers.js.map +1 -1
- package/build/generateEnumsGraphql.cjs +29 -0
- package/build/generateEnumsGraphql.cjs.map +1 -0
- package/build/generateEnumsGraphql.d.cts +8 -0
- package/build/generateEnumsGraphql.d.cts.map +1 -0
- package/build/generateEnumsGraphql.d.mts +8 -0
- package/build/generateEnumsGraphql.d.mts.map +1 -0
- package/build/generateEnumsGraphql.js +24 -27
- package/build/generateEnumsGraphql.js.map +1 -1
- package/build/generateGraphqlCodegen.cjs +54 -0
- package/build/generateGraphqlCodegen.cjs.map +1 -0
- package/build/generateGraphqlCodegen.d.cts +8 -0
- package/build/generateGraphqlCodegen.d.cts.map +1 -0
- package/build/generateGraphqlCodegen.d.mts +8 -0
- package/build/generateGraphqlCodegen.d.mts.map +1 -0
- package/build/generateGraphqlCodegen.js +28 -30
- package/build/generateGraphqlCodegen.js.map +1 -1
- package/build/generateGraphqlSchemaFiles.cjs +491 -0
- package/build/generateGraphqlSchemaFiles.cjs.map +1 -0
- package/build/{generateGraphqlSchemaFiles.d.ts → generateGraphqlSchemaFiles.d.cts} +6 -3
- package/build/generateGraphqlSchemaFiles.d.cts.map +1 -0
- package/build/generateGraphqlSchemaFiles.d.mts +15 -0
- package/build/generateGraphqlSchemaFiles.d.mts.map +1 -0
- package/build/generateGraphqlSchemaFiles.js +444 -286
- package/build/generateGraphqlSchemaFiles.js.map +1 -1
- package/build/generateObjectResolvers.cjs +70 -0
- package/build/generateObjectResolvers.cjs.map +1 -0
- package/build/{generateObjectResolvers.d.ts → generateObjectResolvers.d.cts} +5 -2
- package/build/generateObjectResolvers.d.cts.map +1 -0
- package/build/generateObjectResolvers.d.mts +17 -0
- package/build/generateObjectResolvers.d.mts.map +1 -0
- package/build/generateObjectResolvers.js +48 -38
- package/build/generateObjectResolvers.js.map +1 -1
- package/build/generateQueryPageResolvers.cjs +51 -0
- package/build/generateQueryPageResolvers.cjs.map +1 -0
- package/build/generateQueryPageResolvers.d.cts +8 -0
- package/build/generateQueryPageResolvers.d.cts.map +1 -0
- package/build/generateQueryPageResolvers.d.mts +8 -0
- package/build/generateQueryPageResolvers.d.mts.map +1 -0
- package/build/generateQueryPageResolvers.js +31 -35
- package/build/generateQueryPageResolvers.js.map +1 -1
- package/build/generateQueryResolvers.cjs +55 -0
- package/build/generateQueryResolvers.cjs.map +1 -0
- package/build/generateQueryResolvers.d.cts +10 -0
- package/build/generateQueryResolvers.d.cts.map +1 -0
- package/build/generateQueryResolvers.d.mts +10 -0
- package/build/generateQueryResolvers.d.mts.map +1 -0
- package/build/generateQueryResolvers.js +38 -36
- package/build/generateQueryResolvers.js.map +1 -1
- package/build/generateResolverUtils.cjs +36 -0
- package/build/generateResolverUtils.cjs.map +1 -0
- package/build/generateResolverUtils.d.cts +8 -0
- package/build/generateResolverUtils.d.cts.map +1 -0
- package/build/generateResolverUtils.d.mts +8 -0
- package/build/generateResolverUtils.d.mts.map +1 -0
- package/build/generateResolverUtils.js +25 -26
- package/build/generateResolverUtils.js.map +1 -1
- package/build/generateSaveResolvers.cjs +57 -0
- package/build/generateSaveResolvers.cjs.map +1 -0
- package/build/{generateSaveResolvers.d.ts → generateSaveResolvers.d.cts} +5 -2
- package/build/generateSaveResolvers.d.cts.map +1 -0
- package/build/generateSaveResolvers.d.mts +17 -0
- package/build/generateSaveResolvers.d.mts.map +1 -0
- package/build/generateSaveResolvers.js +39 -40
- package/build/generateSaveResolvers.js.map +1 -1
- package/build/graphqlUtils.cjs +160 -0
- package/build/graphqlUtils.cjs.map +1 -0
- package/build/graphqlUtils.d.cts +31 -0
- package/build/graphqlUtils.d.cts.map +1 -0
- package/build/graphqlUtils.d.mts +31 -0
- package/build/graphqlUtils.d.mts.map +1 -0
- package/build/graphqlUtils.js +120 -218
- package/build/graphqlUtils.js.map +1 -1
- package/build/history.cjs +25 -0
- package/build/history.cjs.map +1 -0
- package/build/history.d.cts +9 -0
- package/build/history.d.cts.map +1 -0
- package/build/history.d.mts +9 -0
- package/build/history.d.mts.map +1 -0
- package/build/history.js +17 -14
- package/build/history.js.map +1 -1
- package/build/index.cjs +57 -0
- package/build/index.cjs.map +1 -0
- package/build/index.d.cts +7 -0
- package/build/index.d.cts.map +1 -0
- package/build/index.d.mts +7 -0
- package/build/index.d.mts.map +1 -0
- package/build/index.js +48 -54
- package/build/index.js.map +1 -1
- package/build/testUtils.cjs +191 -0
- package/build/testUtils.cjs.map +1 -0
- package/build/testUtils.d.cts +20 -0
- package/build/testUtils.d.cts.map +1 -0
- package/build/testUtils.d.mts +20 -0
- package/build/testUtils.d.mts.map +1 -0
- package/build/testUtils.js +162 -158
- package/build/testUtils.js.map +1 -1
- package/build/utils.cjs +51 -0
- package/build/utils.cjs.map +1 -0
- package/build/utils.d.cts +16 -0
- package/build/utils.d.cts.map +1 -0
- package/build/utils.d.mts +16 -0
- package/build/utils.d.mts.map +1 -0
- package/build/utils.js +37 -49
- package/build/utils.js.map +1 -1
- package/package.json +33 -13
- package/build/generateEnumDetailResolvers.d.ts +0 -5
- package/build/generateEnumDetailResolvers.d.ts.map +0 -1
- package/build/generateEnumDetailResolvers.test.d.ts +0 -2
- package/build/generateEnumDetailResolvers.test.d.ts.map +0 -1
- package/build/generateEnumDetailResolvers.test.js +0 -34
- package/build/generateEnumDetailResolvers.test.js.map +0 -1
- package/build/generateEnumsGraphql.d.ts +0 -5
- package/build/generateEnumsGraphql.d.ts.map +0 -1
- package/build/generateGraphqlCodegen.d.ts +0 -5
- package/build/generateGraphqlCodegen.d.ts.map +0 -1
- package/build/generateGraphqlCodegen.test.d.ts +0 -2
- package/build/generateGraphqlCodegen.test.d.ts.map +0 -1
- package/build/generateGraphqlCodegen.test.js +0 -44
- package/build/generateGraphqlCodegen.test.js.map +0 -1
- package/build/generateGraphqlSchemaFiles.d.ts.map +0 -1
- package/build/generateGraphqlSchemaFiles.test.d.ts +0 -2
- package/build/generateGraphqlSchemaFiles.test.d.ts.map +0 -1
- package/build/generateGraphqlSchemaFiles.test.js +0 -1008
- package/build/generateGraphqlSchemaFiles.test.js.map +0 -1
- package/build/generateObjectResolvers.d.ts.map +0 -1
- package/build/generateQueryPageResolvers.d.ts +0 -5
- package/build/generateQueryPageResolvers.d.ts.map +0 -1
- package/build/generateQueryPageResolvers.test.d.ts +0 -2
- package/build/generateQueryPageResolvers.test.d.ts.map +0 -1
- package/build/generateQueryPageResolvers.test.js +0 -46
- package/build/generateQueryPageResolvers.test.js.map +0 -1
- package/build/generateQueryResolvers.d.ts +0 -7
- package/build/generateQueryResolvers.d.ts.map +0 -1
- package/build/generateQueryResolvers.test.d.ts +0 -2
- package/build/generateQueryResolvers.test.d.ts.map +0 -1
- package/build/generateQueryResolvers.test.js +0 -45
- package/build/generateQueryResolvers.test.js.map +0 -1
- package/build/generateResolverUtils.d.ts +0 -5
- package/build/generateResolverUtils.d.ts.map +0 -1
- package/build/generateResolverUtils.test.d.ts +0 -2
- package/build/generateResolverUtils.test.d.ts.map +0 -1
- package/build/generateResolverUtils.test.js +0 -53
- package/build/generateResolverUtils.test.js.map +0 -1
- package/build/generateSaveResolvers.d.ts.map +0 -1
- package/build/generateSaveResolvers.test.d.ts +0 -2
- package/build/generateSaveResolvers.test.d.ts.map +0 -1
- package/build/generateSaveResolvers.test.js +0 -49
- package/build/generateSaveResolvers.test.js.map +0 -1
- package/build/graphqlUtils.d.ts +0 -28
- package/build/graphqlUtils.d.ts.map +0 -1
- package/build/history.d.ts +0 -6
- package/build/history.d.ts.map +0 -1
- package/build/index.d.ts +0 -4
- package/build/index.d.ts.map +0 -1
- package/build/testUtils.d.ts +0 -25
- package/build/testUtils.d.ts.map +0 -1
- package/build/utils.d.ts +0 -13
- package/build/utils.d.ts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testUtils.d.cts","names":[],"sources":["../src/testUtils.ts"],"mappings":";;;;iBAmBgB,MAAM,OAAO,yBAAyB;iBAUtC,UAAU,KAAK,qBAAqB,QAAQ,cAAc;iBAsB1D,kBAAkB,mBAAmB,OAAM,QAAQ,kBAAuB;iBAyB1E,kBAAkB,cAAc,OAAM,QAAQ,oBAAyB;iBAqCvE,aAAa,mBAAmB,OAAM,QAAQ,aAAkB;iBA2BhE,kBACd,mBACA,qBACA,OAAM,QAAQ,kBACb;;iBAsBa,oBACd,mBACA,sBACA,OAAM,QAAQ,oBACb;;;;;iBAwBa,kBAAkB,MAAM,aAAa,QAAQ"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Fs } from "./utils.mjs";
|
|
2
|
+
import { Config, DbMetadata, EntityDbMetadata, EnumField, ManyToOneField, PolymorphicField, PrimitiveField } from "joist-codegen";
|
|
3
|
+
import { CodegenFile } from "ts-poet";
|
|
4
|
+
//#region src/testUtils.d.ts
|
|
5
|
+
declare function newFs(files: Record<string, string>): Fs;
|
|
6
|
+
declare function newDbMeta(opt: EntityDbMetadata[] | Partial<DbMetadata>): DbMetadata;
|
|
7
|
+
declare function newPrimitiveField(fieldName: string, opts?: Partial<PrimitiveField>): PrimitiveField;
|
|
8
|
+
declare function newEntityMetadata(name: string, opts?: Partial<EntityDbMetadata>): EntityDbMetadata;
|
|
9
|
+
declare function newEnumField(fieldName: string, opts?: Partial<EnumField>): EnumField;
|
|
10
|
+
declare function newManyToOneField(fieldName: string, otherEntity: string, opts?: Partial<ManyToOneField>): ManyToOneField;
|
|
11
|
+
/** Creates a polymorphic field for tests. */
|
|
12
|
+
declare function newPolymorphicField(fieldName: string, components: string[], opts?: Partial<PolymorphicField>): PolymorphicField;
|
|
13
|
+
/**
|
|
14
|
+
* Mimics the contentToString flow from packages/codegen/src/index.ts to test import extension handling.
|
|
15
|
+
* This reproduces the same logic used in production when saving files.
|
|
16
|
+
*/
|
|
17
|
+
declare function renderCodegenFile(file: CodegenFile, config: Config): string;
|
|
18
|
+
//#endregion
|
|
19
|
+
export { newDbMeta, newEntityMetadata, newEnumField, newFs, newManyToOneField, newPolymorphicField, newPrimitiveField, renderCodegenFile };
|
|
20
|
+
//# sourceMappingURL=testUtils.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testUtils.d.mts","names":[],"sources":["../src/testUtils.ts"],"mappings":";;;;iBAmBgB,MAAM,OAAO,yBAAyB;iBAUtC,UAAU,KAAK,qBAAqB,QAAQ,cAAc;iBAsB1D,kBAAkB,mBAAmB,OAAM,QAAQ,kBAAuB;iBAyB1E,kBAAkB,cAAc,OAAM,QAAQ,oBAAyB;iBAqCvE,aAAa,mBAAmB,OAAM,QAAQ,aAAkB;iBA2BhE,kBACd,mBACA,qBACA,OAAM,QAAQ,kBACb;;iBAsBa,oBACd,mBACA,sBACA,OAAM,QAAQ,oBACb;;;;;iBAwBa,kBAAkB,MAAM,aAAa,QAAQ"}
|
package/build/testUtils.js
CHANGED
|
@@ -1,177 +1,181 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
exports.newPolymorphicField = newPolymorphicField;
|
|
10
|
-
exports.renderCodegenFile = renderCodegenFile;
|
|
11
|
-
const change_case_1 = require("change-case");
|
|
12
|
-
const joist_codegen_1 = require("joist-codegen");
|
|
13
|
-
const joist_utils_1 = require("joist-utils");
|
|
14
|
-
const pluralize_1 = require("pluralize");
|
|
15
|
-
const ts_poet_1 = require("ts-poet");
|
|
16
|
-
const utils_1 = require("./utils");
|
|
1
|
+
import { getImportExtension } from "./utils.js";
|
|
2
|
+
import { pascalCase, snakeCase } from "change-case";
|
|
3
|
+
import { makeEntity } from "joist-codegen";
|
|
4
|
+
import pluralize from "pluralize";
|
|
5
|
+
import { imp } from "ts-poet";
|
|
6
|
+
import { keyBy } from "joist-utils";
|
|
7
|
+
//#region src/testUtils.ts
|
|
8
|
+
const { plural } = pluralize;
|
|
17
9
|
function newFs(files) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
10
|
+
return {
|
|
11
|
+
exists: async (fileName) => !!files[fileName],
|
|
12
|
+
load: async (fileName) => files[fileName],
|
|
13
|
+
save: async (fileName, content) => {
|
|
14
|
+
files[fileName] = content;
|
|
15
|
+
}
|
|
16
|
+
};
|
|
25
17
|
}
|
|
26
18
|
function newDbMeta(opt) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
totalTables: 10,
|
|
44
|
-
entitiesByName,
|
|
45
|
-
};
|
|
19
|
+
const entities = Array.isArray(opt) ? opt : opt.entities ?? [];
|
|
20
|
+
const entitiesByName = keyBy(entities, "name");
|
|
21
|
+
for (const entity of entities) if (entity.baseClassName) {
|
|
22
|
+
const baseType = entitiesByName[entity.baseClassName];
|
|
23
|
+
entity.baseType = baseType;
|
|
24
|
+
baseType.subTypes.push(entity);
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
entities,
|
|
28
|
+
enums: {},
|
|
29
|
+
pgEnums: {},
|
|
30
|
+
joinTables: [],
|
|
31
|
+
otherTables: [],
|
|
32
|
+
totalTables: 10,
|
|
33
|
+
entitiesByName
|
|
34
|
+
};
|
|
46
35
|
}
|
|
47
36
|
function newPrimitiveField(fieldName, opts = {}) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
37
|
+
return {
|
|
38
|
+
kind: "primitive",
|
|
39
|
+
columnOwner: makeEntity("Author"),
|
|
40
|
+
fieldName,
|
|
41
|
+
columnName: snakeCase(fieldName),
|
|
42
|
+
columnGenerated: false,
|
|
43
|
+
columnType: "varchar",
|
|
44
|
+
fieldType: "string",
|
|
45
|
+
rawFieldType: "string",
|
|
46
|
+
derived: false,
|
|
47
|
+
notNull: true,
|
|
48
|
+
protected: false,
|
|
49
|
+
unique: false,
|
|
50
|
+
columnDefault: null,
|
|
51
|
+
columnNotNull: opts.notNull ?? true,
|
|
52
|
+
superstruct: void 0,
|
|
53
|
+
zodSchema: void 0,
|
|
54
|
+
customSerde: void 0,
|
|
55
|
+
isArray: false,
|
|
56
|
+
hasConfigDefault: false,
|
|
57
|
+
...opts
|
|
58
|
+
};
|
|
67
59
|
}
|
|
68
60
|
function newEntityMetadata(name, opts = {}) {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
61
|
+
return {
|
|
62
|
+
name,
|
|
63
|
+
entity: makeEntity(name),
|
|
64
|
+
primaryKey: newPrimitiveField("id", {
|
|
65
|
+
columnType: "int",
|
|
66
|
+
fieldType: "number",
|
|
67
|
+
rawFieldType: "number"
|
|
68
|
+
}),
|
|
69
|
+
primitives: [],
|
|
70
|
+
enums: [],
|
|
71
|
+
pgEnums: [],
|
|
72
|
+
manyToOnes: [],
|
|
73
|
+
oneToManys: [],
|
|
74
|
+
largeOneToManys: [],
|
|
75
|
+
manyToManys: [],
|
|
76
|
+
largeManyToManys: [],
|
|
77
|
+
manyToManyEnums: [],
|
|
78
|
+
oneToOnes: [],
|
|
79
|
+
polymorphics: [],
|
|
80
|
+
tableName: snakeCase(plural(name)),
|
|
81
|
+
tagName: name,
|
|
82
|
+
updatedAt: void 0,
|
|
83
|
+
createdAt: void 0,
|
|
84
|
+
deletedAt: void 0,
|
|
85
|
+
baseClassName: void 0,
|
|
86
|
+
baseType: void 0,
|
|
87
|
+
subTypes: [],
|
|
88
|
+
inheritanceType: void 0,
|
|
89
|
+
abstract: false,
|
|
90
|
+
nonDeferredFkOrder: 0,
|
|
91
|
+
get nonDeferredFks() {
|
|
92
|
+
return [];
|
|
93
|
+
},
|
|
94
|
+
get nonDeferredManyToManyFks() {
|
|
95
|
+
return [];
|
|
96
|
+
},
|
|
97
|
+
...opts
|
|
98
|
+
};
|
|
103
99
|
}
|
|
104
100
|
function newEnumField(fieldName, opts = {}) {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
101
|
+
const enumName = opts.enumName || "Color";
|
|
102
|
+
const enumType = imp(`${enumName}@./entities`);
|
|
103
|
+
const enumDetailType = imp(`${plural(enumName)}@./entities`);
|
|
104
|
+
const enumDetailsType = imp(`${enumName}Details@./entities`);
|
|
105
|
+
return {
|
|
106
|
+
kind: "enum",
|
|
107
|
+
columnOwner: makeEntity("Author"),
|
|
108
|
+
fieldName,
|
|
109
|
+
columnName: snakeCase(fieldName),
|
|
110
|
+
columnGenerated: false,
|
|
111
|
+
columnType: "int",
|
|
112
|
+
columnDefault: null,
|
|
113
|
+
columnNotNull: opts.notNull ?? true,
|
|
114
|
+
derived: false,
|
|
115
|
+
enumName,
|
|
116
|
+
enumType,
|
|
117
|
+
enumDetailType,
|
|
118
|
+
enumDetailsType,
|
|
119
|
+
notNull: true,
|
|
120
|
+
enumRows: [],
|
|
121
|
+
isArray: false,
|
|
122
|
+
hasConfigDefault: false,
|
|
123
|
+
...opts
|
|
124
|
+
};
|
|
126
125
|
}
|
|
127
126
|
function newManyToOneField(fieldName, otherEntity, opts = {}) {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
127
|
+
return {
|
|
128
|
+
kind: "m2o",
|
|
129
|
+
columnOwner: makeEntity("Author"),
|
|
130
|
+
fieldName,
|
|
131
|
+
columnName: snakeCase(fieldName),
|
|
132
|
+
columnGenerated: false,
|
|
133
|
+
columnNotNull: opts.notNull ?? true,
|
|
134
|
+
derived: false,
|
|
135
|
+
notNull: true,
|
|
136
|
+
hasConfigDefault: false,
|
|
137
|
+
dbType: "int",
|
|
138
|
+
otherFieldName: `other${fieldName}`,
|
|
139
|
+
otherEntity: makeEntity(otherEntity),
|
|
140
|
+
isDeferredAndDeferrable: true,
|
|
141
|
+
constraintName: "",
|
|
142
|
+
onDelete: "NO ACTION",
|
|
143
|
+
...opts
|
|
144
|
+
};
|
|
143
145
|
}
|
|
144
146
|
/** Creates a polymorphic field for tests. */
|
|
145
147
|
function newPolymorphicField(fieldName, components, opts = {}) {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
148
|
+
return {
|
|
149
|
+
kind: "poly",
|
|
150
|
+
fieldName,
|
|
151
|
+
fieldType: `${pascalCase(fieldName)}Parent`,
|
|
152
|
+
notNull: true,
|
|
153
|
+
hasConfigDefault: false,
|
|
154
|
+
components: components.map((component) => ({
|
|
155
|
+
columnName: `${snakeCase(fieldName)}_${snakeCase(component)}_id`,
|
|
156
|
+
columnOwner: makeEntity("Author"),
|
|
157
|
+
otherFieldName: fieldName,
|
|
158
|
+
otherEntity: makeEntity(component),
|
|
159
|
+
isDeferredAndDeferrable: true,
|
|
160
|
+
constraintName: "",
|
|
161
|
+
notNull: false
|
|
162
|
+
})),
|
|
163
|
+
...opts
|
|
164
|
+
};
|
|
162
165
|
}
|
|
163
166
|
/**
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
+
* Mimics the contentToString flow from packages/codegen/src/index.ts to test import extension handling.
|
|
168
|
+
* This reproduces the same logic used in production when saving files.
|
|
169
|
+
*/
|
|
167
170
|
function renderCodegenFile(file, config) {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
importExtensions: esmExt || false,
|
|
175
|
-
});
|
|
171
|
+
const esmExt = getImportExtension(config);
|
|
172
|
+
if (typeof file.contents === "string") return file.contents;
|
|
173
|
+
return file.contents.toString({
|
|
174
|
+
path: file.name,
|
|
175
|
+
importExtensions: esmExt || false
|
|
176
|
+
});
|
|
176
177
|
}
|
|
178
|
+
//#endregion
|
|
179
|
+
export { newDbMeta, newEntityMetadata, newEnumField, newFs, newManyToOneField, newPolymorphicField, newPrimitiveField, renderCodegenFile };
|
|
180
|
+
|
|
177
181
|
//# sourceMappingURL=testUtils.js.map
|
package/build/testUtils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testUtils.js","
|
|
1
|
+
{"version":3,"file":"testUtils.js","names":[],"sources":["../src/testUtils.ts"],"sourcesContent":["import { pascalCase, snakeCase } from \"change-case\";\nimport {\n type Config,\n type DbMetadata,\n type EntityDbMetadata,\n type EnumField,\n type ManyToOneField,\n type PolymorphicField,\n type PrimitiveField,\n makeEntity,\n} from \"joist-codegen\";\nimport { keyBy } from \"joist-utils\";\nimport pluralize from \"pluralize\";\nimport { type CodegenFile, imp } from \"ts-poet\";\n\nimport { type Fs, getImportExtension } from \"./utils.ts\";\n\nconst { plural } = pluralize;\n\nexport function newFs(files: Record<string, string>): Fs {\n return {\n exists: async (fileName) => !!files[fileName],\n load: async (fileName) => files[fileName],\n save: async (fileName, content) => {\n files[fileName] = content;\n },\n };\n}\n\nexport function newDbMeta(opt: EntityDbMetadata[] | Partial<DbMetadata>): DbMetadata {\n const entities = Array.isArray(opt) ? opt : (opt.entities ?? []);\n const entitiesByName = keyBy(entities, \"name\");\n // Hook up baseType/subTypes\n for (const entity of entities) {\n if (entity.baseClassName) {\n const baseType = entitiesByName[entity.baseClassName];\n entity.baseType = baseType;\n baseType.subTypes.push(entity);\n }\n }\n return {\n entities,\n enums: {},\n pgEnums: {},\n joinTables: [],\n otherTables: [],\n totalTables: 10,\n entitiesByName,\n };\n}\n\nexport function newPrimitiveField(fieldName: string, opts: Partial<PrimitiveField> = {}): PrimitiveField {\n return {\n kind: \"primitive\",\n columnOwner: makeEntity(\"Author\"),\n fieldName,\n columnName: snakeCase(fieldName),\n columnGenerated: false,\n columnType: \"varchar\",\n fieldType: \"string\",\n rawFieldType: \"string\",\n derived: false,\n notNull: true,\n protected: false,\n unique: false,\n columnDefault: null,\n columnNotNull: opts.notNull ?? true,\n superstruct: undefined,\n zodSchema: undefined,\n customSerde: undefined,\n isArray: false,\n hasConfigDefault: false,\n ...opts,\n };\n}\n\nexport function newEntityMetadata(name: string, opts: Partial<EntityDbMetadata> = {}): EntityDbMetadata {\n return {\n name,\n entity: makeEntity(name),\n primaryKey: newPrimitiveField(\"id\", { columnType: \"int\", fieldType: \"number\", rawFieldType: \"number\" }),\n primitives: [],\n enums: [],\n pgEnums: [],\n manyToOnes: [],\n oneToManys: [],\n largeOneToManys: [],\n manyToManys: [],\n largeManyToManys: [],\n manyToManyEnums: [],\n oneToOnes: [],\n polymorphics: [],\n tableName: snakeCase(plural(name)),\n tagName: name,\n updatedAt: undefined,\n createdAt: undefined,\n deletedAt: undefined,\n baseClassName: undefined,\n baseType: undefined,\n subTypes: [],\n inheritanceType: undefined,\n abstract: false,\n nonDeferredFkOrder: 0,\n get nonDeferredFks() {\n return [];\n },\n get nonDeferredManyToManyFks() {\n return [];\n },\n ...opts,\n };\n}\n\nexport function newEnumField(fieldName: string, opts: Partial<EnumField> = {}): EnumField {\n const enumName = opts.enumName || \"Color\";\n const enumType = imp(`${enumName}@./entities`);\n const enumDetailType = imp(`${plural(enumName)}@./entities`);\n const enumDetailsType = imp(`${enumName}Details@./entities`);\n return {\n kind: \"enum\",\n columnOwner: makeEntity(\"Author\"),\n fieldName,\n columnName: snakeCase(fieldName),\n columnGenerated: false,\n columnType: \"int\",\n columnDefault: null,\n columnNotNull: opts.notNull ?? true,\n derived: false,\n enumName,\n enumType,\n enumDetailType,\n enumDetailsType,\n notNull: true,\n enumRows: [],\n isArray: false,\n hasConfigDefault: false,\n ...opts,\n };\n}\n\nexport function newManyToOneField(\n fieldName: string,\n otherEntity: string,\n opts: Partial<ManyToOneField> = {},\n): ManyToOneField {\n return {\n kind: \"m2o\",\n columnOwner: makeEntity(\"Author\"),\n fieldName,\n columnName: snakeCase(fieldName),\n columnGenerated: false,\n columnNotNull: opts.notNull ?? true,\n derived: false,\n notNull: true,\n hasConfigDefault: false,\n dbType: \"int\",\n otherFieldName: `other${fieldName}`,\n otherEntity: makeEntity(otherEntity),\n isDeferredAndDeferrable: true,\n constraintName: \"\",\n onDelete: \"NO ACTION\" as any,\n ...opts,\n };\n}\n\n/** Creates a polymorphic field for tests. */\nexport function newPolymorphicField(\n fieldName: string,\n components: string[],\n opts: Partial<PolymorphicField> = {},\n): PolymorphicField {\n return {\n kind: \"poly\",\n fieldName,\n fieldType: `${pascalCase(fieldName)}Parent`,\n notNull: true,\n hasConfigDefault: false,\n components: components.map((component) => ({\n columnName: `${snakeCase(fieldName)}_${snakeCase(component)}_id`,\n columnOwner: makeEntity(\"Author\"),\n otherFieldName: fieldName,\n otherEntity: makeEntity(component),\n isDeferredAndDeferrable: true,\n constraintName: \"\",\n notNull: false as const,\n })),\n ...opts,\n } satisfies PolymorphicField;\n}\n\n/**\n * Mimics the contentToString flow from packages/codegen/src/index.ts to test import extension handling.\n * This reproduces the same logic used in production when saving files.\n */\nexport function renderCodegenFile(file: CodegenFile, config: Config): string {\n const esmExt = getImportExtension(config);\n if (typeof file.contents === \"string\") {\n return file.contents;\n }\n return file.contents.toString({\n path: file.name,\n importExtensions: esmExt || false,\n });\n}\n"],"mappings":"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"}
|
package/build/utils.cjs
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
require("joist-codegen");
|
|
3
|
+
let fs = require("fs");
|
|
4
|
+
let path = require("path");
|
|
5
|
+
let joist_utils = require("joist-utils");
|
|
6
|
+
//#region src/utils.ts
|
|
7
|
+
/** A real implementation of `Fs` that writes to the `prefix` directory. */
|
|
8
|
+
function newFsImpl(prefix) {
|
|
9
|
+
return {
|
|
10
|
+
exists: async (fileName) => {
|
|
11
|
+
try {
|
|
12
|
+
await fs.promises.readFile(`${prefix}/${fileName}`);
|
|
13
|
+
return true;
|
|
14
|
+
} catch {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
load: async (fileName) => {
|
|
19
|
+
try {
|
|
20
|
+
return (await fs.promises.readFile(`${prefix}/${fileName}`)).toString();
|
|
21
|
+
} catch (e) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
save: async (fileName, content) => {
|
|
26
|
+
const path$1 = `${prefix}/${fileName}`;
|
|
27
|
+
await fs.promises.mkdir((0, path.dirname)(path$1), { recursive: true });
|
|
28
|
+
await fs.promises.writeFile(path$1, content);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function sortKeys(o) {
|
|
33
|
+
return Object.keys(o).sort().reduce((acc, key) => {
|
|
34
|
+
const value = o[key];
|
|
35
|
+
acc[key] = typeof value === "object" && (0, joist_utils.isPlainObject)(value) ? sortKeys(value) : Array.isArray(value) ? value.sort() : value;
|
|
36
|
+
return acc;
|
|
37
|
+
}, {});
|
|
38
|
+
}
|
|
39
|
+
function getImportExtension(config) {
|
|
40
|
+
return config.esm ? config.allowImportingTsExtensions ? "ts" : "js" : null;
|
|
41
|
+
}
|
|
42
|
+
function getEntitiesImportPath(config) {
|
|
43
|
+
return config.esm ? "src/entities/index.ts" : "src/entities";
|
|
44
|
+
}
|
|
45
|
+
//#endregion
|
|
46
|
+
exports.getEntitiesImportPath = getEntitiesImportPath;
|
|
47
|
+
exports.getImportExtension = getImportExtension;
|
|
48
|
+
exports.newFsImpl = newFsImpl;
|
|
49
|
+
exports.sortKeys = sortKeys;
|
|
50
|
+
|
|
51
|
+
//# sourceMappingURL=utils.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.cjs","names":["path","dirname","isPlainObject"],"sources":["../src/utils.ts"],"sourcesContent":["import { promises as fs } from \"fs\";\nimport { dirname } from \"path\";\n\nimport { type Config } from \"joist-codegen\";\nimport { isPlainObject } from \"joist-utils\";\n\n/** A super-simple file system abstraction for testing. */\nexport interface Fs {\n load(fileName: string): Promise<string | undefined>;\n save(fileName: string, content: string): Promise<void>;\n exists(fileName: string): Promise<boolean>;\n}\n\n/** A real implementation of `Fs` that writes to the `prefix` directory. */\nexport function newFsImpl(prefix: string): Fs {\n return {\n exists: async (fileName) => {\n try {\n // For some reason fs.exists doesn't exist, so use a read\n await fs.readFile(`${prefix}/${fileName}`);\n return true;\n } catch {\n return false;\n }\n },\n load: async (fileName) => {\n try {\n return (await fs.readFile(`${prefix}/${fileName}`)).toString();\n } catch (e) {\n // Hacky way of handling file does not exist\n return undefined;\n }\n },\n save: async (fileName, content) => {\n const path = `${prefix}/${fileName}`;\n await fs.mkdir(dirname(path), { recursive: true });\n await fs.writeFile(path, content);\n },\n };\n}\n\nexport function sortKeys<T extends object>(o: T): T {\n return Object.keys(o)\n .sort()\n .reduce(\n (acc, key) => {\n const value = o[key as keyof T];\n const newValue =\n typeof value === \"object\" && isPlainObject(value)\n ? sortKeys(value as any as object)\n : Array.isArray(value)\n ? (value as any[]).sort()\n : value;\n acc[key as keyof T] = newValue as any;\n return acc;\n },\n {} as any as T,\n );\n}\n\nexport function getImportExtension(config: Config): \"ts\" | \"js\" | null {\n return config.esm ? (config.allowImportingTsExtensions ? \"ts\" : \"js\") : null;\n}\n\nexport function getEntitiesImportPath(config: Config): string {\n return config.esm ? \"src/entities/index.ts\" : \"src/entities\";\n}\n"],"mappings":";;;;;;;AAcA,SAAgB,UAAU,QAAoB;CAC5C,OAAO;EACL,QAAQ,OAAO,aAAa;GAC1B,IAAI;IAEF,MAAM,GAAA,SAAG,SAAS,GAAG,OAAO,GAAG,UAAU;IACzC,OAAO;GACT,QAAQ;IACN,OAAO;GACT;EACF;EACA,MAAM,OAAO,aAAa;GACxB,IAAI;IACF,QAAQ,MAAM,GAAA,SAAG,SAAS,GAAG,OAAO,GAAG,UAAU,EAAA,CAAG,SAAS;GAC/D,SAAS,GAAG;IAEV;GACF;EACF;EACA,MAAM,OAAO,UAAU,YAAY;GACjC,MAAMA,SAAO,GAAG,OAAO,GAAG;GAC1B,MAAM,GAAA,SAAG,OAAA,GAAMC,KAAAA,QAAAA,CAAQD,MAAI,GAAG,EAAE,WAAW,KAAK,CAAC;GACjD,MAAM,GAAA,SAAG,UAAUA,QAAM,OAAO;EAClC;CACF;AACF;AAEA,SAAgB,SAA2B,GAAS;CAClD,OAAO,OAAO,KAAK,CAAC,CAAC,CAClB,KAAK,CAAC,CACN,QACE,KAAK,QAAQ;EACZ,MAAM,QAAQ,EAAE;EAOhB,IAAI,OALF,OAAO,UAAU,aAAA,GAAYE,YAAAA,cAAAA,CAAc,KAAK,IAC5C,SAAS,KAAsB,IAC/B,MAAM,QAAQ,KAAK,IAChB,MAAgB,KAAK,IACtB;EAER,OAAO;CACT,GACA,CAAC,CACH;AACJ;AAEA,SAAgB,mBAAmB,QAAoC;CACrE,OAAO,OAAO,MAAO,OAAO,6BAA6B,OAAO,OAAQ;AAC1E;AAEA,SAAgB,sBAAsB,QAAwB;CAC5D,OAAO,OAAO,MAAM,0BAA0B;AAChD"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Config } from "joist-codegen";
|
|
2
|
+
//#region src/utils.d.ts
|
|
3
|
+
/** A super-simple file system abstraction for testing. */
|
|
4
|
+
interface Fs {
|
|
5
|
+
load(fileName: string): Promise<string | undefined>;
|
|
6
|
+
save(fileName: string, content: string): Promise<void>;
|
|
7
|
+
exists(fileName: string): Promise<boolean>;
|
|
8
|
+
}
|
|
9
|
+
/** A real implementation of `Fs` that writes to the `prefix` directory. */
|
|
10
|
+
declare function newFsImpl(prefix: string): Fs;
|
|
11
|
+
declare function sortKeys<T extends object>(o: T): T;
|
|
12
|
+
declare function getImportExtension(config: Config): "ts" | "js" | null;
|
|
13
|
+
declare function getEntitiesImportPath(config: Config): string;
|
|
14
|
+
//#endregion
|
|
15
|
+
export { Fs, getEntitiesImportPath, getImportExtension, newFsImpl, sortKeys };
|
|
16
|
+
//# sourceMappingURL=utils.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.cts","names":[],"sources":["../src/utils.ts"],"mappings":";;;UAOiB;EACf,KAAK,mBAAmB;EACxB,KAAK,kBAAkB,kBAAkB;EACzC,OAAO,mBAAmB;;;iBAIZ,UAAU,iBAAiB;iBA2B3B,SAAS,kBAAkB,GAAG,IAAI;iBAmBlC,mBAAmB,QAAQ;iBAI3B,sBAAsB,QAAQ"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Config } from "joist-codegen";
|
|
2
|
+
//#region src/utils.d.ts
|
|
3
|
+
/** A super-simple file system abstraction for testing. */
|
|
4
|
+
interface Fs {
|
|
5
|
+
load(fileName: string): Promise<string | undefined>;
|
|
6
|
+
save(fileName: string, content: string): Promise<void>;
|
|
7
|
+
exists(fileName: string): Promise<boolean>;
|
|
8
|
+
}
|
|
9
|
+
/** A real implementation of `Fs` that writes to the `prefix` directory. */
|
|
10
|
+
declare function newFsImpl(prefix: string): Fs;
|
|
11
|
+
declare function sortKeys<T extends object>(o: T): T;
|
|
12
|
+
declare function getImportExtension(config: Config): "ts" | "js" | null;
|
|
13
|
+
declare function getEntitiesImportPath(config: Config): string;
|
|
14
|
+
//#endregion
|
|
15
|
+
export { Fs, getEntitiesImportPath, getImportExtension, newFsImpl, sortKeys };
|
|
16
|
+
//# sourceMappingURL=utils.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.mts","names":[],"sources":["../src/utils.ts"],"mappings":";;;UAOiB;EACf,KAAK,mBAAmB;EACxB,KAAK,kBAAkB,kBAAkB;EACzC,OAAO,mBAAmB;;;iBAIZ,UAAU,iBAAiB;iBA2B3B,SAAS,kBAAkB,GAAG,IAAI;iBAmBlC,mBAAmB,QAAQ;iBAI3B,sBAAsB,QAAQ"}
|
package/build/utils.js
CHANGED
|
@@ -1,59 +1,47 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
exports.getEntitiesImportPath = getEntitiesImportPath;
|
|
7
|
-
const fs_1 = require("fs");
|
|
8
|
-
const joist_utils_1 = require("joist-utils");
|
|
9
|
-
const path_1 = require("path");
|
|
1
|
+
import "joist-codegen";
|
|
2
|
+
import { promises } from "fs";
|
|
3
|
+
import { dirname } from "path";
|
|
4
|
+
import { isPlainObject } from "joist-utils";
|
|
5
|
+
//#region src/utils.ts
|
|
10
6
|
/** A real implementation of `Fs` that writes to the `prefix` directory. */
|
|
11
7
|
function newFsImpl(prefix) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
await fs_1.promises.mkdir((0, path_1.dirname)(path), { recursive: true });
|
|
35
|
-
await fs_1.promises.writeFile(path, content);
|
|
36
|
-
},
|
|
37
|
-
};
|
|
8
|
+
return {
|
|
9
|
+
exists: async (fileName) => {
|
|
10
|
+
try {
|
|
11
|
+
await promises.readFile(`${prefix}/${fileName}`);
|
|
12
|
+
return true;
|
|
13
|
+
} catch {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
load: async (fileName) => {
|
|
18
|
+
try {
|
|
19
|
+
return (await promises.readFile(`${prefix}/${fileName}`)).toString();
|
|
20
|
+
} catch (e) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
save: async (fileName, content) => {
|
|
25
|
+
const path = `${prefix}/${fileName}`;
|
|
26
|
+
await promises.mkdir(dirname(path), { recursive: true });
|
|
27
|
+
await promises.writeFile(path, content);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
38
30
|
}
|
|
39
31
|
function sortKeys(o) {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
? sortKeys(value)
|
|
46
|
-
: Array.isArray(value)
|
|
47
|
-
? value.sort()
|
|
48
|
-
: value;
|
|
49
|
-
acc[key] = newValue;
|
|
50
|
-
return acc;
|
|
51
|
-
}, {});
|
|
32
|
+
return Object.keys(o).sort().reduce((acc, key) => {
|
|
33
|
+
const value = o[key];
|
|
34
|
+
acc[key] = typeof value === "object" && isPlainObject(value) ? sortKeys(value) : Array.isArray(value) ? value.sort() : value;
|
|
35
|
+
return acc;
|
|
36
|
+
}, {});
|
|
52
37
|
}
|
|
53
38
|
function getImportExtension(config) {
|
|
54
|
-
|
|
39
|
+
return config.esm ? config.allowImportingTsExtensions ? "ts" : "js" : null;
|
|
55
40
|
}
|
|
56
41
|
function getEntitiesImportPath(config) {
|
|
57
|
-
|
|
42
|
+
return config.esm ? "src/entities/index.ts" : "src/entities";
|
|
58
43
|
}
|
|
44
|
+
//#endregion
|
|
45
|
+
export { getEntitiesImportPath, getImportExtension, newFsImpl, sortKeys };
|
|
46
|
+
|
|
59
47
|
//# sourceMappingURL=utils.js.map
|