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
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ASTNode } from "jscodeshift";
|
|
2
|
+
import { namedTypes } from "ast-types";
|
|
3
|
+
//#region src/docs/parsing.d.ts
|
|
4
|
+
type CommentKind = (namedTypes.CommentBlock | namedTypes.CommentLine | namedTypes.Block | namedTypes.Line) & {
|
|
5
|
+
start?: number;
|
|
6
|
+
end?: number;
|
|
7
|
+
};
|
|
8
|
+
type Commented = ASTNode & {
|
|
9
|
+
comments?: CommentKind[] | null;
|
|
10
|
+
start?: number;
|
|
11
|
+
end?: number;
|
|
12
|
+
loc?: namedTypes.SourceLocation | null;
|
|
13
|
+
};
|
|
14
|
+
type MemberKind = "property" | "getter" | "setter" | "method";
|
|
15
|
+
interface MemberInfo {
|
|
16
|
+
kind: MemberKind;
|
|
17
|
+
name: string;
|
|
18
|
+
doc: string | undefined;
|
|
19
|
+
node: Commented;
|
|
20
|
+
}
|
|
21
|
+
interface SourceEdit {
|
|
22
|
+
start: number;
|
|
23
|
+
end: number;
|
|
24
|
+
text: string;
|
|
25
|
+
}
|
|
26
|
+
/** Parse an entity .ts file and extract class + member JSDoc. */
|
|
27
|
+
declare function parseEntityJSDocs(source: string): {
|
|
28
|
+
classDoc: string | undefined;
|
|
29
|
+
classNode: Commented | undefined;
|
|
30
|
+
members: MemberInfo[];
|
|
31
|
+
fieldDocs: Record<string, string>;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Build a source edit that sets the JSDoc on a node (replacing existing or inserting new).
|
|
35
|
+
*
|
|
36
|
+
* (This is bizarre, but this `SourceEdit` + `applyEdits` leaves all existing formatting
|
|
37
|
+
* alone better than doing a `node.toSource()` or other AST-based updates. :grimmacing:)
|
|
38
|
+
*/
|
|
39
|
+
declare function buildJSDocEdit(node: Commented, text: string): SourceEdit;
|
|
40
|
+
/** Apply edits to source by splicing in reverse order. */
|
|
41
|
+
declare function applyEdits(source: string, edits: SourceEdit[]): string;
|
|
42
|
+
/** Build a JSDoc block comment string from plain text. */
|
|
43
|
+
declare function buildJSDocBlock(text: string, indent: number): string;
|
|
44
|
+
/** The `@generated Entity.md` marker, i.e. so readers know a JSDoc is sourced from (and edited in) the `.md`. */
|
|
45
|
+
declare function generatedTag(entityName: string): string;
|
|
46
|
+
//#endregion
|
|
47
|
+
export { MemberInfo, MemberKind, SourceEdit, applyEdits, buildJSDocBlock, buildJSDocEdit, generatedTag, parseEntityJSDocs };
|
|
48
|
+
//# sourceMappingURL=parsing.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parsing.d.mts","names":[],"sources":["../../src/docs/parsing.ts"],"mappings":";;;KAKK,eAAe,WAAW,eAAe,WAAW,cAAc,WAAW,QAAQ,WAAW;EACnG;EACA;;KAGG,YAAY;EACf,WAAW;EACX;EACA;EACA,MAAM,WAAW;;KAGP;UAEK;EACf,MAAM;EACN;EACA;EACA,MAAM;;UAGS;EACf;EACA;EACA;;;iBAIc,kBAAkB;;;;;;;;;;;;iBAuDlB,eAAe,MAAM,WAAW,eAAe;;iBAW/C,WAAW,gBAAgB,OAAO;;iBAUlC,gBAAgB,cAAc;;iBAQ9B,aAAa"}
|
package/build/docs/parsing.js
CHANGED
|
@@ -1,109 +1,110 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.parseEntityJSDocs = parseEntityJSDocs;
|
|
7
|
-
exports.buildJSDocEdit = buildJSDocEdit;
|
|
8
|
-
exports.applyEdits = applyEdits;
|
|
9
|
-
const jscodeshift_1 = __importDefault(require("jscodeshift"));
|
|
10
|
-
const j = jscodeshift_1.default.withParser("ts");
|
|
11
|
-
j;
|
|
1
|
+
import jscodeshift from "jscodeshift";
|
|
2
|
+
//#region src/docs/parsing.ts
|
|
3
|
+
const j = jscodeshift.withParser("ts");
|
|
12
4
|
/** Parse an entity .ts file and extract class + member JSDoc. */
|
|
13
5
|
function parseEntityJSDocs(source) {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
6
|
+
const root = j(source);
|
|
7
|
+
let classDoc;
|
|
8
|
+
let classNode;
|
|
9
|
+
const members = [];
|
|
10
|
+
root.find(j.ExportNamedDeclaration).forEach((p) => {
|
|
11
|
+
if (p.node.declaration?.type === "ClassDeclaration") {
|
|
12
|
+
classDoc = extractJSDoc(p.node);
|
|
13
|
+
classNode = p.node;
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
root.find(j.ClassProperty).forEach((p) => {
|
|
17
|
+
const name = p.node.key?.name;
|
|
18
|
+
if (name) members.push({
|
|
19
|
+
name,
|
|
20
|
+
kind: "property",
|
|
21
|
+
doc: extractJSDoc(p.node),
|
|
22
|
+
node: p.node
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
root.find(j.ClassMethod).forEach((p) => {
|
|
26
|
+
const name = p.node.key?.name;
|
|
27
|
+
if (name) members.push({
|
|
28
|
+
name,
|
|
29
|
+
kind: classMethodKind(p.node),
|
|
30
|
+
doc: extractJSDoc(p.node),
|
|
31
|
+
node: p.node
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
return {
|
|
35
|
+
classDoc,
|
|
36
|
+
classNode,
|
|
37
|
+
members,
|
|
38
|
+
fieldDocs: collectFieldDocs(members)
|
|
39
|
+
};
|
|
42
40
|
}
|
|
43
41
|
/**
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
42
|
+
* Collect field docs from members for backfill.
|
|
43
|
+
* When a getter and setter share the same name, prefer the getter's doc.
|
|
44
|
+
*/
|
|
47
45
|
function collectFieldDocs(members) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
}
|
|
56
|
-
return result;
|
|
46
|
+
const result = {};
|
|
47
|
+
for (const m of members) {
|
|
48
|
+
if (!m.doc || m.kind === "method") continue;
|
|
49
|
+
if (result[m.name] && m.kind === "setter") continue;
|
|
50
|
+
result[m.name] = m.doc;
|
|
51
|
+
}
|
|
52
|
+
return result;
|
|
57
53
|
}
|
|
58
54
|
/**
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
55
|
+
* Build a source edit that sets the JSDoc on a node (replacing existing or inserting new).
|
|
56
|
+
*
|
|
57
|
+
* (This is bizarre, but this `SourceEdit` + `applyEdits` leaves all existing formatting
|
|
58
|
+
* alone better than doing a `node.toSource()` or other AST-based updates. :grimmacing:)
|
|
59
|
+
*/
|
|
64
60
|
function buildJSDocEdit(node, text) {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
61
|
+
const column = node.loc.start.column;
|
|
62
|
+
const existingComment = node.comments?.find((c) => c.leading && "value" in c && c.value.startsWith("*"));
|
|
63
|
+
if (existingComment) return {
|
|
64
|
+
start: existingComment.start,
|
|
65
|
+
end: existingComment.end,
|
|
66
|
+
text: buildJSDocBlock(text, column)
|
|
67
|
+
};
|
|
68
|
+
const indent = " ".repeat(column);
|
|
69
|
+
return {
|
|
70
|
+
start: node.start,
|
|
71
|
+
end: node.start,
|
|
72
|
+
text: buildJSDocBlock(text, column) + "\n" + indent
|
|
73
|
+
};
|
|
72
74
|
}
|
|
73
75
|
/** Apply edits to source by splicing in reverse order. */
|
|
74
76
|
function applyEdits(source, edits) {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
}
|
|
80
|
-
return result;
|
|
77
|
+
const sorted = [...edits].sort((a, b) => b.start - a.start);
|
|
78
|
+
let result = source;
|
|
79
|
+
for (const edit of sorted) result = result.slice(0, edit.start) + edit.text + result.slice(edit.end);
|
|
80
|
+
return result;
|
|
81
81
|
}
|
|
82
82
|
/** Build a JSDoc block comment string from plain text. */
|
|
83
83
|
function buildJSDocBlock(text, indent) {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
84
|
+
const pad = " ".repeat(indent);
|
|
85
|
+
const lines = text.split("\n");
|
|
86
|
+
if (lines.length === 1) return `/** ${lines[0]} */`;
|
|
87
|
+
return `/**\n` + lines.map((l) => l ? `${pad} * ${l}` : `${pad} *`).join("\n") + `\n${pad} */`;
|
|
88
|
+
}
|
|
89
|
+
/** The `@generated Entity.md` marker, i.e. so readers know a JSDoc is sourced from (and edited in) the `.md`. */
|
|
90
|
+
function generatedTag(entityName) {
|
|
91
|
+
return `@generated ${entityName}.md`;
|
|
89
92
|
}
|
|
90
93
|
/** Extract text from a JSDoc-style leading block comment (i.e. one starting with `*`). */
|
|
91
94
|
function extractJSDoc(node) {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
while (lines.length > 0 && lines[lines.length - 1].trim() === "")
|
|
99
|
-
lines.pop();
|
|
100
|
-
return lines.join("\n") || undefined;
|
|
95
|
+
const block = node.comments?.find((c) => c.leading && "value" in c && c.value.startsWith("*"));
|
|
96
|
+
if (!block || !("value" in block)) return void 0;
|
|
97
|
+
const lines = block.value.split("\n").map((l) => l.replace(/^\s*\*\s?/, "").trimEnd());
|
|
98
|
+
while (lines.length > 0 && lines[0].trim() === "") lines.shift();
|
|
99
|
+
while (lines.length > 0 && lines[lines.length - 1].trim() === "") lines.pop();
|
|
100
|
+
return lines.join("\n") || void 0;
|
|
101
101
|
}
|
|
102
102
|
function classMethodKind(node) {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
return "setter";
|
|
107
|
-
return "method";
|
|
103
|
+
if (node.kind === "get") return "getter";
|
|
104
|
+
if (node.kind === "set") return "setter";
|
|
105
|
+
return "method";
|
|
108
106
|
}
|
|
107
|
+
//#endregion
|
|
108
|
+
export { applyEdits, buildJSDocBlock, buildJSDocEdit, generatedTag, parseEntityJSDocs };
|
|
109
|
+
|
|
109
110
|
//# sourceMappingURL=parsing.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parsing.js","
|
|
1
|
+
{"version":3,"file":"parsing.js","names":[],"sources":["../../src/docs/parsing.ts"],"sourcesContent":["import type { namedTypes } from \"ast-types\";\nimport jscodeshift, { type ASTNode } from \"jscodeshift\";\n\nconst j = jscodeshift.withParser(\"ts\");\n\ntype CommentKind = (namedTypes.CommentBlock | namedTypes.CommentLine | namedTypes.Block | namedTypes.Line) & {\n start?: number;\n end?: number;\n};\nj;\ntype Commented = ASTNode & {\n comments?: CommentKind[] | null;\n start?: number;\n end?: number;\n loc?: namedTypes.SourceLocation | null;\n};\n\nexport type MemberKind = \"property\" | \"getter\" | \"setter\" | \"method\";\n\nexport interface MemberInfo {\n kind: MemberKind;\n name: string;\n doc: string | undefined;\n node: Commented;\n}\n\nexport interface SourceEdit {\n start: number;\n end: number;\n text: string;\n}\n\n/** Parse an entity .ts file and extract class + member JSDoc. */\nexport function parseEntityJSDocs(source: string) {\n const root = j(source);\n let classDoc: string | undefined;\n let classNode: Commented | undefined;\n const members: MemberInfo[] = [];\n\n root.find(j.ExportNamedDeclaration).forEach((p) => {\n if (p.node.declaration?.type === \"ClassDeclaration\") {\n classDoc = extractJSDoc(p.node as Commented);\n classNode = p.node as Commented;\n }\n });\n\n root.find(j.ClassProperty).forEach((p) => {\n const name = (p.node.key as namedTypes.Identifier)?.name;\n if (name) {\n members.push({ name, kind: \"property\", doc: extractJSDoc(p.node as Commented), node: p.node as Commented });\n }\n });\n\n root.find(j.ClassMethod).forEach((p) => {\n const name = (p.node.key as namedTypes.Identifier)?.name;\n if (name) {\n members.push({\n name,\n kind: classMethodKind(p.node),\n doc: extractJSDoc(p.node as Commented),\n node: p.node as Commented,\n });\n }\n });\n\n return { classDoc, classNode, members, fieldDocs: collectFieldDocs(members) };\n}\n\n/**\n * Collect field docs from members for backfill.\n * When a getter and setter share the same name, prefer the getter's doc.\n */\nfunction collectFieldDocs(members: MemberInfo[]): Record<string, string> {\n const result: Record<string, string> = {};\n for (const m of members) {\n if (!m.doc || m.kind === \"method\") continue;\n if (result[m.name] && m.kind === \"setter\") continue;\n result[m.name] = m.doc;\n }\n return result;\n}\n\n/**\n * Build a source edit that sets the JSDoc on a node (replacing existing or inserting new).\n *\n * (This is bizarre, but this `SourceEdit` + `applyEdits` leaves all existing formatting\n * alone better than doing a `node.toSource()` or other AST-based updates. :grimmacing:)\n */\nexport function buildJSDocEdit(node: Commented, text: string): SourceEdit {\n const column = node.loc!.start.column;\n const existingComment = node.comments?.find((c) => c.leading && \"value\" in c && c.value.startsWith(\"*\"));\n if (existingComment) {\n return { start: existingComment.start!, end: existingComment.end!, text: buildJSDocBlock(text, column) };\n }\n const indent = \" \".repeat(column);\n return { start: node.start!, end: node.start!, text: buildJSDocBlock(text, column) + \"\\n\" + indent };\n}\n\n/** Apply edits to source by splicing in reverse order. */\nexport function applyEdits(source: string, edits: SourceEdit[]): string {\n const sorted = [...edits].sort((a, b) => b.start - a.start);\n let result = source;\n for (const edit of sorted) {\n result = result.slice(0, edit.start) + edit.text + result.slice(edit.end);\n }\n return result;\n}\n\n/** Build a JSDoc block comment string from plain text. */\nexport function buildJSDocBlock(text: string, indent: number): string {\n const pad = \" \".repeat(indent);\n const lines = text.split(\"\\n\");\n if (lines.length === 1) return `/** ${lines[0]} */`;\n return `/**\\n` + lines.map((l) => (l ? `${pad} * ${l}` : `${pad} *`)).join(\"\\n\") + `\\n${pad} */`;\n}\n\n/** The `@generated Entity.md` marker, i.e. so readers know a JSDoc is sourced from (and edited in) the `.md`. */\nexport function generatedTag(entityName: string): string {\n return `@generated ${entityName}.md`;\n}\n\n/** Extract text from a JSDoc-style leading block comment (i.e. one starting with `*`). */\nfunction extractJSDoc(node: Commented): string | undefined {\n const block = node.comments?.find((c) => c.leading && \"value\" in c && c.value.startsWith(\"*\"));\n if (!block || !(\"value\" in block)) return undefined;\n const lines = block.value.split(\"\\n\").map((l) => l.replace(/^\\s*\\*\\s?/, \"\").trimEnd());\n while (lines.length > 0 && lines[0].trim() === \"\") lines.shift();\n while (lines.length > 0 && lines[lines.length - 1].trim() === \"\") lines.pop();\n return lines.join(\"\\n\") || undefined;\n}\n\nfunction classMethodKind(node: namedTypes.ClassMethod): MemberKind {\n if (node.kind === \"get\") return \"getter\";\n if (node.kind === \"set\") return \"setter\";\n return \"method\";\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
|
|
3
|
+
require("./config.cjs");
|
|
4
|
+
require("./EntityDbMetadata.cjs");
|
|
5
|
+
let change_case = require("change-case");
|
|
6
|
+
let path = require("path");
|
|
7
|
+
let jscodeshift = require("jscodeshift");
|
|
8
|
+
jscodeshift = require_runtime.__toESM(jscodeshift, 1);
|
|
9
|
+
let fs_promises = require("fs/promises");
|
|
10
|
+
require("ast-types");
|
|
11
|
+
//#region src/findEntityScopes.ts
|
|
12
|
+
const j = jscodeshift.default.withParser("ts");
|
|
13
|
+
/** Finds static scope declarations for all entity files. */
|
|
14
|
+
async function findAllEntityScopes(config, entities) {
|
|
15
|
+
return Object.fromEntries(await Promise.all(entities.map((entity) => findEntityScopes(config, entity))));
|
|
16
|
+
}
|
|
17
|
+
/** Finds static scope declarations a given entity file. */
|
|
18
|
+
async function findEntityScopes(config, entity) {
|
|
19
|
+
const { name: entityName, scopeName: scopeTypeName } = entity;
|
|
20
|
+
const scopeFnName = `${(0, change_case.camelCase)(entityName)}Scope`;
|
|
21
|
+
const contents = await readEntityFile((0, path.join)(config.entitiesDirectory, `${entityName}.ts`));
|
|
22
|
+
if (contents === void 0) return [entityName, []];
|
|
23
|
+
if (contents.indexOf(scopeFnName) === -1) return [entityName, []];
|
|
24
|
+
const program = j(contents).find(j.Program).nodes()[0];
|
|
25
|
+
for (const statement of program.body) {
|
|
26
|
+
const declaration = j.ExportNamedDeclaration.check(statement) || j.ExportDefaultDeclaration.check(statement) ? statement.declaration : statement;
|
|
27
|
+
if (declaration && j.ClassDeclaration.check(declaration) && declaration.id?.name === entityName) return [entityName, declaration.body.body.flatMap((member) => maybeScopeMember(member, entityName, scopeTypeName))];
|
|
28
|
+
}
|
|
29
|
+
return [entityName, []];
|
|
30
|
+
}
|
|
31
|
+
/** Reads an entity file if it already exists. */
|
|
32
|
+
async function readEntityFile(fileName) {
|
|
33
|
+
try {
|
|
34
|
+
return await (0, fs_promises.readFile)(fileName, "utf8");
|
|
35
|
+
} catch (e) {
|
|
36
|
+
if (isNoSuchFileError(e)) return void 0;
|
|
37
|
+
throw e;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/** Returns true for a missing user-owned entity file. */
|
|
41
|
+
function isNoSuchFileError(e) {
|
|
42
|
+
return typeof e === "object" && e !== null && "code" in e && e.code === "ENOENT";
|
|
43
|
+
}
|
|
44
|
+
/** Converts a static property declaration into a generated scope member. */
|
|
45
|
+
function maybeScopeMember(member, entityName, scopeTypeName) {
|
|
46
|
+
if (!j.ClassProperty.check(member) || !member.static) return [];
|
|
47
|
+
if (!member.value || !j.Identifier.check(member.key)) return [];
|
|
48
|
+
if (!isScopeInitializer(member.value, entityName)) return [];
|
|
49
|
+
if (member.typeAnnotation) {
|
|
50
|
+
if (!j.TSTypeAnnotation.check(member.typeAnnotation)) return [];
|
|
51
|
+
const type = member.typeAnnotation.typeAnnotation;
|
|
52
|
+
if (!isScopeType(type, scopeTypeName)) return [];
|
|
53
|
+
return [{
|
|
54
|
+
name: member.key.name,
|
|
55
|
+
type: j(type).toSource()
|
|
56
|
+
}];
|
|
57
|
+
}
|
|
58
|
+
const type = inferScopeType(member.value, scopeTypeName);
|
|
59
|
+
return type ? [{
|
|
60
|
+
name: member.key.name,
|
|
61
|
+
type
|
|
62
|
+
}] : [];
|
|
63
|
+
}
|
|
64
|
+
/** Infers a generated scope member type from an untyped static scope initializer. */
|
|
65
|
+
function inferScopeType(initializer, scopeTypeName) {
|
|
66
|
+
return isParameterizedScopeInitializer(initializer) ? maybeParameterizedScope(initializer, scopeTypeName) : scopeTypeName;
|
|
67
|
+
}
|
|
68
|
+
/** Returns true for `scope.fn(...)` initializers. */
|
|
69
|
+
function isParameterizedScopeInitializer(initializer) {
|
|
70
|
+
return j.CallExpression.check(initializer) && j.MemberExpression.check(initializer.callee) && !initializer.callee.computed && j.Identifier.check(initializer.callee.property) && initializer.callee.property.name === "fn";
|
|
71
|
+
}
|
|
72
|
+
/** Returns a function type for `scope.fn((prefix: string) => ...)` initializers. */
|
|
73
|
+
function maybeParameterizedScope(initializer, scopeTypeName) {
|
|
74
|
+
if (!j.CallExpression.check(initializer)) return void 0;
|
|
75
|
+
if (!j.MemberExpression.check(initializer.callee)) return void 0;
|
|
76
|
+
if (initializer.callee.computed || !j.Identifier.check(initializer.callee.property)) return void 0;
|
|
77
|
+
if (initializer.callee.property.name !== "fn") return void 0;
|
|
78
|
+
const fn = initializer.arguments[0];
|
|
79
|
+
if (!fn || !j.ArrowFunctionExpression.check(fn) && !j.FunctionExpression.check(fn)) return void 0;
|
|
80
|
+
const params = fn.params.map(parameterType);
|
|
81
|
+
if (params.some((param) => param === void 0)) return void 0;
|
|
82
|
+
return `(${params.join(", ")}) => ${scopeTypeName}`;
|
|
83
|
+
}
|
|
84
|
+
/** Returns a function-type parameter, i.e. `prefix: string`, when syntax-only inference is safe. */
|
|
85
|
+
function parameterType(param) {
|
|
86
|
+
if (j.Identifier.check(param)) {
|
|
87
|
+
if (!param.typeAnnotation || !j.TSTypeAnnotation.check(param.typeAnnotation)) return void 0;
|
|
88
|
+
const optional = param.optional ? "?" : "";
|
|
89
|
+
return `${param.name}${optional}: ${j(param.typeAnnotation.typeAnnotation).toSource()}`;
|
|
90
|
+
}
|
|
91
|
+
if (j.RestElement.check(param) && j.Identifier.check(param.argument)) {
|
|
92
|
+
const typeAnnotation = param.typeAnnotation ?? param.argument.typeAnnotation;
|
|
93
|
+
if (!typeAnnotation || !j.TSTypeAnnotation.check(typeAnnotation)) return void 0;
|
|
94
|
+
return `...${param.argument.name}: ${j(typeAnnotation.typeAnnotation).toSource()}`;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/** Returns true for `EntityScope` and function types returning `EntityScope`. */
|
|
98
|
+
function isScopeType(type, scopeTypeName) {
|
|
99
|
+
if (j.TSTypeReference.check(type) && j.Identifier.check(type.typeName)) return type.typeName.name === scopeTypeName;
|
|
100
|
+
if (j.TSFunctionType.check(type) && type.typeAnnotation && j.TSTypeAnnotation.check(type.typeAnnotation)) return isScopeType(type.typeAnnotation.typeAnnotation, scopeTypeName);
|
|
101
|
+
if (j.TSParenthesizedType.check(type)) return isScopeType(type.typeAnnotation, scopeTypeName);
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
/** Returns true for scope initializers, I.e. `scope(...)`, `scope(...).orderBy(...)`, or `Author.adult...`. */
|
|
105
|
+
function isScopeInitializer(initializer, entityName) {
|
|
106
|
+
if (!j.CallExpression.check(initializer) && !j.MemberExpression.check(initializer)) return false;
|
|
107
|
+
return isScopeRootedExpression(initializer, entityName);
|
|
108
|
+
}
|
|
109
|
+
/** Returns true for a call/property expression chain rooted at `scope` or the current entity. */
|
|
110
|
+
function isScopeRootedExpression(expression, entityName) {
|
|
111
|
+
if (j.Identifier.check(expression)) return expression.name === "scope" || expression.name === entityName;
|
|
112
|
+
if (j.CallExpression.check(expression)) return isScopeRootedExpression(expression.callee, entityName);
|
|
113
|
+
if (j.MemberExpression.check(expression) && !expression.computed) return isScopeRootedExpression(expression.object, entityName);
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
//#endregion
|
|
117
|
+
exports.findAllEntityScopes = findAllEntityScopes;
|
|
118
|
+
|
|
119
|
+
//# sourceMappingURL=findEntityScopes.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findEntityScopes.cjs","names":["camelCase","join","readFile"],"sources":["../src/findEntityScopes.ts"],"sourcesContent":["import { readFile } from \"fs/promises\";\nimport { join } from \"path\";\n\nimport { type namedTypes } from \"ast-types\";\nimport { camelCase } from \"change-case\";\nimport jscodeshift from \"jscodeshift\";\n\nimport { type Config } from \"./config.ts\";\nimport { type Entity } from \"./EntityDbMetadata.ts\";\n\nconst j = jscodeshift.withParser(\"ts\");\n\ntype Expression = NonNullable<namedTypes.ClassProperty[\"value\"]>;\ntype Parameter = namedTypes.ArrowFunctionExpression[\"params\"][number];\ntype TypeNode = namedTypes.TSTypeAnnotation[\"typeAnnotation\"];\n\n/** Each `static active = ...` scope in an entity. */\nexport interface ScopeMember {\n // I.e. \"adult\" from `static adult: AuthorScope = scope(...)`.\n name: string;\n // I.e. \"AuthorScope\" or \"(prefix: string) => AuthorScope\".\n type: string;\n}\n\nexport type ScopeMembersByEntity = Record<string, ScopeMember[]>;\n\n/** Finds static scope declarations for all entity files. */\nexport async function findAllEntityScopes(config: Config, entities: Entity[]): Promise<ScopeMembersByEntity> {\n return Object.fromEntries(await Promise.all(entities.map((entity) => findEntityScopes(config, entity))));\n}\n\n/** Finds static scope declarations a given entity file. */\nasync function findEntityScopes(config: Config, entity: Entity): Promise<[string, ScopeMember[]]> {\n const { name: entityName, scopeName: scopeTypeName } = entity;\n // i.e. `authorScope`, the conventional renamed-to-`scope` import users put in their entity files.\n const scopeFnName = `${camelCase(entityName)}Scope`;\n\n // i.e. `packages/tests/integration/src/entities/Author.ts` when `entityName` is \"Author\".\n const fileName = join(config.entitiesDirectory, `${entityName}.ts`);\n const contents = await readEntityFile(fileName);\n if (contents === undefined) return [entityName, []];\n if (contents.indexOf(scopeFnName) === -1) return [entityName, []];\n\n const program = j(contents).find(j.Program).nodes()[0];\n for (const statement of program.body) {\n const declaration =\n j.ExportNamedDeclaration.check(statement) || j.ExportDefaultDeclaration.check(statement)\n ? statement.declaration\n : statement;\n // i.e. `export class Author extends AuthorCodegen { ... }`.\n if (declaration && j.ClassDeclaration.check(declaration) && declaration.id?.name === entityName) {\n return [\n entityName,\n declaration.body.body.flatMap((member) => maybeScopeMember(member, entityName, scopeTypeName)),\n ];\n }\n }\n return [entityName, []];\n}\n\n/** Reads an entity file if it already exists. */\nasync function readEntityFile(fileName: string): Promise<string | undefined> {\n try {\n return await readFile(fileName, \"utf8\");\n } catch (e) {\n if (isNoSuchFileError(e)) return undefined;\n throw e;\n }\n}\n\n/** Returns true for a missing user-owned entity file. */\nfunction isNoSuchFileError(e: unknown): boolean {\n return typeof e === \"object\" && e !== null && \"code\" in e && e.code === \"ENOENT\";\n}\n\n/** Converts a static property declaration into a generated scope member. */\nfunction maybeScopeMember(member: namedTypes.Node, entityName: string, scopeTypeName: string): ScopeMember[] {\n if (!j.ClassProperty.check(member) || !member.static) return [];\n // i.e. accept `static adult = scope(...)`, but skip methods/getters/unsupported fields.\n if (!member.value || !j.Identifier.check(member.key)) return [];\n if (!isScopeInitializer(member.value, entityName)) return [];\n if (member.typeAnnotation) {\n if (!j.TSTypeAnnotation.check(member.typeAnnotation)) return [];\n const type = member.typeAnnotation.typeAnnotation;\n if (!isScopeType(type, scopeTypeName)) return [];\n return [{ name: member.key.name, type: j(type).toSource() }];\n }\n const type = inferScopeType(member.value, scopeTypeName);\n return type ? [{ name: member.key.name, type }] : [];\n}\n\n/** Infers a generated scope member type from an untyped static scope initializer. */\nfunction inferScopeType(initializer: Expression, scopeTypeName: string): string | undefined {\n return isParameterizedScopeInitializer(initializer)\n ? maybeParameterizedScope(initializer, scopeTypeName)\n : scopeTypeName;\n}\n\n/** Returns true for `scope.fn(...)` initializers. */\nfunction isParameterizedScopeInitializer(initializer: Expression): boolean {\n return (\n j.CallExpression.check(initializer) &&\n j.MemberExpression.check(initializer.callee) &&\n !initializer.callee.computed &&\n j.Identifier.check(initializer.callee.property) &&\n initializer.callee.property.name === \"fn\"\n );\n}\n\n/** Returns a function type for `scope.fn((prefix: string) => ...)` initializers. */\nfunction maybeParameterizedScope(initializer: Expression, scopeTypeName: string): string | undefined {\n if (!j.CallExpression.check(initializer)) return undefined;\n if (!j.MemberExpression.check(initializer.callee)) return undefined;\n if (initializer.callee.computed || !j.Identifier.check(initializer.callee.property)) return undefined;\n if (initializer.callee.property.name !== \"fn\") return undefined;\n const fn = initializer.arguments[0];\n if (!fn || (!j.ArrowFunctionExpression.check(fn) && !j.FunctionExpression.check(fn))) return undefined;\n const params = fn.params.map(parameterType);\n if (params.some((param) => param === undefined)) return undefined;\n return `(${params.join(\", \")}) => ${scopeTypeName}`;\n}\n\n/** Returns a function-type parameter, i.e. `prefix: string`, when syntax-only inference is safe. */\nfunction parameterType(param: Parameter): string | undefined {\n if (j.Identifier.check(param)) {\n if (!param.typeAnnotation || !j.TSTypeAnnotation.check(param.typeAnnotation)) return undefined;\n const optional = param.optional ? \"?\" : \"\";\n return `${param.name}${optional}: ${j(param.typeAnnotation.typeAnnotation).toSource()}`;\n }\n if (j.RestElement.check(param) && j.Identifier.check(param.argument)) {\n const typeAnnotation = param.typeAnnotation ?? param.argument.typeAnnotation;\n if (!typeAnnotation || !j.TSTypeAnnotation.check(typeAnnotation)) return undefined;\n return `...${param.argument.name}: ${j(typeAnnotation.typeAnnotation).toSource()}`;\n }\n return undefined;\n}\n\n/** Returns true for `EntityScope` and function types returning `EntityScope`. */\nfunction isScopeType(type: TypeNode, scopeTypeName: string): boolean {\n // i.e. `AuthorScope`.\n if (j.TSTypeReference.check(type) && j.Identifier.check(type.typeName)) return type.typeName.name === scopeTypeName;\n // i.e. `(prefix: string) => AuthorScope`.\n if (j.TSFunctionType.check(type) && type.typeAnnotation && j.TSTypeAnnotation.check(type.typeAnnotation)) {\n return isScopeType(type.typeAnnotation.typeAnnotation, scopeTypeName);\n }\n if (j.TSParenthesizedType.check(type)) return isScopeType(type.typeAnnotation, scopeTypeName);\n return false;\n}\n\n/** Returns true for scope initializers, I.e. `scope(...)`, `scope(...).orderBy(...)`, or `Author.adult...`. */\nfunction isScopeInitializer(initializer: Expression, entityName: string): boolean {\n if (!j.CallExpression.check(initializer) && !j.MemberExpression.check(initializer)) return false;\n return isScopeRootedExpression(initializer, entityName);\n}\n\n/** Returns true for a call/property expression chain rooted at `scope` or the current entity. */\nfunction isScopeRootedExpression(expression: Expression, entityName: string): boolean {\n // i.e. `scope({ age: { gte: 18 } })`.\n if (j.Identifier.check(expression)) return expression.name === \"scope\" || expression.name === entityName;\n if (j.CallExpression.check(expression)) return isScopeRootedExpression(expression.callee, entityName);\n // i.e. `scope.fn((prefix) => (a) => a.firstName.like(`${prefix}%`))` or `Author.adult.orderBy(...)`.\n if (j.MemberExpression.check(expression) && !expression.computed) {\n return isScopeRootedExpression(expression.object, entityName);\n }\n return false;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Config } from "./config.cjs";
|
|
2
|
+
import { Entity } from "./EntityDbMetadata.cjs";
|
|
3
|
+
//#region src/findEntityScopes.d.ts
|
|
4
|
+
/** Each `static active = ...` scope in an entity. */
|
|
5
|
+
interface ScopeMember {
|
|
6
|
+
name: string;
|
|
7
|
+
type: string;
|
|
8
|
+
}
|
|
9
|
+
type ScopeMembersByEntity = Record<string, ScopeMember[]>;
|
|
10
|
+
/** Finds static scope declarations for all entity files. */
|
|
11
|
+
declare function findAllEntityScopes(config: Config, entities: Entity[]): Promise<ScopeMembersByEntity>;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { ScopeMember, ScopeMembersByEntity, findAllEntityScopes };
|
|
14
|
+
//# sourceMappingURL=findEntityScopes.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findEntityScopes.d.cts","names":[],"sources":["../src/findEntityScopes.ts"],"mappings":";;;;UAiBiB;EAEf;EAEA;;KAGU,uBAAuB,eAAe;;iBAG5B,oBAAoB,QAAQ,QAAQ,UAAU,WAAW,QAAQ"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Config } from "./config.mjs";
|
|
2
|
+
import { Entity } from "./EntityDbMetadata.mjs";
|
|
3
|
+
//#region src/findEntityScopes.d.ts
|
|
4
|
+
/** Each `static active = ...` scope in an entity. */
|
|
5
|
+
interface ScopeMember {
|
|
6
|
+
name: string;
|
|
7
|
+
type: string;
|
|
8
|
+
}
|
|
9
|
+
type ScopeMembersByEntity = Record<string, ScopeMember[]>;
|
|
10
|
+
/** Finds static scope declarations for all entity files. */
|
|
11
|
+
declare function findAllEntityScopes(config: Config, entities: Entity[]): Promise<ScopeMembersByEntity>;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { ScopeMember, ScopeMembersByEntity, findAllEntityScopes };
|
|
14
|
+
//# sourceMappingURL=findEntityScopes.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findEntityScopes.d.mts","names":[],"sources":["../src/findEntityScopes.ts"],"mappings":";;;;UAiBiB;EAEf;EAEA;;KAGU,uBAAuB,eAAe;;iBAG5B,oBAAoB,QAAQ,QAAQ,UAAU,WAAW,QAAQ"}
|