joist-codegen 0.1.538 → 1.0.0

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 (59) hide show
  1. package/build/EntityDbMetadata.d.ts +71 -23
  2. package/build/EntityDbMetadata.js +229 -63
  3. package/build/EntityDbMetadata.js.map +1 -1
  4. package/build/EntityDbMetadata.test.js +5 -5
  5. package/build/EntityDbMetadata.test.js.map +1 -1
  6. package/build/assignTags.d.ts +1 -1
  7. package/build/assignTags.js +2 -2
  8. package/build/assignTags.js.map +1 -1
  9. package/build/config.d.ts +8 -1
  10. package/build/config.js +25 -13
  11. package/build/config.js.map +1 -1
  12. package/build/config.test.d.ts +1 -0
  13. package/build/config.test.js +37 -0
  14. package/build/config.test.js.map +1 -0
  15. package/build/generateEntitiesFile.d.ts +2 -1
  16. package/build/generateEntitiesFile.js +6 -3
  17. package/build/generateEntitiesFile.js.map +1 -1
  18. package/build/generateEntityCodegenFile.d.ts +2 -4
  19. package/build/generateEntityCodegenFile.js +278 -90
  20. package/build/generateEntityCodegenFile.js.map +1 -1
  21. package/build/generateEnumFile.d.ts +2 -3
  22. package/build/generateEnumFile.js +15 -10
  23. package/build/generateEnumFile.js.map +1 -1
  24. package/build/generateFactoriesFiles.js +4 -4
  25. package/build/generateFactoriesFiles.js.map +1 -1
  26. package/build/generateInitialEntityFile.js +7 -2
  27. package/build/generateInitialEntityFile.js.map +1 -1
  28. package/build/generateMetadataFile.js +96 -69
  29. package/build/generateMetadataFile.js.map +1 -1
  30. package/build/generatePgEnumFile.d.ts +4 -0
  31. package/build/generatePgEnumFile.js +18 -0
  32. package/build/generatePgEnumFile.js.map +1 -0
  33. package/build/index.d.ts +24 -8
  34. package/build/index.js +116 -40
  35. package/build/index.js.map +1 -1
  36. package/build/symbols.d.ts +62 -51
  37. package/build/symbols.js +64 -52
  38. package/build/symbols.js.map +1 -1
  39. package/build/utils.d.ts +4 -2
  40. package/build/utils.js +20 -11
  41. package/build/utils.js.map +1 -1
  42. package/package.json +26 -14
  43. package/jest.config.js +0 -10
  44. package/package.json.bak +0 -28
  45. package/src/EntityDbMetadata.test.ts +0 -42
  46. package/src/EntityDbMetadata.ts +0 -322
  47. package/src/assignTags.ts +0 -45
  48. package/src/config.ts +0 -82
  49. package/src/generateEntitiesFile.ts +0 -26
  50. package/src/generateEntityCodegenFile.ts +0 -414
  51. package/src/generateEnumFile.ts +0 -63
  52. package/src/generateFactoriesFiles.ts +0 -29
  53. package/src/generateInitialEntityFile.ts +0 -12
  54. package/src/generateMetadataFile.ts +0 -175
  55. package/src/index.ts +0 -180
  56. package/src/symbols.ts +0 -53
  57. package/src/utils.ts +0 -88
  58. package/tsconfig.json +0 -21
  59. package/tsconfig.tsbuildinfo +0 -3377
@@ -1,5 +1,4 @@
1
- import { Table } from "pg-structure";
2
1
  import { Code } from "ts-poet";
3
2
  import { Config } from "./config";
4
- import { EnumRows } from "./index";
5
- export declare function generateEnumFile(config: Config, table: Table, enumRows: EnumRows, enumName: string): Code;
3
+ import { EnumTableData } from "./index";
4
+ export declare function generateEnumFile(config: Config, enumData: EnumTableData, enumName: string): Code;
@@ -7,21 +7,26 @@ exports.generateEnumFile = void 0;
7
7
  const change_case_1 = require("change-case");
8
8
  const pluralize_1 = __importDefault(require("pluralize"));
9
9
  const ts_poet_1 = require("ts-poet");
10
- const index_1 = require("./index");
11
- function generateEnumFile(config, table, enumRows, enumName) {
12
- const rows = enumRows[table.name];
10
+ function generateEnumFile(config, enumData, enumName) {
11
+ const { rows, extraPrimitives } = enumData;
13
12
  const detailsName = `${enumName}Details`;
14
- // We're not really an entity, but appropriate EntityDbMetadata's `primitives` filtering
15
- const extraPrimitives = new index_1.EntityDbMetadata(config, table).primitives.filter((p) => !["code", "name"].includes(p.fieldName));
16
13
  const detailsDefinition = [
17
14
  "id: number;",
18
15
  `code: ${enumName};`,
19
16
  "name: string;",
20
- ...extraPrimitives.map((primitive) => `${primitive.fieldName}: ${primitive.fieldType};`),
17
+ ...extraPrimitives.map((primitive) => {
18
+ // If the extra primitive values are all unique, then allow the type be only that set of values. Otherwise, use `fieldType`
19
+ const allValues = rows.map((r) => r[primitive.columnName]);
20
+ const uniqueValues = new Set(allValues);
21
+ if (uniqueValues.size === allValues.length) {
22
+ return `${primitive.fieldName}: ${primitive.fieldType === "string" ? `"${allValues.join('" | "')}"` : allValues.join(" | ")};`;
23
+ }
24
+ return `${primitive.fieldName}: ${primitive.fieldType};`;
25
+ }),
21
26
  ].join(" ");
22
- return ts_poet_1.code `
27
+ return (0, ts_poet_1.code) `
23
28
  export enum ${enumName} {
24
- ${rows.map((row) => `${change_case_1.pascalCase(row.code)} = '${row.code}'`).join(",\n")}
29
+ ${rows.map((row) => `${(0, change_case_1.pascalCase)(row.code)} = '${row.code}'`).join(",\n")}
25
30
  }
26
31
 
27
32
  export type ${detailsName} = {${detailsDefinition}};
@@ -29,7 +34,7 @@ function generateEnumFile(config, table, enumRows, enumName) {
29
34
  const details: Record<${enumName}, ${detailsName}> = {
30
35
  ${rows
31
36
  .map((row) => {
32
- const code = change_case_1.pascalCase(row.code);
37
+ const code = (0, change_case_1.pascalCase)(row.code);
33
38
  const safeName = row.name.replace(/(["'])/g, "\\$1");
34
39
  const extras = extraPrimitives
35
40
  .map((p) => `${p.fieldName}: ${JSON.stringify(row[p.columnName])}`)
@@ -39,7 +44,7 @@ function generateEnumFile(config, table, enumRows, enumName) {
39
44
  .join(",")}
40
45
  };
41
46
 
42
- export const ${pluralize_1.default(enumName)} = {
47
+ export const ${(0, pluralize_1.default)(enumName)} = {
43
48
  getByCode(code: ${enumName}): ${detailsName} {
44
49
  return details[code];
45
50
  },
@@ -1 +1 @@
1
- {"version":3,"file":"generateEnumFile.js","sourceRoot":"","sources":["../src/generateEnumFile.ts"],"names":[],"mappings":";;;;;;AAAA,6CAAyC;AAEzC,0DAAkC;AAClC,qCAAqC;AAErC,mCAAqD;AAErD,SAAgB,gBAAgB,CAAC,MAAc,EAAE,KAAY,EAAE,QAAkB,EAAE,QAAgB;IACjG,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,WAAW,GAAG,GAAG,QAAQ,SAAS,CAAC;IACzC,wFAAwF;IACxF,MAAM,eAAe,GAAG,IAAI,wBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,UAAU,CAAC,MAAM,CAC3E,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAC/C,CAAC;IACF,MAAM,iBAAiB,GAAG;QACxB,aAAa;QACb,SAAS,QAAQ,GAAG;QACpB,eAAe;QACf,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS,GAAG,CAAC;KACzF,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,OAAO,cAAI,CAAA;kBACK,QAAQ;QAClB,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,wBAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;;;kBAG9D,WAAW,OAAO,iBAAiB;;4BAEzB,QAAQ,KAAK,WAAW;QAC5C,IAAI;SACH,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACX,MAAM,IAAI,GAAG,wBAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,eAAe;aAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAE,GAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;aAC3E,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,OAAO,IAAI,QAAQ,IAAI,IAAI,YAAY,GAAG,CAAC,EAAE,WAAW,QAAQ,IAAI,IAAI,YAAY,QAAQ,MAAM,MAAM,IAAI,CAAC;IAC/G,CAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC;;;mBAGC,mBAAS,CAAC,QAAQ,CAAC;wBACd,QAAQ,MAAM,WAAW;;;;kCAIf,WAAW;iCACZ,QAAQ;;;8BAGX,WAAW;;;;mCAIN,QAAQ;+BACZ,QAAQ;;;oCAGH,WAAW;;;;GAI5C,CAAC;AACJ,CAAC;AAvDD,4CAuDC"}
1
+ {"version":3,"file":"generateEnumFile.js","sourceRoot":"","sources":["../src/generateEnumFile.ts"],"names":[],"mappings":";;;;;;AAAA,6CAAyC;AACzC,0DAAkC;AAClC,qCAAqC;AAIrC,SAAgB,gBAAgB,CAAC,MAAc,EAAE,QAAuB,EAAE,QAAgB;IACxF,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,QAAQ,CAAC;IAC3C,MAAM,WAAW,GAAG,GAAG,QAAQ,SAAS,CAAC;IACzC,MAAM,iBAAiB,GAAG;QACxB,aAAa;QACb,SAAS,QAAQ,GAAG;QACpB,eAAe;QACf,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;YACnC,2HAA2H;YAC3H,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;YAC3D,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;YACxC,IAAI,YAAY,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM,EAAE;gBAC1C,OAAO,GAAG,SAAS,CAAC,SAAS,KAC3B,SAAS,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAC1F,GAAG,CAAC;aACL;YACD,OAAO,GAAG,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS,GAAG,CAAC;QAC3D,CAAC,CAAC;KACH,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,OAAO,IAAA,cAAI,EAAA;kBACK,QAAQ;QAClB,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAA,wBAAU,EAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;;;kBAG9D,WAAW,OAAO,iBAAiB;;4BAEzB,QAAQ,KAAK,WAAW;QAC5C,IAAI;SACH,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACX,MAAM,IAAI,GAAG,IAAA,wBAAU,EAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,eAAe;aAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAE,GAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;aAC3E,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,OAAO,IAAI,QAAQ,IAAI,IAAI,YAAY,GAAG,CAAC,EAAE,WAAW,QAAQ,IAAI,IAAI,YAAY,QAAQ,MAAM,MAAM,IAAI,CAAC;IAC/G,CAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC;;;mBAGC,IAAA,mBAAS,EAAC,QAAQ,CAAC;wBACd,QAAQ,MAAM,WAAW;;;;kCAIf,WAAW;iCACZ,QAAQ;;;8BAGX,WAAW;;;;mCAIN,QAAQ;+BACZ,QAAQ;;;oCAGH,WAAW;;;;GAI5C,CAAC;AACJ,CAAC;AA7DD,4CA6DC"}
@@ -7,11 +7,11 @@ const symbols_1 = require("./symbols");
7
7
  function generateFactoriesFiles(entities) {
8
8
  // One-time create an Author.factories.ts for each entity
9
9
  const entityFiles = entities.map(({ entity }) => {
10
- const name = change_case_1.pascalCase(entity.name);
11
- const contents = ts_poet_1.code `
10
+ const name = (0, change_case_1.pascalCase)(entity.name);
11
+ const contents = (0, ts_poet_1.code) `
12
12
  export function new${name}(
13
13
  em: ${symbols_1.EntityManager},
14
- opts?: ${symbols_1.FactoryOpts}<${entity.type}>
14
+ opts: ${symbols_1.FactoryOpts}<${entity.type}> = {},
15
15
  ): ${symbols_1.New}<${entity.type}> {
16
16
  return ${symbols_1.newTestInstance}(em, ${entity.type}, opts);
17
17
  }`;
@@ -20,7 +20,7 @@ function generateFactoriesFiles(entities) {
20
20
  // Everytime create a factories.ts that exports the others
21
21
  const factoriesFile = {
22
22
  name: "./factories.ts",
23
- contents: ts_poet_1.code `${entities.map(({ entity }) => ts_poet_1.code `export * from "./${entity.name}.factories";`)}`,
23
+ contents: (0, ts_poet_1.code) `${entities.map(({ entity }) => (0, ts_poet_1.code) `export * from "./${entity.name}.factories";`)}`,
24
24
  overwrite: true,
25
25
  };
26
26
  return [...entityFiles, factoriesFile];
@@ -1 +1 @@
1
- {"version":3,"file":"generateFactoriesFiles.js","sourceRoot":"","sources":["../src/generateFactoriesFiles.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AACzC,qCAA+B;AAG/B,uCAA6E;AAE7E,SAAgB,sBAAsB,CAAC,QAA4B;IACjE,yDAAyD;IACzD,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QAC9C,MAAM,IAAI,GAAG,wBAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,cAAI,CAAA;2BACE,IAAI;cACjB,uBAAa;iBACV,qBAAW,IAAI,MAAM,CAAC,IAAI;WAChC,aAAG,IAAI,MAAM,CAAC,IAAI;iBACZ,yBAAe,QAAQ,MAAM,CAAC,IAAI;QAC3C,CAAC;QACL,OAAO,EAAE,IAAI,EAAE,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,0DAA0D;IAC1D,MAAM,aAAa,GAAG;QACpB,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,cAAI,CAAA,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,cAAI,CAAA,oBAAoB,MAAM,CAAC,IAAI,cAAc,CAAC,EAAE;QAClG,SAAS,EAAE,IAAI;KAChB,CAAC;IAEF,OAAO,CAAC,GAAG,WAAW,EAAE,aAAa,CAAC,CAAC;AACzC,CAAC;AAtBD,wDAsBC"}
1
+ {"version":3,"file":"generateFactoriesFiles.js","sourceRoot":"","sources":["../src/generateFactoriesFiles.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AACzC,qCAA+B;AAG/B,uCAA6E;AAE7E,SAAgB,sBAAsB,CAAC,QAA4B;IACjE,yDAAyD;IACzD,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QAC9C,MAAM,IAAI,GAAG,IAAA,wBAAU,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,IAAA,cAAI,EAAA;2BACE,IAAI;cACjB,uBAAa;gBACX,qBAAW,IAAI,MAAM,CAAC,IAAI;WAC/B,aAAG,IAAI,MAAM,CAAC,IAAI;iBACZ,yBAAe,QAAQ,MAAM,CAAC,IAAI;QAC3C,CAAC;QACL,OAAO,EAAE,IAAI,EAAE,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,0DAA0D;IAC1D,MAAM,aAAa,GAAG;QACpB,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,IAAA,cAAI,EAAA,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,IAAA,cAAI,EAAA,oBAAoB,MAAM,CAAC,IAAI,cAAc,CAAC,EAAE;QAClG,SAAS,EAAE,IAAI;KAChB,CAAC;IAEF,OAAO,CAAC,GAAG,WAAW,EAAE,aAAa,CAAC,CAAC;AACzC,CAAC;AAtBD,wDAsBC"}
@@ -5,9 +5,14 @@ const ts_poet_1 = require("ts-poet");
5
5
  /** Creates the placeholder file for our per-entity custom business logic in. */
6
6
  function generateInitialEntityFile(meta) {
7
7
  const entityName = meta.entity.name;
8
- const codegenClass = ts_poet_1.imp(`${entityName}Codegen@./entities`);
9
- return ts_poet_1.code `
8
+ const codegenClass = (0, ts_poet_1.imp)(`${entityName}Codegen@./entities`);
9
+ return (0, ts_poet_1.code) `
10
+ import { ${meta.entity.configConst.symbol} as config } from "./entities";
11
+
10
12
  export class ${entityName} extends ${codegenClass} {}
13
+
14
+ // remove once you have actual rules/hooks
15
+ config.placeholder();
11
16
  `;
12
17
  }
13
18
  exports.generateInitialEntityFile = generateInitialEntityFile;
@@ -1 +1 @@
1
- {"version":3,"file":"generateInitialEntityFile.js","sourceRoot":"","sources":["../src/generateInitialEntityFile.ts"],"names":[],"mappings":";;;AAAA,qCAA0C;AAI1C,gFAAgF;AAChF,SAAgB,yBAAyB,CAAC,IAAsB;IAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IACpC,MAAM,YAAY,GAAG,aAAG,CAAC,GAAG,UAAU,oBAAoB,CAAC,CAAC;IAC5D,OAAO,cAAI,CAAA;mBACM,UAAU,YAAY,YAAY;GAClD,CAAC;AACJ,CAAC;AAND,8DAMC"}
1
+ {"version":3,"file":"generateInitialEntityFile.js","sourceRoot":"","sources":["../src/generateInitialEntityFile.ts"],"names":[],"mappings":";;;AAAA,qCAA0C;AAG1C,gFAAgF;AAChF,SAAgB,yBAAyB,CAAC,IAAsB;IAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IACpC,MAAM,YAAY,GAAG,IAAA,aAAG,EAAC,GAAG,UAAU,oBAAoB,CAAC,CAAC;IAC5D,OAAO,IAAA,cAAI,EAAA;eACE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM;;mBAE1B,UAAU,YAAY,YAAY;;;;GAIlD,CAAC;AACJ,CAAC;AAXD,8DAWC"}
@@ -5,69 +5,43 @@ const ts_poet_1 = require("ts-poet");
5
5
  const symbols_1 = require("./symbols");
6
6
  function generateMetadataFile(config, dbMetadata) {
7
7
  const { entity } = dbMetadata;
8
- const { primaryKey, primitives, enums, m2o } = generateColumns(dbMetadata);
9
- const { primaryKeyField, primitiveFields, enumFields, m2oFields, o2mFields, m2mFields, o2oFields } = generateFields(config, dbMetadata);
10
- return ts_poet_1.code `
8
+ const fields = generateFields(config, dbMetadata);
9
+ Object.values(fields).forEach((code) => code.asOneline());
10
+ return (0, ts_poet_1.code) `
11
11
  export const ${entity.metaName}: ${symbols_1.EntityMetadata}<${entity.type}> = {
12
12
  cstr: ${entity.type},
13
13
  type: "${entity.name}",
14
- tagName: "${config.entities[entity.name].tag}",
14
+ idType: "${dbMetadata.idDbType}",
15
+ tagName: "${dbMetadata.tagName}",
15
16
  tableName: "${dbMetadata.tableName}",
16
- columns: [ ${primaryKey} ${enums} ${primitives} ${m2o} ],
17
- fields: [ ${primaryKeyField} ${enumFields} ${primitiveFields} ${m2oFields} ${o2mFields} ${m2mFields} ${o2oFields} ],
17
+ fields: ${fields},
18
18
  config: ${entity.configConst},
19
- factory: ${ts_poet_1.imp(`new${entity.name}@./entities`)},
19
+ factory: ${(0, ts_poet_1.imp)(`new${entity.name}@./entities`)},
20
20
  };
21
21
 
22
22
  (${entity.name} as any).metadata = ${entity.metaName};
23
23
  `;
24
24
  }
25
25
  exports.generateMetadataFile = generateMetadataFile;
26
- function generateColumns(dbMetadata) {
27
- const primaryKey = ts_poet_1.code `
28
- { fieldName: "id", columnName: "id", dbType: "int", serde: new ${symbols_1.PrimaryKeySerde}(() => ${dbMetadata.entity.metaName}, "id", "id") },
29
- `;
30
- const primitives = dbMetadata.primitives.map((p) => {
31
- const { fieldName, columnName, columnType } = p;
32
- return ts_poet_1.code `
33
- {
34
- fieldName: "${fieldName}",
35
- columnName: "${columnName}",
36
- dbType: "${columnType}",
37
- serde: new ${symbols_1.SimpleSerde}("${fieldName}", "${columnName}"),
38
- },`;
39
- });
40
- const enums = dbMetadata.enums.map((e) => {
41
- const { fieldName, columnName, enumDetailType } = e;
42
- return ts_poet_1.code `
43
- {
44
- fieldName: "${fieldName}",
45
- columnName: "${columnName}",
46
- dbType: "int",
47
- serde: new ${symbols_1.EnumFieldSerde}("${fieldName}", "${columnName}", ${enumDetailType}),
48
- },
49
- `;
50
- });
51
- const m2o = dbMetadata.manyToOnes.map((m2o) => {
52
- const { fieldName, columnName, otherEntity } = m2o;
53
- return ts_poet_1.code `
54
- {
55
- fieldName: "${fieldName}",
56
- columnName: "${columnName}",
57
- dbType: "int",
58
- serde: new ${symbols_1.ForeignKeySerde}("${fieldName}", "${columnName}", () => ${otherEntity.metaName}),
59
- },
60
- `;
61
- });
62
- return { primaryKey, primitives, enums, m2o };
63
- }
64
26
  function generateFields(config, dbMetadata) {
65
- const primaryKeyField = ts_poet_1.code `
66
- { kind: "primaryKey", fieldName: "id", fieldIdName: undefined, required: true },
27
+ const fields = {};
28
+ fields["id"] = (0, ts_poet_1.code) `
29
+ {
30
+ kind: "primaryKey",
31
+ fieldName: "id",
32
+ fieldIdName: undefined,
33
+ required: true,
34
+ serde: new ${symbols_1.KeySerde}("${dbMetadata.tagName}", "id", "id", "${dbMetadata.idDbType}"),
35
+ }
67
36
  `;
68
- const primitiveFields = dbMetadata.primitives.map((p) => {
69
- const { fieldName, derived } = p;
70
- return ts_poet_1.code `
37
+ dbMetadata.primitives.forEach((p) => {
38
+ const { fieldName, derived, columnName, columnType, superstruct } = p;
39
+ const serdeType = superstruct
40
+ ? (0, ts_poet_1.code) `new ${symbols_1.SuperstructSerde}("${fieldName}", "${columnName}", ${superstruct})`
41
+ : columnType === "numeric"
42
+ ? (0, ts_poet_1.code) `new ${symbols_1.DecimalToNumberSerde}("${fieldName}", "${columnName}")`
43
+ : (0, ts_poet_1.code) `new ${symbols_1.PrimitiveSerde}("${fieldName}", "${columnName}", "${columnType}")`;
44
+ fields[fieldName] = (0, ts_poet_1.code) `
71
45
  {
72
46
  kind: "primitive",
73
47
  fieldName: "${fieldName}",
@@ -75,23 +49,40 @@ function generateFields(config, dbMetadata) {
75
49
  derived: ${!derived ? false : `"${derived}"`},
76
50
  required: ${!derived && p.notNull},
77
51
  protected: ${p.protected},
78
- type: ${typeof p.fieldType === "string" ? `"${p.fieldType}"` : p.fieldType},
79
- },`;
52
+ type: ${typeof p.rawFieldType === "string" ? `"${p.rawFieldType}"` : p.rawFieldType},
53
+ serde: ${serdeType},
54
+ }`;
55
+ });
56
+ // Treat native enums as primitives
57
+ dbMetadata.pgEnums.forEach(({ columnName, fieldName, notNull }) => {
58
+ fields[fieldName] = (0, ts_poet_1.code) `
59
+ {
60
+ kind: "primitive",
61
+ fieldName: "${fieldName}",
62
+ fieldIdName: undefined,
63
+ derived: false,
64
+ required: ${notNull},
65
+ protected: false,
66
+ type: "string",
67
+ serde: new ${symbols_1.PrimitiveSerde}("${fieldName}", "${columnName}", "string"),
68
+ }`;
80
69
  });
81
- const enumFields = dbMetadata.enums.map(({ fieldName, enumDetailType, notNull }) => {
82
- return ts_poet_1.code `
70
+ dbMetadata.enums.forEach(({ fieldName, enumDetailType, notNull, isArray, columnName }) => {
71
+ fields[fieldName] = (0, ts_poet_1.code) `
83
72
  {
84
73
  kind: "enum",
85
74
  fieldName: "${fieldName}",
86
75
  fieldIdName: undefined,
87
76
  required: ${notNull},
88
77
  enumDetailType: ${enumDetailType},
89
- },
78
+ serde: new ${isArray ? symbols_1.EnumArrayFieldSerde : symbols_1.EnumFieldSerde}("${fieldName}", "${columnName}", ${enumDetailType}),
79
+ }
90
80
  `;
91
81
  });
92
- const m2oFields = dbMetadata.manyToOnes.map((m2o) => {
93
- const { fieldName, notNull, otherEntity, otherFieldName } = m2o;
94
- return ts_poet_1.code `
82
+ dbMetadata.manyToOnes.forEach((m2o) => {
83
+ const { fieldName, columnName, notNull, otherEntity, otherFieldName, dbType } = m2o;
84
+ const otherTagName = config.entities[otherEntity.name].tag;
85
+ fields[fieldName] = (0, ts_poet_1.code) `
95
86
  {
96
87
  kind: "m2o",
97
88
  fieldName: "${fieldName}",
@@ -99,12 +90,13 @@ function generateFields(config, dbMetadata) {
99
90
  required: ${notNull},
100
91
  otherMetadata: () => ${otherEntity.metaName},
101
92
  otherFieldName: "${otherFieldName}",
102
- },
93
+ serde: new ${symbols_1.KeySerde}("${otherTagName}", "${fieldName}", "${columnName}", "${dbType}"),
94
+ }
103
95
  `;
104
96
  });
105
- const o2mFields = dbMetadata.oneToManys.map((m2o) => {
97
+ dbMetadata.oneToManys.forEach((m2o) => {
106
98
  const { fieldName, singularName, otherEntity, otherFieldName } = m2o;
107
- return ts_poet_1.code `
99
+ fields[fieldName] = (0, ts_poet_1.code) `
108
100
  {
109
101
  kind: "o2m",
110
102
  fieldName: "${fieldName}",
@@ -112,12 +104,27 @@ function generateFields(config, dbMetadata) {
112
104
  required: false,
113
105
  otherMetadata: () => ${otherEntity.metaName},
114
106
  otherFieldName: "${otherFieldName}",
115
- },
107
+ serde: undefined,
108
+ }
116
109
  `;
117
110
  });
118
- const m2mFields = dbMetadata.manyToManys.map((m2o) => {
111
+ dbMetadata.largeOneToManys.forEach((m2o) => {
119
112
  const { fieldName, singularName, otherEntity, otherFieldName } = m2o;
120
- return ts_poet_1.code `
113
+ fields[fieldName] = (0, ts_poet_1.code) `
114
+ {
115
+ kind: "lo2m",
116
+ fieldName: "${fieldName}",
117
+ fieldIdName: "${singularName}Ids",
118
+ required: false,
119
+ otherMetadata: () => ${otherEntity.metaName},
120
+ otherFieldName: "${otherFieldName}",
121
+ serde: undefined,
122
+ }
123
+ `;
124
+ });
125
+ dbMetadata.manyToManys.forEach((m2o) => {
126
+ const { fieldName, singularName, otherEntity, otherFieldName } = m2o;
127
+ fields[fieldName] = (0, ts_poet_1.code) `
121
128
  {
122
129
  kind: "m2m",
123
130
  fieldName: "${fieldName}",
@@ -125,12 +132,13 @@ function generateFields(config, dbMetadata) {
125
132
  required: false,
126
133
  otherMetadata: () => ${otherEntity.metaName},
127
134
  otherFieldName: "${otherFieldName}",
128
- },
135
+ serde: undefined,
136
+ }
129
137
  `;
130
138
  });
131
- const o2oFields = dbMetadata.oneToOnes.map((o2o) => {
139
+ dbMetadata.oneToOnes.forEach((o2o) => {
132
140
  const { fieldName, otherEntity, otherFieldName } = o2o;
133
- return ts_poet_1.code `
141
+ fields[fieldName] = (0, ts_poet_1.code) `
134
142
  {
135
143
  kind: "o2o",
136
144
  fieldName: "${fieldName}",
@@ -138,9 +146,28 @@ function generateFields(config, dbMetadata) {
138
146
  required: false,
139
147
  otherMetadata: () => ${otherEntity.metaName},
140
148
  otherFieldName: "${otherFieldName}",
141
- },
149
+ serde: undefined,
150
+ }
151
+ `;
152
+ });
153
+ dbMetadata.polymorphics.forEach((p) => {
154
+ const { fieldName, notNull, components } = p;
155
+ fields[fieldName] = (0, ts_poet_1.code) `
156
+ {
157
+ kind: "poly",
158
+ fieldName: "${fieldName}",
159
+ fieldIdName: "${fieldName}Id",
160
+ required: ${notNull},
161
+ components: [${components.map(({ otherFieldName, otherEntity, columnName }) => (0, ts_poet_1.code) `
162
+ {
163
+ otherMetadata: () => ${otherEntity.metaName},
164
+ otherFieldName: "${otherFieldName}",
165
+ columnName: "${columnName}",
166
+ },`)}],
167
+ serde: new ${symbols_1.PolymorphicKeySerde}(() => ${dbMetadata.entity.metaName}, "${fieldName}"),
168
+ }
142
169
  `;
143
170
  });
144
- return { primaryKeyField, primitiveFields, enumFields, m2oFields, o2mFields, m2mFields, o2oFields };
171
+ return fields;
145
172
  }
146
173
  //# sourceMappingURL=generateMetadataFile.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generateMetadataFile.js","sourceRoot":"","sources":["../src/generateMetadataFile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generateMetadataFile.js","sourceRoot":"","sources":["../src/generateMetadataFile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Code } from "ts-poet";
2
+ import { Config } from "./config";
3
+ import { PgEnumData } from "./index";
4
+ export declare function generatePgEnumFile(config: Config, enumData: PgEnumData): Code;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generatePgEnumFile = void 0;
4
+ const change_case_1 = require("change-case");
5
+ const ts_poet_1 = require("ts-poet");
6
+ function generatePgEnumFile(config, enumData) {
7
+ const { name, values } = enumData;
8
+ const detailsName = `${name}Details`;
9
+ return (0, ts_poet_1.code) `
10
+ export enum ${name} {
11
+ ${values.map((value) => `${(0, change_case_1.pascalCase)(value)} = '${value}'`).join(",\n")}
12
+ }
13
+
14
+
15
+ `;
16
+ }
17
+ exports.generatePgEnumFile = generatePgEnumFile;
18
+ //# sourceMappingURL=generatePgEnumFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generatePgEnumFile.js","sourceRoot":"","sources":["../src/generatePgEnumFile.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AACzC,qCAAqC;AAIrC,SAAgB,kBAAkB,CAAC,MAAc,EAAE,QAAoB;IACrE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;IAClC,MAAM,WAAW,GAAG,GAAG,IAAI,SAAS,CAAC;IACrC,OAAO,IAAA,cAAI,EAAA;kBACK,IAAI;QACd,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,IAAA,wBAAU,EAAC,KAAK,CAAC,OAAO,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;;;;GAI3E,CAAC;AACJ,CAAC;AAVD,gDAUC"}
package/build/index.d.ts CHANGED
@@ -1,31 +1,47 @@
1
1
  import { Client } from "pg";
2
2
  import { Db, Table } from "pg-structure";
3
+ import { Options } from "prettier";
3
4
  import { Code } from "ts-poet";
4
5
  import { Config } from "./config";
5
- import { EntityDbMetadata } from "./EntityDbMetadata";
6
- export { EntityDbMetadata };
7
- export { PrimitiveField, EnumField, ManyToOneField, OneToManyField, ManyToManyField, OneToOneField, makeEntity, } from "./EntityDbMetadata";
6
+ import { EntityDbMetadata, PrimitiveField } from "./EntityDbMetadata";
7
+ import { mapSimpleDbTypeToTypescriptType } from "./utils";
8
+ export { EnumField, makeEntity, ManyToManyField, ManyToOneField, OneToManyField, OneToOneField, PrimitiveField, } from "./EntityDbMetadata";
9
+ export { Config, EntityDbMetadata, mapSimpleDbTypeToTypescriptType };
8
10
  export interface CodeGenFile {
9
11
  name: string;
10
12
  contents: Code | string;
11
13
  overwrite: boolean;
14
+ prettierOverrides?: Options;
12
15
  }
13
16
  /** A map from Enum table name to the rows currently in the table. */
14
- export declare type EnumRows = Record<string, EnumRow[]>;
17
+ export declare type EnumTableData = {
18
+ table: Table;
19
+ name: string;
20
+ rows: EnumRow[];
21
+ extraPrimitives: PrimitiveField[];
22
+ };
23
+ export declare type PgEnumData = {
24
+ name: string;
25
+ values: string[];
26
+ };
27
+ export declare type EnumMetadata = Record<string, EnumTableData>;
28
+ export declare type PgEnumMetadata = Record<string, PgEnumData>;
15
29
  export declare type EnumRow = {
16
30
  id: number;
17
31
  code: string;
18
32
  name: string;
33
+ [key: string]: any;
19
34
  };
20
35
  /** Uses entities and enums from the `db` schema and saves them into our entities directory. */
21
36
  export declare function generateAndSaveFiles(config: Config, dbMeta: DbMetadata): Promise<void>;
22
37
  /** Generates our `${Entity}` and `${Entity}Codegen` files based on the `db` schema. */
23
38
  export declare function generateFiles(config: Config, dbMeta: DbMetadata): Promise<CodeGenFile[]>;
24
- export declare function loadEnumRows(db: Db, client: Client): Promise<EnumRows>;
25
- export declare function contentToString(content: Code | string, fileName: string): Promise<string>;
39
+ export declare function loadEnumMetadata(db: Db, client: Client, config: Config): Promise<EnumMetadata>;
40
+ export declare function loadPgEnumMetadata(db: Db, client: Client, config: Config): Promise<PgEnumMetadata>;
41
+ export declare function contentToString(content: Code | string, fileName: string, prettierOverrides?: Options): Promise<string>;
26
42
  export interface DbMetadata {
27
43
  entityTables: Table[];
28
- enumTables: Table[];
29
44
  entities: EntityDbMetadata[];
30
- enumRows: EnumRows;
45
+ enums: EnumMetadata;
46
+ pgEnums: PgEnumMetadata;
31
47
  }