joist-codegen 2.3.0-next.42 → 2.3.0-next.44
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/EntityDbMetadata.cjs +608 -0
- package/build/EntityDbMetadata.cjs.map +1 -0
- package/build/EntityDbMetadata.d.cts +274 -0
- package/build/EntityDbMetadata.d.cts.map +1 -0
- package/build/EntityDbMetadata.d.mts +274 -0
- package/build/EntityDbMetadata.d.mts.map +1 -0
- package/build/EntityDbMetadata.js +485 -664
- package/build/EntityDbMetadata.js.map +1 -1
- package/build/_virtual/_rolldown/runtime.cjs +23 -0
- package/build/_virtual/_rolldown/runtime.js +5 -0
- package/build/assignTags.cjs +45 -0
- package/build/assignTags.cjs.map +1 -0
- package/build/{assignTags.d.ts → assignTags.d.cts} +8 -3
- package/build/assignTags.d.cts.map +1 -0
- package/build/assignTags.d.mts +16 -0
- package/build/assignTags.d.mts.map +1 -0
- package/build/assignTags.js +37 -59
- package/build/assignTags.js.map +1 -1
- package/build/codemods/Codemod.cjs +2 -0
- package/build/codemods/Codemod.d.cts +17 -0
- package/build/codemods/Codemod.d.cts.map +1 -0
- package/build/codemods/Codemod.d.mts +17 -0
- package/build/codemods/Codemod.d.mts.map +1 -0
- package/build/codemods/Codemod.js +2 -3
- package/build/codemods/JscodeshiftMod.cjs +42 -0
- package/build/codemods/JscodeshiftMod.cjs.map +1 -0
- package/build/codemods/JscodeshiftMod.d.cts +14 -0
- package/build/codemods/JscodeshiftMod.d.cts.map +1 -0
- package/build/codemods/JscodeshiftMod.d.mts +14 -0
- package/build/codemods/JscodeshiftMod.d.mts.map +1 -0
- package/build/codemods/JscodeshiftMod.js +33 -33
- package/build/codemods/JscodeshiftMod.js.map +1 -1
- package/build/codemods/codemod_0001-rename_has_async_property.cjs +30 -0
- package/build/codemods/codemod_0001-rename_has_async_property.cjs.map +1 -0
- package/build/codemods/codemod_0001-rename_has_async_property.d.cts +9 -0
- package/build/codemods/codemod_0001-rename_has_async_property.d.cts.map +1 -0
- package/build/codemods/codemod_0001-rename_has_async_property.d.mts +9 -0
- package/build/codemods/codemod_0001-rename_has_async_property.d.mts.map +1 -0
- package/build/codemods/codemod_0001-rename_has_async_property.js +21 -25
- package/build/codemods/codemod_0001-rename_has_async_property.js.map +1 -1
- package/build/codemods/codemod_0002-rename_async_query_fields.cjs +50 -0
- package/build/codemods/codemod_0002-rename_async_query_fields.cjs.map +1 -0
- package/build/codemods/codemod_0002-rename_async_query_fields.d.cts +9 -0
- package/build/codemods/codemod_0002-rename_async_query_fields.d.cts.map +1 -0
- package/build/codemods/codemod_0002-rename_async_query_fields.d.mts +9 -0
- package/build/codemods/codemod_0002-rename_async_query_fields.d.mts.map +1 -0
- package/build/codemods/codemod_0002-rename_async_query_fields.js +38 -46
- package/build/codemods/codemod_0002-rename_async_query_fields.js.map +1 -1
- package/build/codemods/codemod_0003-rename_find_paginated.cjs +25 -0
- package/build/codemods/codemod_0003-rename_find_paginated.cjs.map +1 -0
- package/build/codemods/codemod_0003-rename_find_paginated.d.cts +9 -0
- package/build/codemods/codemod_0003-rename_find_paginated.d.cts.map +1 -0
- package/build/codemods/codemod_0003-rename_find_paginated.d.mts +9 -0
- package/build/codemods/codemod_0003-rename_find_paginated.d.mts.map +1 -0
- package/build/codemods/codemod_0003-rename_find_paginated.js +17 -26
- package/build/codemods/codemod_0003-rename_find_paginated.js.map +1 -1
- package/build/codemods/index.cjs +49 -0
- package/build/codemods/index.cjs.map +1 -0
- package/build/codemods/index.d.cts +12 -0
- package/build/codemods/index.d.cts.map +1 -0
- package/build/codemods/index.d.mts +12 -0
- package/build/codemods/index.d.mts.map +1 -0
- package/build/codemods/index.js +34 -42
- package/build/codemods/index.js.map +1 -1
- package/build/config.cjs +377 -0
- package/build/config.cjs.map +1 -0
- package/build/config.d.cts +181 -0
- package/build/config.d.cts.map +1 -0
- package/build/config.d.mts +181 -0
- package/build/config.d.mts.map +1 -0
- package/build/config.js +300 -382
- package/build/config.js.map +1 -1
- package/build/docs/cache.cjs +62 -0
- package/build/docs/cache.cjs.map +1 -0
- package/build/docs/cache.d.cts +17 -0
- package/build/docs/cache.d.cts.map +1 -0
- package/build/docs/cache.d.mts +17 -0
- package/build/docs/cache.d.mts.map +1 -0
- package/build/docs/cache.js +52 -53
- package/build/docs/cache.js.map +1 -1
- package/build/docs/generate-metadata-docs.cjs +32 -0
- package/build/docs/generate-metadata-docs.cjs.map +1 -0
- package/build/docs/generate-metadata-docs.d.cts +9 -0
- package/build/docs/generate-metadata-docs.d.cts.map +1 -0
- package/build/docs/generate-metadata-docs.d.mts +9 -0
- package/build/docs/generate-metadata-docs.d.mts.map +1 -0
- package/build/docs/generate-metadata-docs.js +18 -20
- package/build/docs/generate-metadata-docs.js.map +1 -1
- package/build/docs/index.cjs +90 -0
- package/build/docs/index.cjs.map +1 -0
- package/build/docs/index.d.cts +16 -0
- package/build/docs/index.d.cts.map +1 -0
- package/build/docs/index.d.mts +16 -0
- package/build/docs/index.d.mts.map +1 -0
- package/build/docs/index.js +72 -91
- package/build/docs/index.js.map +1 -1
- package/build/docs/markdown.cjs +181 -0
- package/build/docs/markdown.cjs.map +1 -0
- package/build/docs/{markdown.d.ts → markdown.d.cts} +14 -11
- package/build/docs/markdown.d.cts.map +1 -0
- package/build/docs/markdown.d.mts +32 -0
- package/build/docs/markdown.d.mts.map +1 -0
- package/build/docs/markdown.js +152 -220
- package/build/docs/markdown.js.map +1 -1
- package/build/docs/parsing.cjs +117 -0
- package/build/docs/parsing.cjs.map +1 -0
- package/build/docs/parsing.d.cts +48 -0
- package/build/docs/parsing.d.cts.map +1 -0
- package/build/docs/parsing.d.mts +48 -0
- package/build/docs/parsing.d.mts.map +1 -0
- package/build/docs/parsing.js +86 -91
- package/build/docs/parsing.js.map +1 -1
- package/build/findEntityScopes.cjs +119 -0
- package/build/findEntityScopes.cjs.map +1 -0
- package/build/findEntityScopes.d.cts +14 -0
- package/build/findEntityScopes.d.cts.map +1 -0
- package/build/findEntityScopes.d.mts +14 -0
- package/build/findEntityScopes.d.mts.map +1 -0
- package/build/findEntityScopes.js +79 -121
- package/build/findEntityScopes.js.map +1 -1
- package/build/foreignKeyOrdering.cjs +52 -0
- package/build/foreignKeyOrdering.cjs.map +1 -0
- package/build/foreignKeyOrdering.d.cts +8 -0
- package/build/foreignKeyOrdering.d.cts.map +1 -0
- package/build/foreignKeyOrdering.d.mts +8 -0
- package/build/foreignKeyOrdering.d.mts.map +1 -0
- package/build/foreignKeyOrdering.js +46 -55
- package/build/foreignKeyOrdering.js.map +1 -1
- package/build/generate.cjs +127 -0
- package/build/generate.cjs.map +1 -0
- package/build/generate.d.cts +17 -0
- package/build/generate.d.cts.map +1 -0
- package/build/generate.d.mts +17 -0
- package/build/generate.d.mts.map +1 -0
- package/build/generate.js +109 -129
- package/build/generate.js.map +1 -1
- package/build/generateEntitiesFile.cjs +46 -0
- package/build/generateEntitiesFile.cjs.map +1 -0
- package/build/generateEntitiesFile.d.cts +11 -0
- package/build/generateEntitiesFile.d.cts.map +1 -0
- package/build/generateEntitiesFile.d.mts +11 -0
- package/build/generateEntitiesFile.d.mts.map +1 -0
- package/build/generateEntitiesFile.js +28 -25
- package/build/generateEntitiesFile.js.map +1 -1
- package/build/generateEntityCodegenFile.cjs +936 -0
- package/build/generateEntityCodegenFile.cjs.map +1 -0
- package/build/generateEntityCodegenFile.d.cts +16 -0
- package/build/generateEntityCodegenFile.d.cts.map +1 -0
- package/build/generateEntityCodegenFile.d.mts +16 -0
- package/build/generateEntityCodegenFile.d.mts.map +1 -0
- package/build/generateEntityCodegenFile.js +707 -852
- package/build/generateEntityCodegenFile.js.map +1 -1
- package/build/generateEntityFile.cjs +23 -0
- package/build/generateEntityFile.cjs.map +1 -0
- package/build/generateEntityFile.d.cts +9 -0
- package/build/generateEntityFile.d.cts.map +1 -0
- package/build/generateEntityFile.d.mts +9 -0
- package/build/generateEntityFile.d.mts.map +1 -0
- package/build/generateEntityFile.js +11 -8
- package/build/generateEntityFile.js.map +1 -1
- package/build/generateEntityTestFile.cjs +25 -0
- package/build/generateEntityTestFile.cjs.map +1 -0
- package/build/generateEntityTestFile.d.cts +9 -0
- package/build/generateEntityTestFile.d.cts.map +1 -0
- package/build/generateEntityTestFile.d.mts +9 -0
- package/build/generateEntityTestFile.d.mts.map +1 -0
- package/build/generateEntityTestFile.js +10 -7
- package/build/generateEntityTestFile.js.map +1 -1
- package/build/generateEnumFile.cjs +73 -0
- package/build/generateEnumFile.cjs.map +1 -0
- package/build/generateEnumFile.d.cts +9 -0
- package/build/generateEnumFile.d.cts.map +1 -0
- package/build/generateEnumFile.d.mts +9 -0
- package/build/generateEnumFile.d.mts.map +1 -0
- package/build/generateEnumFile.js +33 -43
- package/build/generateEnumFile.js.map +1 -1
- package/build/generateFactoriesFiles.cjs +28 -0
- package/build/generateFactoriesFiles.cjs.map +1 -0
- package/build/generateFactoriesFiles.d.cts +7 -0
- package/build/generateFactoriesFiles.d.cts.map +1 -0
- package/build/generateFactoriesFiles.d.mts +7 -0
- package/build/generateFactoriesFiles.d.mts.map +1 -0
- package/build/generateFactoriesFiles.js +21 -16
- package/build/generateFactoriesFiles.js.map +1 -1
- package/build/generateFlushFunction.cjs +61 -0
- package/build/generateFlushFunction.cjs.map +1 -0
- package/build/{generateFlushFunction.d.ts → generateFlushFunction.d.cts} +8 -4
- package/build/generateFlushFunction.d.cts.map +1 -0
- package/build/generateFlushFunction.d.mts +23 -0
- package/build/generateFlushFunction.d.mts.map +1 -0
- package/build/generateFlushFunction.js +32 -73
- package/build/generateFlushFunction.js.map +1 -1
- package/build/generateMetadataFile.cjs +290 -0
- package/build/generateMetadataFile.cjs.map +1 -0
- package/build/generateMetadataFile.d.cts +8 -0
- package/build/generateMetadataFile.d.cts.map +1 -0
- package/build/generateMetadataFile.d.mts +8 -0
- package/build/generateMetadataFile.d.mts.map +1 -0
- package/build/generateMetadataFile.js +111 -142
- package/build/generateMetadataFile.js.map +1 -1
- package/build/generatePgEnumFile.cjs +21 -0
- package/build/generatePgEnumFile.cjs.map +1 -0
- package/build/generatePgEnumFile.d.cts +9 -0
- package/build/generatePgEnumFile.d.cts.map +1 -0
- package/build/generatePgEnumFile.d.mts +9 -0
- package/build/generatePgEnumFile.d.mts.map +1 -0
- package/build/generatePgEnumFile.js +12 -9
- package/build/generatePgEnumFile.js.map +1 -1
- package/build/index.cjs +135 -0
- package/build/index.cjs.map +1 -0
- package/build/index.d.cts +12 -0
- package/build/index.d.cts.map +1 -0
- package/build/index.d.mts +12 -0
- package/build/index.d.mts.map +1 -0
- package/build/index.js +105 -147
- package/build/index.js.map +1 -1
- package/build/inheritance.cjs +213 -0
- package/build/inheritance.cjs.map +1 -0
- package/build/inheritance.d.cts +12 -0
- package/build/inheritance.d.cts.map +1 -0
- package/build/inheritance.d.mts +12 -0
- package/build/inheritance.d.mts.map +1 -0
- package/build/inheritance.js +193 -247
- package/build/inheritance.js.map +1 -1
- package/build/installSkills.cjs +68 -0
- package/build/installSkills.cjs.map +1 -0
- package/build/{installSkills.d.ts → installSkills.d.cts} +5 -1
- package/build/installSkills.d.cts.map +1 -0
- package/build/installSkills.d.mts +16 -0
- package/build/installSkills.d.mts.map +1 -0
- package/build/installSkills.js +55 -57
- package/build/installSkills.js.map +1 -1
- package/build/keywords.cjs +7 -0
- package/build/keywords.cjs.map +1 -0
- package/build/keywords.d.cts +5 -0
- package/build/keywords.d.cts.map +1 -0
- package/build/keywords.d.mts +5 -0
- package/build/keywords.d.mts.map +1 -0
- package/build/keywords.js +5 -4
- package/build/keywords.js.map +1 -1
- package/build/loadMetadata.cjs +39 -0
- package/build/loadMetadata.cjs.map +1 -0
- package/build/loadMetadata.d.cts +31 -0
- package/build/loadMetadata.d.cts.map +1 -0
- package/build/loadMetadata.d.mts +31 -0
- package/build/loadMetadata.d.mts.map +1 -0
- package/build/loadMetadata.js +32 -39
- package/build/loadMetadata.js.map +1 -1
- package/build/logger.cjs +28 -0
- package/build/logger.cjs.map +1 -0
- package/build/logger.d.cts +13 -0
- package/build/logger.d.cts.map +1 -0
- package/build/logger.d.mts +13 -0
- package/build/logger.d.mts.map +1 -0
- package/build/logger.js +17 -16
- package/build/logger.js.map +1 -1
- package/build/scanEntityFiles.cjs +46 -0
- package/build/scanEntityFiles.cjs.map +1 -0
- package/build/scanEntityFiles.d.cts +8 -0
- package/build/scanEntityFiles.d.cts.map +1 -0
- package/build/scanEntityFiles.d.mts +8 -0
- package/build/scanEntityFiles.d.mts.map +1 -0
- package/build/scanEntityFiles.js +37 -42
- package/build/scanEntityFiles.js.map +1 -1
- package/build/sortForeignKeys.cjs +99 -0
- package/build/sortForeignKeys.cjs.map +1 -0
- package/build/{sortForeignKeys.d.ts → sortForeignKeys.d.cts} +8 -4
- package/build/sortForeignKeys.d.cts.map +1 -0
- package/build/sortForeignKeys.d.mts +35 -0
- package/build/sortForeignKeys.d.mts.map +1 -0
- package/build/sortForeignKeys.js +88 -117
- package/build/sortForeignKeys.js.map +1 -1
- package/build/symbols.cjs +226 -0
- package/build/symbols.cjs.map +1 -0
- package/build/symbols.d.cts +114 -0
- package/build/symbols.d.cts.map +1 -0
- package/build/symbols.d.mts +114 -0
- package/build/symbols.d.mts.map +1 -0
- package/build/symbols.js +115 -116
- package/build/symbols.js.map +1 -1
- package/build/tsdoc.cjs +22 -0
- package/build/tsdoc.cjs.map +1 -0
- package/build/tsdoc.d.cts +15 -0
- package/build/tsdoc.d.cts.map +1 -0
- package/build/tsdoc.d.mts +15 -0
- package/build/tsdoc.d.mts.map +1 -0
- package/build/tsdoc.js +18 -15
- package/build/tsdoc.js.map +1 -1
- package/build/utils.cjs +173 -0
- package/build/utils.cjs.map +1 -0
- package/build/utils.d.cts +34 -0
- package/build/utils.d.cts.map +1 -0
- package/build/utils.d.mts +34 -0
- package/build/utils.d.mts.map +1 -0
- package/build/utils.js +112 -166
- package/build/utils.js.map +1 -1
- package/build/write-json-schema.cjs +23 -0
- package/build/write-json-schema.cjs.map +1 -0
- package/build/write-json-schema.d.cts +1 -0
- package/build/write-json-schema.d.mts +1 -0
- package/build/write-json-schema.js +19 -13
- package/build/write-json-schema.js.map +1 -1
- package/package.json +28 -5
- package/build/EntityDbMetadata.d.ts +0 -271
- package/build/codemods/Codemod.d.ts +0 -13
- package/build/codemods/Codemod.js.map +0 -1
- package/build/codemods/JscodeshiftMod.d.ts +0 -10
- package/build/codemods/codemod_0001-rename_has_async_property.d.ts +0 -6
- package/build/codemods/codemod_0002-rename_async_query_fields.d.ts +0 -6
- package/build/codemods/codemod_0003-rename_find_paginated.d.ts +0 -6
- package/build/codemods/index.d.ts +0 -8
- package/build/config.d.ts +0 -178
- package/build/docs/cache.d.ts +0 -13
- package/build/docs/generate-metadata-docs.d.ts +0 -5
- package/build/docs/index.d.ts +0 -13
- package/build/docs/parsing.d.ts +0 -45
- package/build/findEntityScopes.d.ts +0 -10
- package/build/foreignKeyOrdering.d.ts +0 -2
- package/build/generate.d.ts +0 -11
- package/build/generateEntitiesFile.d.ts +0 -6
- package/build/generateEntityCodegenFile.d.ts +0 -11
- package/build/generateEntityFile.d.ts +0 -5
- package/build/generateEntityTestFile.d.ts +0 -5
- package/build/generateEnumFile.d.ts +0 -4
- package/build/generateFactoriesFiles.d.ts +0 -3
- package/build/generateMetadataFile.d.ts +0 -4
- package/build/generatePgEnumFile.d.ts +0 -4
- package/build/index.d.ts +0 -11
- package/build/inheritance.d.ts +0 -9
- package/build/keywords.d.ts +0 -1
- package/build/loadMetadata.d.ts +0 -25
- package/build/logger.d.ts +0 -9
- package/build/scanEntityFiles.d.ts +0 -4
- package/build/symbols.d.ts +0 -110
- package/build/tsdoc.d.ts +0 -11
- package/build/utils.d.ts +0 -30
- package/build/write-json-schema.d.ts +0 -1
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_utils = require("./utils.cjs");
|
|
3
|
+
const require_docs_generate_metadata_docs = require("./docs/generate-metadata-docs.cjs");
|
|
4
|
+
const require_docs_index = require("./docs/index.cjs");
|
|
5
|
+
const require_findEntityScopes = require("./findEntityScopes.cjs");
|
|
6
|
+
const require_generateEntitiesFile = require("./generateEntitiesFile.cjs");
|
|
7
|
+
const require_symbols = require("./symbols.cjs");
|
|
8
|
+
const require_generateEntityCodegenFile = require("./generateEntityCodegenFile.cjs");
|
|
9
|
+
const require_generateEntityFile = require("./generateEntityFile.cjs");
|
|
10
|
+
const require_generateEntityTestFile = require("./generateEntityTestFile.cjs");
|
|
11
|
+
const require_generateEnumFile = require("./generateEnumFile.cjs");
|
|
12
|
+
const require_generateFactoriesFiles = require("./generateFactoriesFiles.cjs");
|
|
13
|
+
const require_generateMetadataFile = require("./generateMetadataFile.cjs");
|
|
14
|
+
const require_generatePgEnumFile = require("./generatePgEnumFile.cjs");
|
|
15
|
+
require("./index.cjs");
|
|
16
|
+
let ts_poet = require("ts-poet");
|
|
17
|
+
let fs_promises = require("fs/promises");
|
|
18
|
+
//#region src/generate.ts
|
|
19
|
+
const runtimeRequire = (0, require("node:module").createRequire)(require("url").pathToFileURL(__filename).href);
|
|
20
|
+
/** Generates our `${Entity}` and `${Entity}Codegen` files based on the `db` schema. */
|
|
21
|
+
async function generateFiles(config, dbMeta) {
|
|
22
|
+
const { entities, enums, pgEnums } = dbMeta;
|
|
23
|
+
const entityNames = entities.map((meta) => meta.entity.name);
|
|
24
|
+
const files = await readExistingFiles(config);
|
|
25
|
+
if (config.docs) await require_docs_index.syncDocs(config.entitiesDirectory, entityNames);
|
|
26
|
+
const entityDocs = config.docs || config.outputDocs ? await require_docs_index.loadEntityDocs(config.entitiesDirectory, entityNames) : {};
|
|
27
|
+
const scopeMembersByEntity = await require_findEntityScopes.findAllEntityScopes(config, entities.map((meta) => meta.entity));
|
|
28
|
+
const entityFiles = entities.map((meta) => {
|
|
29
|
+
const entityName = meta.entity.name;
|
|
30
|
+
const hasEntityFile = files.includes(`${entityName}.ts`);
|
|
31
|
+
return [{
|
|
32
|
+
name: `./codegen/${entityName}Codegen.ts`,
|
|
33
|
+
contents: require_generateEntityCodegenFile.generateEntityCodegenFile(config, dbMeta, meta, scopeMembersByEntity[entityName] ?? [], config.docs ? entityDocs[entityName] : void 0),
|
|
34
|
+
overwrite: true
|
|
35
|
+
}, ...hasEntityFile ? [] : [{
|
|
36
|
+
name: `${entityName}.ts`,
|
|
37
|
+
contents: require_generateEntityFile.generateEntityFile(config, meta),
|
|
38
|
+
overwrite: false
|
|
39
|
+
}, {
|
|
40
|
+
name: `${entityName}.test.ts`,
|
|
41
|
+
contents: require_generateEntityTestFile.generateEntityTestFile(config, meta),
|
|
42
|
+
overwrite: false
|
|
43
|
+
}]];
|
|
44
|
+
}).reduce(require_utils.merge, []);
|
|
45
|
+
const enumFiles = Object.values(enums).map((enumData) => {
|
|
46
|
+
const enumName = require_utils.tableToEntityName(config, enumData.table);
|
|
47
|
+
return [{
|
|
48
|
+
name: `./enums/${enumName}.ts`,
|
|
49
|
+
contents: require_generateEnumFile.generateEnumFile(config, enumData, enumName),
|
|
50
|
+
overwrite: true
|
|
51
|
+
}];
|
|
52
|
+
}).reduce(require_utils.merge, []);
|
|
53
|
+
const pgEnumFiles = Object.values(pgEnums).map((enumData) => {
|
|
54
|
+
return [{
|
|
55
|
+
name: `./enums/${enumData.name}.ts`,
|
|
56
|
+
contents: require_generatePgEnumFile.generatePgEnumFile(config, enumData),
|
|
57
|
+
overwrite: true
|
|
58
|
+
}];
|
|
59
|
+
}).reduce(require_utils.merge, []);
|
|
60
|
+
const contextType = config.contextType ? (0, ts_poet.imp)(`t:${config.contextType}`) : "{}";
|
|
61
|
+
const txnType = config.transactionType ? (0, ts_poet.imp)(`t:${config.transactionType}`) : "unknown";
|
|
62
|
+
const maybeTagDelimiter = config.tagDelimiter === void 0 ? ts_poet.code`` : ts_poet.code`tagDelimiter: ${config.tagDelimiter === "" ? "undefined" : JSON.stringify(config.tagDelimiter)},`;
|
|
63
|
+
const metadataFile = {
|
|
64
|
+
name: "./codegen/metadata.ts",
|
|
65
|
+
contents: ts_poet.code`
|
|
66
|
+
${require_symbols.setRuntimeConfig}({
|
|
67
|
+
temporal: ${config.temporal ? { timeZone: typeof config.temporal === "boolean" ? "UTC" : config.temporal.timeZone } : "false"},
|
|
68
|
+
${maybeTagDelimiter}
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
export class ${(0, ts_poet.def)("EntityManager")} extends ${require_symbols.JoistEntityManager}<${contextType}, Entity, ${txnType}> {}
|
|
72
|
+
|
|
73
|
+
export interface ${(0, ts_poet.def)("Entity")} extends ${require_symbols.Entity} {
|
|
74
|
+
id: ${require_generateEntityCodegenFile.getIdType(config)};
|
|
75
|
+
em: EntityManager;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
${entities.map((meta) => require_generateMetadataFile.generateMetadataFile(config, dbMeta, meta))}
|
|
79
|
+
|
|
80
|
+
export const allMetadata = [${entities.map((meta) => meta.entity.metaName).join(", ")}];
|
|
81
|
+
${require_symbols.configureMetadata}(allMetadata);
|
|
82
|
+
`,
|
|
83
|
+
overwrite: true,
|
|
84
|
+
toStringOpts: { dprintOptions: { lineWidth: 400 } }
|
|
85
|
+
};
|
|
86
|
+
const enumsTables = Object.values(enums).map(({ table }) => table).sort((a, b) => a.name.localeCompare(b.name));
|
|
87
|
+
const entitiesFile = {
|
|
88
|
+
name: "./entities.ts",
|
|
89
|
+
contents: require_generateEntitiesFile.generateEntitiesFile(config, entities, enumsTables, Object.values(pgEnums)),
|
|
90
|
+
overwrite: true,
|
|
91
|
+
toStringOpts: { dprintOptions: { "module.sortExportDeclarations": "maintain" } }
|
|
92
|
+
};
|
|
93
|
+
const factoriesFiles = require_generateFactoriesFiles.generateFactoriesFiles(entities);
|
|
94
|
+
const esmExt = config.esm ? config.allowImportingTsExtensions ? ".ts" : ".js" : "";
|
|
95
|
+
const indexFile = {
|
|
96
|
+
name: "./index.ts",
|
|
97
|
+
contents: ts_poet.code`export * from "./entities${esmExt}"`,
|
|
98
|
+
overwrite: false
|
|
99
|
+
};
|
|
100
|
+
const pluginFiles = (await Promise.all((config.codegenPlugins ?? []).map((p) => {
|
|
101
|
+
return runtimeRequire(p).run(config, dbMeta);
|
|
102
|
+
}))).flat();
|
|
103
|
+
const docsFile = config.outputDocs ? require_docs_generate_metadata_docs.generateMetadataDocsFile(dbMeta, entityDocs) : void 0;
|
|
104
|
+
return [
|
|
105
|
+
...entityFiles,
|
|
106
|
+
...enumFiles,
|
|
107
|
+
...pgEnumFiles,
|
|
108
|
+
entitiesFile,
|
|
109
|
+
...factoriesFiles,
|
|
110
|
+
metadataFile,
|
|
111
|
+
...docsFile ? [docsFile] : [],
|
|
112
|
+
indexFile,
|
|
113
|
+
...pluginFiles
|
|
114
|
+
];
|
|
115
|
+
}
|
|
116
|
+
/** Reads the `entitiesDirectory` but just ignores if it doesn't exist yet. */
|
|
117
|
+
async function readExistingFiles(config) {
|
|
118
|
+
try {
|
|
119
|
+
return await (0, fs_promises.readdir)(config.entitiesDirectory);
|
|
120
|
+
} catch (e) {
|
|
121
|
+
return [];
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
//#endregion
|
|
125
|
+
exports.generateFiles = generateFiles;
|
|
126
|
+
|
|
127
|
+
//# sourceMappingURL=generate.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.cjs","names":["createRequire","syncDocs","loadEntityDocs","findAllEntityScopes","generateEntityCodegenFile","generateEntityFile","generateEntityTestFile","merge","tableToEntityName","generateEnumFile","generatePgEnumFile","imp","setRuntimeConfig","def","JoistEntityManager","Entity","getIdType","generateMetadataFile","configureMetadata","generateEntitiesFile","generateFactoriesFiles","generateMetadataDocsFile","readdir"],"sources":["../src/generate.ts"],"sourcesContent":["import { readdir } from \"fs/promises\";\nimport { createRequire } from \"node:module\";\n\nimport { type CodegenFile, code, def, imp } from \"ts-poet\";\n\nimport { generateMetadataDocsFile, loadEntityDocs, syncDocs } from \"./docs/index.ts\";\nimport { findAllEntityScopes } from \"./findEntityScopes.ts\";\nimport { generateEntitiesFile } from \"./generateEntitiesFile.ts\";\nimport { generateEntityCodegenFile, getIdType } from \"./generateEntityCodegenFile.ts\";\nimport { generateEntityFile } from \"./generateEntityFile.ts\";\nimport { generateEntityTestFile } from \"./generateEntityTestFile.ts\";\nimport { generateEnumFile } from \"./generateEnumFile.ts\";\nimport { generateFactoriesFiles } from \"./generateFactoriesFiles.ts\";\nimport { generateMetadataFile } from \"./generateMetadataFile.ts\";\nimport { generatePgEnumFile } from \"./generatePgEnumFile.ts\";\nimport { type Config, type DbMetadata } from \"./index.ts\";\nimport { Entity, JoistEntityManager, configureMetadata, setRuntimeConfig } from \"./symbols.ts\";\nimport { merge, tableToEntityName } from \"./utils.ts\";\n\nconst runtimeRequire = createRequire(import.meta.url);\n\nexport type DPrintOptions = Record<string, unknown>;\n\n/**\n * Provides an API for hooking into the codegen build step.\n */\nexport interface CodegenPlugin {\n run(config: Config, dbMeta: DbMetadata): Promise<CodegenFile>;\n}\n\n/** Generates our `${Entity}` and `${Entity}Codegen` files based on the `db` schema. */\nexport async function generateFiles(config: Config, dbMeta: DbMetadata): Promise<CodegenFile[]> {\n const { entities, enums, pgEnums } = dbMeta;\n const entityNames = entities.map((meta) => meta.entity.name);\n\n // Find existing entities so that, besides just using `overwrite: false`, we can completely\n // skip making test files except for the _first_ time we create an entity. This achieves\n // `.history`-like \"create once\" behavior without the need for the `.history` file.\n const files = await readExistingFiles(config);\n\n // Sync documentation: backfill .md from existing JSDocs, then sync MD -> JSDoc\n if (config.docs) {\n await syncDocs(config.entitiesDirectory, entityNames);\n }\n\n // Load the .md docs once (post-sync) to inject into codegen JSDocs and the runtime metadata-docs.ts\n const entityDocs =\n config.docs || config.outputDocs ? await loadEntityDocs(config.entitiesDirectory, entityNames) : {};\n\n const scopeMembersByEntity = await findAllEntityScopes(\n config,\n entities.map((meta) => meta.entity),\n );\n\n const entityFiles = entities\n .map((meta) => {\n const entityName = meta.entity.name;\n const hasEntityFile = files.includes(`${entityName}.ts`);\n return [\n {\n name: `./codegen/${entityName}Codegen.ts`,\n contents: generateEntityCodegenFile(\n config,\n dbMeta,\n meta,\n scopeMembersByEntity[entityName] ?? [],\n config.docs ? entityDocs[entityName] : undefined,\n ),\n overwrite: true,\n },\n ...(hasEntityFile\n ? []\n : [\n { name: `${entityName}.ts`, contents: generateEntityFile(config, meta), overwrite: false },\n { name: `${entityName}.test.ts`, contents: generateEntityTestFile(config, meta), overwrite: false },\n ]),\n ];\n })\n .reduce(merge, []);\n\n const enumFiles = Object.values(enums)\n .map((enumData) => {\n const enumName = tableToEntityName(config, enumData.table);\n return [\n {\n name: `./enums/${enumName}.ts`,\n contents: generateEnumFile(config, enumData, enumName),\n overwrite: true,\n },\n ];\n })\n .reduce(merge, []);\n const pgEnumFiles = Object.values(pgEnums)\n .map((enumData) => {\n return [\n {\n name: `./enums/${enumData.name}.ts`,\n contents: generatePgEnumFile(config, enumData),\n overwrite: true,\n },\n ];\n })\n .reduce(merge, []);\n\n const contextType = config.contextType ? imp(`t:${config.contextType}`) : \"{}\";\n const txnType = config.transactionType ? imp(`t:${config.transactionType}`) : \"unknown\";\n const maybeTagDelimiter =\n config.tagDelimiter === undefined\n ? code``\n : code`tagDelimiter: ${config.tagDelimiter === \"\" ? \"undefined\" : JSON.stringify(config.tagDelimiter)},`;\n\n const metadataFile: CodegenFile = {\n name: \"./codegen/metadata.ts\",\n contents: code`\n ${setRuntimeConfig}({\n temporal: ${config.temporal ? { timeZone: typeof config.temporal === \"boolean\" ? \"UTC\" : config.temporal.timeZone } : \"false\"},\n ${maybeTagDelimiter}\n });\n \n export class ${def(\"EntityManager\")} extends ${JoistEntityManager}<${contextType}, Entity, ${txnType}> {}\n\n export interface ${def(\"Entity\")} extends ${Entity} {\n id: ${getIdType(config)};\n em: EntityManager;\n }\n\n ${entities.map((meta) => generateMetadataFile(config, dbMeta, meta))}\n\n export const allMetadata = [${entities.map((meta) => meta.entity.metaName).join(\", \")}];\n ${configureMetadata}(allMetadata);\n `,\n overwrite: true,\n toStringOpts: { dprintOptions: { lineWidth: 400 } },\n };\n\n const enumsTables = Object.values(enums)\n .map(({ table }) => table)\n .sort((a, b) => a.name.localeCompare(b.name));\n\n const entitiesFile: CodegenFile = {\n name: \"./entities.ts\",\n contents: generateEntitiesFile(config, entities, enumsTables, Object.values(pgEnums)),\n overwrite: true,\n toStringOpts: { dprintOptions: { \"module.sortExportDeclarations\": \"maintain\" } },\n };\n\n const factoriesFiles: CodegenFile[] = generateFactoriesFiles(entities);\n\n const esmExt = config.esm ? (config.allowImportingTsExtensions ? \".ts\" : \".js\") : \"\";\n const indexFile: CodegenFile = {\n name: \"./index.ts\",\n contents: code`export * from \"./entities${esmExt}\"`,\n overwrite: false,\n };\n\n // Look for modules to require and call the exported `.run(Config, DbMeta)` method\n const pluginFiles: CodegenFile[] = (\n await Promise.all(\n (config.codegenPlugins ?? []).map((p) => {\n const plugin = runtimeRequire(p) as CodegenPlugin;\n return plugin.run(config, dbMeta);\n }),\n )\n ).flat();\n\n // Generate metadata-docs.ts if enabled\n const docsFile = config.outputDocs ? generateMetadataDocsFile(dbMeta, entityDocs) : undefined;\n\n return [\n ...entityFiles,\n ...enumFiles,\n ...pgEnumFiles,\n entitiesFile,\n ...factoriesFiles,\n metadataFile,\n ...(docsFile ? [docsFile] : []),\n indexFile,\n ...pluginFiles,\n ];\n}\n\n/** Reads the `entitiesDirectory` but just ignores if it doesn't exist yet. */\nasync function readExistingFiles(config: Config): Promise<string[]> {\n try {\n return await readdir(config.entitiesDirectory);\n } catch (e) {\n return [];\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Config } from "./config.cjs";
|
|
2
|
+
import "./index.cjs";
|
|
3
|
+
import { DbMetadata } from "./EntityDbMetadata.cjs";
|
|
4
|
+
import { CodegenFile } from "ts-poet";
|
|
5
|
+
//#region src/generate.d.ts
|
|
6
|
+
type DPrintOptions = Record<string, unknown>;
|
|
7
|
+
/**
|
|
8
|
+
* Provides an API for hooking into the codegen build step.
|
|
9
|
+
*/
|
|
10
|
+
interface CodegenPlugin {
|
|
11
|
+
run(config: Config, dbMeta: DbMetadata): Promise<CodegenFile>;
|
|
12
|
+
}
|
|
13
|
+
/** Generates our `${Entity}` and `${Entity}Codegen` files based on the `db` schema. */
|
|
14
|
+
declare function generateFiles(config: Config, dbMeta: DbMetadata): Promise<CodegenFile[]>;
|
|
15
|
+
//#endregion
|
|
16
|
+
export { CodegenPlugin, DPrintOptions, generateFiles };
|
|
17
|
+
//# sourceMappingURL=generate.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.cts","names":[],"sources":["../src/generate.ts"],"mappings":";;;;;KAqBY,gBAAgB;;;;UAKX;EACf,IAAI,QAAQ,QAAQ,QAAQ,aAAa,QAAQ;;;iBAI7B,cAAc,QAAQ,QAAQ,QAAQ,aAAa,QAAQ"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Config } from "./config.mjs";
|
|
2
|
+
import "./index.mjs";
|
|
3
|
+
import { DbMetadata } from "./EntityDbMetadata.mjs";
|
|
4
|
+
import { CodegenFile } from "ts-poet";
|
|
5
|
+
//#region src/generate.d.ts
|
|
6
|
+
type DPrintOptions = Record<string, unknown>;
|
|
7
|
+
/**
|
|
8
|
+
* Provides an API for hooking into the codegen build step.
|
|
9
|
+
*/
|
|
10
|
+
interface CodegenPlugin {
|
|
11
|
+
run(config: Config, dbMeta: DbMetadata): Promise<CodegenFile>;
|
|
12
|
+
}
|
|
13
|
+
/** Generates our `${Entity}` and `${Entity}Codegen` files based on the `db` schema. */
|
|
14
|
+
declare function generateFiles(config: Config, dbMeta: DbMetadata): Promise<CodegenFile[]>;
|
|
15
|
+
//#endregion
|
|
16
|
+
export { CodegenPlugin, DPrintOptions, generateFiles };
|
|
17
|
+
//# sourceMappingURL=generate.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.mts","names":[],"sources":["../src/generate.ts"],"mappings":";;;;;KAqBY,gBAAgB;;;;UAKX;EACf,IAAI,QAAQ,QAAQ,QAAQ,aAAa,QAAQ;;;iBAI7B,cAAc,QAAQ,QAAQ,QAAQ,aAAa,QAAQ"}
|
package/build/generate.js
CHANGED
|
@@ -1,147 +1,127 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
1
|
+
import { merge, tableToEntityName } from "./utils.js";
|
|
2
|
+
import { generateMetadataDocsFile } from "./docs/generate-metadata-docs.js";
|
|
3
|
+
import { loadEntityDocs, syncDocs } from "./docs/index.js";
|
|
4
|
+
import { findAllEntityScopes } from "./findEntityScopes.js";
|
|
5
|
+
import { generateEntitiesFile } from "./generateEntitiesFile.js";
|
|
6
|
+
import { Entity, JoistEntityManager, configureMetadata, setRuntimeConfig } from "./symbols.js";
|
|
7
|
+
import { generateEntityCodegenFile, getIdType } from "./generateEntityCodegenFile.js";
|
|
8
|
+
import { generateEntityFile } from "./generateEntityFile.js";
|
|
9
|
+
import { generateEntityTestFile } from "./generateEntityTestFile.js";
|
|
10
|
+
import { generateEnumFile } from "./generateEnumFile.js";
|
|
11
|
+
import { generateFactoriesFiles } from "./generateFactoriesFiles.js";
|
|
12
|
+
import { generateMetadataFile } from "./generateMetadataFile.js";
|
|
13
|
+
import { generatePgEnumFile } from "./generatePgEnumFile.js";
|
|
14
|
+
import "./index.js";
|
|
15
|
+
import { createRequire } from "node:module";
|
|
16
|
+
import { code, def, imp } from "ts-poet";
|
|
17
|
+
import { readdir } from "fs/promises";
|
|
18
|
+
//#region src/generate.ts
|
|
19
|
+
const runtimeRequire = createRequire(import.meta.url);
|
|
18
20
|
/** Generates our `${Entity}` and `${Entity}Codegen` files based on the `db` schema. */
|
|
19
21
|
async function generateFiles(config, dbMeta) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
.map((enumData) => {
|
|
66
|
-
return [
|
|
67
|
-
{
|
|
68
|
-
name: `./enums/${enumData.name}.ts`,
|
|
69
|
-
contents: (0, generatePgEnumFile_1.generatePgEnumFile)(config, enumData),
|
|
70
|
-
overwrite: true,
|
|
71
|
-
},
|
|
72
|
-
];
|
|
73
|
-
})
|
|
74
|
-
.reduce(utils_1.merge, []);
|
|
75
|
-
const contextType = config.contextType ? (0, ts_poet_1.imp)(`t:${config.contextType}`) : "{}";
|
|
76
|
-
const txnType = config.transactionType ? (0, ts_poet_1.imp)(`t:${config.transactionType}`) : "unknown";
|
|
77
|
-
const maybeTagDelimiter = config.tagDelimiter === undefined
|
|
78
|
-
? (0, ts_poet_1.code) ``
|
|
79
|
-
: (0, ts_poet_1.code) `tagDelimiter: ${config.tagDelimiter === "" ? "undefined" : JSON.stringify(config.tagDelimiter)},`;
|
|
80
|
-
const metadataFile = {
|
|
81
|
-
name: "./codegen/metadata.ts",
|
|
82
|
-
contents: (0, ts_poet_1.code) `
|
|
83
|
-
${symbols_1.setRuntimeConfig}({
|
|
22
|
+
const { entities, enums, pgEnums } = dbMeta;
|
|
23
|
+
const entityNames = entities.map((meta) => meta.entity.name);
|
|
24
|
+
const files = await readExistingFiles(config);
|
|
25
|
+
if (config.docs) await syncDocs(config.entitiesDirectory, entityNames);
|
|
26
|
+
const entityDocs = config.docs || config.outputDocs ? await loadEntityDocs(config.entitiesDirectory, entityNames) : {};
|
|
27
|
+
const scopeMembersByEntity = await findAllEntityScopes(config, entities.map((meta) => meta.entity));
|
|
28
|
+
const entityFiles = entities.map((meta) => {
|
|
29
|
+
const entityName = meta.entity.name;
|
|
30
|
+
const hasEntityFile = files.includes(`${entityName}.ts`);
|
|
31
|
+
return [{
|
|
32
|
+
name: `./codegen/${entityName}Codegen.ts`,
|
|
33
|
+
contents: generateEntityCodegenFile(config, dbMeta, meta, scopeMembersByEntity[entityName] ?? [], config.docs ? entityDocs[entityName] : void 0),
|
|
34
|
+
overwrite: true
|
|
35
|
+
}, ...hasEntityFile ? [] : [{
|
|
36
|
+
name: `${entityName}.ts`,
|
|
37
|
+
contents: generateEntityFile(config, meta),
|
|
38
|
+
overwrite: false
|
|
39
|
+
}, {
|
|
40
|
+
name: `${entityName}.test.ts`,
|
|
41
|
+
contents: generateEntityTestFile(config, meta),
|
|
42
|
+
overwrite: false
|
|
43
|
+
}]];
|
|
44
|
+
}).reduce(merge, []);
|
|
45
|
+
const enumFiles = Object.values(enums).map((enumData) => {
|
|
46
|
+
const enumName = tableToEntityName(config, enumData.table);
|
|
47
|
+
return [{
|
|
48
|
+
name: `./enums/${enumName}.ts`,
|
|
49
|
+
contents: generateEnumFile(config, enumData, enumName),
|
|
50
|
+
overwrite: true
|
|
51
|
+
}];
|
|
52
|
+
}).reduce(merge, []);
|
|
53
|
+
const pgEnumFiles = Object.values(pgEnums).map((enumData) => {
|
|
54
|
+
return [{
|
|
55
|
+
name: `./enums/${enumData.name}.ts`,
|
|
56
|
+
contents: generatePgEnumFile(config, enumData),
|
|
57
|
+
overwrite: true
|
|
58
|
+
}];
|
|
59
|
+
}).reduce(merge, []);
|
|
60
|
+
const contextType = config.contextType ? imp(`t:${config.contextType}`) : "{}";
|
|
61
|
+
const txnType = config.transactionType ? imp(`t:${config.transactionType}`) : "unknown";
|
|
62
|
+
const maybeTagDelimiter = config.tagDelimiter === void 0 ? code`` : code`tagDelimiter: ${config.tagDelimiter === "" ? "undefined" : JSON.stringify(config.tagDelimiter)},`;
|
|
63
|
+
const metadataFile = {
|
|
64
|
+
name: "./codegen/metadata.ts",
|
|
65
|
+
contents: code`
|
|
66
|
+
${setRuntimeConfig}({
|
|
84
67
|
temporal: ${config.temporal ? { timeZone: typeof config.temporal === "boolean" ? "UTC" : config.temporal.timeZone } : "false"},
|
|
85
68
|
${maybeTagDelimiter}
|
|
86
69
|
});
|
|
87
70
|
|
|
88
|
-
export class ${
|
|
71
|
+
export class ${def("EntityManager")} extends ${JoistEntityManager}<${contextType}, Entity, ${txnType}> {}
|
|
89
72
|
|
|
90
|
-
export interface ${
|
|
91
|
-
id: ${
|
|
73
|
+
export interface ${def("Entity")} extends ${Entity} {
|
|
74
|
+
id: ${getIdType(config)};
|
|
92
75
|
em: EntityManager;
|
|
93
76
|
}
|
|
94
77
|
|
|
95
|
-
${entities.map((meta) =>
|
|
78
|
+
${entities.map((meta) => generateMetadataFile(config, dbMeta, meta))}
|
|
96
79
|
|
|
97
80
|
export const allMetadata = [${entities.map((meta) => meta.entity.metaName).join(", ")}];
|
|
98
|
-
${
|
|
81
|
+
${configureMetadata}(allMetadata);
|
|
99
82
|
`,
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
metadataFile,
|
|
133
|
-
...(docsFile ? [docsFile] : []),
|
|
134
|
-
indexFile,
|
|
135
|
-
...pluginFiles,
|
|
136
|
-
];
|
|
83
|
+
overwrite: true,
|
|
84
|
+
toStringOpts: { dprintOptions: { lineWidth: 400 } }
|
|
85
|
+
};
|
|
86
|
+
const enumsTables = Object.values(enums).map(({ table }) => table).sort((a, b) => a.name.localeCompare(b.name));
|
|
87
|
+
const entitiesFile = {
|
|
88
|
+
name: "./entities.ts",
|
|
89
|
+
contents: generateEntitiesFile(config, entities, enumsTables, Object.values(pgEnums)),
|
|
90
|
+
overwrite: true,
|
|
91
|
+
toStringOpts: { dprintOptions: { "module.sortExportDeclarations": "maintain" } }
|
|
92
|
+
};
|
|
93
|
+
const factoriesFiles = generateFactoriesFiles(entities);
|
|
94
|
+
const esmExt = config.esm ? config.allowImportingTsExtensions ? ".ts" : ".js" : "";
|
|
95
|
+
const indexFile = {
|
|
96
|
+
name: "./index.ts",
|
|
97
|
+
contents: code`export * from "./entities${esmExt}"`,
|
|
98
|
+
overwrite: false
|
|
99
|
+
};
|
|
100
|
+
const pluginFiles = (await Promise.all((config.codegenPlugins ?? []).map((p) => {
|
|
101
|
+
return runtimeRequire(p).run(config, dbMeta);
|
|
102
|
+
}))).flat();
|
|
103
|
+
const docsFile = config.outputDocs ? generateMetadataDocsFile(dbMeta, entityDocs) : void 0;
|
|
104
|
+
return [
|
|
105
|
+
...entityFiles,
|
|
106
|
+
...enumFiles,
|
|
107
|
+
...pgEnumFiles,
|
|
108
|
+
entitiesFile,
|
|
109
|
+
...factoriesFiles,
|
|
110
|
+
metadataFile,
|
|
111
|
+
...docsFile ? [docsFile] : [],
|
|
112
|
+
indexFile,
|
|
113
|
+
...pluginFiles
|
|
114
|
+
];
|
|
137
115
|
}
|
|
138
116
|
/** Reads the `entitiesDirectory` but just ignores if it doesn't exist yet. */
|
|
139
117
|
async function readExistingFiles(config) {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
}
|
|
118
|
+
try {
|
|
119
|
+
return await readdir(config.entitiesDirectory);
|
|
120
|
+
} catch (e) {
|
|
121
|
+
return [];
|
|
122
|
+
}
|
|
146
123
|
}
|
|
124
|
+
//#endregion
|
|
125
|
+
export { generateFiles };
|
|
126
|
+
|
|
147
127
|
//# sourceMappingURL=generate.js.map
|
package/build/generate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","
|
|
1
|
+
{"version":3,"file":"generate.js","names":[],"sources":["../src/generate.ts"],"sourcesContent":["import { readdir } from \"fs/promises\";\nimport { createRequire } from \"node:module\";\n\nimport { type CodegenFile, code, def, imp } from \"ts-poet\";\n\nimport { generateMetadataDocsFile, loadEntityDocs, syncDocs } from \"./docs/index.ts\";\nimport { findAllEntityScopes } from \"./findEntityScopes.ts\";\nimport { generateEntitiesFile } from \"./generateEntitiesFile.ts\";\nimport { generateEntityCodegenFile, getIdType } from \"./generateEntityCodegenFile.ts\";\nimport { generateEntityFile } from \"./generateEntityFile.ts\";\nimport { generateEntityTestFile } from \"./generateEntityTestFile.ts\";\nimport { generateEnumFile } from \"./generateEnumFile.ts\";\nimport { generateFactoriesFiles } from \"./generateFactoriesFiles.ts\";\nimport { generateMetadataFile } from \"./generateMetadataFile.ts\";\nimport { generatePgEnumFile } from \"./generatePgEnumFile.ts\";\nimport { type Config, type DbMetadata } from \"./index.ts\";\nimport { Entity, JoistEntityManager, configureMetadata, setRuntimeConfig } from \"./symbols.ts\";\nimport { merge, tableToEntityName } from \"./utils.ts\";\n\nconst runtimeRequire = createRequire(import.meta.url);\n\nexport type DPrintOptions = Record<string, unknown>;\n\n/**\n * Provides an API for hooking into the codegen build step.\n */\nexport interface CodegenPlugin {\n run(config: Config, dbMeta: DbMetadata): Promise<CodegenFile>;\n}\n\n/** Generates our `${Entity}` and `${Entity}Codegen` files based on the `db` schema. */\nexport async function generateFiles(config: Config, dbMeta: DbMetadata): Promise<CodegenFile[]> {\n const { entities, enums, pgEnums } = dbMeta;\n const entityNames = entities.map((meta) => meta.entity.name);\n\n // Find existing entities so that, besides just using `overwrite: false`, we can completely\n // skip making test files except for the _first_ time we create an entity. This achieves\n // `.history`-like \"create once\" behavior without the need for the `.history` file.\n const files = await readExistingFiles(config);\n\n // Sync documentation: backfill .md from existing JSDocs, then sync MD -> JSDoc\n if (config.docs) {\n await syncDocs(config.entitiesDirectory, entityNames);\n }\n\n // Load the .md docs once (post-sync) to inject into codegen JSDocs and the runtime metadata-docs.ts\n const entityDocs =\n config.docs || config.outputDocs ? await loadEntityDocs(config.entitiesDirectory, entityNames) : {};\n\n const scopeMembersByEntity = await findAllEntityScopes(\n config,\n entities.map((meta) => meta.entity),\n );\n\n const entityFiles = entities\n .map((meta) => {\n const entityName = meta.entity.name;\n const hasEntityFile = files.includes(`${entityName}.ts`);\n return [\n {\n name: `./codegen/${entityName}Codegen.ts`,\n contents: generateEntityCodegenFile(\n config,\n dbMeta,\n meta,\n scopeMembersByEntity[entityName] ?? [],\n config.docs ? entityDocs[entityName] : undefined,\n ),\n overwrite: true,\n },\n ...(hasEntityFile\n ? []\n : [\n { name: `${entityName}.ts`, contents: generateEntityFile(config, meta), overwrite: false },\n { name: `${entityName}.test.ts`, contents: generateEntityTestFile(config, meta), overwrite: false },\n ]),\n ];\n })\n .reduce(merge, []);\n\n const enumFiles = Object.values(enums)\n .map((enumData) => {\n const enumName = tableToEntityName(config, enumData.table);\n return [\n {\n name: `./enums/${enumName}.ts`,\n contents: generateEnumFile(config, enumData, enumName),\n overwrite: true,\n },\n ];\n })\n .reduce(merge, []);\n const pgEnumFiles = Object.values(pgEnums)\n .map((enumData) => {\n return [\n {\n name: `./enums/${enumData.name}.ts`,\n contents: generatePgEnumFile(config, enumData),\n overwrite: true,\n },\n ];\n })\n .reduce(merge, []);\n\n const contextType = config.contextType ? imp(`t:${config.contextType}`) : \"{}\";\n const txnType = config.transactionType ? imp(`t:${config.transactionType}`) : \"unknown\";\n const maybeTagDelimiter =\n config.tagDelimiter === undefined\n ? code``\n : code`tagDelimiter: ${config.tagDelimiter === \"\" ? \"undefined\" : JSON.stringify(config.tagDelimiter)},`;\n\n const metadataFile: CodegenFile = {\n name: \"./codegen/metadata.ts\",\n contents: code`\n ${setRuntimeConfig}({\n temporal: ${config.temporal ? { timeZone: typeof config.temporal === \"boolean\" ? \"UTC\" : config.temporal.timeZone } : \"false\"},\n ${maybeTagDelimiter}\n });\n \n export class ${def(\"EntityManager\")} extends ${JoistEntityManager}<${contextType}, Entity, ${txnType}> {}\n\n export interface ${def(\"Entity\")} extends ${Entity} {\n id: ${getIdType(config)};\n em: EntityManager;\n }\n\n ${entities.map((meta) => generateMetadataFile(config, dbMeta, meta))}\n\n export const allMetadata = [${entities.map((meta) => meta.entity.metaName).join(\", \")}];\n ${configureMetadata}(allMetadata);\n `,\n overwrite: true,\n toStringOpts: { dprintOptions: { lineWidth: 400 } },\n };\n\n const enumsTables = Object.values(enums)\n .map(({ table }) => table)\n .sort((a, b) => a.name.localeCompare(b.name));\n\n const entitiesFile: CodegenFile = {\n name: \"./entities.ts\",\n contents: generateEntitiesFile(config, entities, enumsTables, Object.values(pgEnums)),\n overwrite: true,\n toStringOpts: { dprintOptions: { \"module.sortExportDeclarations\": \"maintain\" } },\n };\n\n const factoriesFiles: CodegenFile[] = generateFactoriesFiles(entities);\n\n const esmExt = config.esm ? (config.allowImportingTsExtensions ? \".ts\" : \".js\") : \"\";\n const indexFile: CodegenFile = {\n name: \"./index.ts\",\n contents: code`export * from \"./entities${esmExt}\"`,\n overwrite: false,\n };\n\n // Look for modules to require and call the exported `.run(Config, DbMeta)` method\n const pluginFiles: CodegenFile[] = (\n await Promise.all(\n (config.codegenPlugins ?? []).map((p) => {\n const plugin = runtimeRequire(p) as CodegenPlugin;\n return plugin.run(config, dbMeta);\n }),\n )\n ).flat();\n\n // Generate metadata-docs.ts if enabled\n const docsFile = config.outputDocs ? generateMetadataDocsFile(dbMeta, entityDocs) : undefined;\n\n return [\n ...entityFiles,\n ...enumFiles,\n ...pgEnumFiles,\n entitiesFile,\n ...factoriesFiles,\n metadataFile,\n ...(docsFile ? [docsFile] : []),\n indexFile,\n ...pluginFiles,\n ];\n}\n\n/** Reads the `entitiesDirectory` but just ignores if it doesn't exist yet. */\nasync function readExistingFiles(config: Config): Promise<string[]> {\n try {\n return await readdir(config.entitiesDirectory);\n } catch (e) {\n return [];\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_utils = require("./utils.cjs");
|
|
3
|
+
require("./config.cjs");
|
|
4
|
+
require("./index.cjs");
|
|
5
|
+
require("./EntityDbMetadata.cjs");
|
|
6
|
+
require("pg-structure");
|
|
7
|
+
let ts_poet = require("ts-poet");
|
|
8
|
+
//#region src/generateEntitiesFile.ts
|
|
9
|
+
function generateEntitiesFile(config, entities, enums, pgEnums) {
|
|
10
|
+
const baseClasses = entities.filter((e) => e.baseClassName === void 0);
|
|
11
|
+
const subClasses = entities.filter((e) => e.baseClassName !== void 0);
|
|
12
|
+
const esmExt = config.esm ? config.allowImportingTsExtensions ? ".ts" : ".js" : "";
|
|
13
|
+
return ts_poet.code`
|
|
14
|
+
// organize-imports-ignore
|
|
15
|
+
|
|
16
|
+
// This file drives our import order to avoid undefined errors
|
|
17
|
+
// when the subclasses extend the base classes, see:
|
|
18
|
+
// https://medium.com/visual-development/how-to-fix-nasty-circular-dependency-issues-once-and-for-all-in-javascript-typescript-a04c987cf0de
|
|
19
|
+
${enums.map((table) => {
|
|
20
|
+
return `export * from "./enums/${require_utils.tableToEntityName(config, table)}${esmExt}";`;
|
|
21
|
+
})}
|
|
22
|
+
${pgEnums.map((meta) => {
|
|
23
|
+
return `export * from "./enums/${meta.name}${esmExt}";`;
|
|
24
|
+
})}
|
|
25
|
+
${baseClasses.map((meta) => {
|
|
26
|
+
return `export * from "./codegen/${meta.entity.name}Codegen${esmExt}";`;
|
|
27
|
+
})}
|
|
28
|
+
${baseClasses.map((meta) => {
|
|
29
|
+
return `export * from "./${meta.entity.name}${esmExt}";`;
|
|
30
|
+
})}
|
|
31
|
+
${subClasses.map((meta) => {
|
|
32
|
+
return `export * from "./codegen/${meta.entity.name}Codegen${esmExt}";`;
|
|
33
|
+
})}
|
|
34
|
+
${subClasses.map((meta) => {
|
|
35
|
+
return `export * from "./${meta.entity.name}${esmExt}";`;
|
|
36
|
+
})}
|
|
37
|
+
${entities.map(({ entity }) => {
|
|
38
|
+
return `export * from "./factories/new${entity.name}${esmExt}";`;
|
|
39
|
+
})}
|
|
40
|
+
export * from "./codegen/metadata${esmExt}";
|
|
41
|
+
`;
|
|
42
|
+
}
|
|
43
|
+
//#endregion
|
|
44
|
+
exports.generateEntitiesFile = generateEntitiesFile;
|
|
45
|
+
|
|
46
|
+
//# sourceMappingURL=generateEntitiesFile.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateEntitiesFile.cjs","names":["tableToEntityName"],"sources":["../src/generateEntitiesFile.ts"],"sourcesContent":["import { type Table } from \"pg-structure\";\nimport { type Code, code } from \"ts-poet\";\n\nimport { type Config } from \"./config.ts\";\nimport { type EntityDbMetadata } from \"./EntityDbMetadata.ts\";\nimport { type PgEnumData } from \"./index.ts\";\nimport { tableToEntityName } from \"./utils.ts\";\n\nexport function generateEntitiesFile(\n config: Config,\n entities: EntityDbMetadata[],\n enums: Table[],\n pgEnums: PgEnumData[],\n): Code {\n // Output base types before subtypes, so that `class SmallPublisherCodegen extends Publisher` can\n // immediately resolve the `Publisher` symbol. Assume only 1 level of inheritance for now.\n const baseClasses = entities.filter((e) => e.baseClassName === undefined);\n const subClasses = entities.filter((e) => e.baseClassName !== undefined);\n\n const esmExt = config.esm ? (config.allowImportingTsExtensions ? \".ts\" : \".js\") : \"\";\n\n return code`\n // organize-imports-ignore\n\n // This file drives our import order to avoid undefined errors\n // when the subclasses extend the base classes, see:\n // https://medium.com/visual-development/how-to-fix-nasty-circular-dependency-issues-once-and-for-all-in-javascript-typescript-a04c987cf0de\n ${enums.map((table) => {\n return `export * from \"./enums/${tableToEntityName(config, table)}${esmExt}\";`;\n })}\n ${pgEnums.map((meta) => {\n return `export * from \"./enums/${meta.name}${esmExt}\";`;\n })}\n ${baseClasses.map((meta) => {\n return `export * from \"./codegen/${meta.entity.name}Codegen${esmExt}\";`;\n })}\n ${baseClasses.map((meta) => {\n return `export * from \"./${meta.entity.name}${esmExt}\";`;\n })}\n ${subClasses.map((meta) => {\n return `export * from \"./codegen/${meta.entity.name}Codegen${esmExt}\";`;\n })}\n ${subClasses.map((meta) => {\n return `export * from \"./${meta.entity.name}${esmExt}\";`;\n })}\n ${entities.map(({ entity }) => {\n return `export * from \"./factories/new${entity.name}${esmExt}\";`;\n })}\n export * from \"./codegen/metadata${esmExt}\";\n `;\n}\n"],"mappings":";;;;;;;;AAQA,SAAgB,qBACd,QACA,UACA,OACA,SACM;CAGN,MAAM,cAAc,SAAS,QAAQ,MAAM,EAAE,kBAAkB,KAAA,CAAS;CACxE,MAAM,aAAa,SAAS,QAAQ,MAAM,EAAE,kBAAkB,KAAA,CAAS;CAEvE,MAAM,SAAS,OAAO,MAAO,OAAO,6BAA6B,QAAQ,QAAS;CAElF,OAAO,QAAA,IAAI;;;;;;MAMP,MAAM,KAAK,UAAU;EACrB,OAAO,0BAA0BA,cAAAA,kBAAkB,QAAQ,KAAK,IAAI,OAAO;CAC7E,CAAC,EAAE;MACD,QAAQ,KAAK,SAAS;EACtB,OAAO,0BAA0B,KAAK,OAAO,OAAO;CACtD,CAAC,EAAE;MACD,YAAY,KAAK,SAAS;EAC1B,OAAO,4BAA4B,KAAK,OAAO,KAAK,SAAS,OAAO;CACtE,CAAC,EAAE;MACD,YAAY,KAAK,SAAS;EAC1B,OAAO,oBAAoB,KAAK,OAAO,OAAO,OAAO;CACvD,CAAC,EAAE;MACD,WAAW,KAAK,SAAS;EACzB,OAAO,4BAA4B,KAAK,OAAO,KAAK,SAAS,OAAO;CACtE,CAAC,EAAE;MACD,WAAW,KAAK,SAAS;EACzB,OAAO,oBAAoB,KAAK,OAAO,OAAO,OAAO;CACvD,CAAC,EAAE;MACD,SAAS,KAAK,EAAE,aAAa;EAC7B,OAAO,iCAAiC,OAAO,OAAO,OAAO;CAC/D,CAAC,EAAE;uCACgC,OAAO;;AAE9C"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Config } from "./config.cjs";
|
|
2
|
+
import "./index.cjs";
|
|
3
|
+
import { PgEnumData } from "./loadMetadata.cjs";
|
|
4
|
+
import { EntityDbMetadata } from "./EntityDbMetadata.cjs";
|
|
5
|
+
import { Table } from "pg-structure";
|
|
6
|
+
import { Code } from "ts-poet";
|
|
7
|
+
//#region src/generateEntitiesFile.d.ts
|
|
8
|
+
declare function generateEntitiesFile(config: Config, entities: EntityDbMetadata[], enums: Table[], pgEnums: PgEnumData[]): Code;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { generateEntitiesFile };
|
|
11
|
+
//# sourceMappingURL=generateEntitiesFile.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateEntitiesFile.d.cts","names":[],"sources":["../src/generateEntitiesFile.ts"],"mappings":";;;;;;;iBAQgB,qBACd,QAAQ,QACR,UAAU,oBACV,OAAO,SACP,SAAS,eACR"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Config } from "./config.mjs";
|
|
2
|
+
import "./index.mjs";
|
|
3
|
+
import { PgEnumData } from "./loadMetadata.mjs";
|
|
4
|
+
import { EntityDbMetadata } from "./EntityDbMetadata.mjs";
|
|
5
|
+
import { Table } from "pg-structure";
|
|
6
|
+
import { Code } from "ts-poet";
|
|
7
|
+
//#region src/generateEntitiesFile.d.ts
|
|
8
|
+
declare function generateEntitiesFile(config: Config, entities: EntityDbMetadata[], enums: Table[], pgEnums: PgEnumData[]): Code;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { generateEntitiesFile };
|
|
11
|
+
//# sourceMappingURL=generateEntitiesFile.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateEntitiesFile.d.mts","names":[],"sources":["../src/generateEntitiesFile.ts"],"mappings":";;;;;;;iBAQgB,qBACd,QAAQ,QACR,UAAU,oBACV,OAAO,SACP,SAAS,eACR"}
|