joist-codegen 2.3.0-next.9 → 2.3.0-next.91
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 +642 -0
- package/build/EntityDbMetadata.cjs.map +1 -0
- package/build/EntityDbMetadata.d.cts +299 -0
- package/build/EntityDbMetadata.d.cts.map +1 -0
- package/build/EntityDbMetadata.d.mts +299 -0
- package/build/EntityDbMetadata.d.mts.map +1 -0
- package/build/EntityDbMetadata.js +519 -661
- 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 -4
- 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 -52
- 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 +309 -347
- 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 +19 -24
- 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 +75 -80
- 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 -12
- 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 +89 -88
- 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 +83 -111
- 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 +128 -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 +111 -124
- 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 +1010 -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 +793 -827
- 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 -5
- 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 -78
- package/build/generateFlushFunction.js.map +1 -1
- package/build/generateMetadataFile.cjs +307 -0
- package/build/generateMetadataFile.cjs.map +1 -0
- package/build/generateMetadataFile.d.cts +10 -0
- package/build/generateMetadataFile.d.cts.map +1 -0
- package/build/generateMetadataFile.d.mts +10 -0
- package/build/generateMetadataFile.d.mts.map +1 -0
- package/build/generateMetadataFile.js +148 -156
- 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 +108 -127
- package/build/index.js.map +1 -1
- package/build/inheritance.cjs +257 -0
- package/build/inheritance.cjs.map +1 -0
- package/build/inheritance.d.cts +13 -0
- package/build/inheritance.d.cts.map +1 -0
- package/build/inheritance.d.mts +13 -0
- package/build/inheritance.d.mts.map +1 -0
- package/build/inheritance.js +237 -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.cts +16 -0
- 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 +67 -0
- package/build/installSkills.js.map +1 -0
- 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 -5
- 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 +238 -0
- package/build/symbols.cjs.map +1 -0
- package/build/symbols.d.cts +120 -0
- package/build/symbols.d.cts.map +1 -0
- package/build/symbols.d.mts +120 -0
- package/build/symbols.d.mts.map +1 -0
- package/build/symbols.js +121 -113
- 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 +37 -17
- package/skills/joist-docs/SKILL.md +142 -0
- package/skills/joist-em-basics/SKILL.md +114 -0
- package/skills/joist-partial-updates/SKILL.md +352 -0
- package/skills/joist-reactive-hints/SKILL.md +150 -0
- package/skills/joist-test-factories/SKILL.md +397 -0
- package/skills/joist-upsert/SKILL.md +95 -0
- package/build/EntityDbMetadata.d.ts +0 -269
- package/build/EntityDbMetadata.d.ts.map +0 -1
- package/build/EntityDbMetadata.test.d.ts +0 -2
- package/build/EntityDbMetadata.test.d.ts.map +0 -1
- package/build/EntityDbMetadata.test.js +0 -211
- package/build/EntityDbMetadata.test.js.map +0 -1
- package/build/assignTags.d.ts.map +0 -1
- package/build/codemods/Codemod.d.ts +0 -14
- package/build/codemods/Codemod.d.ts.map +0 -1
- package/build/codemods/Codemod.js.map +0 -1
- package/build/codemods/JscodeshiftMod.d.ts +0 -11
- package/build/codemods/JscodeshiftMod.d.ts.map +0 -1
- package/build/codemods/__tests__/codemod_0001-rename_has_async_property.test.d.ts +0 -2
- package/build/codemods/__tests__/codemod_0001-rename_has_async_property.test.d.ts.map +0 -1
- package/build/codemods/__tests__/codemod_0001-rename_has_async_property.test.js +0 -9
- package/build/codemods/__tests__/codemod_0001-rename_has_async_property.test.js.map +0 -1
- package/build/codemods/__tests__/codemod_0002-rename_async_query_fields.test.d.ts +0 -2
- package/build/codemods/__tests__/codemod_0002-rename_async_query_fields.test.d.ts.map +0 -1
- package/build/codemods/__tests__/codemod_0002-rename_async_query_fields.test.js +0 -9
- package/build/codemods/__tests__/codemod_0002-rename_async_query_fields.test.js.map +0 -1
- package/build/codemods/__tests__/codemod_0003-rename_find_paginated.test.d.ts +0 -2
- package/build/codemods/__tests__/codemod_0003-rename_find_paginated.test.d.ts.map +0 -1
- package/build/codemods/__tests__/codemod_0003-rename_find_paginated.test.js +0 -9
- package/build/codemods/__tests__/codemod_0003-rename_find_paginated.test.js.map +0 -1
- package/build/codemods/codemod_0001-rename_has_async_property.d.ts +0 -7
- package/build/codemods/codemod_0001-rename_has_async_property.d.ts.map +0 -1
- package/build/codemods/codemod_0002-rename_async_query_fields.d.ts +0 -7
- package/build/codemods/codemod_0002-rename_async_query_fields.d.ts.map +0 -1
- package/build/codemods/codemod_0003-rename_find_paginated.d.ts +0 -7
- package/build/codemods/codemod_0003-rename_find_paginated.d.ts.map +0 -1
- package/build/codemods/index.d.ts +0 -9
- package/build/codemods/index.d.ts.map +0 -1
- package/build/codemods/index.test.d.ts +0 -2
- package/build/codemods/index.test.d.ts.map +0 -1
- package/build/codemods/index.test.js +0 -24
- package/build/codemods/index.test.js.map +0 -1
- package/build/config.d.ts +0 -167
- package/build/config.d.ts.map +0 -1
- package/build/config.test.d.ts +0 -2
- package/build/config.test.d.ts.map +0 -1
- package/build/config.test.js +0 -78
- package/build/config.test.js.map +0 -1
- package/build/docs/cache.d.ts +0 -14
- package/build/docs/cache.d.ts.map +0 -1
- package/build/docs/cache.test.d.ts +0 -2
- package/build/docs/cache.test.d.ts.map +0 -1
- package/build/docs/cache.test.js +0 -47
- package/build/docs/cache.test.js.map +0 -1
- package/build/docs/generate-metadata-docs.d.ts +0 -6
- package/build/docs/generate-metadata-docs.d.ts.map +0 -1
- package/build/docs/index.d.ts +0 -9
- package/build/docs/index.d.ts.map +0 -1
- package/build/docs/index.test.d.ts +0 -2
- package/build/docs/index.test.d.ts.map +0 -1
- package/build/docs/index.test.js +0 -100
- package/build/docs/index.test.js.map +0 -1
- package/build/docs/markdown.d.ts.map +0 -1
- package/build/docs/markdown.test.d.ts +0 -2
- package/build/docs/markdown.test.d.ts.map +0 -1
- package/build/docs/markdown.test.js +0 -280
- package/build/docs/markdown.test.js.map +0 -1
- package/build/docs/parsing.d.ts +0 -42
- package/build/docs/parsing.d.ts.map +0 -1
- package/build/docs/parsing.test.d.ts +0 -2
- package/build/docs/parsing.test.d.ts.map +0 -1
- package/build/docs/parsing.test.js +0 -190
- package/build/docs/parsing.test.js.map +0 -1
- package/build/findEntityScopes.d.ts +0 -11
- package/build/findEntityScopes.d.ts.map +0 -1
- package/build/foreignKeyOrdering.d.ts +0 -3
- package/build/foreignKeyOrdering.d.ts.map +0 -1
- package/build/generate.d.ts +0 -12
- package/build/generate.d.ts.map +0 -1
- package/build/generateEntitiesFile.d.ts +0 -7
- package/build/generateEntitiesFile.d.ts.map +0 -1
- package/build/generateEntityCodegenFile.d.ts +0 -11
- package/build/generateEntityCodegenFile.d.ts.map +0 -1
- package/build/generateEntityFile.d.ts +0 -6
- package/build/generateEntityFile.d.ts.map +0 -1
- package/build/generateEntityTestFile.d.ts +0 -6
- package/build/generateEntityTestFile.d.ts.map +0 -1
- package/build/generateEnumFile.d.ts +0 -5
- package/build/generateEnumFile.d.ts.map +0 -1
- package/build/generateFactoriesFiles.d.ts +0 -4
- package/build/generateFactoriesFiles.d.ts.map +0 -1
- package/build/generateFlushFunction.d.ts.map +0 -1
- package/build/generateMetadataFile.d.ts +0 -5
- package/build/generateMetadataFile.d.ts.map +0 -1
- package/build/generatePgEnumFile.d.ts +0 -5
- package/build/generatePgEnumFile.d.ts.map +0 -1
- package/build/index.d.ts +0 -11
- package/build/index.d.ts.map +0 -1
- package/build/inheritance.d.ts +0 -10
- package/build/inheritance.d.ts.map +0 -1
- package/build/keywords.d.ts +0 -2
- package/build/keywords.d.ts.map +0 -1
- package/build/loadMetadata.d.ts +0 -26
- package/build/loadMetadata.d.ts.map +0 -1
- package/build/logger.d.ts +0 -10
- package/build/logger.d.ts.map +0 -1
- package/build/scanEntityFiles.d.ts +0 -5
- package/build/scanEntityFiles.d.ts.map +0 -1
- package/build/sortForeignKeys.d.ts.map +0 -1
- package/build/symbols.d.ts +0 -108
- package/build/symbols.d.ts.map +0 -1
- package/build/tsdoc.d.ts +0 -12
- package/build/tsdoc.d.ts.map +0 -1
- package/build/utils.d.ts +0 -31
- package/build/utils.d.ts.map +0 -1
- package/build/write-json-schema.d.ts +0 -2
- package/build/write-json-schema.d.ts.map +0 -1
package/build/inheritance.js
CHANGED
|
@@ -1,265 +1,255 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const utils_1 = require("./utils");
|
|
1
|
+
import { fail } from "./utils.js";
|
|
2
|
+
import "./config.js";
|
|
3
|
+
import { canonicalizeOtherEntities, makeEntity } from "./EntityDbMetadata.js";
|
|
4
|
+
//#region src/inheritance.ts
|
|
5
|
+
/** Preserves physical storage metadata, then applies domain inheritance specialization. */
|
|
7
6
|
function applyInheritanceUpdates(config, db) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
7
|
+
const { entities, entitiesByName } = db;
|
|
8
|
+
for (const meta of entities) {
|
|
9
|
+
meta.physicalMetadata = {
|
|
10
|
+
...meta,
|
|
11
|
+
name: meta.name,
|
|
12
|
+
primitives: meta.primitives.map((field) => ({ ...field })),
|
|
13
|
+
enums: meta.enums.map((field) => ({ ...field })),
|
|
14
|
+
pgEnums: meta.pgEnums.map((field) => ({ ...field })),
|
|
15
|
+
manyToOnes: meta.manyToOnes.map((field) => ({ ...field })),
|
|
16
|
+
oneToManys: meta.oneToManys.map((field) => ({ ...field })),
|
|
17
|
+
largeOneToManys: meta.largeOneToManys.map((field) => ({ ...field })),
|
|
18
|
+
oneToOnes: meta.oneToOnes.map((field) => ({ ...field })),
|
|
19
|
+
manyToManys: meta.manyToManys.map((field) => ({ ...field })),
|
|
20
|
+
largeManyToManys: meta.largeManyToManys.map((field) => ({ ...field })),
|
|
21
|
+
polymorphics: meta.polymorphics.map((field) => ({
|
|
22
|
+
...field,
|
|
23
|
+
components: field.components.map((component) => ({ ...component }))
|
|
24
|
+
})),
|
|
25
|
+
nonDeferredFks: meta.nonDeferredFks,
|
|
26
|
+
nonDeferredManyToManyFks: meta.nonDeferredManyToManyFks
|
|
27
|
+
};
|
|
28
|
+
for (const timestamp of [
|
|
29
|
+
"createdAt",
|
|
30
|
+
"updatedAt",
|
|
31
|
+
"deletedAt"
|
|
32
|
+
]) meta.physicalMetadata[timestamp] = meta.physicalMetadata.primitives.find((field) => field.fieldName === meta[timestamp]?.fieldName);
|
|
33
|
+
}
|
|
34
|
+
setClassTableInheritance(entities, entitiesByName);
|
|
35
|
+
expandSingleTableInheritance(config, entitiesByName, entities);
|
|
36
|
+
rewriteSingleTableForeignKeys(config, entities);
|
|
37
|
+
setupSubTypeSpecialization(config, entities);
|
|
38
|
+
canonicalizeOtherEntities(db);
|
|
15
39
|
}
|
|
16
40
|
/**
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
41
|
+
* Looks for subtypes specializing a FK of their base type, and give them a specialized m2o.
|
|
42
|
+
*
|
|
43
|
+
* I.e. `SmallPublishers.group: SmallPublisherGroup`.
|
|
44
|
+
*
|
|
45
|
+
* This means the `publishers.group_id` FK will actually be in the `EntityDbMetadata` twice,
|
|
46
|
+
* once for the base and once for the child, which is unusual, but gets the types generated
|
|
47
|
+
* that we want, and then we fixup/dedupe them at runtime in `configure.ts` when creating
|
|
48
|
+
* `meta.allFields`.
|
|
49
|
+
*/
|
|
26
50
|
function setupSubTypeSpecialization(config, entities) {
|
|
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
|
-
// the only specialization a primitive can have is nullability
|
|
63
|
-
const { notNull } = entityConfig?.fields?.[field.fieldName] ?? {};
|
|
64
|
-
if (notNull) {
|
|
65
|
-
entity.primitives.push({ ...field, notNull });
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
51
|
+
for (const entity of entities) if (entity.baseType) {
|
|
52
|
+
const entityConfig = config.entities[entity.name];
|
|
53
|
+
const baseConfig = config.entities[entity.baseType.name];
|
|
54
|
+
for (const rel of [...entity.baseType.manyToOnes, ...entity.baseType.oneToManys]) {
|
|
55
|
+
const { notNull } = entityConfig?.relations?.[rel.fieldName] ?? {};
|
|
56
|
+
const subType = entityConfig?.relations?.[rel.fieldName]?.subType ?? baseConfig?.relations?.[rel.fieldName]?.subType ?? baseConfig?.relations?.[rel.otherFieldName]?.subType ?? (notNull ? rel.otherEntity.name : void 0);
|
|
57
|
+
if (!subType) {} else if (subType === "self" && rel.kind === "m2o") entity.manyToOnes.push({
|
|
58
|
+
...rel,
|
|
59
|
+
...notNull ? { notNull } : {},
|
|
60
|
+
otherEntity: makeEntity(entity.name)
|
|
61
|
+
});
|
|
62
|
+
else if (subType === "self" && rel.kind === "o2m") entity.oneToManys.push({
|
|
63
|
+
...rel,
|
|
64
|
+
...notNull ? { notNull } : {},
|
|
65
|
+
otherEntity: makeEntity(entity.name)
|
|
66
|
+
});
|
|
67
|
+
else if (rel.kind === "m2o") entity.manyToOnes.push({
|
|
68
|
+
...rel,
|
|
69
|
+
...notNull ? { notNull } : {},
|
|
70
|
+
otherEntity: makeEntity(subType)
|
|
71
|
+
});
|
|
72
|
+
else if (rel.kind === "o2m") entity.oneToManys.push({
|
|
73
|
+
...rel,
|
|
74
|
+
...notNull ? { notNull } : {},
|
|
75
|
+
otherEntity: makeEntity(subType)
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
for (const field of entity.baseType?.primitives ?? []) {
|
|
79
|
+
const { notNull } = entityConfig?.fields?.[field.fieldName] ?? {};
|
|
80
|
+
if (notNull) entity.primitives.push({
|
|
81
|
+
...field,
|
|
82
|
+
notNull
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
70
86
|
}
|
|
71
87
|
/**
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
88
|
+
* Ensure CTI base types have their inheritanceType set.
|
|
89
|
+
*
|
|
90
|
+
* (We automatically set `inheritanceType` for STI tables when we see their config
|
|
91
|
+
* setup, see `expandSingleTableInheritance`.)
|
|
92
|
+
*/
|
|
77
93
|
function setClassTableInheritance(entities, entitiesByName) {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
for (const entity of entities) {
|
|
88
|
-
if (ctiBaseNames.includes(entity.name))
|
|
89
|
-
entity.inheritanceType = "cti";
|
|
90
|
-
}
|
|
94
|
+
const ctiBaseNames = [];
|
|
95
|
+
for (const entity of entities) if (entity.baseClassName) {
|
|
96
|
+
ctiBaseNames.push(entity.baseClassName);
|
|
97
|
+
const base = entitiesByName[entity.baseClassName];
|
|
98
|
+
entity.baseType = base;
|
|
99
|
+
base.subTypes.push(entity);
|
|
100
|
+
}
|
|
101
|
+
for (const entity of entities) if (ctiBaseNames.includes(entity.name)) entity.inheritanceType = "cti";
|
|
91
102
|
}
|
|
92
103
|
/** Expands STI tables into multiple entities, so they get separate `SubTypeCodegen.ts` & `SubType.ts` files. */
|
|
93
104
|
function expandSingleTableInheritance(config, entitiesByName, entities) {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
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
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
entity.manyToManyEnums = entity.manyToManyEnums.filter((f) => !subTypeFieldNames.includes(f.fieldName));
|
|
179
|
-
entity.polymorphics = entity.polymorphics.filter((f) => !subTypeFieldNames.includes(f.fieldName));
|
|
180
|
-
entity.subTypes.push(subEntity);
|
|
181
|
-
entities.push(subEntity);
|
|
182
|
-
entitiesByName[subEntity.name] = subEntity;
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
}
|
|
105
|
+
for (const entity of entities) {
|
|
106
|
+
const [fieldName, stiField] = Object.entries(config.entities[entity.name]?.fields || {}).find(([, f]) => !!f.stiDiscriminator) ?? [];
|
|
107
|
+
if (fieldName && stiField && stiField.stiDiscriminator) {
|
|
108
|
+
entity.inheritanceType = "sti";
|
|
109
|
+
const enumField = entity.enums.find((e) => e.fieldName === fieldName) ?? fail(`No enum column found for ${entity.name}.${fieldName}, which is required to use singleTableInheritance`);
|
|
110
|
+
entity.stiDiscriminatorField = enumField.fieldName;
|
|
111
|
+
const subTypes = Object.entries(stiField.stiDiscriminator);
|
|
112
|
+
const allFields = [...Object.entries(config.entities[entity.name]?.fields ?? {}), ...Object.entries(config.entities[entity.name]?.relations ?? {})];
|
|
113
|
+
const availableCodes = subTypes.map(([code]) => code);
|
|
114
|
+
const availableNames = subTypes.map(([, name]) => name);
|
|
115
|
+
const available = [...availableCodes, ...availableNames];
|
|
116
|
+
for (const [name, f] of allFields) for (const stiType of stiTypesOf(f)) if (!available.includes(stiType)) fail(`${name}.stiType '${stiType}' is invalid, expected one of ${available.join(", ")}`);
|
|
117
|
+
const requiredFieldNames = new Set([
|
|
118
|
+
...entity.primitives,
|
|
119
|
+
...entity.enums,
|
|
120
|
+
...entity.pgEnums,
|
|
121
|
+
...entity.manyToOnes
|
|
122
|
+
].filter((f) => f.notNull && f.columnDefault === null && !("columnGenerated" in f && f.columnGenerated)).map((f) => f.fieldName));
|
|
123
|
+
for (const [name, f] of allFields) {
|
|
124
|
+
const stiTypes = stiTypesOf(f);
|
|
125
|
+
const claimsEverySubtype = subTypes.every(([code, name]) => stiTypes.some((t) => t === code || t === name));
|
|
126
|
+
if (stiTypes.length > 0 && !claimsEverySubtype && requiredFieldNames.has(name)) fail(`${entity.name}.${name} is notNull with no database default, so it cannot be pushed down to ${stiTypes.map((t) => `'${t}'`).join(", ")} -- the other subtypes would have no value to insert. Either give the column a default, make it nullable (stiType will still make it required on those subtypes), or leave the field on ${entity.name}.`);
|
|
127
|
+
}
|
|
128
|
+
const claimedFieldNames = new Set(allFields.filter(([, f]) => stiTypesOf(f).length > 0).map(([name]) => name));
|
|
129
|
+
for (const [enumCode, subTypeName] of subTypes) {
|
|
130
|
+
const subTypeFields = allFields.filter(([, f]) => stiTypesOf(f).some((t) => t === subTypeName || t === enumCode));
|
|
131
|
+
const subTypeFieldNames = subTypeFields.map(([name]) => name);
|
|
132
|
+
function maybeRequired(field) {
|
|
133
|
+
if ((subTypeFields.find(([name]) => name === field.fieldName)?.[1]).notNull) field.notNull = true;
|
|
134
|
+
return field;
|
|
135
|
+
}
|
|
136
|
+
const subEntity = {
|
|
137
|
+
name: subTypeName,
|
|
138
|
+
entity: makeEntity(subTypeName),
|
|
139
|
+
tableName: entity.tableName,
|
|
140
|
+
physicalMetadata: entity.physicalMetadata,
|
|
141
|
+
primaryKey: entity.primaryKey,
|
|
142
|
+
primitives: entity.primitives.filter((f) => subTypeFieldNames.includes(f.fieldName)).map(maybeRequired),
|
|
143
|
+
enums: entity.enums.filter((f) => subTypeFieldNames.includes(f.fieldName)).map(maybeRequired),
|
|
144
|
+
pgEnums: entity.pgEnums.filter((f) => subTypeFieldNames.includes(f.fieldName)).map(maybeRequired),
|
|
145
|
+
manyToOnes: entity.manyToOnes.filter((f) => subTypeFieldNames.includes(f.fieldName)).map(maybeRequired),
|
|
146
|
+
oneToManys: entity.oneToManys.filter((f) => subTypeFieldNames.includes(f.fieldName)),
|
|
147
|
+
largeOneToManys: entity.largeOneToManys.filter((f) => subTypeFieldNames.includes(f.fieldName)),
|
|
148
|
+
oneToOnes: entity.oneToOnes.filter((f) => subTypeFieldNames.includes(f.fieldName)),
|
|
149
|
+
manyToManys: entity.manyToManys.filter((f) => subTypeFieldNames.includes(f.fieldName)),
|
|
150
|
+
largeManyToManys: entity.largeManyToManys.filter((f) => subTypeFieldNames.includes(f.fieldName)),
|
|
151
|
+
manyToManyEnums: entity.manyToManyEnums.filter((f) => subTypeFieldNames.includes(f.fieldName)),
|
|
152
|
+
polymorphics: entity.polymorphics.filter((f) => subTypeFieldNames.includes(f.fieldName)),
|
|
153
|
+
tagName: entity.tagName,
|
|
154
|
+
createdAt: void 0,
|
|
155
|
+
updatedAt: void 0,
|
|
156
|
+
deletedAt: void 0,
|
|
157
|
+
baseClassName: entity.name,
|
|
158
|
+
baseType: entity,
|
|
159
|
+
subTypes: [],
|
|
160
|
+
inheritanceType: "sti",
|
|
161
|
+
stiDiscriminatorValue: (enumField.enumRows.find((r) => r.code === enumCode) ?? fail(`No enum row found for ${entity.name}.${fieldName}.${enumCode}`)).id,
|
|
162
|
+
abstract: false,
|
|
163
|
+
nonDeferredFkOrder: entity.nonDeferredFkOrder,
|
|
164
|
+
get nonDeferredFks() {
|
|
165
|
+
return [...this.manyToOnes.filter((r) => !r.isDeferredAndDeferrable), ...this.polymorphics.flatMap((p) => p.components).filter((c) => !c.isDeferredAndDeferrable)];
|
|
166
|
+
},
|
|
167
|
+
get nonDeferredManyToManyFks() {
|
|
168
|
+
return this.manyToManys.filter((r) => !r.isDeferredAndDeferrable);
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
entity.subTypes.push(subEntity);
|
|
172
|
+
entities.push(subEntity);
|
|
173
|
+
entitiesByName[subEntity.name] = subEntity;
|
|
174
|
+
}
|
|
175
|
+
const keep = (f) => !claimedFieldNames.has(f.fieldName);
|
|
176
|
+
entity.primitives = entity.primitives.filter(keep);
|
|
177
|
+
entity.enums = entity.enums.filter(keep);
|
|
178
|
+
entity.pgEnums = entity.pgEnums.filter(keep);
|
|
179
|
+
entity.manyToOnes = entity.manyToOnes.filter(keep);
|
|
180
|
+
entity.oneToManys = entity.oneToManys.filter(keep);
|
|
181
|
+
entity.largeOneToManys = entity.largeOneToManys.filter(keep);
|
|
182
|
+
entity.oneToOnes = entity.oneToOnes.filter(keep);
|
|
183
|
+
entity.manyToManys = entity.manyToManys.filter(keep);
|
|
184
|
+
entity.largeManyToManys = entity.largeManyToManys.filter(keep);
|
|
185
|
+
entity.manyToManyEnums = entity.manyToManyEnums.filter(keep);
|
|
186
|
+
entity.polymorphics = entity.polymorphics.filter(keep);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
186
189
|
}
|
|
187
190
|
let stiEntities;
|
|
188
191
|
function getStiEntities(entities) {
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
192
|
+
if (stiEntities) return stiEntities;
|
|
193
|
+
stiEntities = /* @__PURE__ */ new Map();
|
|
194
|
+
for (const entity of entities) if (entity.inheritanceType === "sti" && entity.stiDiscriminatorField) {
|
|
195
|
+
const base = entity;
|
|
196
|
+
const subTypes = entities.filter((s) => s.baseClassName === entity.name && s !== entity);
|
|
197
|
+
stiEntities.set(entity.name, {
|
|
198
|
+
base,
|
|
199
|
+
subTypes
|
|
200
|
+
});
|
|
201
|
+
for (const subType of subTypes) stiEntities.set(subType.name, {
|
|
202
|
+
base,
|
|
203
|
+
subTypes: []
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
return stiEntities;
|
|
204
207
|
}
|
|
205
208
|
/** Finds FKs pointing to the base table and, if configured, rewrites them to point to the sub-tables. */
|
|
206
209
|
function rewriteSingleTableForeignKeys(config, entities) {
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
// Ensure the incoming FK is not in the base type, and find the 1st subtype (eventually N subtypes?)
|
|
244
|
-
const otherField = target.subTypes.find((st) => !target.base.manyToOnes.some((m) => m.fieldName === o2m.otherFieldName) &&
|
|
245
|
-
st.manyToOnes.some((m) => m.fieldName === o2m.otherFieldName));
|
|
246
|
-
if (otherField) {
|
|
247
|
-
o2m.otherEntity = otherField.entity;
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
// m2ms -- Look for `entity.tasks` collections loading m2m rows, but `entity` has been pushed down to `TaskOld`
|
|
252
|
-
for (const m2m of entity.manyToManys) {
|
|
253
|
-
const target = stiEntities.get(m2m.otherEntity.name);
|
|
254
|
-
if (target && target.base.inheritanceType === "sti") {
|
|
255
|
-
// Ensure the incoming FK is not in the base type, and find the 1st subtype (eventually N subtypes?)
|
|
256
|
-
const otherField = target.subTypes.find((st) => !target.base.manyToManys.some((m) => m.fieldName === m2m.otherFieldName) &&
|
|
257
|
-
st.manyToManys.some((m) => m.fieldName === m2m.otherFieldName));
|
|
258
|
-
if (otherField) {
|
|
259
|
-
m2m.otherEntity = otherField.entity;
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
}
|
|
210
|
+
const stiEntities = getStiEntities(entities);
|
|
211
|
+
if (stiEntities.size === 0) return;
|
|
212
|
+
for (const entity of entities) {
|
|
213
|
+
for (const m2o of entity.manyToOnes) {
|
|
214
|
+
const target = stiEntities.get(m2o.otherEntity.name);
|
|
215
|
+
const base = target?.base.entity.name;
|
|
216
|
+
const [stiType, ...others] = stiTypesOf(base ? config.entities[base]?.relations?.[m2o.otherFieldName] : void 0);
|
|
217
|
+
if (target && stiType && others.length === 0) {
|
|
218
|
+
const { subTypes } = target;
|
|
219
|
+
m2o.otherEntity = (subTypes.find((s) => s.name === stiType) ?? fail(`Could not find STI type '${stiType}' in ${subTypes.map((s) => s.name)}`)).entity;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
for (const poly of entity.polymorphics) for (const comp of poly.components) {
|
|
223
|
+
const target = stiEntities.get(comp.otherEntity.name);
|
|
224
|
+
const base = target?.base.entity.name;
|
|
225
|
+
const [stiType, ...others] = stiTypesOf(base ? config.entities[base]?.relations?.[comp.otherFieldName] : void 0);
|
|
226
|
+
if (target && stiType && others.length === 0) {
|
|
227
|
+
const { subTypes } = target;
|
|
228
|
+
comp.otherEntity = (subTypes.find((s) => s.name === stiType) ?? fail(`Could not find STI type '${stiType}' in ${subTypes.map((s) => s.name)}`)).entity;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
for (const o2m of entity.oneToManys) {
|
|
232
|
+
const target = stiEntities.get(o2m.otherEntity.name);
|
|
233
|
+
if (target && target.base.inheritanceType === "sti") {
|
|
234
|
+
const otherField = target.subTypes.find((st) => !target.base.manyToOnes.some((m) => m.fieldName === o2m.otherFieldName) && st.manyToOnes.some((m) => m.fieldName === o2m.otherFieldName));
|
|
235
|
+
if (otherField) o2m.otherEntity = otherField.entity;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
for (const m2m of entity.manyToManys) {
|
|
239
|
+
const target = stiEntities.get(m2m.otherEntity.name);
|
|
240
|
+
if (target && target.base.inheritanceType === "sti") {
|
|
241
|
+
const otherField = target.subTypes.find((st) => !target.base.manyToManys.some((m) => m.fieldName === m2m.otherFieldName) && st.manyToManys.some((m) => m.fieldName === m2m.otherFieldName));
|
|
242
|
+
if (otherField) m2m.otherEntity = otherField.entity;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
264
246
|
}
|
|
247
|
+
/** Normalizes a field/relation's `stiType`, which may name one subtype or several, to an array. */
|
|
248
|
+
function stiTypesOf(config) {
|
|
249
|
+
const stiType = config?.stiType;
|
|
250
|
+
return stiType === void 0 ? [] : typeof stiType === "string" ? [stiType] : stiType;
|
|
251
|
+
}
|
|
252
|
+
//#endregion
|
|
253
|
+
export { applyInheritanceUpdates, getStiEntities };
|
|
254
|
+
|
|
265
255
|
//# sourceMappingURL=inheritance.js.map
|
package/build/inheritance.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inheritance.js","sourceRoot":"","sources":["../src/inheritance.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"inheritance.js","names":[],"sources":["../src/inheritance.ts"],"sourcesContent":["import { type Config } from \"./config.ts\";\nimport {\n type DbMetadata,\n type EntityDbMetadata,\n type ManyToManyField,\n type ManyToOneField,\n type PolymorphicFieldComponent,\n canonicalizeOtherEntities,\n makeEntity,\n} from \"./EntityDbMetadata.ts\";\nimport { fail } from \"./utils.ts\";\n\n/** Preserves physical storage metadata, then applies domain inheritance specialization. */\nexport function applyInheritanceUpdates(config: Config, db: DbMetadata): void {\n const { entities, entitiesByName } = db;\n // Preserve storage domains before STI moves fields or rewrites relationship targets.\n for (const meta of entities) {\n meta.physicalMetadata = {\n ...meta,\n name: meta.name,\n primitives: meta.primitives.map((field) => ({ ...field })),\n enums: meta.enums.map((field) => ({ ...field })),\n pgEnums: meta.pgEnums.map((field) => ({ ...field })),\n manyToOnes: meta.manyToOnes.map((field) => ({ ...field })),\n oneToManys: meta.oneToManys.map((field) => ({ ...field })),\n largeOneToManys: meta.largeOneToManys.map((field) => ({ ...field })),\n oneToOnes: meta.oneToOnes.map((field) => ({ ...field })),\n manyToManys: meta.manyToManys.map((field) => ({ ...field })),\n largeManyToManys: meta.largeManyToManys.map((field) => ({ ...field })),\n polymorphics: meta.polymorphics.map((field) => ({\n ...field,\n components: field.components.map((component) => ({ ...component })),\n })),\n nonDeferredFks: meta.nonDeferredFks,\n nonDeferredManyToManyFks: meta.nonDeferredManyToManyFks,\n };\n for (const timestamp of [\"createdAt\", \"updatedAt\", \"deletedAt\"] as const) {\n meta.physicalMetadata[timestamp] = meta.physicalMetadata.primitives.find(\n (field) => field.fieldName === meta[timestamp]?.fieldName,\n );\n }\n }\n setClassTableInheritance(entities, entitiesByName);\n expandSingleTableInheritance(config, entitiesByName, entities);\n rewriteSingleTableForeignKeys(config, entities);\n setupSubTypeSpecialization(config, entities);\n // Now that all relations (incl. specialized ones) exist, collapse the duplicate `otherEntity` objects\n canonicalizeOtherEntities(db);\n}\n\n/**\n * Looks for subtypes specializing a FK of their base type, and give them a specialized m2o.\n *\n * I.e. `SmallPublishers.group: SmallPublisherGroup`.\n *\n * This means the `publishers.group_id` FK will actually be in the `EntityDbMetadata` twice,\n * once for the base and once for the child, which is unusual, but gets the types generated\n * that we want, and then we fixup/dedupe them at runtime in `configure.ts` when creating\n * `meta.allFields`.\n */\nfunction setupSubTypeSpecialization(config: Config, entities: EntityDbMetadata[]): void {\n for (const entity of entities) {\n if (entity.baseType) {\n const entityConfig = config.entities[entity.name];\n const baseConfig = config.entities[entity.baseType.name];\n // Look through the base's m2os & o2ms, looking for a config specialization\n for (const rel of [...entity.baseType.manyToOnes, ...entity.baseType.oneToManys]) {\n const { notNull } = entityConfig?.relations?.[rel.fieldName] ?? {};\n const subType =\n entityConfig?.relations?.[rel.fieldName]?.subType ??\n baseConfig?.relations?.[rel.fieldName]?.subType ??\n // Probe the otherFieldName for a `subType: \"self\"` on self-referential relations in STI tables\n baseConfig?.relations?.[rel.otherFieldName]?.subType ??\n // if we are only marking the relation as required and not specifying a subtype, then use the original type\n (notNull ? rel.otherEntity.name : undefined);\n\n if (!subType) {\n // continue...\n } else if (subType === \"self\" && rel.kind === \"m2o\") {\n // Specialize `TaskNew.copiedFrom: TaskNew` & `TaskOld.copiedFrom: TaskOld`\n entity.manyToOnes.push({ ...rel, ...(notNull ? { notNull } : {}), otherEntity: makeEntity(entity.name) });\n } else if (subType === \"self\" && rel.kind === \"o2m\") {\n // Specialize `TaskNew.copiedTo: TaskNew[]` & `TaskOld.copiedTo: TaskOld[]`\n entity.oneToManys.push({ ...rel, ...(notNull ? { notNull } : {}), otherEntity: makeEntity(entity.name) });\n } else if (rel.kind === \"m2o\") {\n // Specialize `SmallPublisher.group: SmallPublisherGroup`\n entity.manyToOnes.push({ ...rel, ...(notNull ? { notNull } : {}), otherEntity: makeEntity(subType) });\n } else if (rel.kind === \"o2m\") {\n // Specialize `SmallPublisherGroup.publishers: SmallPublisher`\n entity.oneToManys.push({ ...rel, ...(notNull ? { notNull } : {}), otherEntity: makeEntity(subType) });\n }\n }\n\n // Look through the base's primitives looking for a config specialization\n for (const field of entity.baseType?.primitives ?? []) {\n // the only specialization a primitive can have is nullability\n const { notNull } = entityConfig?.fields?.[field.fieldName] ?? {};\n if (notNull) {\n entity.primitives.push({ ...field, notNull });\n }\n }\n }\n }\n}\n\n/**\n * Ensure CTI base types have their inheritanceType set.\n *\n * (We automatically set `inheritanceType` for STI tables when we see their config\n * setup, see `expandSingleTableInheritance`.)\n */\nfunction setClassTableInheritance(\n entities: EntityDbMetadata[],\n entitiesByName: Record<string, EntityDbMetadata>,\n): void {\n const ctiBaseNames: string[] = [];\n for (const entity of entities) {\n if (entity.baseClassName) {\n ctiBaseNames.push(entity.baseClassName);\n const base = entitiesByName[entity.baseClassName];\n entity.baseType = base;\n base.subTypes.push(entity);\n }\n }\n for (const entity of entities) {\n if (ctiBaseNames.includes(entity.name)) entity.inheritanceType = \"cti\";\n }\n}\n\n/** Expands STI tables into multiple entities, so they get separate `SubTypeCodegen.ts` & `SubType.ts` files. */\nfunction expandSingleTableInheritance(\n config: Config,\n entitiesByName: Record<string, EntityDbMetadata>,\n entities: EntityDbMetadata[],\n): void {\n for (const entity of entities) {\n const [fieldName, stiField] =\n Object.entries(config.entities[entity.name]?.fields || {}).find(([, f]) => !!f.stiDiscriminator) ?? [];\n if (fieldName && stiField && stiField.stiDiscriminator) {\n entity.inheritanceType = \"sti\";\n\n // Ensure we have an enum field so that we can bake the STI discriminators into the metadata.ts file\n const enumField =\n entity.enums.find((e) => e.fieldName === fieldName) ??\n fail(`No enum column found for ${entity.name}.${fieldName}, which is required to use singleTableInheritance`);\n entity.stiDiscriminatorField = enumField.fieldName;\n\n // Find the available discriminators/subtypes, i.e. NEW => NewTask, OLD => OldTask, etc.\n const subTypes = Object.entries(stiField.stiDiscriminator);\n\n const allFields = [\n ...Object.entries(config.entities[entity.name]?.fields ?? {}),\n ...Object.entries(config.entities[entity.name]?.relations ?? {}),\n ];\n\n // Make sure there aren't any typos in `stiType`s\n const availableCodes = subTypes.map(([code]) => code);\n const availableNames = subTypes.map(([, name]) => name);\n const available = [...availableCodes, ...availableNames];\n for (const [name, f] of allFields) {\n for (const stiType of stiTypesOf(f)) {\n if (!available.includes(stiType)) {\n fail(`${name}.stiType '${stiType}' is invalid, expected one of ${available.join(\", \")}`);\n }\n }\n }\n\n // A `notNull` column with no database default cannot be pushed down to a subtype: the other\n // subtypes omit it from their INSERT (see `addInserts`), and the database has nothing to fall back\n // on. A `notNull` column *with* a default is fine -- the other subtypes simply get the default.\n const requiredFieldNames = new Set(\n [...entity.primitives, ...entity.enums, ...entity.pgEnums, ...entity.manyToOnes]\n .filter((f) => f.notNull && f.columnDefault === null && !(\"columnGenerated\" in f && f.columnGenerated))\n .map((f) => f.fieldName),\n );\n for (const [name, f] of allFields) {\n const stiTypes = stiTypesOf(f);\n // Claiming every subtype leaves no one without a value, so it's equivalent to staying on the base\n const claimsEverySubtype = subTypes.every(([code, name]) => stiTypes.some((t) => t === code || t === name));\n if (stiTypes.length > 0 && !claimsEverySubtype && requiredFieldNames.has(name)) {\n fail(\n `${entity.name}.${name} is notNull with no database default, so it cannot be pushed down to` +\n ` ${stiTypes.map((t) => `'${t}'`).join(\", \")} -- the other subtypes would have no value to` +\n ` insert. Either give the column a default, make it nullable (stiType will still make it` +\n ` required on those subtypes), or leave the field on ${entity.name}.`,\n );\n }\n }\n\n // Names claimed by any subtype; stripped from the base after the loop, not during it, so that a\n // field claimed by two subtypes is still on the base when the second iteration looks for it.\n const claimedFieldNames = new Set(allFields.filter(([, f]) => stiTypesOf(f).length > 0).map(([name]) => name));\n\n // Now split each subType out into its out entity\n for (const [enumCode, subTypeName] of subTypes) {\n // Find all the base entity's fields that belong to us\n const subTypeFields = allFields.filter(([, f]) =>\n stiTypesOf(f).some((t) => t === subTypeName || t === enumCode),\n );\n const subTypeFieldNames = subTypeFields.map(([name]) => name);\n\n // Make fields as required\n function maybeRequired<T extends { notNull: boolean; fieldName: string }>(field: T): T {\n const config = subTypeFields.find(([name]) => name === field.fieldName)?.[1]!;\n if (config.notNull) field.notNull = true;\n return field;\n }\n\n // Synthesize an entity for this STI sub-entity\n const subEntity: EntityDbMetadata = {\n name: subTypeName,\n entity: makeEntity(subTypeName),\n tableName: entity.tableName,\n physicalMetadata: entity.physicalMetadata,\n primaryKey: entity.primaryKey,\n primitives: entity.primitives.filter((f) => subTypeFieldNames.includes(f.fieldName)).map(maybeRequired),\n enums: entity.enums.filter((f) => subTypeFieldNames.includes(f.fieldName)).map(maybeRequired),\n pgEnums: entity.pgEnums.filter((f) => subTypeFieldNames.includes(f.fieldName)).map(maybeRequired),\n manyToOnes: entity.manyToOnes.filter((f) => subTypeFieldNames.includes(f.fieldName)).map(maybeRequired),\n oneToManys: entity.oneToManys.filter((f) => subTypeFieldNames.includes(f.fieldName)),\n largeOneToManys: entity.largeOneToManys.filter((f) => subTypeFieldNames.includes(f.fieldName)),\n oneToOnes: entity.oneToOnes.filter((f) => subTypeFieldNames.includes(f.fieldName)),\n manyToManys: entity.manyToManys.filter((f) => subTypeFieldNames.includes(f.fieldName)),\n largeManyToManys: entity.largeManyToManys.filter((f) => subTypeFieldNames.includes(f.fieldName)),\n manyToManyEnums: entity.manyToManyEnums.filter((f) => subTypeFieldNames.includes(f.fieldName)),\n polymorphics: entity.polymorphics.filter((f) => subTypeFieldNames.includes(f.fieldName)),\n tagName: entity.tagName,\n createdAt: undefined,\n updatedAt: undefined,\n deletedAt: undefined,\n baseClassName: entity.name,\n baseType: entity,\n subTypes: [],\n inheritanceType: \"sti\",\n stiDiscriminatorValue: (\n enumField.enumRows.find((r) => r.code === enumCode) ??\n fail(`No enum row found for ${entity.name}.${fieldName}.${enumCode}`)\n ).id,\n abstract: false,\n nonDeferredFkOrder: entity.nonDeferredFkOrder,\n get nonDeferredFks(): Array<ManyToOneField | PolymorphicFieldComponent> {\n return [\n ...this.manyToOnes.filter((r) => !r.isDeferredAndDeferrable),\n ...this.polymorphics.flatMap((p) => p.components).filter((c) => !c.isDeferredAndDeferrable),\n ];\n },\n get nonDeferredManyToManyFks(): Array<ManyToManyField> {\n return this.manyToManys.filter((r) => !r.isDeferredAndDeferrable);\n },\n };\n\n entity.subTypes.push(subEntity);\n\n entities.push(subEntity);\n entitiesByName[subEntity.name] = subEntity;\n }\n\n // Now strip the subclass fields from the base class\n const keep = <T extends { fieldName: string }>(f: T) => !claimedFieldNames.has(f.fieldName);\n entity.primitives = entity.primitives.filter(keep);\n entity.enums = entity.enums.filter(keep);\n entity.pgEnums = entity.pgEnums.filter(keep);\n entity.manyToOnes = entity.manyToOnes.filter(keep);\n entity.oneToManys = entity.oneToManys.filter(keep);\n entity.largeOneToManys = entity.largeOneToManys.filter(keep);\n entity.oneToOnes = entity.oneToOnes.filter(keep);\n entity.manyToManys = entity.manyToManys.filter(keep);\n entity.largeManyToManys = entity.largeManyToManys.filter(keep);\n entity.manyToManyEnums = entity.manyToManyEnums.filter(keep);\n entity.polymorphics = entity.polymorphics.filter(keep);\n }\n }\n}\n\ntype StiEntityMap = Map<string, { base: EntityDbMetadata; subTypes: EntityDbMetadata[] }>;\nlet stiEntities: StiEntityMap;\n\nexport function getStiEntities(entities: EntityDbMetadata[]): StiEntityMap {\n if (stiEntities) return stiEntities;\n stiEntities = new Map();\n for (const entity of entities) {\n if (entity.inheritanceType === \"sti\" && entity.stiDiscriminatorField) {\n const base = entity;\n const subTypes = entities.filter((s) => s.baseClassName === entity.name && s !== entity);\n stiEntities.set(entity.name, { base, subTypes });\n // Allow looking up by subType name\n for (const subType of subTypes) {\n stiEntities.set(subType.name, { base, subTypes: [] });\n }\n }\n }\n return stiEntities;\n}\n\n/** Finds FKs pointing to the base table and, if configured, rewrites them to point to the sub-tables. */\nfunction rewriteSingleTableForeignKeys(config: Config, entities: EntityDbMetadata[]): void {\n // See if we even have any STI tables\n const stiEntities = getStiEntities(entities);\n if (stiEntities.size === 0) return;\n // Scan for other entities/relations that point to the STI table\n for (const entity of entities) {\n // m2os -- Look for `entity.task_id` FKs pointing at `Task` and, if configured, rewrite them to point at `TaskOld`\n for (const m2o of entity.manyToOnes) {\n const target = stiEntities.get(m2o.otherEntity.name);\n const base = target?.base.entity.name;\n // See if the user has pushed `Task.entities` down to a subtype\n // Only a lone subtype can retype the FK; naming several means the FK can point at any of them,\n // which is just the base type, so leave it alone.\n const [stiType, ...others] = stiTypesOf(\n base ? config.entities[base]?.relations?.[m2o.otherFieldName] : undefined,\n );\n if (target && stiType && others.length === 0) {\n const { subTypes } = target;\n m2o.otherEntity = (\n subTypes.find((s) => s.name === stiType) ??\n fail(`Could not find STI type '${stiType}' in ${subTypes.map((s) => s.name)}`)\n ).entity;\n }\n }\n // polys -- Look for `entity.parent_task_id` FKs pointing at `Task` and, if configured, rewrite them to point at `TaskOld`\n for (const poly of entity.polymorphics) {\n for (const comp of poly.components) {\n const target = stiEntities.get(comp.otherEntity.name);\n const base = target?.base.entity.name;\n // See if the user has pushed `Task.entities` down to a subtype\n const [stiType, ...others] = stiTypesOf(\n base ? config.entities[base]?.relations?.[comp.otherFieldName] : undefined,\n );\n if (target && stiType && others.length === 0) {\n const { subTypes } = target;\n comp.otherEntity = (\n subTypes.find((s) => s.name === stiType) ??\n fail(`Could not find STI type '${stiType}' in ${subTypes.map((s) => s.name)}`)\n ).entity;\n }\n }\n }\n // o2ms -- Look for `entity.tasks` collections loading `task.entity_id`, but entity has been pushed down to `TaskOld`\n for (const o2m of entity.oneToManys) {\n const target = stiEntities.get(o2m.otherEntity.name);\n if (target && target.base.inheritanceType === \"sti\") {\n // Ensure the incoming FK is not in the base type, and find the 1st subtype (eventually N subtypes?)\n const otherField = target.subTypes.find(\n (st) =>\n !target.base.manyToOnes.some((m) => m.fieldName === o2m.otherFieldName) &&\n st.manyToOnes.some((m) => m.fieldName === o2m.otherFieldName),\n );\n if (otherField) {\n o2m.otherEntity = otherField.entity;\n }\n }\n }\n // m2ms -- Look for `entity.tasks` collections loading m2m rows, but `entity` has been pushed down to `TaskOld`\n for (const m2m of entity.manyToManys) {\n const target = stiEntities.get(m2m.otherEntity.name);\n if (target && target.base.inheritanceType === \"sti\") {\n // Ensure the incoming FK is not in the base type, and find the 1st subtype (eventually N subtypes?)\n const otherField = target.subTypes.find(\n (st) =>\n !target.base.manyToManys.some((m) => m.fieldName === m2m.otherFieldName) &&\n st.manyToManys.some((m) => m.fieldName === m2m.otherFieldName),\n );\n if (otherField) {\n m2m.otherEntity = otherField.entity;\n }\n }\n }\n }\n}\n\n/** Normalizes a field/relation's `stiType`, which may name one subtype or several, to an array. */\nfunction stiTypesOf(config: { stiType?: string | string[] } | undefined): string[] {\n const stiType = config?.stiType;\n return stiType === undefined ? [] : typeof stiType === \"string\" ? [stiType] : stiType;\n}\n"],"mappings":"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"}
|