joist-codegen 2.3.0-next.7 → 2.3.0-next.70
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 +1009 -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 +792 -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/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","names":["fs"],"sources":["../src/config.ts"],"sourcesContent":["import { existsSync, promises as fs, readFileSync } from \"fs\";\nimport { dirname, join } from \"path\";\n\nimport { createFromBuffer } from \"@dprint/formatter\";\nimport { getPath } from \"@dprint/json\";\nimport { groupBy } from \"joist-utils\";\nimport { type ParseError, parse } from \"jsonc-parser\";\nimport { z } from \"zod\";\n\nimport { getLatestCodemodVersion } from \"./codemods/index.ts\";\nimport { type DbMetadata, type Entity, type EntityDbMetadata } from \"./EntityDbMetadata.ts\";\nimport { getStiEntities } from \"./inheritance.ts\";\nimport { logger } from \"./logger.ts\";\nimport { fail, sortKeys, trueIfResolved } from \"./utils.ts\";\n\nconst jsonFormatter = createFromBuffer(readFileSync(getPath()));\n\nconst fieldConfig = z\n .object({\n // For getters & ReactiveFields\n derived: z.optional(z.union([z.literal(\"sync\"), z.literal(\"async\")])),\n protected: z.optional(z.boolean()),\n ignore: z.optional(z.boolean()),\n superstruct: z.optional(z.string()),\n zodSchema: z.optional(z.string()),\n type: z.optional(z.string()),\n serde: z.optional(z.string()),\n stiDiscriminator: z.optional(z.record(z.string(), z.string())),\n stiType: z.optional(z.string()),\n // Allow subclasses to mark fields as required\n notNull: z.optional(z.boolean()),\n // Allow overriding scanEntities default detection for fields with defaults added by helpers\n hasDefault: z.optional(z.boolean()),\n // Exclude a (large jsonb/text) column from the default SELECT and expose it as a lazy-loaded LazyField\n lazy: z.optional(z.boolean()),\n })\n .strict();\n\nexport type FieldConfig = z.infer<typeof fieldConfig>;\n\nconst relationConfig = z\n .object({\n // For ReactiveReferences\n derived: z.optional(z.literal(\"async\")),\n polymorphic: z.optional(z.union([z.literal(\"notNull\"), z.literal(true)])),\n large: z.optional(z.boolean()),\n orderBy: z.optional(z.string()),\n /**\n * Controls whether this collection's `.get`/`.load` hide soft-deleted entities.\n *\n * Defaults to `\"exclude\"` (soft-deleted entities are hidden); set to `\"include\"` to have\n * this specific o2m/m2m always return soft-deleted entities from `.get`/`.load`.\n */\n softDeletes: z.optional(z.union([z.literal(\"include\"), z.literal(\"exclude\")])),\n // Allow pushing m2o/m2m/o2o relations in a base type (Task) down to a subtype (TaskOld)\n stiType: z.optional(z.string()),\n /**\n * Allow specializing a base type relation (SmallPublisher.group: SmallPublisherGroup).\n *\n * Self-referential FKs also support `subType: \"self\"` that means each subtype will point\n * at its own subtype.\n */\n subType: z.optional(z.string()),\n /** Allow skipping self-referential fields getting a `...Recursive` relation. */\n skipRecursiveRelations: z.optional(z.boolean()),\n // Allow marking m2o FKs as required on subclasses\n notNull: z.optional(z.boolean()),\n // Allow overriding scanEntities default detection for fields with defaults added by helpers\n hasDefault: z.optional(z.boolean()),\n })\n .strict();\n\nexport type RelationConfig = z.infer<typeof relationConfig>;\n\nconst uniqueByConfig = z\n .union([z.string(), z.array(z.string()), z.array(z.array(z.string()))])\n .transform(normalizeUniqueByConfig);\n\nconst entityConfig = z\n .object({\n tag: z.string(),\n tableName: z.optional(z.string()),\n fields: z.optional(z.record(z.string(), fieldConfig)),\n relations: z.optional(z.record(z.string(), relationConfig)),\n /** Whether this entity should be abstract, e.g. for inheritance a subtype must be instantiated instead of this type. */\n abstract: z.optional(z.boolean()),\n orderBy: z.optional(z.string()),\n uniqueBy: z.optional(uniqueByConfig),\n })\n .strict();\n\nexport type EntityConfig = z.infer<typeof entityConfig>;\n\nconst timestampConfig = z\n .object({\n /** The names to check for this timestamp, i.e. `created_at` `created`, etc. */\n names: z.array(z.string()),\n /** Whether this timestamp column is required to consider a table an entity, defaults to `false`. */\n required: z.optional(z.boolean()),\n })\n .strict();\n\nexport type TimestampConfig = z.infer<typeof timestampConfig>;\n\nexport const config = z\n .object({\n /** The _build-time_ database URL for reading database metadata. */\n databaseUrl: z.optional(z.string()),\n /** Your application's request-level `Context` type. */\n contextType: z.optional(z.string()),\n /** Your application's database client's `Transaction` type. */\n transactionType: z.optional(z.string()),\n /**\n * Allows the user to specify the `updated_at` / `created_at` column names to look up, and if they're optional.\n *\n * We default to looking for `updated_at`, `updatedAt`, `created_at`, `createdAt`, and optional to true,\n * e.g. tables are not required to have both timestamp columns to be considered entities.\n *\n * These defaults are the most lenient, to facilitate running Joist against an existing schema and\n * seeing all of your entities, regardless of your previous conventions.\n */\n timestampColumns: z.optional(\n z.object({\n createdAt: z.optional(timestampConfig),\n updatedAt: z.optional(timestampConfig),\n deletedAt: z.optional(timestampConfig),\n }),\n ),\n /**\n * Allows the user to have codegen output `Temporal` types instead of the base JS `Date`\n *\n * Additionally, allows for specifying the default time zone for `Temporal` types when converting dates to/from\n * the database.\n */\n temporal: z.optional(z.union([z.boolean(), z.object({ timeZone: z.string() })])),\n /**\n * By default, we create a `flush_database` function for fast testing.\n *\n * However, if you don't want to use this, or you have your own bespoke function like we do\n * that is more application-aware, then you can disable Joist's out-of-the-box one.\n *\n * If you have more than one test database, you can set `createFlushFunction` to the array\n * of test database names, i.e. `mydb_test_1`, `mydb_test_2`, etc.\n */\n createFlushFunction: z.optional(z.union([z.boolean(), z.array(z.string())])),\n entitiesDirectory: z.string().default(\"./src/entities\"),\n codegenPlugins: z.optional(z.array(z.string())),\n entities: z.record(z.string(), entityConfig).default({}),\n ignoredTables: z.optional(z.array(z.string())),\n /** The type of entity `id` fields; defaults to `tagged-string`. */\n idType: z.optional(z.union([z.literal(\"tagged-string\"), z.literal(\"untagged-string\"), z.literal(\"number\")])),\n /** The separator between entity tags and ids; defaults to `:`, and `\"\"` disables the separator. */\n tagDelimiter: z.optional(z.string()),\n /** How we should support non-deferred foreign keys. */\n nonDeferredForeignKeys: z.optional(z.union([z.literal(\"error\"), z.literal(\"warn\"), z.literal(\"ignore\")])),\n /** Enables esm output. */\n esm: z.optional(z.boolean()),\n /** Controls the style of GraphQL pagination scaffolding. */\n paginationStyle: z.optional(z.union([z.literal(\"cursor\"), z.literal(\"limit\")])).default(\"cursor\"),\n /** Enables documentation syncing between .md files and JSDocs. */\n docs: z.optional(z.boolean()),\n /** Installs Joist's bundled Agent Skills into `.claude/skills` and `.agents/skills`; on by default, set `false` to disable. */\n skills: z.optional(z.boolean()),\n /** Output a metadata-docs.ts file with entity/field documentation available at runtime. */\n outputDocs: z.optional(z.boolean()),\n /** Auto-set by probing the project's `tsconfig.json` file. */\n allowImportingTsExtensions: z.optional(z.boolean()),\n /** The latest Joist codemod counter that has been applied to this project. */\n codemodVersion: z.number().int().min(0).default(0),\n\n /** A list of postgres schemas to use for finding tables */\n schemas: z.optional(z.array(z.string())),\n })\n .strict();\n\nexport type Config = z.infer<typeof config> & {\n // We don't persist this, and instead just use it as a cache\n __tableToEntityName?: Record<string, string>;\n};\n\nexport const ormMaintainedFields = [\"createdAt\", \"updatedAt\"];\n\n/** Ensure the user doesn't have any typos in their config. */\nexport function warnInvalidConfigEntries(config: Config, db: DbMetadata): void {\n const entitiesByName = groupBy(db.entities, (e) => e.name);\n for (const [entityName, entityConfig] of Object.entries(config.entities)) {\n const entities = entitiesByName[entityName];\n if (!entities) {\n logger.warn(`Found config for non-existent entity ${entityName}`);\n continue;\n }\n // We don't have keyBy...\n const [entity] = entities;\n\n // Check fields\n const fields = [...entity.primitives, ...entity.enums];\n for (const [name, config] of Object.entries(entityConfig.fields || {})) {\n if (config.ignore) continue;\n let field = fields.find((f) => f.fieldName === name);\n // STI types might be in the base type\n if (!field && entity.stiDiscriminatorField) {\n const stiEntities = getStiEntities(db.entities).get(entity.name)?.subTypes;\n field = stiEntities?.flatMap((st) => [...st.primitives, ...st.enums]).find((f) => f.fieldName === name);\n }\n if (!field) logger.warn(`Found config for non-existent field ${entityName}.${name}`);\n }\n\n // Check relations\n const relations = [\n ...entity.manyToOnes,\n ...entity.oneToManys,\n ...entity.manyToManys,\n ...entity.manyToManyEnums,\n ...entity.oneToOnes,\n ...entity.largeOneToManys,\n ...entity.largeManyToManys,\n ...entity.polymorphics,\n ];\n for (const [name, _] of Object.entries(entityConfig.relations || {})) {\n let relation = relations.find((r) => r.fieldName === name);\n // STI types might be in the subtypes\n if (!relation && entity.stiDiscriminatorField) {\n const stiEntities = getStiEntities(db.entities).get(entity.name)?.subTypes;\n relation = stiEntities\n ?.flatMap((entity) => [\n ...entity.manyToOnes,\n ...entity.oneToManys,\n ...entity.manyToManys,\n ...entity.oneToOnes,\n ...entity.largeOneToManys,\n ...entity.largeManyToManys,\n ...entity.polymorphics,\n ])\n ?.find((f) => f.fieldName === name);\n }\n // CTI subtype specializations (i.e. SmallPublisher.group: SmallPublisherGroup) need to look in the base type\n if (!relation && entity.baseType) {\n const baseType = entity.baseType;\n relation = [\n ...baseType.manyToOnes,\n ...baseType.oneToManys,\n ...baseType.manyToManys,\n ...baseType.oneToOnes,\n ...baseType.largeOneToManys,\n ...baseType.largeManyToManys,\n ...baseType.polymorphics,\n ].find((f) => f.fieldName === name);\n }\n\n if (!relation) logger.warn(`Found config for non-existent relation ${entityName}.${name}`);\n }\n\n const uniqueFields = [\n ...entity.primitives,\n ...entity.enums,\n ...entity.pgEnums,\n ...entity.manyToOnes,\n ...entity.polymorphics,\n ];\n for (const uniqueBy of entityConfig.uniqueBy || []) {\n for (const name of uniqueBy) {\n const field = uniqueFields.find((f) => f.fieldName === name);\n if (!field) {\n logger.warn(`Found uniqueBy for non-existent or non-queryable field ${entityName}.${name}`);\n } else if (field.kind === \"primitive\" && (field.derived || field.isArray || field.customSerde)) {\n logger.warn(`Found uniqueBy for unsupported primitive field ${entityName}.${name}`);\n } else if (field.kind === \"enum\" && (field.derived || field.isArray)) {\n logger.warn(`Found uniqueBy for unsupported enum field ${entityName}.${name}`);\n }\n }\n }\n }\n}\n\nexport function isGetterField(config: Config, entity: Entity, fieldName: string): boolean {\n return config.entities[entity.name]?.fields?.[fieldName]?.derived === \"sync\";\n}\n\nexport function isReactiveField(config: Config, entity: Entity, fieldName: string): boolean {\n return config.entities[entity.name]?.fields?.[fieldName]?.derived === \"async\";\n}\n\nexport function isReactiveReference(config: Config, entity: Entity, fieldName: string): boolean {\n return config.entities[entity.name]?.relations?.[fieldName]?.derived === \"async\";\n}\n\n/** Returns true if this m2m relation is configured as a ReactiveManyToMany (derived: async). */\nexport function isReactiveManyToMany(config: Config, entity: Entity, fieldName: string): boolean {\n return config.entities[entity.name]?.relations?.[fieldName]?.derived === \"async\";\n}\n\nexport function isProtected(config: Config, entity: Entity, fieldName: string): boolean {\n return config.entities[entity.name]?.fields?.[fieldName]?.protected === true;\n}\n\n/** Whether a column should be excluded from the default SELECT and exposed as a lazy-loaded `LazyField`. */\nexport function isLazyField(config: Config, entity: Entity, fieldName: string): boolean {\n return config.entities[entity.name]?.fields?.[fieldName]?.lazy === true;\n}\n\nexport function serdeConfig(config: Config, entity: Entity, fieldName: string): string | undefined {\n return config.entities[entity.name]?.fields?.[fieldName]?.serde;\n}\n\nexport function superstructConfig(config: Config, entity: Entity, fieldName: string): string | undefined {\n return config.entities[entity.name]?.fields?.[fieldName]?.superstruct;\n}\n\nexport function zodSchemaConfig(config: Config, entity: Entity, fieldName: string): string | undefined {\n return config.entities[entity.name]?.fields?.[fieldName]?.zodSchema;\n}\n\nexport function fieldTypeConfig(config: Config, entity: Entity, fieldName: string): string | undefined {\n return config.entities[entity.name]?.fields?.[fieldName]?.type;\n}\n\nexport function isLargeCollection(config: Config, entity: Entity, fieldName: string): boolean {\n return config.entities[entity.name]?.relations?.[fieldName]?.large === true;\n}\n\n/** Whether a collection should include (or exclude) soft-deleted entities from `.get`/`.load`. */\nexport function softDeletesConfig(\n config: Config,\n entity: Entity,\n fieldName: string,\n): \"include\" | \"exclude\" | undefined {\n return config.entities[entity.name]?.relations?.[fieldName]?.softDeletes;\n}\n\nexport function isFieldIgnored(\n config: Config,\n entity: Entity,\n fieldName: string,\n notNull: boolean = false,\n hasDefault: boolean = false,\n): boolean {\n const ignore = config.entities[entity.name]?.fields?.[fieldName]?.ignore === true;\n if (ignore && notNull && !hasDefault) {\n fail(\n `notNull field ${entity.name}.${fieldName} cannot be ignored. Alter the column to be optional or have a default value prior to ignoring it.`,\n );\n }\n return ignore;\n}\n\nexport function isFieldHasDefault(config: Config, entity: Entity, fieldName: string): boolean {\n const entityConfig = config.entities[entity.name] ?? {};\n const fieldConfig = entityConfig.fields?.[fieldName] ?? entityConfig.relations?.[fieldName] ?? {};\n return fieldConfig.hasDefault === true;\n}\n\nconst configPath = \"./joist-config.json\";\n\nexport async function loadConfig(): Promise<Config> {\n const exists = await trueIfResolved(fs.access(configPath));\n if (exists) {\n const content = await fs.readFile(configPath);\n const result = config.safeParse(stripLegacyConfigKeys(JSON.parse(content.toString())));\n if (!result.success) {\n throw new Error(\n `Invalid joist-config.json: ${result.error.issues\n .map((ze) => `${ze.path.map(String).join(\"/\")} ${ze.message}`)\n .join(\"\\n\")}`,\n );\n }\n result.data.allowImportingTsExtensions ??= projectIsUsingEsmWithImports();\n return result.data;\n }\n // Brand-new projects should not be prompted to run historical codemods.\n const initial = config.parse({ codemodVersion: getLatestCodemodVersion() });\n initial.allowImportingTsExtensions ??= projectIsUsingEsmWithImports();\n return initial;\n}\n\n/**\n * Writes the potentially-updated config entry back to `joist-config.json`.\n *\n * We format the output with prettier so it should both a) look nice and b) be deterministic,\n * such that no changes to the config show up as noops to the scm.\n */\nexport async function writeConfig(config: Config): Promise<void> {\n const sorted: Partial<Config> = sortKeys(config);\n delete sorted.__tableToEntityName;\n delete sorted.allowImportingTsExtensions;\n if (sorted.paginationStyle === \"cursor\") {\n delete sorted.paginationStyle;\n }\n const input = JSON.stringify(sorted);\n const content = jsonFormatter.formatText({ filePath: \"test.json\", fileText: input });\n await fs.writeFile(configPath, content);\n}\n\nexport function stripStiPlaceholders(config: Config, entities: EntityDbMetadata[]): void {\n // Defacto (with today's setup) the config of STI entities lives on the base entity,\n // so don't write confusing subtype-specific entries into the config file.\n // ...hopefully we don't have any code accidentally looking for the STI config...\n for (const entity of entities) {\n if (entity.inheritanceType === \"sti\" && entity.stiDiscriminatorValue) {\n delete config.entities[entity.name];\n }\n }\n}\n\n/** Applies defaults to the timestamp config. */\nexport function getTimestampConfig(config: Config): {\n updatedAtConf: Required<TimestampConfig>;\n createdAtConf: Required<TimestampConfig>;\n deletedAtConf: Required<TimestampConfig>;\n} {\n return {\n createdAtConf: {\n names: [\"created_at\", \"createdAt\"],\n required: false,\n ...config?.timestampColumns?.createdAt,\n },\n updatedAtConf: {\n names: [\"updated_at\", \"updatedAt\"],\n required: false,\n ...config?.timestampColumns?.updatedAt,\n },\n deletedAtConf: {\n names: [\"deleted_at\", \"deletedAt\"],\n required: false,\n ...config?.timestampColumns?.deletedAt,\n },\n };\n}\n\nfunction projectIsUsingEsmWithImports(): boolean {\n // Attempt to find the project's tsconfig.json in the current directory or up the directory hierarchy\n const configPath = findTsConfigFile(process.cwd());\n if (!configPath) {\n return false;\n }\n try {\n // Use jsonc-parser to parse the tsconfig.json file (not the old tsc readConfigFile which was\n // dropped in TypeScript 7), allowing for comments and trailing commas.\n const errors: ParseError[] = [];\n const parsed: unknown = parse(readFileSync(configPath, \"utf8\"), errors, { allowTrailingComma: true });\n if (errors.length > 0 || typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) return false;\n const compilerOptions = (parsed as Record<string, unknown>).compilerOptions;\n return (\n typeof compilerOptions === \"object\" &&\n compilerOptions !== null &&\n !Array.isArray(compilerOptions) &&\n (compilerOptions as Record<string, unknown>).allowImportingTsExtensions === true\n );\n } catch {\n return false;\n }\n}\n\n/** Normalizes `uniqueBy` config sugar into runtime identity candidates. */\nfunction normalizeUniqueByConfig(uniqueBy: string | string[] | string[][]): string[][] {\n if (typeof uniqueBy === \"string\") return [[uniqueBy]];\n if (uniqueBy.every((field) => typeof field === \"string\")) return [uniqueBy];\n return uniqueBy;\n}\n\nfunction stripLegacyConfigKeys(raw: unknown): unknown {\n if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) {\n return raw;\n }\n // Accept old configs so the deprecated key disappears on the next write.\n const parsed = { ...(raw as Record<string, unknown>) };\n delete parsed.version;\n return parsed;\n}\n\n/** Finds the nearest `tsconfig.json` in `directory` or one of its ancestors. */\nfunction findTsConfigFile(directory: string): string | undefined {\n while (true) {\n const fileName = join(directory, \"tsconfig.json\");\n if (existsSync(fileName)) return fileName;\n const parent = dirname(directory);\n if (parent === directory) return undefined;\n directory = parent;\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
let fs = require("fs");
|
|
3
|
+
let path = require("path");
|
|
4
|
+
let crypto = require("crypto");
|
|
5
|
+
let os = require("os");
|
|
6
|
+
//#region src/docs/cache.ts
|
|
7
|
+
const CACHE_VERSION = 1;
|
|
8
|
+
const CACHE_DIR = (0, path.join)((0, os.tmpdir)(), "joist-codegen-cache");
|
|
9
|
+
/** A simple mtime-based cache for docs syncing, to skip processing when neither .ts nor .md has changed. */
|
|
10
|
+
var DocsCache = class DocsCache {
|
|
11
|
+
#entries;
|
|
12
|
+
#cachePath;
|
|
13
|
+
constructor(cachePath, entries) {
|
|
14
|
+
this.#cachePath = cachePath;
|
|
15
|
+
this.#entries = entries;
|
|
16
|
+
}
|
|
17
|
+
static async load() {
|
|
18
|
+
const cachePath = getCachePath();
|
|
19
|
+
try {
|
|
20
|
+
const raw = JSON.parse(await fs.promises.readFile(cachePath, "utf-8"));
|
|
21
|
+
if (raw.version === CACHE_VERSION) return new DocsCache(cachePath, raw.entities);
|
|
22
|
+
} catch {}
|
|
23
|
+
return new DocsCache(cachePath, {});
|
|
24
|
+
}
|
|
25
|
+
/** Returns true if both file mtimes match the cached values (i.e. skip processing). */
|
|
26
|
+
isUpToDate(entityName, tsMtime, mdMtime) {
|
|
27
|
+
const cached = this.#entries[entityName];
|
|
28
|
+
return !!cached && cached.tsMtime === Math.floor(tsMtime) && cached.mdMtime === Math.floor(mdMtime);
|
|
29
|
+
}
|
|
30
|
+
/** Record the current mtimes for an entity after processing it. */
|
|
31
|
+
update(entityName, tsMtime, mdMtime) {
|
|
32
|
+
this.#entries[entityName] = {
|
|
33
|
+
tsMtime: Math.floor(tsMtime),
|
|
34
|
+
mdMtime: Math.floor(mdMtime)
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
async save() {
|
|
38
|
+
const data = {
|
|
39
|
+
version: CACHE_VERSION,
|
|
40
|
+
entities: this.#entries
|
|
41
|
+
};
|
|
42
|
+
await fs.promises.mkdir(CACHE_DIR, { recursive: true });
|
|
43
|
+
await fs.promises.writeFile(this.#cachePath, JSON.stringify(data), "utf-8");
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
/** Stat a file and return its mtimeMs, or -1 if it doesn't exist. */
|
|
47
|
+
async function getMtime(filePath) {
|
|
48
|
+
try {
|
|
49
|
+
return (await fs.promises.stat(filePath)).mtimeMs;
|
|
50
|
+
} catch {
|
|
51
|
+
return -1;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function getCachePath() {
|
|
55
|
+
const hash = (0, crypto.createHash)("sha256").update(process.cwd()).digest("hex").slice(0, 16);
|
|
56
|
+
return (0, path.join)(CACHE_DIR, `${hash}.json`);
|
|
57
|
+
}
|
|
58
|
+
//#endregion
|
|
59
|
+
exports.DocsCache = DocsCache;
|
|
60
|
+
exports.getMtime = getMtime;
|
|
61
|
+
|
|
62
|
+
//# sourceMappingURL=cache.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.cjs","names":["join","tmpdir","#cachePath","#entries","createHash"],"sources":["../../src/docs/cache.ts"],"sourcesContent":["import { createHash } from \"crypto\";\nimport { promises as fs } from \"fs\";\nimport { tmpdir } from \"os\";\nimport { join } from \"path\";\n\nconst CACHE_VERSION = 1;\nconst CACHE_DIR = join(tmpdir(), \"joist-codegen-cache\");\n\n/** A tuple of .ts and .md mtimes for an entity, used for caching. */\ninterface CacheEntry {\n tsMtime: number;\n mdMtime: number; // -1 when .md doesn't exist\n}\n\n/** The shape of the JSON file we write to disk for caching per-entity file modification times. */\ninterface CacheFile {\n version: number;\n entities: Record<string, CacheEntry>;\n}\n\n/** A simple mtime-based cache for docs syncing, to skip processing when neither .ts nor .md has changed. */\nexport class DocsCache {\n #entries: Record<string, CacheEntry>;\n #cachePath: string;\n\n private constructor(cachePath: string, entries: Record<string, CacheEntry>) {\n this.#cachePath = cachePath;\n this.#entries = entries;\n }\n\n static async load(): Promise<DocsCache> {\n const cachePath = getCachePath();\n try {\n const raw = JSON.parse(await fs.readFile(cachePath, \"utf-8\")) as CacheFile;\n if (raw.version === CACHE_VERSION) {\n return new DocsCache(cachePath, raw.entities);\n }\n } catch {\n // Missing or corrupt — start fresh\n }\n return new DocsCache(cachePath, {});\n }\n\n /** Returns true if both file mtimes match the cached values (i.e. skip processing). */\n isUpToDate(entityName: string, tsMtime: number, mdMtime: number): boolean {\n const cached = this.#entries[entityName];\n return !!cached && cached.tsMtime === Math.floor(tsMtime) && cached.mdMtime === Math.floor(mdMtime);\n }\n\n /** Record the current mtimes for an entity after processing it. */\n update(entityName: string, tsMtime: number, mdMtime: number): void {\n this.#entries[entityName] = { tsMtime: Math.floor(tsMtime), mdMtime: Math.floor(mdMtime) };\n }\n\n async save(): Promise<void> {\n const data: CacheFile = { version: CACHE_VERSION, entities: this.#entries };\n await fs.mkdir(CACHE_DIR, { recursive: true });\n await fs.writeFile(this.#cachePath, JSON.stringify(data), \"utf-8\");\n }\n}\n\n/** Stat a file and return its mtimeMs, or -1 if it doesn't exist. */\nexport async function getMtime(filePath: string): Promise<number> {\n try {\n return (await fs.stat(filePath)).mtimeMs;\n } catch {\n return -1;\n }\n}\n\nfunction getCachePath(): string {\n const hash = createHash(\"sha256\").update(process.cwd()).digest(\"hex\").slice(0, 16);\n return join(CACHE_DIR, `${hash}.json`);\n}\n"],"mappings":";;;;;;AAKA,MAAM,gBAAgB;AACtB,MAAM,aAAA,GAAYA,KAAAA,KAAAA,EAAAA,GAAKC,GAAAA,OAAAA,CAAO,GAAG,qBAAqB;;AAetD,IAAa,YAAb,MAAa,UAAU;CACrB;CACA;CAEA,YAAoB,WAAmB,SAAqC;EAC1E,KAAKC,aAAa;EAClB,KAAKC,WAAW;CAClB;CAEA,aAAa,OAA2B;EACtC,MAAM,YAAY,aAAa;EAC/B,IAAI;GACF,MAAM,MAAM,KAAK,MAAM,MAAM,GAAA,SAAG,SAAS,WAAW,OAAO,CAAC;GAC5D,IAAI,IAAI,YAAY,eAClB,OAAO,IAAI,UAAU,WAAW,IAAI,QAAQ;EAEhD,QAAQ,CAER;EACA,OAAO,IAAI,UAAU,WAAW,CAAC,CAAC;CACpC;;CAGA,WAAW,YAAoB,SAAiB,SAA0B;EACxE,MAAM,SAAS,KAAKA,SAAS;EAC7B,OAAO,CAAC,CAAC,UAAU,OAAO,YAAY,KAAK,MAAM,OAAO,KAAK,OAAO,YAAY,KAAK,MAAM,OAAO;CACpG;;CAGA,OAAO,YAAoB,SAAiB,SAAuB;EACjE,KAAKA,SAAS,cAAc;GAAE,SAAS,KAAK,MAAM,OAAO;GAAG,SAAS,KAAK,MAAM,OAAO;EAAE;CAC3F;CAEA,MAAM,OAAsB;EAC1B,MAAM,OAAkB;GAAE,SAAS;GAAe,UAAU,KAAKA;EAAS;EAC1E,MAAM,GAAA,SAAG,MAAM,WAAW,EAAE,WAAW,KAAK,CAAC;EAC7C,MAAM,GAAA,SAAG,UAAU,KAAKD,YAAY,KAAK,UAAU,IAAI,GAAG,OAAO;CACnE;AACF;;AAGA,eAAsB,SAAS,UAAmC;CAChE,IAAI;EACF,QAAQ,MAAM,GAAA,SAAG,KAAK,QAAQ,EAAA,CAAG;CACnC,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAS,eAAuB;CAC9B,MAAM,QAAA,GAAOE,OAAAA,WAAAA,CAAW,QAAQ,CAAC,CAAC,OAAO,QAAQ,IAAI,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,GAAG,EAAE;CACjF,QAAA,GAAOJ,KAAAA,KAAAA,CAAK,WAAW,GAAG,KAAK,MAAM;AACvC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/docs/cache.d.ts
|
|
2
|
+
/** A simple mtime-based cache for docs syncing, to skip processing when neither .ts nor .md has changed. */
|
|
3
|
+
declare class DocsCache {
|
|
4
|
+
#private;
|
|
5
|
+
private constructor();
|
|
6
|
+
static load(): Promise<DocsCache>;
|
|
7
|
+
/** Returns true if both file mtimes match the cached values (i.e. skip processing). */
|
|
8
|
+
isUpToDate(entityName: string, tsMtime: number, mdMtime: number): boolean;
|
|
9
|
+
/** Record the current mtimes for an entity after processing it. */
|
|
10
|
+
update(entityName: string, tsMtime: number, mdMtime: number): void;
|
|
11
|
+
save(): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
/** Stat a file and return its mtimeMs, or -1 if it doesn't exist. */
|
|
14
|
+
declare function getMtime(filePath: string): Promise<number>;
|
|
15
|
+
//#endregion
|
|
16
|
+
export { DocsCache, getMtime };
|
|
17
|
+
//# sourceMappingURL=cache.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.cts","names":[],"sources":["../../src/docs/cache.ts"],"mappings":";;cAqBa;;UAIJ;SAKM,QAAQ,QAAQ;;EAc7B,WAAW,oBAAoB,iBAAiB;;EAMhD,OAAO,oBAAoB,iBAAiB;EAItC,QAAQ;;;iBAQM,SAAS,mBAAmB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/docs/cache.d.ts
|
|
2
|
+
/** A simple mtime-based cache for docs syncing, to skip processing when neither .ts nor .md has changed. */
|
|
3
|
+
declare class DocsCache {
|
|
4
|
+
#private;
|
|
5
|
+
private constructor();
|
|
6
|
+
static load(): Promise<DocsCache>;
|
|
7
|
+
/** Returns true if both file mtimes match the cached values (i.e. skip processing). */
|
|
8
|
+
isUpToDate(entityName: string, tsMtime: number, mdMtime: number): boolean;
|
|
9
|
+
/** Record the current mtimes for an entity after processing it. */
|
|
10
|
+
update(entityName: string, tsMtime: number, mdMtime: number): void;
|
|
11
|
+
save(): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
/** Stat a file and return its mtimeMs, or -1 if it doesn't exist. */
|
|
14
|
+
declare function getMtime(filePath: string): Promise<number>;
|
|
15
|
+
//#endregion
|
|
16
|
+
export { DocsCache, getMtime };
|
|
17
|
+
//# sourceMappingURL=cache.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.mts","names":[],"sources":["../../src/docs/cache.ts"],"mappings":";;cAqBa;;UAIJ;SAKM,QAAQ,QAAQ;;EAc7B,WAAW,oBAAoB,iBAAiB;;EAMhD,OAAO,oBAAoB,iBAAiB;EAItC,QAAQ;;;iBAQM,SAAS,mBAAmB"}
|
package/build/docs/cache.js
CHANGED
|
@@ -1,61 +1,60 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const fs_1 = require("fs");
|
|
7
|
-
const os_1 = require("os");
|
|
8
|
-
const path_1 = require("path");
|
|
1
|
+
import { promises } from "fs";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
import { createHash } from "crypto";
|
|
4
|
+
import { tmpdir } from "os";
|
|
5
|
+
//#region src/docs/cache.ts
|
|
9
6
|
const CACHE_VERSION = 1;
|
|
10
|
-
const CACHE_DIR =
|
|
7
|
+
const CACHE_DIR = join(tmpdir(), "joist-codegen-cache");
|
|
11
8
|
/** A simple mtime-based cache for docs syncing, to skip processing when neither .ts nor .md has changed. */
|
|
12
|
-
class DocsCache {
|
|
13
|
-
|
|
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
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
|
|
9
|
+
var DocsCache = class DocsCache {
|
|
10
|
+
#entries;
|
|
11
|
+
#cachePath;
|
|
12
|
+
constructor(cachePath, entries) {
|
|
13
|
+
this.#cachePath = cachePath;
|
|
14
|
+
this.#entries = entries;
|
|
15
|
+
}
|
|
16
|
+
static async load() {
|
|
17
|
+
const cachePath = getCachePath();
|
|
18
|
+
try {
|
|
19
|
+
const raw = JSON.parse(await promises.readFile(cachePath, "utf-8"));
|
|
20
|
+
if (raw.version === CACHE_VERSION) return new DocsCache(cachePath, raw.entities);
|
|
21
|
+
} catch {}
|
|
22
|
+
return new DocsCache(cachePath, {});
|
|
23
|
+
}
|
|
24
|
+
/** Returns true if both file mtimes match the cached values (i.e. skip processing). */
|
|
25
|
+
isUpToDate(entityName, tsMtime, mdMtime) {
|
|
26
|
+
const cached = this.#entries[entityName];
|
|
27
|
+
return !!cached && cached.tsMtime === Math.floor(tsMtime) && cached.mdMtime === Math.floor(mdMtime);
|
|
28
|
+
}
|
|
29
|
+
/** Record the current mtimes for an entity after processing it. */
|
|
30
|
+
update(entityName, tsMtime, mdMtime) {
|
|
31
|
+
this.#entries[entityName] = {
|
|
32
|
+
tsMtime: Math.floor(tsMtime),
|
|
33
|
+
mdMtime: Math.floor(mdMtime)
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
async save() {
|
|
37
|
+
const data = {
|
|
38
|
+
version: CACHE_VERSION,
|
|
39
|
+
entities: this.#entries
|
|
40
|
+
};
|
|
41
|
+
await promises.mkdir(CACHE_DIR, { recursive: true });
|
|
42
|
+
await promises.writeFile(this.#cachePath, JSON.stringify(data), "utf-8");
|
|
43
|
+
}
|
|
44
|
+
};
|
|
48
45
|
/** Stat a file and return its mtimeMs, or -1 if it doesn't exist. */
|
|
49
46
|
async function getMtime(filePath) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
}
|
|
47
|
+
try {
|
|
48
|
+
return (await promises.stat(filePath)).mtimeMs;
|
|
49
|
+
} catch {
|
|
50
|
+
return -1;
|
|
51
|
+
}
|
|
56
52
|
}
|
|
57
53
|
function getCachePath() {
|
|
58
|
-
|
|
59
|
-
|
|
54
|
+
const hash = createHash("sha256").update(process.cwd()).digest("hex").slice(0, 16);
|
|
55
|
+
return join(CACHE_DIR, `${hash}.json`);
|
|
60
56
|
}
|
|
57
|
+
//#endregion
|
|
58
|
+
export { DocsCache, getMtime };
|
|
59
|
+
|
|
61
60
|
//# sourceMappingURL=cache.js.map
|
package/build/docs/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","
|
|
1
|
+
{"version":3,"file":"cache.js","names":["#cachePath","#entries","fs"],"sources":["../../src/docs/cache.ts"],"sourcesContent":["import { createHash } from \"crypto\";\nimport { promises as fs } from \"fs\";\nimport { tmpdir } from \"os\";\nimport { join } from \"path\";\n\nconst CACHE_VERSION = 1;\nconst CACHE_DIR = join(tmpdir(), \"joist-codegen-cache\");\n\n/** A tuple of .ts and .md mtimes for an entity, used for caching. */\ninterface CacheEntry {\n tsMtime: number;\n mdMtime: number; // -1 when .md doesn't exist\n}\n\n/** The shape of the JSON file we write to disk for caching per-entity file modification times. */\ninterface CacheFile {\n version: number;\n entities: Record<string, CacheEntry>;\n}\n\n/** A simple mtime-based cache for docs syncing, to skip processing when neither .ts nor .md has changed. */\nexport class DocsCache {\n #entries: Record<string, CacheEntry>;\n #cachePath: string;\n\n private constructor(cachePath: string, entries: Record<string, CacheEntry>) {\n this.#cachePath = cachePath;\n this.#entries = entries;\n }\n\n static async load(): Promise<DocsCache> {\n const cachePath = getCachePath();\n try {\n const raw = JSON.parse(await fs.readFile(cachePath, \"utf-8\")) as CacheFile;\n if (raw.version === CACHE_VERSION) {\n return new DocsCache(cachePath, raw.entities);\n }\n } catch {\n // Missing or corrupt — start fresh\n }\n return new DocsCache(cachePath, {});\n }\n\n /** Returns true if both file mtimes match the cached values (i.e. skip processing). */\n isUpToDate(entityName: string, tsMtime: number, mdMtime: number): boolean {\n const cached = this.#entries[entityName];\n return !!cached && cached.tsMtime === Math.floor(tsMtime) && cached.mdMtime === Math.floor(mdMtime);\n }\n\n /** Record the current mtimes for an entity after processing it. */\n update(entityName: string, tsMtime: number, mdMtime: number): void {\n this.#entries[entityName] = { tsMtime: Math.floor(tsMtime), mdMtime: Math.floor(mdMtime) };\n }\n\n async save(): Promise<void> {\n const data: CacheFile = { version: CACHE_VERSION, entities: this.#entries };\n await fs.mkdir(CACHE_DIR, { recursive: true });\n await fs.writeFile(this.#cachePath, JSON.stringify(data), \"utf-8\");\n }\n}\n\n/** Stat a file and return its mtimeMs, or -1 if it doesn't exist. */\nexport async function getMtime(filePath: string): Promise<number> {\n try {\n return (await fs.stat(filePath)).mtimeMs;\n } catch {\n return -1;\n }\n}\n\nfunction getCachePath(): string {\n const hash = createHash(\"sha256\").update(process.cwd()).digest(\"hex\").slice(0, 16);\n return join(CACHE_DIR, `${hash}.json`);\n}\n"],"mappings":";;;;;AAKA,MAAM,gBAAgB;AACtB,MAAM,YAAY,KAAK,OAAO,GAAG,qBAAqB;;AAetD,IAAa,YAAb,MAAa,UAAU;CACrB;CACA;CAEA,YAAoB,WAAmB,SAAqC;EAC1E,KAAKA,aAAa;EAClB,KAAKC,WAAW;CAClB;CAEA,aAAa,OAA2B;EACtC,MAAM,YAAY,aAAa;EAC/B,IAAI;GACF,MAAM,MAAM,KAAK,MAAM,MAAMC,SAAG,SAAS,WAAW,OAAO,CAAC;GAC5D,IAAI,IAAI,YAAY,eAClB,OAAO,IAAI,UAAU,WAAW,IAAI,QAAQ;EAEhD,QAAQ,CAER;EACA,OAAO,IAAI,UAAU,WAAW,CAAC,CAAC;CACpC;;CAGA,WAAW,YAAoB,SAAiB,SAA0B;EACxE,MAAM,SAAS,KAAKD,SAAS;EAC7B,OAAO,CAAC,CAAC,UAAU,OAAO,YAAY,KAAK,MAAM,OAAO,KAAK,OAAO,YAAY,KAAK,MAAM,OAAO;CACpG;;CAGA,OAAO,YAAoB,SAAiB,SAAuB;EACjE,KAAKA,SAAS,cAAc;GAAE,SAAS,KAAK,MAAM,OAAO;GAAG,SAAS,KAAK,MAAM,OAAO;EAAE;CAC3F;CAEA,MAAM,OAAsB;EAC1B,MAAM,OAAkB;GAAE,SAAS;GAAe,UAAU,KAAKA;EAAS;EAC1E,MAAMC,SAAG,MAAM,WAAW,EAAE,WAAW,KAAK,CAAC;EAC7C,MAAMA,SAAG,UAAU,KAAKF,YAAY,KAAK,UAAU,IAAI,GAAG,OAAO;CACnE;AACF;;AAGA,eAAsB,SAAS,UAAmC;CAChE,IAAI;EACF,QAAQ,MAAME,SAAG,KAAK,QAAQ,EAAA,CAAG;CACnC,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAS,eAAuB;CAC9B,MAAM,OAAO,WAAW,QAAQ,CAAC,CAAC,OAAO,QAAQ,IAAI,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,GAAG,EAAE;CACjF,OAAO,KAAK,WAAW,GAAG,KAAK,MAAM;AACvC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
require("./markdown.cjs");
|
|
3
|
+
require("../EntityDbMetadata.cjs");
|
|
4
|
+
let ts_poet = require("ts-poet");
|
|
5
|
+
//#region src/docs/generate-metadata-docs.ts
|
|
6
|
+
/** Creates the `metadata-docs.ts` runtime artifact to access docs. */
|
|
7
|
+
function generateMetadataDocsFile(dbMeta, docsByEntity) {
|
|
8
|
+
const body = dbMeta.entities.map((meta) => {
|
|
9
|
+
const entityName = meta.entity.name;
|
|
10
|
+
const doc = docsByEntity[entityName];
|
|
11
|
+
return `${entityName}: { comment: "${escapeString(doc?.overview ?? "")}", fields: { ${Object.entries(doc?.fields ?? {}).map(([name, text]) => `${name}: "${escapeString(text)}"`).join(", ")} }, operations: undefined }`;
|
|
12
|
+
}).map((e) => ` ${e},`).join("\n");
|
|
13
|
+
return {
|
|
14
|
+
name: "./codegen/metadata-docs.ts",
|
|
15
|
+
contents: ts_poet.code`
|
|
16
|
+
export const docs = {
|
|
17
|
+
${body}
|
|
18
|
+
} as const;
|
|
19
|
+
|
|
20
|
+
export type EntityDocs = typeof docs;
|
|
21
|
+
`,
|
|
22
|
+
overwrite: true
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/** Escape a string for use inside a JS string literal (double-quoted). */
|
|
26
|
+
function escapeString(s) {
|
|
27
|
+
return s.replace(/\\/g, "\\\\").replace(/"/g, "\\\"").replace(/\n/g, "\\n");
|
|
28
|
+
}
|
|
29
|
+
//#endregion
|
|
30
|
+
exports.generateMetadataDocsFile = generateMetadataDocsFile;
|
|
31
|
+
|
|
32
|
+
//# sourceMappingURL=generate-metadata-docs.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-metadata-docs.cjs","names":[],"sources":["../../src/docs/generate-metadata-docs.ts"],"sourcesContent":["import { type CodegenFile, code } from \"ts-poet\";\n\nimport { type DbMetadata } from \"../EntityDbMetadata.ts\";\nimport { type ParsedDoc } from \"./markdown.ts\";\n\n/** Creates the `metadata-docs.ts` runtime artifact to access docs. */\nexport function generateMetadataDocsFile(dbMeta: DbMetadata, docsByEntity: Record<string, ParsedDoc>): CodegenFile {\n const entityEntries = dbMeta.entities.map((meta) => {\n const entityName = meta.entity.name;\n const doc = docsByEntity[entityName];\n const comment = escapeString(doc?.overview ?? \"\");\n const fieldEntries = Object.entries(doc?.fields ?? {})\n .map(([name, text]) => `${name}: \"${escapeString(text)}\"`)\n .join(\", \");\n return `${entityName}: { comment: \"${comment}\", fields: { ${fieldEntries} }, operations: undefined }`;\n });\n\n const body = entityEntries.map((e) => ` ${e},`).join(\"\\n\");\n\n return {\n name: \"./codegen/metadata-docs.ts\",\n contents: code`\n export const docs = {\n ${body}\n } as const;\n\n export type EntityDocs = typeof docs;\n `,\n overwrite: true,\n };\n}\n\n/** Escape a string for use inside a JS string literal (double-quoted). */\nfunction escapeString(s: string): string {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\");\n}\n"],"mappings":";;;;;;AAMA,SAAgB,yBAAyB,QAAoB,cAAsD;CAWjH,MAAM,OAVgB,OAAO,SAAS,KAAK,SAAS;EAClD,MAAM,aAAa,KAAK,OAAO;EAC/B,MAAM,MAAM,aAAa;EAKzB,OAAO,GAAG,WAAW,gBAJL,aAAa,KAAK,YAAY,EAIH,EAAE,eAHxB,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,CACnD,KAAK,CAAC,MAAM,UAAU,GAAG,KAAK,KAAK,aAAa,IAAI,EAAE,EAAE,CAAC,CACzD,KAAK,IAC+D,EAAE;CAC3E,CAEyB,CAAC,CAAC,KAAK,MAAM,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI;CAE1D,OAAO;EACL,MAAM;EACN,UAAU,QAAA,IAAI;;QAEV,KAAK;;;;;EAKT,WAAW;CACb;AACF;;AAGA,SAAS,aAAa,GAAmB;CACvC,OAAO,EAAE,QAAQ,OAAO,MAAM,CAAC,CAAC,QAAQ,MAAM,MAAK,CAAC,CAAC,QAAQ,OAAO,KAAK;AAC3E"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { DbMetadata } from "../EntityDbMetadata.cjs";
|
|
2
|
+
import { ParsedDoc } from "./markdown.cjs";
|
|
3
|
+
import { CodegenFile } from "ts-poet";
|
|
4
|
+
//#region src/docs/generate-metadata-docs.d.ts
|
|
5
|
+
/** Creates the `metadata-docs.ts` runtime artifact to access docs. */
|
|
6
|
+
declare function generateMetadataDocsFile(dbMeta: DbMetadata, docsByEntity: Record<string, ParsedDoc>): CodegenFile;
|
|
7
|
+
//#endregion
|
|
8
|
+
export { generateMetadataDocsFile };
|
|
9
|
+
//# sourceMappingURL=generate-metadata-docs.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-metadata-docs.d.cts","names":[],"sources":["../../src/docs/generate-metadata-docs.ts"],"mappings":";;;;;iBAMgB,yBAAyB,QAAQ,YAAY,cAAc,eAAe,aAAa"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { DbMetadata } from "../EntityDbMetadata.mjs";
|
|
2
|
+
import { ParsedDoc } from "./markdown.mjs";
|
|
3
|
+
import { CodegenFile } from "ts-poet";
|
|
4
|
+
//#region src/docs/generate-metadata-docs.d.ts
|
|
5
|
+
/** Creates the `metadata-docs.ts` runtime artifact to access docs. */
|
|
6
|
+
declare function generateMetadataDocsFile(dbMeta: DbMetadata, docsByEntity: Record<string, ParsedDoc>): CodegenFile;
|
|
7
|
+
//#endregion
|
|
8
|
+
export { generateMetadataDocsFile };
|
|
9
|
+
//# sourceMappingURL=generate-metadata-docs.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-metadata-docs.d.mts","names":[],"sources":["../../src/docs/generate-metadata-docs.ts"],"mappings":";;;;;iBAMgB,yBAAyB,QAAQ,YAAY,cAAc,eAAe,aAAa"}
|
|
@@ -1,36 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const markdown_1 = require("./markdown");
|
|
1
|
+
import "./markdown.js";
|
|
2
|
+
import "../EntityDbMetadata.js";
|
|
3
|
+
import { code } from "ts-poet";
|
|
4
|
+
//#region src/docs/generate-metadata-docs.ts
|
|
6
5
|
/** Creates the `metadata-docs.ts` runtime artifact to access docs. */
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
.join(", ");
|
|
17
|
-
return `${entityName}: { comment: "${comment}", fields: { ${fieldEntries} }, operations: undefined }`;
|
|
18
|
-
}));
|
|
19
|
-
const body = entityEntries.map((e) => ` ${e},`).join("\n");
|
|
20
|
-
return {
|
|
21
|
-
name: "./codegen/metadata-docs.ts",
|
|
22
|
-
contents: (0, ts_poet_1.code) `
|
|
6
|
+
function generateMetadataDocsFile(dbMeta, docsByEntity) {
|
|
7
|
+
const body = dbMeta.entities.map((meta) => {
|
|
8
|
+
const entityName = meta.entity.name;
|
|
9
|
+
const doc = docsByEntity[entityName];
|
|
10
|
+
return `${entityName}: { comment: "${escapeString(doc?.overview ?? "")}", fields: { ${Object.entries(doc?.fields ?? {}).map(([name, text]) => `${name}: "${escapeString(text)}"`).join(", ")} }, operations: undefined }`;
|
|
11
|
+
}).map((e) => ` ${e},`).join("\n");
|
|
12
|
+
return {
|
|
13
|
+
name: "./codegen/metadata-docs.ts",
|
|
14
|
+
contents: code`
|
|
23
15
|
export const docs = {
|
|
24
16
|
${body}
|
|
25
17
|
} as const;
|
|
26
18
|
|
|
27
19
|
export type EntityDocs = typeof docs;
|
|
28
20
|
`,
|
|
29
|
-
|
|
30
|
-
|
|
21
|
+
overwrite: true
|
|
22
|
+
};
|
|
31
23
|
}
|
|
32
24
|
/** Escape a string for use inside a JS string literal (double-quoted). */
|
|
33
25
|
function escapeString(s) {
|
|
34
|
-
|
|
26
|
+
return s.replace(/\\/g, "\\\\").replace(/"/g, "\\\"").replace(/\n/g, "\\n");
|
|
35
27
|
}
|
|
28
|
+
//#endregion
|
|
29
|
+
export { generateMetadataDocsFile };
|
|
30
|
+
|
|
36
31
|
//# sourceMappingURL=generate-metadata-docs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-metadata-docs.js","
|
|
1
|
+
{"version":3,"file":"generate-metadata-docs.js","names":[],"sources":["../../src/docs/generate-metadata-docs.ts"],"sourcesContent":["import { type CodegenFile, code } from \"ts-poet\";\n\nimport { type DbMetadata } from \"../EntityDbMetadata.ts\";\nimport { type ParsedDoc } from \"./markdown.ts\";\n\n/** Creates the `metadata-docs.ts` runtime artifact to access docs. */\nexport function generateMetadataDocsFile(dbMeta: DbMetadata, docsByEntity: Record<string, ParsedDoc>): CodegenFile {\n const entityEntries = dbMeta.entities.map((meta) => {\n const entityName = meta.entity.name;\n const doc = docsByEntity[entityName];\n const comment = escapeString(doc?.overview ?? \"\");\n const fieldEntries = Object.entries(doc?.fields ?? {})\n .map(([name, text]) => `${name}: \"${escapeString(text)}\"`)\n .join(\", \");\n return `${entityName}: { comment: \"${comment}\", fields: { ${fieldEntries} }, operations: undefined }`;\n });\n\n const body = entityEntries.map((e) => ` ${e},`).join(\"\\n\");\n\n return {\n name: \"./codegen/metadata-docs.ts\",\n contents: code`\n export const docs = {\n ${body}\n } as const;\n\n export type EntityDocs = typeof docs;\n `,\n overwrite: true,\n };\n}\n\n/** Escape a string for use inside a JS string literal (double-quoted). */\nfunction escapeString(s: string): string {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\");\n}\n"],"mappings":";;;;;AAMA,SAAgB,yBAAyB,QAAoB,cAAsD;CAWjH,MAAM,OAVgB,OAAO,SAAS,KAAK,SAAS;EAClD,MAAM,aAAa,KAAK,OAAO;EAC/B,MAAM,MAAM,aAAa;EAKzB,OAAO,GAAG,WAAW,gBAJL,aAAa,KAAK,YAAY,EAIH,EAAE,eAHxB,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,CACnD,KAAK,CAAC,MAAM,UAAU,GAAG,KAAK,KAAK,aAAa,IAAI,EAAE,EAAE,CAAC,CACzD,KAAK,IAC+D,EAAE;CAC3E,CAEyB,CAAC,CAAC,KAAK,MAAM,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI;CAE1D,OAAO;EACL,MAAM;EACN,UAAU,IAAI;;QAEV,KAAK;;;;;EAKT,WAAW;CACb;AACF;;AAGA,SAAS,aAAa,GAAmB;CACvC,OAAO,EAAE,QAAQ,OAAO,MAAM,CAAC,CAAC,QAAQ,MAAM,MAAK,CAAC,CAAC,QAAQ,OAAO,KAAK;AAC3E"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_docs_cache = require("./cache.cjs");
|
|
3
|
+
const require_docs_markdown = require("./markdown.cjs");
|
|
4
|
+
const require_docs_parsing = require("./parsing.cjs");
|
|
5
|
+
const require_docs_generate_metadata_docs = require("./generate-metadata-docs.cjs");
|
|
6
|
+
let fs = require("fs");
|
|
7
|
+
let path = require("path");
|
|
8
|
+
//#region src/docs/index.ts
|
|
9
|
+
/** Loads each entity's parsed `.md` doc, i.e. for injecting into codegen JSDocs & runtime metadata. */
|
|
10
|
+
async function loadEntityDocs(entitiesDir, entityNames) {
|
|
11
|
+
const result = {};
|
|
12
|
+
await Promise.all(entityNames.map(async (entityName) => {
|
|
13
|
+
const doc = await require_docs_markdown.maybeReadMarkdownFile(require_docs_markdown.getMarkdownFilePath(entitiesDir, entityName));
|
|
14
|
+
if (doc) result[entityName] = doc;
|
|
15
|
+
}));
|
|
16
|
+
return result;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Run the full docs sync pipeline with mtime-based caching:
|
|
20
|
+
* 1. backfill .md from .ts JSDocs
|
|
21
|
+
* 2. sync .md back into .ts JSDocs
|
|
22
|
+
* 3. save the cache
|
|
23
|
+
*/
|
|
24
|
+
async function syncDocs(entitiesDir, entityNames) {
|
|
25
|
+
const cache = await require_docs_cache.DocsCache.load();
|
|
26
|
+
const dirty = (await Promise.all(entityNames.map(async (entityName) => {
|
|
27
|
+
const tsPath = (0, path.join)(entitiesDir, `${entityName}.ts`);
|
|
28
|
+
const mdPath = require_docs_markdown.getMarkdownFilePath(entitiesDir, entityName);
|
|
29
|
+
const [tsMtime, mdMtime] = await Promise.all([require_docs_cache.getMtime(tsPath), require_docs_cache.getMtime(mdPath)]);
|
|
30
|
+
return {
|
|
31
|
+
entityName,
|
|
32
|
+
tsPath,
|
|
33
|
+
mdPath,
|
|
34
|
+
tsMtime,
|
|
35
|
+
mdMtime
|
|
36
|
+
};
|
|
37
|
+
}))).filter((s) => s.tsMtime !== -1 && !cache.isUpToDate(s.entityName, s.tsMtime, s.mdMtime));
|
|
38
|
+
if (dirty.length > 0) {
|
|
39
|
+
await Promise.all(dirty.map((s) => backfillMarkdownFromJsdoc(s.tsPath, s.mdPath)));
|
|
40
|
+
await Promise.all(dirty.map((s) => syncMarkdownToJsdoc(s.entityName, s.tsPath, s.mdPath)));
|
|
41
|
+
await Promise.all(dirty.map(async (s) => {
|
|
42
|
+
const [tsMtime, mdMtime] = await Promise.all([require_docs_cache.getMtime(s.tsPath), require_docs_cache.getMtime(s.mdPath)]);
|
|
43
|
+
cache.update(s.entityName, tsMtime, mdMtime);
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
await cache.save();
|
|
47
|
+
}
|
|
48
|
+
/** Sync a single entity's Markdown docs into its .ts file. */
|
|
49
|
+
async function syncMarkdownToJsdoc(entityName, tsPath, mdPath) {
|
|
50
|
+
const doc = await require_docs_markdown.maybeReadMarkdownFile(mdPath);
|
|
51
|
+
if (!doc || !doc.overview && Object.keys(doc.fields).length === 0) return;
|
|
52
|
+
const source = await fs.promises.readFile(tsPath, "utf-8");
|
|
53
|
+
const { classNode, members } = require_docs_parsing.parseEntityJSDocs(source);
|
|
54
|
+
const tag = require_docs_parsing.generatedTag(entityName);
|
|
55
|
+
const edits = [];
|
|
56
|
+
if (doc.overview && classNode) edits.push(require_docs_parsing.buildJSDocEdit(classNode, `${doc.overview}\n${tag}`));
|
|
57
|
+
for (const [fieldName, fieldDoc] of Object.entries(doc.fields)) {
|
|
58
|
+
if (!fieldDoc) continue;
|
|
59
|
+
for (const member of members.filter((m) => m.name === fieldName && m.kind !== "method")) edits.push(require_docs_parsing.buildJSDocEdit(member.node, `${fieldDoc}\n${tag}`));
|
|
60
|
+
}
|
|
61
|
+
if (edits.length > 0) {
|
|
62
|
+
const updated = require_docs_parsing.applyEdits(source, edits);
|
|
63
|
+
if (updated !== source) await fs.promises.writeFile(tsPath, updated, "utf-8");
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Backfill a single entity's .md file from JSDocs in its .ts file.
|
|
68
|
+
*
|
|
69
|
+
* If the .md doesn't exist, creates it. If it does exist, merges in any
|
|
70
|
+
* fields that are documented in .ts but missing from the .md.
|
|
71
|
+
*/
|
|
72
|
+
async function backfillMarkdownFromJsdoc(tsPath, mdPath) {
|
|
73
|
+
const source = await fs.promises.readFile(tsPath, "utf-8");
|
|
74
|
+
const { classDoc, fieldDocs } = require_docs_parsing.parseEntityJSDocs(source);
|
|
75
|
+
if (!classDoc && Object.keys(fieldDocs).length === 0) return;
|
|
76
|
+
const existingDoc = await require_docs_markdown.maybeReadMarkdownFile(mdPath);
|
|
77
|
+
const newFields = {};
|
|
78
|
+
for (const [name, doc] of Object.entries(fieldDocs)) if (!existingDoc?.fields[name]) newFields[name] = doc;
|
|
79
|
+
const newOverview = !existingDoc ? classDoc : existingDoc.overview ? void 0 : classDoc;
|
|
80
|
+
if (!newOverview && Object.keys(newFields).length === 0) return;
|
|
81
|
+
await require_docs_markdown.updateMarkdownDoc(mdPath, newOverview, newFields);
|
|
82
|
+
}
|
|
83
|
+
//#endregion
|
|
84
|
+
exports.buildJSDocBlock = require_docs_parsing.buildJSDocBlock;
|
|
85
|
+
exports.generateMetadataDocsFile = require_docs_generate_metadata_docs.generateMetadataDocsFile;
|
|
86
|
+
exports.generatedTag = require_docs_parsing.generatedTag;
|
|
87
|
+
exports.loadEntityDocs = loadEntityDocs;
|
|
88
|
+
exports.syncDocs = syncDocs;
|
|
89
|
+
|
|
90
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["maybeReadMarkdownFile","getMarkdownFilePath","DocsCache","join","getMtime","parseEntityJSDocs","generatedTag","buildJSDocEdit","applyEdits","updateMarkdownDoc"],"sources":["../../src/docs/index.ts"],"sourcesContent":["import { promises as fs } from \"fs\";\nimport { join } from \"path\";\n\nimport { DocsCache, getMtime } from \"./cache.ts\";\nimport { type ParsedDoc, getMarkdownFilePath, maybeReadMarkdownFile, updateMarkdownDoc } from \"./markdown.ts\";\nimport { applyEdits, buildJSDocEdit, generatedTag, parseEntityJSDocs } from \"./parsing.ts\";\nexport { generateMetadataDocsFile } from \"./generate-metadata-docs.ts\";\nexport { type ParsedDoc } from \"./markdown.ts\";\nexport { buildJSDocBlock, generatedTag } from \"./parsing.ts\";\n\n/** Loads each entity's parsed `.md` doc, i.e. for injecting into codegen JSDocs & runtime metadata. */\nexport async function loadEntityDocs(entitiesDir: string, entityNames: string[]): Promise<Record<string, ParsedDoc>> {\n const result: Record<string, ParsedDoc> = {};\n await Promise.all(\n entityNames.map(async (entityName) => {\n const doc = await maybeReadMarkdownFile(getMarkdownFilePath(entitiesDir, entityName));\n if (doc) result[entityName] = doc;\n }),\n );\n return result;\n}\n\n/**\n * Run the full docs sync pipeline with mtime-based caching:\n * 1. backfill .md from .ts JSDocs\n * 2. sync .md back into .ts JSDocs\n * 3. save the cache\n */\nexport async function syncDocs(entitiesDir: string, entityNames: string[]): Promise<void> {\n const cache = await DocsCache.load();\n\n // Stat all files upfront in parallel to determine which entities need processing\n const stats = await Promise.all(\n entityNames.map(async (entityName) => {\n const tsPath = join(entitiesDir, `${entityName}.ts`);\n const mdPath = getMarkdownFilePath(entitiesDir, entityName);\n const [tsMtime, mdMtime] = await Promise.all([getMtime(tsPath), getMtime(mdPath)]);\n return { entityName, tsPath, mdPath, tsMtime, mdMtime };\n }),\n );\n\n const dirty = stats.filter((s) => s.tsMtime !== -1 && !cache.isUpToDate(s.entityName, s.tsMtime, s.mdMtime));\n\n if (dirty.length > 0) {\n // Step 1: backfill .md from .ts\n await Promise.all(dirty.map((s) => backfillMarkdownFromJsdoc(s.tsPath, s.mdPath)));\n\n // Step 2: sync .md into .ts (re-read .md mtimes since backfill may have written them)\n await Promise.all(dirty.map((s) => syncMarkdownToJsdoc(s.entityName, s.tsPath, s.mdPath)));\n\n // Record final mtimes after both passes\n await Promise.all(\n dirty.map(async (s) => {\n const [tsMtime, mdMtime] = await Promise.all([getMtime(s.tsPath), getMtime(s.mdPath)]);\n cache.update(s.entityName, tsMtime, mdMtime);\n }),\n );\n }\n\n await cache.save();\n}\n\n/** Sync a single entity's Markdown docs into its .ts file. */\nasync function syncMarkdownToJsdoc(entityName: string, tsPath: string, mdPath: string): Promise<void> {\n const doc = await maybeReadMarkdownFile(mdPath);\n if (!doc || (!doc.overview && Object.keys(doc.fields).length === 0)) return;\n\n const source = await fs.readFile(tsPath, \"utf-8\");\n const { classNode, members } = parseEntityJSDocs(source);\n\n const tag = generatedTag(entityName);\n const edits = [];\n if (doc.overview && classNode) {\n edits.push(buildJSDocEdit(classNode, `${doc.overview}\\n${tag}`));\n }\n for (const [fieldName, fieldDoc] of Object.entries(doc.fields)) {\n if (!fieldDoc) continue;\n for (const member of members.filter((m) => m.name === fieldName && m.kind !== \"method\")) {\n edits.push(buildJSDocEdit(member.node, `${fieldDoc}\\n${tag}`));\n }\n }\n\n if (edits.length > 0) {\n const updated = applyEdits(source, edits);\n if (updated !== source) {\n await fs.writeFile(tsPath, updated, \"utf-8\");\n }\n }\n}\n\n/**\n * Backfill a single entity's .md file from JSDocs in its .ts file.\n *\n * If the .md doesn't exist, creates it. If it does exist, merges in any\n * fields that are documented in .ts but missing from the .md.\n */\nasync function backfillMarkdownFromJsdoc(tsPath: string, mdPath: string): Promise<void> {\n const source = await fs.readFile(tsPath, \"utf-8\");\n const { classDoc, fieldDocs } = parseEntityJSDocs(source);\n\n if (!classDoc && Object.keys(fieldDocs).length === 0) return;\n\n const existingDoc = await maybeReadMarkdownFile(mdPath);\n const newFields: Record<string, string> = {};\n for (const [name, doc] of Object.entries(fieldDocs)) {\n if (!existingDoc?.fields[name]) {\n newFields[name] = doc;\n }\n }\n const newOverview = !existingDoc ? classDoc : existingDoc.overview ? undefined : classDoc;\n\n if (!newOverview && Object.keys(newFields).length === 0) return;\n\n await updateMarkdownDoc(mdPath, newOverview, newFields);\n}\n"],"mappings":"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"}
|