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.
Files changed (167) hide show
  1. package/build/_virtual/_rolldown/runtime.cjs +23 -0
  2. package/build/generateEnumDetailResolvers.cjs +40 -0
  3. package/build/generateEnumDetailResolvers.cjs.map +1 -0
  4. package/build/generateEnumDetailResolvers.d.cts +8 -0
  5. package/build/generateEnumDetailResolvers.d.cts.map +1 -0
  6. package/build/generateEnumDetailResolvers.d.mts +8 -0
  7. package/build/generateEnumDetailResolvers.d.mts.map +1 -0
  8. package/build/generateEnumDetailResolvers.js +23 -23
  9. package/build/generateEnumDetailResolvers.js.map +1 -1
  10. package/build/generateEnumsGraphql.cjs +29 -0
  11. package/build/generateEnumsGraphql.cjs.map +1 -0
  12. package/build/generateEnumsGraphql.d.cts +8 -0
  13. package/build/generateEnumsGraphql.d.cts.map +1 -0
  14. package/build/generateEnumsGraphql.d.mts +8 -0
  15. package/build/generateEnumsGraphql.d.mts.map +1 -0
  16. package/build/generateEnumsGraphql.js +24 -27
  17. package/build/generateEnumsGraphql.js.map +1 -1
  18. package/build/generateGraphqlCodegen.cjs +54 -0
  19. package/build/generateGraphqlCodegen.cjs.map +1 -0
  20. package/build/generateGraphqlCodegen.d.cts +8 -0
  21. package/build/generateGraphqlCodegen.d.cts.map +1 -0
  22. package/build/generateGraphqlCodegen.d.mts +8 -0
  23. package/build/generateGraphqlCodegen.d.mts.map +1 -0
  24. package/build/generateGraphqlCodegen.js +28 -30
  25. package/build/generateGraphqlCodegen.js.map +1 -1
  26. package/build/generateGraphqlSchemaFiles.cjs +491 -0
  27. package/build/generateGraphqlSchemaFiles.cjs.map +1 -0
  28. package/build/{generateGraphqlSchemaFiles.d.ts → generateGraphqlSchemaFiles.d.cts} +6 -3
  29. package/build/generateGraphqlSchemaFiles.d.cts.map +1 -0
  30. package/build/generateGraphqlSchemaFiles.d.mts +15 -0
  31. package/build/generateGraphqlSchemaFiles.d.mts.map +1 -0
  32. package/build/generateGraphqlSchemaFiles.js +444 -286
  33. package/build/generateGraphqlSchemaFiles.js.map +1 -1
  34. package/build/generateObjectResolvers.cjs +70 -0
  35. package/build/generateObjectResolvers.cjs.map +1 -0
  36. package/build/{generateObjectResolvers.d.ts → generateObjectResolvers.d.cts} +5 -2
  37. package/build/generateObjectResolvers.d.cts.map +1 -0
  38. package/build/generateObjectResolvers.d.mts +17 -0
  39. package/build/generateObjectResolvers.d.mts.map +1 -0
  40. package/build/generateObjectResolvers.js +48 -38
  41. package/build/generateObjectResolvers.js.map +1 -1
  42. package/build/generateQueryPageResolvers.cjs +51 -0
  43. package/build/generateQueryPageResolvers.cjs.map +1 -0
  44. package/build/generateQueryPageResolvers.d.cts +8 -0
  45. package/build/generateQueryPageResolvers.d.cts.map +1 -0
  46. package/build/generateQueryPageResolvers.d.mts +8 -0
  47. package/build/generateQueryPageResolvers.d.mts.map +1 -0
  48. package/build/generateQueryPageResolvers.js +31 -35
  49. package/build/generateQueryPageResolvers.js.map +1 -1
  50. package/build/generateQueryResolvers.cjs +55 -0
  51. package/build/generateQueryResolvers.cjs.map +1 -0
  52. package/build/generateQueryResolvers.d.cts +10 -0
  53. package/build/generateQueryResolvers.d.cts.map +1 -0
  54. package/build/generateQueryResolvers.d.mts +10 -0
  55. package/build/generateQueryResolvers.d.mts.map +1 -0
  56. package/build/generateQueryResolvers.js +38 -36
  57. package/build/generateQueryResolvers.js.map +1 -1
  58. package/build/generateResolverUtils.cjs +36 -0
  59. package/build/generateResolverUtils.cjs.map +1 -0
  60. package/build/generateResolverUtils.d.cts +8 -0
  61. package/build/generateResolverUtils.d.cts.map +1 -0
  62. package/build/generateResolverUtils.d.mts +8 -0
  63. package/build/generateResolverUtils.d.mts.map +1 -0
  64. package/build/generateResolverUtils.js +25 -26
  65. package/build/generateResolverUtils.js.map +1 -1
  66. package/build/generateSaveResolvers.cjs +57 -0
  67. package/build/generateSaveResolvers.cjs.map +1 -0
  68. package/build/{generateSaveResolvers.d.ts → generateSaveResolvers.d.cts} +5 -2
  69. package/build/generateSaveResolvers.d.cts.map +1 -0
  70. package/build/generateSaveResolvers.d.mts +17 -0
  71. package/build/generateSaveResolvers.d.mts.map +1 -0
  72. package/build/generateSaveResolvers.js +39 -40
  73. package/build/generateSaveResolvers.js.map +1 -1
  74. package/build/graphqlUtils.cjs +160 -0
  75. package/build/graphqlUtils.cjs.map +1 -0
  76. package/build/graphqlUtils.d.cts +31 -0
  77. package/build/graphqlUtils.d.cts.map +1 -0
  78. package/build/graphqlUtils.d.mts +31 -0
  79. package/build/graphqlUtils.d.mts.map +1 -0
  80. package/build/graphqlUtils.js +120 -218
  81. package/build/graphqlUtils.js.map +1 -1
  82. package/build/history.cjs +25 -0
  83. package/build/history.cjs.map +1 -0
  84. package/build/history.d.cts +9 -0
  85. package/build/history.d.cts.map +1 -0
  86. package/build/history.d.mts +9 -0
  87. package/build/history.d.mts.map +1 -0
  88. package/build/history.js +17 -14
  89. package/build/history.js.map +1 -1
  90. package/build/index.cjs +57 -0
  91. package/build/index.cjs.map +1 -0
  92. package/build/index.d.cts +7 -0
  93. package/build/index.d.cts.map +1 -0
  94. package/build/index.d.mts +7 -0
  95. package/build/index.d.mts.map +1 -0
  96. package/build/index.js +48 -54
  97. package/build/index.js.map +1 -1
  98. package/build/testUtils.cjs +191 -0
  99. package/build/testUtils.cjs.map +1 -0
  100. package/build/testUtils.d.cts +20 -0
  101. package/build/testUtils.d.cts.map +1 -0
  102. package/build/testUtils.d.mts +20 -0
  103. package/build/testUtils.d.mts.map +1 -0
  104. package/build/testUtils.js +162 -158
  105. package/build/testUtils.js.map +1 -1
  106. package/build/utils.cjs +51 -0
  107. package/build/utils.cjs.map +1 -0
  108. package/build/utils.d.cts +16 -0
  109. package/build/utils.d.cts.map +1 -0
  110. package/build/utils.d.mts +16 -0
  111. package/build/utils.d.mts.map +1 -0
  112. package/build/utils.js +37 -49
  113. package/build/utils.js.map +1 -1
  114. package/package.json +33 -13
  115. package/build/generateEnumDetailResolvers.d.ts +0 -5
  116. package/build/generateEnumDetailResolvers.d.ts.map +0 -1
  117. package/build/generateEnumDetailResolvers.test.d.ts +0 -2
  118. package/build/generateEnumDetailResolvers.test.d.ts.map +0 -1
  119. package/build/generateEnumDetailResolvers.test.js +0 -34
  120. package/build/generateEnumDetailResolvers.test.js.map +0 -1
  121. package/build/generateEnumsGraphql.d.ts +0 -5
  122. package/build/generateEnumsGraphql.d.ts.map +0 -1
  123. package/build/generateGraphqlCodegen.d.ts +0 -5
  124. package/build/generateGraphqlCodegen.d.ts.map +0 -1
  125. package/build/generateGraphqlCodegen.test.d.ts +0 -2
  126. package/build/generateGraphqlCodegen.test.d.ts.map +0 -1
  127. package/build/generateGraphqlCodegen.test.js +0 -44
  128. package/build/generateGraphqlCodegen.test.js.map +0 -1
  129. package/build/generateGraphqlSchemaFiles.d.ts.map +0 -1
  130. package/build/generateGraphqlSchemaFiles.test.d.ts +0 -2
  131. package/build/generateGraphqlSchemaFiles.test.d.ts.map +0 -1
  132. package/build/generateGraphqlSchemaFiles.test.js +0 -1008
  133. package/build/generateGraphqlSchemaFiles.test.js.map +0 -1
  134. package/build/generateObjectResolvers.d.ts.map +0 -1
  135. package/build/generateQueryPageResolvers.d.ts +0 -5
  136. package/build/generateQueryPageResolvers.d.ts.map +0 -1
  137. package/build/generateQueryPageResolvers.test.d.ts +0 -2
  138. package/build/generateQueryPageResolvers.test.d.ts.map +0 -1
  139. package/build/generateQueryPageResolvers.test.js +0 -46
  140. package/build/generateQueryPageResolvers.test.js.map +0 -1
  141. package/build/generateQueryResolvers.d.ts +0 -7
  142. package/build/generateQueryResolvers.d.ts.map +0 -1
  143. package/build/generateQueryResolvers.test.d.ts +0 -2
  144. package/build/generateQueryResolvers.test.d.ts.map +0 -1
  145. package/build/generateQueryResolvers.test.js +0 -45
  146. package/build/generateQueryResolvers.test.js.map +0 -1
  147. package/build/generateResolverUtils.d.ts +0 -5
  148. package/build/generateResolverUtils.d.ts.map +0 -1
  149. package/build/generateResolverUtils.test.d.ts +0 -2
  150. package/build/generateResolverUtils.test.d.ts.map +0 -1
  151. package/build/generateResolverUtils.test.js +0 -53
  152. package/build/generateResolverUtils.test.js.map +0 -1
  153. package/build/generateSaveResolvers.d.ts.map +0 -1
  154. package/build/generateSaveResolvers.test.d.ts +0 -2
  155. package/build/generateSaveResolvers.test.d.ts.map +0 -1
  156. package/build/generateSaveResolvers.test.js +0 -49
  157. package/build/generateSaveResolvers.test.js.map +0 -1
  158. package/build/graphqlUtils.d.ts +0 -28
  159. package/build/graphqlUtils.d.ts.map +0 -1
  160. package/build/history.d.ts +0 -6
  161. package/build/history.d.ts.map +0 -1
  162. package/build/index.d.ts +0 -4
  163. package/build/index.d.ts.map +0 -1
  164. package/build/testUtils.d.ts +0 -25
  165. package/build/testUtils.d.ts.map +0 -1
  166. package/build/utils.d.ts +0 -13
  167. 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"}
@@ -1,177 +1,181 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.newFs = newFs;
4
- exports.newDbMeta = newDbMeta;
5
- exports.newPrimitiveField = newPrimitiveField;
6
- exports.newEntityMetadata = newEntityMetadata;
7
- exports.newEnumField = newEnumField;
8
- exports.newManyToOneField = newManyToOneField;
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
- return {
19
- exists: async (fileName) => !!files[fileName],
20
- load: async (fileName) => files[fileName],
21
- save: async (fileName, content) => {
22
- files[fileName] = content;
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
- const entities = Array.isArray(opt) ? opt : (opt.entities ?? []);
28
- const entitiesByName = (0, joist_utils_1.keyBy)(entities, "name");
29
- // Hook up baseType/subTypes
30
- for (const entity of entities) {
31
- if (entity.baseClassName) {
32
- const baseType = entitiesByName[entity.baseClassName];
33
- entity.baseType = baseType;
34
- baseType.subTypes.push(entity);
35
- }
36
- }
37
- return {
38
- entities,
39
- enums: {},
40
- pgEnums: {},
41
- joinTables: [],
42
- otherTables: [],
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
- return {
49
- kind: "primitive",
50
- fieldName,
51
- columnName: (0, change_case_1.snakeCase)(fieldName),
52
- columnType: "varchar",
53
- fieldType: "string",
54
- rawFieldType: "string",
55
- derived: false,
56
- notNull: true,
57
- protected: false,
58
- unique: false,
59
- columnDefault: null,
60
- superstruct: undefined,
61
- zodSchema: undefined,
62
- customSerde: undefined,
63
- isArray: false,
64
- hasConfigDefault: false,
65
- ...opts,
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
- return {
70
- name,
71
- entity: (0, joist_codegen_1.makeEntity)(name),
72
- primaryKey: newPrimitiveField("id", { columnType: "int", fieldType: "number", rawFieldType: "number" }),
73
- primitives: [],
74
- enums: [],
75
- pgEnums: [],
76
- manyToOnes: [],
77
- oneToManys: [],
78
- largeOneToManys: [],
79
- manyToManys: [],
80
- largeManyToManys: [],
81
- manyToManyEnums: [],
82
- oneToOnes: [],
83
- polymorphics: [],
84
- tableName: (0, change_case_1.snakeCase)((0, pluralize_1.plural)(name)),
85
- tagName: name,
86
- updatedAt: undefined,
87
- createdAt: undefined,
88
- deletedAt: undefined,
89
- baseClassName: undefined,
90
- baseType: undefined,
91
- subTypes: [],
92
- inheritanceType: undefined,
93
- abstract: false,
94
- nonDeferredFkOrder: 0,
95
- get nonDeferredFks() {
96
- return [];
97
- },
98
- get nonDeferredManyToManyFks() {
99
- return [];
100
- },
101
- ...opts,
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
- const enumName = opts.enumName || "Color";
106
- const enumType = (0, ts_poet_1.imp)(`${enumName}@./entities`);
107
- const enumDetailType = (0, ts_poet_1.imp)(`${(0, pluralize_1.plural)(enumName)}@./entities`);
108
- const enumDetailsType = (0, ts_poet_1.imp)(`${enumName}Details@./entities`);
109
- return {
110
- kind: "enum",
111
- fieldName,
112
- columnName: (0, change_case_1.snakeCase)(fieldName),
113
- columnType: "int",
114
- columnDefault: null,
115
- derived: false,
116
- enumName,
117
- enumType,
118
- enumDetailType,
119
- enumDetailsType,
120
- notNull: true,
121
- enumRows: [],
122
- isArray: false,
123
- hasConfigDefault: false,
124
- ...opts,
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
- return {
129
- kind: "m2o",
130
- fieldName,
131
- columnName: (0, change_case_1.snakeCase)(fieldName),
132
- derived: false,
133
- notNull: true,
134
- hasConfigDefault: false,
135
- dbType: "int",
136
- otherFieldName: `other${fieldName}`,
137
- otherEntity: (0, joist_codegen_1.makeEntity)(otherEntity),
138
- isDeferredAndDeferrable: true,
139
- constraintName: "",
140
- onDelete: "NO ACTION",
141
- ...opts,
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
- return {
147
- kind: "poly",
148
- fieldName,
149
- fieldType: `${(0, change_case_1.pascalCase)(fieldName)}Parent`,
150
- notNull: true,
151
- hasConfigDefault: false,
152
- components: components.map((component) => ({
153
- columnName: `${(0, change_case_1.snakeCase)(fieldName)}_${(0, change_case_1.snakeCase)(component)}_id`,
154
- otherFieldName: fieldName,
155
- otherEntity: (0, joist_codegen_1.makeEntity)(component),
156
- isDeferredAndDeferrable: true,
157
- constraintName: "",
158
- notNull: false,
159
- })),
160
- ...opts,
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
- * Mimics the contentToString flow from packages/codegen/src/index.ts to test import extension handling.
165
- * This reproduces the same logic used in production when saving files.
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
- const esmExt = (0, utils_1.getImportExtension)(config);
169
- if (typeof file.contents === "string") {
170
- return file.contents;
171
- }
172
- return file.contents.toString({
173
- path: file.name,
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
@@ -1 +1 @@
1
- {"version":3,"file":"testUtils.js","sourceRoot":"","sources":["../src/testUtils.ts"],"names":[],"mappings":";;AAgBA,sBAQC;AAED,8BAoBC;AAED,8CAoBC;AAED,8CAmCC;AAED,oCAsBC;AAED,8CAoBC;AAGD,kDAiBC;AAMD,8CASC;AA1LD,6CAAoD;AACpD,iDASuB;AACvB,6CAAoC;AACpC,yCAAmC;AACnC,qCAA2C;AAC3C,mCAAiD;AAEjD,SAAgB,KAAK,CAAC,KAA6B;IACjD,OAAO;QACL,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC7C,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;QACzC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;YAChC,KAAK,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC;QAC5B,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAgB,SAAS,CAAC,GAA6C;IACrE,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IACjE,MAAM,cAAc,GAAG,IAAA,mBAAK,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC/C,4BAA4B;IAC5B,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YACtD,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAC3B,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IACD,OAAO;QACL,QAAQ;QACR,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,EAAE;QACd,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,EAAE;QACf,cAAc;KACf,CAAC;AACJ,CAAC;AAED,SAAgB,iBAAiB,CAAC,SAAiB,EAAE,OAAgC,EAAE;IACrF,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,SAAS;QACT,UAAU,EAAE,IAAA,uBAAS,EAAC,SAAS,CAAC;QAChC,UAAU,EAAE,SAAS;QACrB,SAAS,EAAE,QAAQ;QACnB,YAAY,EAAE,QAAQ;QACtB,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE,KAAK;QACb,aAAa,EAAE,IAAI;QACnB,WAAW,EAAE,SAAS;QACtB,SAAS,EAAE,SAAS;QACpB,WAAW,EAAE,SAAS;QACtB,OAAO,EAAE,KAAK;QACd,gBAAgB,EAAE,KAAK;QACvB,GAAG,IAAI;KACR,CAAC;AACJ,CAAC;AAED,SAAgB,iBAAiB,CAAC,IAAY,EAAE,OAAkC,EAAE;IAClF,OAAO;QACL,IAAI;QACJ,MAAM,EAAE,IAAA,0BAAU,EAAC,IAAI,CAAC;QACxB,UAAU,EAAE,iBAAiB,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;QACvG,UAAU,EAAE,EAAE;QACd,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,EAAE;QACd,UAAU,EAAE,EAAE;QACd,eAAe,EAAE,EAAE;QACnB,WAAW,EAAE,EAAE;QACf,gBAAgB,EAAE,EAAE;QACpB,eAAe,EAAE,EAAE;QACnB,SAAS,EAAE,EAAE;QACb,YAAY,EAAE,EAAE;QAChB,SAAS,EAAE,IAAA,uBAAS,EAAC,IAAA,kBAAM,EAAC,IAAI,CAAC,CAAC;QAClC,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,SAAS;QACpB,SAAS,EAAE,SAAS;QACpB,SAAS,EAAE,SAAS;QACpB,aAAa,EAAE,SAAS;QACxB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,EAAE;QACZ,eAAe,EAAE,SAAS;QAC1B,QAAQ,EAAE,KAAK;QACf,kBAAkB,EAAE,CAAC;QACrB,IAAI,cAAc;YAChB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,wBAAwB;YAC1B,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,GAAG,IAAI;KACR,CAAC;AACJ,CAAC;AAED,SAAgB,YAAY,CAAC,SAAiB,EAAE,OAA2B,EAAE;IAC3E,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC;IAC1C,MAAM,QAAQ,GAAG,IAAA,aAAG,EAAC,GAAG,QAAQ,aAAa,CAAC,CAAC;IAC/C,MAAM,cAAc,GAAG,IAAA,aAAG,EAAC,GAAG,IAAA,kBAAM,EAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC7D,MAAM,eAAe,GAAG,IAAA,aAAG,EAAC,GAAG,QAAQ,oBAAoB,CAAC,CAAC;IAC7D,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,SAAS;QACT,UAAU,EAAE,IAAA,uBAAS,EAAC,SAAS,CAAC;QAChC,UAAU,EAAE,KAAK;QACjB,aAAa,EAAE,IAAI;QACnB,OAAO,EAAE,KAAK;QACd,QAAQ;QACR,QAAQ;QACR,cAAc;QACd,eAAe;QACf,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,EAAE;QACZ,OAAO,EAAE,KAAK;QACd,gBAAgB,EAAE,KAAK;QACvB,GAAG,IAAI;KACR,CAAC;AACJ,CAAC;AAED,SAAgB,iBAAiB,CAC/B,SAAiB,EACjB,WAAmB,EACnB,OAAgC,EAAE;IAElC,OAAO;QACL,IAAI,EAAE,KAAK;QACX,SAAS;QACT,UAAU,EAAE,IAAA,uBAAS,EAAC,SAAS,CAAC;QAChC,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,IAAI;QACb,gBAAgB,EAAE,KAAK;QACvB,MAAM,EAAE,KAAK;QACb,cAAc,EAAE,QAAQ,SAAS,EAAE;QACnC,WAAW,EAAE,IAAA,0BAAU,EAAC,WAAW,CAAC;QACpC,uBAAuB,EAAE,IAAI;QAC7B,cAAc,EAAE,EAAE;QAClB,QAAQ,EAAE,WAAkB;QAC5B,GAAG,IAAI;KACR,CAAC;AACJ,CAAC;AAED,6CAA6C;AAC7C,SAAgB,mBAAmB,CAAC,SAAiB,EAAE,UAAoB,EAAE,OAAkC,EAAE;IAC/G,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,SAAS;QACT,SAAS,EAAE,GAAG,IAAA,wBAAU,EAAC,SAAS,CAAC,QAAQ;QAC3C,OAAO,EAAE,IAAI;QACb,gBAAgB,EAAE,KAAK;QACvB,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YACzC,UAAU,EAAE,GAAG,IAAA,uBAAS,EAAC,SAAS,CAAC,IAAI,IAAA,uBAAS,EAAC,SAAS,CAAC,KAAK;YAChE,cAAc,EAAE,SAAS;YACzB,WAAW,EAAE,IAAA,0BAAU,EAAC,SAAS,CAAC;YAClC,uBAAuB,EAAE,IAAI;YAC7B,cAAc,EAAE,EAAE;YAClB,OAAO,EAAE,KAAc;SACxB,CAAC,CAAC;QACH,GAAG,IAAI;KACmB,CAAC;AAC/B,CAAC;AAED;;;GAGG;AACH,SAAgB,iBAAiB,CAAC,IAAiB,EAAE,MAAc;IACjE,MAAM,MAAM,GAAG,IAAA,0BAAkB,EAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IACD,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC5B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,gBAAgB,EAAE,MAAM,IAAI,KAAK;KAClC,CAAC,CAAC;AACL,CAAC"}
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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"}
@@ -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
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.newFsImpl = newFsImpl;
4
- exports.sortKeys = sortKeys;
5
- exports.getImportExtension = getImportExtension;
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
- return {
13
- exists: async (fileName) => {
14
- try {
15
- // For some reason fs.exists doesn't exist, so use a read
16
- await fs_1.promises.readFile(`${prefix}/${fileName}`);
17
- return true;
18
- }
19
- catch {
20
- return false;
21
- }
22
- },
23
- load: async (fileName) => {
24
- try {
25
- return (await fs_1.promises.readFile(`${prefix}/${fileName}`)).toString();
26
- }
27
- catch (e) {
28
- // Hacky way of handling file does not exist
29
- return undefined;
30
- }
31
- },
32
- save: async (fileName, content) => {
33
- const path = `${prefix}/${fileName}`;
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
- return Object.keys(o)
41
- .sort()
42
- .reduce((acc, key) => {
43
- const value = o[key];
44
- const newValue = typeof value === "object" && (0, joist_utils_1.isPlainObject)(value)
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
- return config.esm ? (config.allowImportingTsExtensions ? "ts" : "js") : null;
39
+ return config.esm ? config.allowImportingTsExtensions ? "ts" : "js" : null;
55
40
  }
56
41
  function getEntitiesImportPath(config) {
57
- return config.esm ? "src/entities/index.ts" : "src/entities";
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