joist-codegen 2.3.0-next.8 → 2.3.0-next.81
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 +241 -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 +221 -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 +133 -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/utils.cjs
ADDED
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
|
|
3
|
+
const require_config = require("./config.cjs");
|
|
4
|
+
require("./EntityDbMetadata.cjs");
|
|
5
|
+
let change_case = require("change-case");
|
|
6
|
+
let joist_utils = require("joist-utils");
|
|
7
|
+
require("pg-structure");
|
|
8
|
+
let pluralize = require("pluralize");
|
|
9
|
+
pluralize = require_runtime.__toESM(pluralize, 1);
|
|
10
|
+
let ts_poet = require("ts-poet");
|
|
11
|
+
//#region src/utils.ts
|
|
12
|
+
function assertNever(x) {
|
|
13
|
+
throw new Error("Unexpected object: " + x);
|
|
14
|
+
}
|
|
15
|
+
function isEntityTable(config, t) {
|
|
16
|
+
if (isIgnored(config, t) || isJoinTable(config, t)) return false;
|
|
17
|
+
const columnNames = t.columns.map((c) => c.name);
|
|
18
|
+
const { updatedAtConf, createdAtConf } = require_config.getTimestampConfig(config);
|
|
19
|
+
const hasCreatedAt = createdAtConf.names.some((c) => columnNames.includes(c));
|
|
20
|
+
const hasUpdatedAt = updatedAtConf.names.some((c) => columnNames.includes(c));
|
|
21
|
+
const hasIdColumn = columnNames.includes("id");
|
|
22
|
+
if (!hasIdColumn) return false;
|
|
23
|
+
if (hasIdColumn && !hasCreatedAt && !hasUpdatedAt) {
|
|
24
|
+
if (["name", "code"].every((c) => columnNames.includes(c))) return false;
|
|
25
|
+
}
|
|
26
|
+
if (isSubClassTable(t)) return true;
|
|
27
|
+
return hasIdColumn && (hasCreatedAt || !createdAtConf.required) && (hasUpdatedAt || !updatedAtConf.required);
|
|
28
|
+
}
|
|
29
|
+
function isSubClassTable(t) {
|
|
30
|
+
return t.columns.get("id").foreignKeys.length === 1;
|
|
31
|
+
}
|
|
32
|
+
function isEnumTable(config, t) {
|
|
33
|
+
if (isIgnored(config, t)) return false;
|
|
34
|
+
const columnNames = t.columns.map((c) => c.name);
|
|
35
|
+
return [
|
|
36
|
+
"id",
|
|
37
|
+
"code",
|
|
38
|
+
"name"
|
|
39
|
+
].every((c) => columnNames.includes(c)) && !isEntityTable(config, t);
|
|
40
|
+
}
|
|
41
|
+
const joinTables = /* @__PURE__ */ new Map();
|
|
42
|
+
function isJoinTable(config, t) {
|
|
43
|
+
if (isIgnored(config, t)) return false;
|
|
44
|
+
return getOrElse(joinTables, t.name, () => {
|
|
45
|
+
const { columns } = t;
|
|
46
|
+
const fks = columns.filter((c) => c.isForeignKey);
|
|
47
|
+
const pks = columns.filter((c) => c.isPrimaryKey);
|
|
48
|
+
if (fks.length !== 2) return false;
|
|
49
|
+
if (!joinTableHasId(t) && !(pks.length === 2 && pks.every((c) => c.isForeignKey))) return false;
|
|
50
|
+
const others = columns.length - fks.length - (joinTableHasId(t) ? 1 : 0);
|
|
51
|
+
const createdAts = columns.filter((c) => c.name === "created_at" || c.name === "createdAt").length;
|
|
52
|
+
return others === 0 || others === 1 && createdAts === 1;
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
/** Whether a join table has a surrogate `id` primary key (vs. an id-less FK-pair composite PK). */
|
|
56
|
+
function joinTableHasId(t) {
|
|
57
|
+
const pks = t.columns.filter((c) => c.isPrimaryKey);
|
|
58
|
+
return pks.length === 1 && !pks[0].isForeignKey;
|
|
59
|
+
}
|
|
60
|
+
function getOrElse(map, key, fn) {
|
|
61
|
+
let value = map.get(key);
|
|
62
|
+
if (value === void 0) {
|
|
63
|
+
value = fn();
|
|
64
|
+
map.set(key, value);
|
|
65
|
+
}
|
|
66
|
+
return value;
|
|
67
|
+
}
|
|
68
|
+
/** Converts `projects` to `Project`. */
|
|
69
|
+
function tableToEntityName(config, table) {
|
|
70
|
+
let entityName = config.__tableToEntityName?.[table.name];
|
|
71
|
+
if (!entityName) {
|
|
72
|
+
entityName = Object.entries(config.entities).filter(([, conf]) => conf.tableName === table.name).map(([entityName]) => entityName)[0] || (0, change_case.pascalCase)(pluralize.default.singular(table.name));
|
|
73
|
+
(config.__tableToEntityName ??= {})[table.name] = entityName;
|
|
74
|
+
}
|
|
75
|
+
return entityName;
|
|
76
|
+
}
|
|
77
|
+
const dateCode = ts_poet.code`Date`;
|
|
78
|
+
const plainDateCode = ts_poet.code`${(0, ts_poet.imp)("Temporal@joist-orm")}.PlainDate`;
|
|
79
|
+
const plainTimeCode = ts_poet.code`${(0, ts_poet.imp)("Temporal@joist-orm")}.PlainTime`;
|
|
80
|
+
const plainDateTimeCode = ts_poet.code`${(0, ts_poet.imp)("Temporal@joist-orm")}.PlainDateTime`;
|
|
81
|
+
const zonedDateTimeCode = ts_poet.code`${(0, ts_poet.imp)("Temporal@joist-orm")}.ZonedDateTime`;
|
|
82
|
+
/** Maps db types, i.e. `int`, to JS types, i.e. `number`. */
|
|
83
|
+
function mapSimpleDbTypeToTypescriptType(config, dbType) {
|
|
84
|
+
switch (dbType) {
|
|
85
|
+
case "boolean": return "boolean";
|
|
86
|
+
case "int":
|
|
87
|
+
case "numeric":
|
|
88
|
+
case "smallint":
|
|
89
|
+
case "integer":
|
|
90
|
+
case "decimal":
|
|
91
|
+
case "real":
|
|
92
|
+
case "smallserial":
|
|
93
|
+
case "serial":
|
|
94
|
+
case "double precision": return "number";
|
|
95
|
+
case "bigserial":
|
|
96
|
+
case "bigint": return "bigint";
|
|
97
|
+
case "text":
|
|
98
|
+
case "citext":
|
|
99
|
+
case "character varying":
|
|
100
|
+
case "varchar":
|
|
101
|
+
case "uuid":
|
|
102
|
+
case "tsvector":
|
|
103
|
+
case "tstzrange": return "string";
|
|
104
|
+
case "time without time zone": return config.temporal ? plainTimeCode : fail("Joist doesn't support 'time without time zone' unless temporal is enabled");
|
|
105
|
+
case "timestamp with time zone": return config.temporal ? zonedDateTimeCode : dateCode;
|
|
106
|
+
case "timestamp without time zone": return config.temporal ? plainDateTimeCode : dateCode;
|
|
107
|
+
case "date": return config.temporal ? plainDateCode : dateCode;
|
|
108
|
+
case "jsonb": return "Object";
|
|
109
|
+
case "bytea": return "Uint8Array";
|
|
110
|
+
default: assertNever(dbType);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function merge(a, b) {
|
|
114
|
+
return [...a, ...b];
|
|
115
|
+
}
|
|
116
|
+
/** Returns true if `p` is resolved, otherwise false if it is rejected. */
|
|
117
|
+
async function trueIfResolved(p) {
|
|
118
|
+
return p.then(() => true, () => false);
|
|
119
|
+
}
|
|
120
|
+
function fail(message) {
|
|
121
|
+
throw new Error(message || "Failed");
|
|
122
|
+
}
|
|
123
|
+
function sortKeys(o) {
|
|
124
|
+
return Object.keys(o).sort().reduce((acc, key) => {
|
|
125
|
+
const value = o[key];
|
|
126
|
+
acc[key] = typeof value === "object" && (0, joist_utils.isPlainObject)(value) ? sortKeys(value) : value;
|
|
127
|
+
return acc;
|
|
128
|
+
}, {});
|
|
129
|
+
}
|
|
130
|
+
function parseOrder(order) {
|
|
131
|
+
if (!order) return;
|
|
132
|
+
const [field, direction = "ASC"] = order.split(" ");
|
|
133
|
+
if (direction !== "ASC" && direction !== "DESC") throw new Error(`Invalid direction: ${direction} (must be "ASC" or "DESC")`);
|
|
134
|
+
return {
|
|
135
|
+
field,
|
|
136
|
+
direction
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
function q(s) {
|
|
140
|
+
return s === void 0 ? "undefined" : `"${s}"`;
|
|
141
|
+
}
|
|
142
|
+
function uncapitalize(s) {
|
|
143
|
+
return s.charAt(0).toLowerCase() + s.slice(1);
|
|
144
|
+
}
|
|
145
|
+
function isIgnored(config, t) {
|
|
146
|
+
return (config.ignoredTables || ["migrations", "pgmigrations"]).includes(t.name) || !shouldIncludeSchema(config, t);
|
|
147
|
+
}
|
|
148
|
+
function shouldIncludeSchema(config, t) {
|
|
149
|
+
return config.schemas ? config.schemas.includes(t.schema.name) : t.schema.name === "public";
|
|
150
|
+
}
|
|
151
|
+
//#endregion
|
|
152
|
+
exports.assertNever = assertNever;
|
|
153
|
+
exports.dateCode = dateCode;
|
|
154
|
+
exports.fail = fail;
|
|
155
|
+
exports.isEntityTable = isEntityTable;
|
|
156
|
+
exports.isEnumTable = isEnumTable;
|
|
157
|
+
exports.isJoinTable = isJoinTable;
|
|
158
|
+
exports.isSubClassTable = isSubClassTable;
|
|
159
|
+
exports.joinTableHasId = joinTableHasId;
|
|
160
|
+
exports.mapSimpleDbTypeToTypescriptType = mapSimpleDbTypeToTypescriptType;
|
|
161
|
+
exports.merge = merge;
|
|
162
|
+
exports.parseOrder = parseOrder;
|
|
163
|
+
exports.plainDateCode = plainDateCode;
|
|
164
|
+
exports.plainDateTimeCode = plainDateTimeCode;
|
|
165
|
+
exports.plainTimeCode = plainTimeCode;
|
|
166
|
+
exports.q = q;
|
|
167
|
+
exports.sortKeys = sortKeys;
|
|
168
|
+
exports.tableToEntityName = tableToEntityName;
|
|
169
|
+
exports.trueIfResolved = trueIfResolved;
|
|
170
|
+
exports.uncapitalize = uncapitalize;
|
|
171
|
+
exports.zonedDateTimeCode = zonedDateTimeCode;
|
|
172
|
+
|
|
173
|
+
//# sourceMappingURL=utils.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.cjs","names":["getTimestampConfig","pascalCase","imp","isPlainObject"],"sources":["../src/utils.ts"],"sourcesContent":["import { pascalCase } from \"change-case\";\nimport { isPlainObject } from \"joist-utils\";\nimport { type Table } from \"pg-structure\";\nimport pluralize from \"pluralize\";\nimport { code, imp } from \"ts-poet\";\n\nimport { type Config, getTimestampConfig } from \"./config.ts\";\nimport { type DatabaseColumnType, type PrimitiveTypescriptType } from \"./EntityDbMetadata.ts\";\n\nexport function assertNever(x: never): never {\n throw new Error(\"Unexpected object: \" + x);\n}\n\nexport function isEntityTable(config: Config, t: Table): boolean {\n if (isIgnored(config, t) || isJoinTable(config, t)) {\n return false;\n }\n\n // Depending on the config settings, we may/may not require the presence of timestamp\n // fields to determine whether a table is an entity.\n const columnNames = t.columns.map((c) => c.name);\n const { updatedAtConf, createdAtConf } = getTimestampConfig(config);\n const hasCreatedAt = createdAtConf.names.some((c) => columnNames.includes(c));\n const hasUpdatedAt = updatedAtConf.names.some((c) => columnNames.includes(c));\n\n // Entities always require an id column\n const hasIdColumn = columnNames.includes(\"id\");\n if (!hasIdColumn) return false;\n\n // If we have no timestamp columns, but do have `name` and `code`, we're probably an enum.\n if (hasIdColumn && !hasCreatedAt && !hasUpdatedAt) {\n if ([\"name\", \"code\"].every((c) => columnNames.includes(c))) {\n return false;\n }\n }\n\n // If the ID column is a FK then we're a subclass\n if (isSubClassTable(t)) return true;\n\n // Otherwise respect the created_at/updated_at required rules\n return hasIdColumn && (hasCreatedAt || !createdAtConf.required) && (hasUpdatedAt || !updatedAtConf.required);\n}\n\nexport function isSubClassTable(t: Table): boolean {\n // Note that `.get(\"id\")` will blow up if there is no id column\n return t.columns.get(\"id\").foreignKeys.length === 1;\n}\n\nexport function isEnumTable(config: Config, t: Table): boolean {\n if (isIgnored(config, t)) {\n return false;\n }\n const columnNames = t.columns.map((c) => c.name);\n return [\"id\", \"code\", \"name\"].every((c) => columnNames.includes(c)) && !isEntityTable(config, t);\n}\n\n// Oddly enough isJoinTable showed up as a hot spot, so cache its calculation.\nconst joinTables: Map<string, boolean> = new Map();\n\nexport function isJoinTable(config: Config, t: Table): boolean {\n if (isIgnored(config, t)) {\n return false;\n }\n return getOrElse(joinTables, t.name, () => {\n const { columns } = t;\n const fks = columns.filter((c) => c.isForeignKey);\n const pks = columns.filter((c) => c.isPrimaryKey);\n // Every join table is two FKs, plus either a surrogate `id` PK (\"id-ful\") or no surrogate\n // at all, in which case the two FKs are themselves the composite PK (\"id-less\").\n if (fks.length !== 2) return false;\n if (!joinTableHasId(t) && !(pks.length === 2 && pks.every((c) => c.isForeignKey))) return false;\n // Any column beyond the two FKs and the optional `id` PK must be a single created_at.\n const others = columns.length - fks.length - (joinTableHasId(t) ? 1 : 0);\n const createdAts = columns.filter((c) => c.name === \"created_at\" || c.name === \"createdAt\").length;\n return others === 0 || (others === 1 && createdAts === 1);\n });\n}\n\n/** Whether a join table has a surrogate `id` primary key (vs. an id-less FK-pair composite PK). */\nexport function joinTableHasId(t: Table): boolean {\n const pks = t.columns.filter((c) => c.isPrimaryKey);\n return pks.length === 1 && !pks[0].isForeignKey;\n}\n\nfunction getOrElse<K, V>(map: Map<K, V>, key: K, fn: () => V): V {\n let value = map.get(key);\n if (value === undefined) {\n value = fn();\n map.set(key, value);\n }\n return value;\n}\n\n/** Converts `projects` to `Project`. */\nexport function tableToEntityName(config: Config, table: Table): string {\n let entityName = config.__tableToEntityName?.[table.name];\n if (!entityName) {\n const configEntityName = Object.entries(config.entities)\n .filter(([, conf]) => conf.tableName === table.name)\n .map(([entityName]) => entityName)[0];\n entityName = configEntityName || pascalCase(pluralize.singular(table.name));\n (config.__tableToEntityName ??= {})[table.name] = entityName;\n }\n return entityName;\n}\n\nexport const dateCode = code`Date`;\nexport const plainDateCode = code`${imp(\"Temporal@joist-orm\")}.PlainDate`;\nexport const plainTimeCode = code`${imp(\"Temporal@joist-orm\")}.PlainTime`;\nexport const plainDateTimeCode = code`${imp(\"Temporal@joist-orm\")}.PlainDateTime`;\nexport const zonedDateTimeCode = code`${imp(\"Temporal@joist-orm\")}.ZonedDateTime`;\n\n/** Maps db types, i.e. `int`, to JS types, i.e. `number`. */\nexport function mapSimpleDbTypeToTypescriptType(config: Config, dbType: DatabaseColumnType): PrimitiveTypescriptType {\n switch (dbType) {\n case \"boolean\":\n return \"boolean\";\n case \"int\":\n case \"numeric\":\n case \"smallint\":\n case \"integer\":\n case \"decimal\":\n case \"real\":\n case \"smallserial\":\n case \"serial\":\n case \"double precision\":\n return \"number\";\n case \"bigserial\":\n case \"bigint\":\n return \"bigint\";\n case \"text\":\n case \"citext\":\n case \"character varying\":\n case \"varchar\":\n case \"uuid\":\n case \"tsvector\":\n case \"tstzrange\":\n return \"string\";\n case \"time without time zone\":\n return config.temporal\n ? plainTimeCode\n : fail(\"Joist doesn't support 'time without time zone' unless temporal is enabled\");\n case \"timestamp with time zone\":\n return config.temporal ? zonedDateTimeCode : dateCode;\n case \"timestamp without time zone\":\n return config.temporal ? plainDateTimeCode : dateCode;\n case \"date\":\n return config.temporal ? plainDateCode : dateCode;\n case \"jsonb\":\n return \"Object\";\n case \"bytea\":\n return \"Uint8Array\";\n default:\n assertNever(dbType);\n }\n}\n\nexport function merge<T>(a: T[], b: T[]): T[] {\n return [...a, ...b];\n}\n\n/** Returns true if `p` is resolved, otherwise false if it is rejected. */\nexport async function trueIfResolved(p: Promise<unknown>): Promise<boolean> {\n return p.then(\n () => true,\n () => false,\n );\n}\n\nexport function fail(message?: string): never {\n throw new Error(message || \"Failed\");\n}\n\nexport function sortKeys<T extends object>(o: T): T {\n return Object.keys(o)\n .sort()\n .reduce(\n (acc, key) => {\n const value = o[key as keyof T];\n const newValue = typeof value === \"object\" && isPlainObject(value) ? sortKeys(value as any as object) : value;\n acc[key as keyof T] = newValue as any;\n return acc;\n },\n {} as any as T,\n );\n}\n\nexport function parseOrder(order: string | undefined): { field: string; direction: \"ASC\" | \"DESC\" } | undefined {\n if (!order) {\n return undefined;\n }\n const [field, direction = \"ASC\"] = order.split(\" \");\n if (direction !== \"ASC\" && direction !== \"DESC\") {\n throw new Error(`Invalid direction: ${direction} (must be \"ASC\" or \"DESC\")`);\n }\n return { field, direction };\n}\n\nexport function q(s: string | undefined): string {\n return s === undefined ? \"undefined\" : `\"${s}\"`;\n}\n\nexport function uncapitalize(s: string): string {\n return s.charAt(0).toLowerCase() + s.slice(1);\n}\n\nfunction isIgnored(config: Config, t: Table): boolean {\n return (config.ignoredTables || [\"migrations\", \"pgmigrations\"]).includes(t.name) || !shouldIncludeSchema(config, t);\n}\n\nfunction shouldIncludeSchema(config: Config, t: Table): boolean {\n return config.schemas ? config.schemas.includes(t.schema.name) : t.schema.name === \"public\";\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Config } from "./config.cjs";
|
|
2
|
+
import { DatabaseColumnType, PrimitiveTypescriptType } from "./EntityDbMetadata.cjs";
|
|
3
|
+
import { Table } from "pg-structure";
|
|
4
|
+
//#region src/utils.d.ts
|
|
5
|
+
declare function assertNever(x: never): never;
|
|
6
|
+
declare function isEntityTable(config: Config, t: Table): boolean;
|
|
7
|
+
declare function isSubClassTable(t: Table): boolean;
|
|
8
|
+
declare function isEnumTable(config: Config, t: Table): boolean;
|
|
9
|
+
declare function isJoinTable(config: Config, t: Table): boolean;
|
|
10
|
+
/** Whether a join table has a surrogate `id` primary key (vs. an id-less FK-pair composite PK). */
|
|
11
|
+
declare function joinTableHasId(t: Table): boolean;
|
|
12
|
+
/** Converts `projects` to `Project`. */
|
|
13
|
+
declare function tableToEntityName(config: Config, table: Table): string;
|
|
14
|
+
declare const dateCode: import("ts-poet").Code;
|
|
15
|
+
declare const plainDateCode: import("ts-poet").Code;
|
|
16
|
+
declare const plainTimeCode: import("ts-poet").Code;
|
|
17
|
+
declare const plainDateTimeCode: import("ts-poet").Code;
|
|
18
|
+
declare const zonedDateTimeCode: import("ts-poet").Code;
|
|
19
|
+
/** Maps db types, i.e. `int`, to JS types, i.e. `number`. */
|
|
20
|
+
declare function mapSimpleDbTypeToTypescriptType(config: Config, dbType: DatabaseColumnType): PrimitiveTypescriptType;
|
|
21
|
+
declare function merge<T>(a: T[], b: T[]): T[];
|
|
22
|
+
/** Returns true if `p` is resolved, otherwise false if it is rejected. */
|
|
23
|
+
declare function trueIfResolved(p: Promise<unknown>): Promise<boolean>;
|
|
24
|
+
declare function fail(message?: string): never;
|
|
25
|
+
declare function sortKeys<T extends object>(o: T): T;
|
|
26
|
+
declare function parseOrder(order: string | undefined): {
|
|
27
|
+
field: string;
|
|
28
|
+
direction: "ASC" | "DESC";
|
|
29
|
+
} | undefined;
|
|
30
|
+
declare function q(s: string | undefined): string;
|
|
31
|
+
declare function uncapitalize(s: string): string;
|
|
32
|
+
//#endregion
|
|
33
|
+
export { assertNever, dateCode, fail, isEntityTable, isEnumTable, isJoinTable, isSubClassTable, joinTableHasId, mapSimpleDbTypeToTypescriptType, merge, parseOrder, plainDateCode, plainDateTimeCode, plainTimeCode, q, sortKeys, tableToEntityName, trueIfResolved, uncapitalize, zonedDateTimeCode };
|
|
34
|
+
//# sourceMappingURL=utils.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.cts","names":[],"sources":["../src/utils.ts"],"mappings":";;;;iBASgB,YAAY;iBAIZ,cAAc,QAAQ,QAAQ,GAAG;iBA8BjC,gBAAgB,GAAG;iBAKnB,YAAY,QAAQ,QAAQ,GAAG;iBAW/B,YAAY,QAAQ,QAAQ,GAAG;;iBAoB/B,eAAe,GAAG;;iBAelB,kBAAkB,QAAQ,QAAQ,OAAO;cAY5C,4BAAQ;cACR,iCAAa;cACb,iCAAa;cACb,qCAAiB;cACjB,qCAAiB;;iBAGd,gCAAgC,QAAQ,QAAQ,QAAQ,qBAAqB;iBA4C7E,MAAM,GAAG,GAAG,KAAK,GAAG,MAAM;;iBAKpB,eAAe,GAAG,mBAAmB;iBAO3C,KAAK;iBAIL,SAAS,kBAAkB,GAAG,IAAI;iBAclC,WAAW;EAA8B;EAAe;;iBAWxD,EAAE;iBAIF,aAAa"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Config } from "./config.mjs";
|
|
2
|
+
import { DatabaseColumnType, PrimitiveTypescriptType } from "./EntityDbMetadata.mjs";
|
|
3
|
+
import { Table } from "pg-structure";
|
|
4
|
+
//#region src/utils.d.ts
|
|
5
|
+
declare function assertNever(x: never): never;
|
|
6
|
+
declare function isEntityTable(config: Config, t: Table): boolean;
|
|
7
|
+
declare function isSubClassTable(t: Table): boolean;
|
|
8
|
+
declare function isEnumTable(config: Config, t: Table): boolean;
|
|
9
|
+
declare function isJoinTable(config: Config, t: Table): boolean;
|
|
10
|
+
/** Whether a join table has a surrogate `id` primary key (vs. an id-less FK-pair composite PK). */
|
|
11
|
+
declare function joinTableHasId(t: Table): boolean;
|
|
12
|
+
/** Converts `projects` to `Project`. */
|
|
13
|
+
declare function tableToEntityName(config: Config, table: Table): string;
|
|
14
|
+
declare const dateCode: import("ts-poet").Code;
|
|
15
|
+
declare const plainDateCode: import("ts-poet").Code;
|
|
16
|
+
declare const plainTimeCode: import("ts-poet").Code;
|
|
17
|
+
declare const plainDateTimeCode: import("ts-poet").Code;
|
|
18
|
+
declare const zonedDateTimeCode: import("ts-poet").Code;
|
|
19
|
+
/** Maps db types, i.e. `int`, to JS types, i.e. `number`. */
|
|
20
|
+
declare function mapSimpleDbTypeToTypescriptType(config: Config, dbType: DatabaseColumnType): PrimitiveTypescriptType;
|
|
21
|
+
declare function merge<T>(a: T[], b: T[]): T[];
|
|
22
|
+
/** Returns true if `p` is resolved, otherwise false if it is rejected. */
|
|
23
|
+
declare function trueIfResolved(p: Promise<unknown>): Promise<boolean>;
|
|
24
|
+
declare function fail(message?: string): never;
|
|
25
|
+
declare function sortKeys<T extends object>(o: T): T;
|
|
26
|
+
declare function parseOrder(order: string | undefined): {
|
|
27
|
+
field: string;
|
|
28
|
+
direction: "ASC" | "DESC";
|
|
29
|
+
} | undefined;
|
|
30
|
+
declare function q(s: string | undefined): string;
|
|
31
|
+
declare function uncapitalize(s: string): string;
|
|
32
|
+
//#endregion
|
|
33
|
+
export { assertNever, dateCode, fail, isEntityTable, isEnumTable, isJoinTable, isSubClassTable, joinTableHasId, mapSimpleDbTypeToTypescriptType, merge, parseOrder, plainDateCode, plainDateTimeCode, plainTimeCode, q, sortKeys, tableToEntityName, trueIfResolved, uncapitalize, zonedDateTimeCode };
|
|
34
|
+
//# sourceMappingURL=utils.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.mts","names":[],"sources":["../src/utils.ts"],"mappings":";;;;iBASgB,YAAY;iBAIZ,cAAc,QAAQ,QAAQ,GAAG;iBA8BjC,gBAAgB,GAAG;iBAKnB,YAAY,QAAQ,QAAQ,GAAG;iBAW/B,YAAY,QAAQ,QAAQ,GAAG;;iBAoB/B,eAAe,GAAG;;iBAelB,kBAAkB,QAAQ,QAAQ,OAAO;cAY5C,4BAAQ;cACR,iCAAa;cACb,iCAAa;cACb,qCAAiB;cACjB,qCAAiB;;iBAGd,gCAAgC,QAAQ,QAAQ,QAAQ,qBAAqB;iBA4C7E,MAAM,GAAG,GAAG,KAAK,GAAG,MAAM;;iBAKpB,eAAe,GAAG,mBAAmB;iBAO3C,KAAK;iBAIL,SAAS,kBAAkB,GAAG,IAAI;iBAclC,WAAW;EAA8B;EAAe;;iBAWxD,EAAE;iBAIF,aAAa"}
|
package/build/utils.js
CHANGED
|
@@ -1,205 +1,151 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
exports.isSubClassTable = isSubClassTable;
|
|
10
|
-
exports.isEnumTable = isEnumTable;
|
|
11
|
-
exports.isJoinTable = isJoinTable;
|
|
12
|
-
exports.joinTableHasId = joinTableHasId;
|
|
13
|
-
exports.tableToEntityName = tableToEntityName;
|
|
14
|
-
exports.mapSimpleDbTypeToTypescriptType = mapSimpleDbTypeToTypescriptType;
|
|
15
|
-
exports.merge = merge;
|
|
16
|
-
exports.trueIfResolved = trueIfResolved;
|
|
17
|
-
exports.fail = fail;
|
|
18
|
-
exports.sortKeys = sortKeys;
|
|
19
|
-
exports.parseOrder = parseOrder;
|
|
20
|
-
exports.q = q;
|
|
21
|
-
exports.uncapitalize = uncapitalize;
|
|
22
|
-
const change_case_1 = require("change-case");
|
|
23
|
-
const joist_utils_1 = require("joist-utils");
|
|
24
|
-
const pluralize_1 = __importDefault(require("pluralize"));
|
|
25
|
-
const ts_poet_1 = require("ts-poet");
|
|
26
|
-
const config_1 = require("./config");
|
|
1
|
+
import { getTimestampConfig } from "./config.js";
|
|
2
|
+
import "./EntityDbMetadata.js";
|
|
3
|
+
import { pascalCase } from "change-case";
|
|
4
|
+
import { isPlainObject } from "joist-utils";
|
|
5
|
+
import "pg-structure";
|
|
6
|
+
import pluralize from "pluralize";
|
|
7
|
+
import { code, imp } from "ts-poet";
|
|
8
|
+
//#region src/utils.ts
|
|
27
9
|
function assertNever(x) {
|
|
28
|
-
|
|
10
|
+
throw new Error("Unexpected object: " + x);
|
|
29
11
|
}
|
|
30
12
|
function isEntityTable(config, t) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
return false;
|
|
44
|
-
// If we have no timestamp columns, but do have `name` and `code`, we're probably an enum.
|
|
45
|
-
if (hasIdColumn && !hasCreatedAt && !hasUpdatedAt) {
|
|
46
|
-
if (["name", "code"].every((c) => columnNames.includes(c))) {
|
|
47
|
-
return false;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
// If the ID column is a FK then we're a subclass
|
|
51
|
-
if (isSubClassTable(t))
|
|
52
|
-
return true;
|
|
53
|
-
// Otherwise respect the created_at/updated_at required rules
|
|
54
|
-
return hasIdColumn && (hasCreatedAt || !createdAtConf.required) && (hasUpdatedAt || !updatedAtConf.required);
|
|
13
|
+
if (isIgnored(config, t) || isJoinTable(config, t)) return false;
|
|
14
|
+
const columnNames = t.columns.map((c) => c.name);
|
|
15
|
+
const { updatedAtConf, createdAtConf } = getTimestampConfig(config);
|
|
16
|
+
const hasCreatedAt = createdAtConf.names.some((c) => columnNames.includes(c));
|
|
17
|
+
const hasUpdatedAt = updatedAtConf.names.some((c) => columnNames.includes(c));
|
|
18
|
+
const hasIdColumn = columnNames.includes("id");
|
|
19
|
+
if (!hasIdColumn) return false;
|
|
20
|
+
if (hasIdColumn && !hasCreatedAt && !hasUpdatedAt) {
|
|
21
|
+
if (["name", "code"].every((c) => columnNames.includes(c))) return false;
|
|
22
|
+
}
|
|
23
|
+
if (isSubClassTable(t)) return true;
|
|
24
|
+
return hasIdColumn && (hasCreatedAt || !createdAtConf.required) && (hasUpdatedAt || !updatedAtConf.required);
|
|
55
25
|
}
|
|
56
26
|
function isSubClassTable(t) {
|
|
57
|
-
|
|
58
|
-
return t.columns.get("id").foreignKeys.length === 1;
|
|
27
|
+
return t.columns.get("id").foreignKeys.length === 1;
|
|
59
28
|
}
|
|
60
29
|
function isEnumTable(config, t) {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
30
|
+
if (isIgnored(config, t)) return false;
|
|
31
|
+
const columnNames = t.columns.map((c) => c.name);
|
|
32
|
+
return [
|
|
33
|
+
"id",
|
|
34
|
+
"code",
|
|
35
|
+
"name"
|
|
36
|
+
].every((c) => columnNames.includes(c)) && !isEntityTable(config, t);
|
|
37
|
+
}
|
|
38
|
+
const joinTables = /* @__PURE__ */ new Map();
|
|
69
39
|
function isJoinTable(config, t) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
if (!joinTableHasId(t) && !(pks.length === 2 && pks.every((c) => c.isForeignKey)))
|
|
82
|
-
return false;
|
|
83
|
-
// Any column beyond the two FKs and the optional `id` PK must be a single created_at.
|
|
84
|
-
const others = columns.length - fks.length - (joinTableHasId(t) ? 1 : 0);
|
|
85
|
-
const createdAts = columns.filter((c) => c.name === "created_at" || c.name === "createdAt").length;
|
|
86
|
-
return others === 0 || (others === 1 && createdAts === 1);
|
|
87
|
-
});
|
|
40
|
+
if (isIgnored(config, t)) return false;
|
|
41
|
+
return getOrElse(joinTables, t.name, () => {
|
|
42
|
+
const { columns } = t;
|
|
43
|
+
const fks = columns.filter((c) => c.isForeignKey);
|
|
44
|
+
const pks = columns.filter((c) => c.isPrimaryKey);
|
|
45
|
+
if (fks.length !== 2) return false;
|
|
46
|
+
if (!joinTableHasId(t) && !(pks.length === 2 && pks.every((c) => c.isForeignKey))) return false;
|
|
47
|
+
const others = columns.length - fks.length - (joinTableHasId(t) ? 1 : 0);
|
|
48
|
+
const createdAts = columns.filter((c) => c.name === "created_at" || c.name === "createdAt").length;
|
|
49
|
+
return others === 0 || others === 1 && createdAts === 1;
|
|
50
|
+
});
|
|
88
51
|
}
|
|
89
52
|
/** Whether a join table has a surrogate `id` primary key (vs. an id-less FK-pair composite PK). */
|
|
90
53
|
function joinTableHasId(t) {
|
|
91
|
-
|
|
92
|
-
|
|
54
|
+
const pks = t.columns.filter((c) => c.isPrimaryKey);
|
|
55
|
+
return pks.length === 1 && !pks[0].isForeignKey;
|
|
93
56
|
}
|
|
94
57
|
function getOrElse(map, key, fn) {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
58
|
+
let value = map.get(key);
|
|
59
|
+
if (value === void 0) {
|
|
60
|
+
value = fn();
|
|
61
|
+
map.set(key, value);
|
|
62
|
+
}
|
|
63
|
+
return value;
|
|
101
64
|
}
|
|
102
65
|
/** Converts `projects` to `Project`. */
|
|
103
66
|
function tableToEntityName(config, table) {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
exports.plainTimeCode = (0, ts_poet_1.code) `${(0, ts_poet_1.imp)("Temporal@joist-orm")}.PlainTime`;
|
|
117
|
-
exports.plainDateTimeCode = (0, ts_poet_1.code) `${(0, ts_poet_1.imp)("Temporal@joist-orm")}.PlainDateTime`;
|
|
118
|
-
exports.zonedDateTimeCode = (0, ts_poet_1.code) `${(0, ts_poet_1.imp)("Temporal@joist-orm")}.ZonedDateTime`;
|
|
67
|
+
let entityName = config.__tableToEntityName?.[table.name];
|
|
68
|
+
if (!entityName) {
|
|
69
|
+
entityName = Object.entries(config.entities).filter(([, conf]) => conf.tableName === table.name).map(([entityName]) => entityName)[0] || pascalCase(pluralize.singular(table.name));
|
|
70
|
+
(config.__tableToEntityName ??= {})[table.name] = entityName;
|
|
71
|
+
}
|
|
72
|
+
return entityName;
|
|
73
|
+
}
|
|
74
|
+
const dateCode = code`Date`;
|
|
75
|
+
const plainDateCode = code`${imp("Temporal@joist-orm")}.PlainDate`;
|
|
76
|
+
const plainTimeCode = code`${imp("Temporal@joist-orm")}.PlainTime`;
|
|
77
|
+
const plainDateTimeCode = code`${imp("Temporal@joist-orm")}.PlainDateTime`;
|
|
78
|
+
const zonedDateTimeCode = code`${imp("Temporal@joist-orm")}.ZonedDateTime`;
|
|
119
79
|
/** Maps db types, i.e. `int`, to JS types, i.e. `number`. */
|
|
120
80
|
function mapSimpleDbTypeToTypescriptType(config, dbType) {
|
|
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
|
-
case "timestamp with time zone":
|
|
150
|
-
return config.temporal ? exports.zonedDateTimeCode : exports.dateCode;
|
|
151
|
-
case "timestamp without time zone":
|
|
152
|
-
return config.temporal ? exports.plainDateTimeCode : exports.dateCode;
|
|
153
|
-
case "date":
|
|
154
|
-
return config.temporal ? exports.plainDateCode : exports.dateCode;
|
|
155
|
-
case "jsonb":
|
|
156
|
-
return "Object";
|
|
157
|
-
case "bytea":
|
|
158
|
-
return "Uint8Array";
|
|
159
|
-
default:
|
|
160
|
-
assertNever(dbType);
|
|
161
|
-
}
|
|
81
|
+
switch (dbType) {
|
|
82
|
+
case "boolean": return "boolean";
|
|
83
|
+
case "int":
|
|
84
|
+
case "numeric":
|
|
85
|
+
case "smallint":
|
|
86
|
+
case "integer":
|
|
87
|
+
case "decimal":
|
|
88
|
+
case "real":
|
|
89
|
+
case "smallserial":
|
|
90
|
+
case "serial":
|
|
91
|
+
case "double precision": return "number";
|
|
92
|
+
case "bigserial":
|
|
93
|
+
case "bigint": return "bigint";
|
|
94
|
+
case "text":
|
|
95
|
+
case "citext":
|
|
96
|
+
case "character varying":
|
|
97
|
+
case "varchar":
|
|
98
|
+
case "uuid":
|
|
99
|
+
case "tsvector":
|
|
100
|
+
case "tstzrange": return "string";
|
|
101
|
+
case "time without time zone": return config.temporal ? plainTimeCode : fail("Joist doesn't support 'time without time zone' unless temporal is enabled");
|
|
102
|
+
case "timestamp with time zone": return config.temporal ? zonedDateTimeCode : dateCode;
|
|
103
|
+
case "timestamp without time zone": return config.temporal ? plainDateTimeCode : dateCode;
|
|
104
|
+
case "date": return config.temporal ? plainDateCode : dateCode;
|
|
105
|
+
case "jsonb": return "Object";
|
|
106
|
+
case "bytea": return "Uint8Array";
|
|
107
|
+
default: assertNever(dbType);
|
|
108
|
+
}
|
|
162
109
|
}
|
|
163
110
|
function merge(a, b) {
|
|
164
|
-
|
|
111
|
+
return [...a, ...b];
|
|
165
112
|
}
|
|
166
113
|
/** Returns true if `p` is resolved, otherwise false if it is rejected. */
|
|
167
114
|
async function trueIfResolved(p) {
|
|
168
|
-
|
|
115
|
+
return p.then(() => true, () => false);
|
|
169
116
|
}
|
|
170
117
|
function fail(message) {
|
|
171
|
-
|
|
118
|
+
throw new Error(message || "Failed");
|
|
172
119
|
}
|
|
173
120
|
function sortKeys(o) {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
acc[key] = newValue;
|
|
180
|
-
return acc;
|
|
181
|
-
}, {});
|
|
121
|
+
return Object.keys(o).sort().reduce((acc, key) => {
|
|
122
|
+
const value = o[key];
|
|
123
|
+
acc[key] = typeof value === "object" && isPlainObject(value) ? sortKeys(value) : value;
|
|
124
|
+
return acc;
|
|
125
|
+
}, {});
|
|
182
126
|
}
|
|
183
127
|
function parseOrder(order) {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
return { field, direction };
|
|
128
|
+
if (!order) return;
|
|
129
|
+
const [field, direction = "ASC"] = order.split(" ");
|
|
130
|
+
if (direction !== "ASC" && direction !== "DESC") throw new Error(`Invalid direction: ${direction} (must be "ASC" or "DESC")`);
|
|
131
|
+
return {
|
|
132
|
+
field,
|
|
133
|
+
direction
|
|
134
|
+
};
|
|
192
135
|
}
|
|
193
136
|
function q(s) {
|
|
194
|
-
|
|
137
|
+
return s === void 0 ? "undefined" : `"${s}"`;
|
|
195
138
|
}
|
|
196
139
|
function uncapitalize(s) {
|
|
197
|
-
|
|
140
|
+
return s.charAt(0).toLowerCase() + s.slice(1);
|
|
198
141
|
}
|
|
199
142
|
function isIgnored(config, t) {
|
|
200
|
-
|
|
143
|
+
return (config.ignoredTables || ["migrations", "pgmigrations"]).includes(t.name) || !shouldIncludeSchema(config, t);
|
|
201
144
|
}
|
|
202
145
|
function shouldIncludeSchema(config, t) {
|
|
203
|
-
|
|
146
|
+
return config.schemas ? config.schemas.includes(t.schema.name) : t.schema.name === "public";
|
|
204
147
|
}
|
|
148
|
+
//#endregion
|
|
149
|
+
export { assertNever, dateCode, fail, isEntityTable, isEnumTable, isJoinTable, isSubClassTable, joinTableHasId, mapSimpleDbTypeToTypescriptType, merge, parseOrder, plainDateCode, plainDateTimeCode, plainTimeCode, q, sortKeys, tableToEntityName, trueIfResolved, uncapitalize, zonedDateTimeCode };
|
|
150
|
+
|
|
205
151
|
//# sourceMappingURL=utils.js.map
|