joist-codegen 2.3.0-next.41 → 2.3.0-next.43

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.
Files changed (337) hide show
  1. package/build/EntityDbMetadata.cjs +608 -0
  2. package/build/EntityDbMetadata.cjs.map +1 -0
  3. package/build/EntityDbMetadata.d.cts +274 -0
  4. package/build/EntityDbMetadata.d.cts.map +1 -0
  5. package/build/EntityDbMetadata.d.mts +274 -0
  6. package/build/EntityDbMetadata.d.mts.map +1 -0
  7. package/build/EntityDbMetadata.js +485 -664
  8. package/build/EntityDbMetadata.js.map +1 -1
  9. package/build/_virtual/_rolldown/runtime.cjs +23 -0
  10. package/build/_virtual/_rolldown/runtime.js +5 -0
  11. package/build/assignTags.cjs +45 -0
  12. package/build/assignTags.cjs.map +1 -0
  13. package/build/{assignTags.d.ts → assignTags.d.cts} +8 -3
  14. package/build/assignTags.d.cts.map +1 -0
  15. package/build/assignTags.d.mts +16 -0
  16. package/build/assignTags.d.mts.map +1 -0
  17. package/build/assignTags.js +37 -59
  18. package/build/assignTags.js.map +1 -1
  19. package/build/codemods/Codemod.cjs +2 -0
  20. package/build/codemods/Codemod.d.cts +17 -0
  21. package/build/codemods/Codemod.d.cts.map +1 -0
  22. package/build/codemods/Codemod.d.mts +17 -0
  23. package/build/codemods/Codemod.d.mts.map +1 -0
  24. package/build/codemods/Codemod.js +2 -3
  25. package/build/codemods/JscodeshiftMod.cjs +42 -0
  26. package/build/codemods/JscodeshiftMod.cjs.map +1 -0
  27. package/build/codemods/JscodeshiftMod.d.cts +14 -0
  28. package/build/codemods/JscodeshiftMod.d.cts.map +1 -0
  29. package/build/codemods/JscodeshiftMod.d.mts +14 -0
  30. package/build/codemods/JscodeshiftMod.d.mts.map +1 -0
  31. package/build/codemods/JscodeshiftMod.js +33 -33
  32. package/build/codemods/JscodeshiftMod.js.map +1 -1
  33. package/build/codemods/codemod_0001-rename_has_async_property.cjs +30 -0
  34. package/build/codemods/codemod_0001-rename_has_async_property.cjs.map +1 -0
  35. package/build/codemods/codemod_0001-rename_has_async_property.d.cts +9 -0
  36. package/build/codemods/codemod_0001-rename_has_async_property.d.cts.map +1 -0
  37. package/build/codemods/codemod_0001-rename_has_async_property.d.mts +9 -0
  38. package/build/codemods/codemod_0001-rename_has_async_property.d.mts.map +1 -0
  39. package/build/codemods/codemod_0001-rename_has_async_property.js +21 -25
  40. package/build/codemods/codemod_0001-rename_has_async_property.js.map +1 -1
  41. package/build/codemods/codemod_0002-rename_async_query_fields.cjs +50 -0
  42. package/build/codemods/codemod_0002-rename_async_query_fields.cjs.map +1 -0
  43. package/build/codemods/codemod_0002-rename_async_query_fields.d.cts +9 -0
  44. package/build/codemods/codemod_0002-rename_async_query_fields.d.cts.map +1 -0
  45. package/build/codemods/codemod_0002-rename_async_query_fields.d.mts +9 -0
  46. package/build/codemods/codemod_0002-rename_async_query_fields.d.mts.map +1 -0
  47. package/build/codemods/codemod_0002-rename_async_query_fields.js +38 -46
  48. package/build/codemods/codemod_0002-rename_async_query_fields.js.map +1 -1
  49. package/build/codemods/codemod_0003-rename_find_paginated.cjs +25 -0
  50. package/build/codemods/codemod_0003-rename_find_paginated.cjs.map +1 -0
  51. package/build/codemods/codemod_0003-rename_find_paginated.d.cts +9 -0
  52. package/build/codemods/codemod_0003-rename_find_paginated.d.cts.map +1 -0
  53. package/build/codemods/codemod_0003-rename_find_paginated.d.mts +9 -0
  54. package/build/codemods/codemod_0003-rename_find_paginated.d.mts.map +1 -0
  55. package/build/codemods/codemod_0003-rename_find_paginated.js +17 -26
  56. package/build/codemods/codemod_0003-rename_find_paginated.js.map +1 -1
  57. package/build/codemods/index.cjs +49 -0
  58. package/build/codemods/index.cjs.map +1 -0
  59. package/build/codemods/index.d.cts +12 -0
  60. package/build/codemods/index.d.cts.map +1 -0
  61. package/build/codemods/index.d.mts +12 -0
  62. package/build/codemods/index.d.mts.map +1 -0
  63. package/build/codemods/index.js +34 -42
  64. package/build/codemods/index.js.map +1 -1
  65. package/build/config.cjs +377 -0
  66. package/build/config.cjs.map +1 -0
  67. package/build/config.d.cts +181 -0
  68. package/build/config.d.cts.map +1 -0
  69. package/build/config.d.mts +181 -0
  70. package/build/config.d.mts.map +1 -0
  71. package/build/config.js +300 -382
  72. package/build/config.js.map +1 -1
  73. package/build/docs/cache.cjs +62 -0
  74. package/build/docs/cache.cjs.map +1 -0
  75. package/build/docs/cache.d.cts +17 -0
  76. package/build/docs/cache.d.cts.map +1 -0
  77. package/build/docs/cache.d.mts +17 -0
  78. package/build/docs/cache.d.mts.map +1 -0
  79. package/build/docs/cache.js +52 -53
  80. package/build/docs/cache.js.map +1 -1
  81. package/build/docs/generate-metadata-docs.cjs +32 -0
  82. package/build/docs/generate-metadata-docs.cjs.map +1 -0
  83. package/build/docs/generate-metadata-docs.d.cts +9 -0
  84. package/build/docs/generate-metadata-docs.d.cts.map +1 -0
  85. package/build/docs/generate-metadata-docs.d.mts +9 -0
  86. package/build/docs/generate-metadata-docs.d.mts.map +1 -0
  87. package/build/docs/generate-metadata-docs.js +18 -20
  88. package/build/docs/generate-metadata-docs.js.map +1 -1
  89. package/build/docs/index.cjs +90 -0
  90. package/build/docs/index.cjs.map +1 -0
  91. package/build/docs/index.d.cts +16 -0
  92. package/build/docs/index.d.cts.map +1 -0
  93. package/build/docs/index.d.mts +16 -0
  94. package/build/docs/index.d.mts.map +1 -0
  95. package/build/docs/index.js +72 -91
  96. package/build/docs/index.js.map +1 -1
  97. package/build/docs/markdown.cjs +181 -0
  98. package/build/docs/markdown.cjs.map +1 -0
  99. package/build/docs/{markdown.d.ts → markdown.d.cts} +14 -11
  100. package/build/docs/markdown.d.cts.map +1 -0
  101. package/build/docs/markdown.d.mts +32 -0
  102. package/build/docs/markdown.d.mts.map +1 -0
  103. package/build/docs/markdown.js +152 -220
  104. package/build/docs/markdown.js.map +1 -1
  105. package/build/docs/parsing.cjs +117 -0
  106. package/build/docs/parsing.cjs.map +1 -0
  107. package/build/docs/parsing.d.cts +48 -0
  108. package/build/docs/parsing.d.cts.map +1 -0
  109. package/build/docs/parsing.d.mts +48 -0
  110. package/build/docs/parsing.d.mts.map +1 -0
  111. package/build/docs/parsing.js +86 -91
  112. package/build/docs/parsing.js.map +1 -1
  113. package/build/findEntityScopes.cjs +119 -0
  114. package/build/findEntityScopes.cjs.map +1 -0
  115. package/build/findEntityScopes.d.cts +14 -0
  116. package/build/findEntityScopes.d.cts.map +1 -0
  117. package/build/findEntityScopes.d.mts +14 -0
  118. package/build/findEntityScopes.d.mts.map +1 -0
  119. package/build/findEntityScopes.js +79 -121
  120. package/build/findEntityScopes.js.map +1 -1
  121. package/build/foreignKeyOrdering.cjs +52 -0
  122. package/build/foreignKeyOrdering.cjs.map +1 -0
  123. package/build/foreignKeyOrdering.d.cts +8 -0
  124. package/build/foreignKeyOrdering.d.cts.map +1 -0
  125. package/build/foreignKeyOrdering.d.mts +8 -0
  126. package/build/foreignKeyOrdering.d.mts.map +1 -0
  127. package/build/foreignKeyOrdering.js +46 -55
  128. package/build/foreignKeyOrdering.js.map +1 -1
  129. package/build/generate.cjs +127 -0
  130. package/build/generate.cjs.map +1 -0
  131. package/build/generate.d.cts +17 -0
  132. package/build/generate.d.cts.map +1 -0
  133. package/build/generate.d.mts +17 -0
  134. package/build/generate.d.mts.map +1 -0
  135. package/build/generate.js +109 -129
  136. package/build/generate.js.map +1 -1
  137. package/build/generateEntitiesFile.cjs +46 -0
  138. package/build/generateEntitiesFile.cjs.map +1 -0
  139. package/build/generateEntitiesFile.d.cts +11 -0
  140. package/build/generateEntitiesFile.d.cts.map +1 -0
  141. package/build/generateEntitiesFile.d.mts +11 -0
  142. package/build/generateEntitiesFile.d.mts.map +1 -0
  143. package/build/generateEntitiesFile.js +28 -25
  144. package/build/generateEntitiesFile.js.map +1 -1
  145. package/build/generateEntityCodegenFile.cjs +936 -0
  146. package/build/generateEntityCodegenFile.cjs.map +1 -0
  147. package/build/generateEntityCodegenFile.d.cts +16 -0
  148. package/build/generateEntityCodegenFile.d.cts.map +1 -0
  149. package/build/generateEntityCodegenFile.d.mts +16 -0
  150. package/build/generateEntityCodegenFile.d.mts.map +1 -0
  151. package/build/generateEntityCodegenFile.js +707 -852
  152. package/build/generateEntityCodegenFile.js.map +1 -1
  153. package/build/generateEntityFile.cjs +23 -0
  154. package/build/generateEntityFile.cjs.map +1 -0
  155. package/build/generateEntityFile.d.cts +9 -0
  156. package/build/generateEntityFile.d.cts.map +1 -0
  157. package/build/generateEntityFile.d.mts +9 -0
  158. package/build/generateEntityFile.d.mts.map +1 -0
  159. package/build/generateEntityFile.js +11 -8
  160. package/build/generateEntityFile.js.map +1 -1
  161. package/build/generateEntityTestFile.cjs +25 -0
  162. package/build/generateEntityTestFile.cjs.map +1 -0
  163. package/build/generateEntityTestFile.d.cts +9 -0
  164. package/build/generateEntityTestFile.d.cts.map +1 -0
  165. package/build/generateEntityTestFile.d.mts +9 -0
  166. package/build/generateEntityTestFile.d.mts.map +1 -0
  167. package/build/generateEntityTestFile.js +10 -7
  168. package/build/generateEntityTestFile.js.map +1 -1
  169. package/build/generateEnumFile.cjs +73 -0
  170. package/build/generateEnumFile.cjs.map +1 -0
  171. package/build/generateEnumFile.d.cts +9 -0
  172. package/build/generateEnumFile.d.cts.map +1 -0
  173. package/build/generateEnumFile.d.mts +9 -0
  174. package/build/generateEnumFile.d.mts.map +1 -0
  175. package/build/generateEnumFile.js +33 -43
  176. package/build/generateEnumFile.js.map +1 -1
  177. package/build/generateFactoriesFiles.cjs +28 -0
  178. package/build/generateFactoriesFiles.cjs.map +1 -0
  179. package/build/generateFactoriesFiles.d.cts +7 -0
  180. package/build/generateFactoriesFiles.d.cts.map +1 -0
  181. package/build/generateFactoriesFiles.d.mts +7 -0
  182. package/build/generateFactoriesFiles.d.mts.map +1 -0
  183. package/build/generateFactoriesFiles.js +21 -16
  184. package/build/generateFactoriesFiles.js.map +1 -1
  185. package/build/generateFlushFunction.cjs +61 -0
  186. package/build/generateFlushFunction.cjs.map +1 -0
  187. package/build/{generateFlushFunction.d.ts → generateFlushFunction.d.cts} +8 -4
  188. package/build/generateFlushFunction.d.cts.map +1 -0
  189. package/build/generateFlushFunction.d.mts +23 -0
  190. package/build/generateFlushFunction.d.mts.map +1 -0
  191. package/build/generateFlushFunction.js +32 -73
  192. package/build/generateFlushFunction.js.map +1 -1
  193. package/build/generateMetadataFile.cjs +290 -0
  194. package/build/generateMetadataFile.cjs.map +1 -0
  195. package/build/generateMetadataFile.d.cts +8 -0
  196. package/build/generateMetadataFile.d.cts.map +1 -0
  197. package/build/generateMetadataFile.d.mts +8 -0
  198. package/build/generateMetadataFile.d.mts.map +1 -0
  199. package/build/generateMetadataFile.js +111 -142
  200. package/build/generateMetadataFile.js.map +1 -1
  201. package/build/generatePgEnumFile.cjs +21 -0
  202. package/build/generatePgEnumFile.cjs.map +1 -0
  203. package/build/generatePgEnumFile.d.cts +9 -0
  204. package/build/generatePgEnumFile.d.cts.map +1 -0
  205. package/build/generatePgEnumFile.d.mts +9 -0
  206. package/build/generatePgEnumFile.d.mts.map +1 -0
  207. package/build/generatePgEnumFile.js +12 -9
  208. package/build/generatePgEnumFile.js.map +1 -1
  209. package/build/index.cjs +135 -0
  210. package/build/index.cjs.map +1 -0
  211. package/build/index.d.cts +12 -0
  212. package/build/index.d.cts.map +1 -0
  213. package/build/index.d.mts +12 -0
  214. package/build/index.d.mts.map +1 -0
  215. package/build/index.js +105 -147
  216. package/build/index.js.map +1 -1
  217. package/build/inheritance.cjs +213 -0
  218. package/build/inheritance.cjs.map +1 -0
  219. package/build/inheritance.d.cts +12 -0
  220. package/build/inheritance.d.cts.map +1 -0
  221. package/build/inheritance.d.mts +12 -0
  222. package/build/inheritance.d.mts.map +1 -0
  223. package/build/inheritance.js +193 -247
  224. package/build/inheritance.js.map +1 -1
  225. package/build/installSkills.cjs +68 -0
  226. package/build/installSkills.cjs.map +1 -0
  227. package/build/{installSkills.d.ts → installSkills.d.cts} +5 -1
  228. package/build/installSkills.d.cts.map +1 -0
  229. package/build/installSkills.d.mts +16 -0
  230. package/build/installSkills.d.mts.map +1 -0
  231. package/build/installSkills.js +55 -57
  232. package/build/installSkills.js.map +1 -1
  233. package/build/keywords.cjs +7 -0
  234. package/build/keywords.cjs.map +1 -0
  235. package/build/keywords.d.cts +5 -0
  236. package/build/keywords.d.cts.map +1 -0
  237. package/build/keywords.d.mts +5 -0
  238. package/build/keywords.d.mts.map +1 -0
  239. package/build/keywords.js +5 -4
  240. package/build/keywords.js.map +1 -1
  241. package/build/loadMetadata.cjs +39 -0
  242. package/build/loadMetadata.cjs.map +1 -0
  243. package/build/loadMetadata.d.cts +31 -0
  244. package/build/loadMetadata.d.cts.map +1 -0
  245. package/build/loadMetadata.d.mts +31 -0
  246. package/build/loadMetadata.d.mts.map +1 -0
  247. package/build/loadMetadata.js +32 -39
  248. package/build/loadMetadata.js.map +1 -1
  249. package/build/logger.cjs +28 -0
  250. package/build/logger.cjs.map +1 -0
  251. package/build/logger.d.cts +13 -0
  252. package/build/logger.d.cts.map +1 -0
  253. package/build/logger.d.mts +13 -0
  254. package/build/logger.d.mts.map +1 -0
  255. package/build/logger.js +17 -16
  256. package/build/logger.js.map +1 -1
  257. package/build/scanEntityFiles.cjs +46 -0
  258. package/build/scanEntityFiles.cjs.map +1 -0
  259. package/build/scanEntityFiles.d.cts +8 -0
  260. package/build/scanEntityFiles.d.cts.map +1 -0
  261. package/build/scanEntityFiles.d.mts +8 -0
  262. package/build/scanEntityFiles.d.mts.map +1 -0
  263. package/build/scanEntityFiles.js +37 -42
  264. package/build/scanEntityFiles.js.map +1 -1
  265. package/build/sortForeignKeys.cjs +99 -0
  266. package/build/sortForeignKeys.cjs.map +1 -0
  267. package/build/{sortForeignKeys.d.ts → sortForeignKeys.d.cts} +8 -4
  268. package/build/sortForeignKeys.d.cts.map +1 -0
  269. package/build/sortForeignKeys.d.mts +35 -0
  270. package/build/sortForeignKeys.d.mts.map +1 -0
  271. package/build/sortForeignKeys.js +88 -117
  272. package/build/sortForeignKeys.js.map +1 -1
  273. package/build/symbols.cjs +226 -0
  274. package/build/symbols.cjs.map +1 -0
  275. package/build/symbols.d.cts +114 -0
  276. package/build/symbols.d.cts.map +1 -0
  277. package/build/symbols.d.mts +114 -0
  278. package/build/symbols.d.mts.map +1 -0
  279. package/build/symbols.js +115 -116
  280. package/build/symbols.js.map +1 -1
  281. package/build/tsdoc.cjs +22 -0
  282. package/build/tsdoc.cjs.map +1 -0
  283. package/build/tsdoc.d.cts +15 -0
  284. package/build/tsdoc.d.cts.map +1 -0
  285. package/build/tsdoc.d.mts +15 -0
  286. package/build/tsdoc.d.mts.map +1 -0
  287. package/build/tsdoc.js +18 -15
  288. package/build/tsdoc.js.map +1 -1
  289. package/build/utils.cjs +173 -0
  290. package/build/utils.cjs.map +1 -0
  291. package/build/utils.d.cts +34 -0
  292. package/build/utils.d.cts.map +1 -0
  293. package/build/utils.d.mts +34 -0
  294. package/build/utils.d.mts.map +1 -0
  295. package/build/utils.js +112 -166
  296. package/build/utils.js.map +1 -1
  297. package/build/write-json-schema.cjs +23 -0
  298. package/build/write-json-schema.cjs.map +1 -0
  299. package/build/write-json-schema.d.cts +1 -0
  300. package/build/write-json-schema.d.mts +1 -0
  301. package/build/write-json-schema.js +19 -13
  302. package/build/write-json-schema.js.map +1 -1
  303. package/package.json +28 -5
  304. package/build/EntityDbMetadata.d.ts +0 -271
  305. package/build/codemods/Codemod.d.ts +0 -13
  306. package/build/codemods/Codemod.js.map +0 -1
  307. package/build/codemods/JscodeshiftMod.d.ts +0 -10
  308. package/build/codemods/codemod_0001-rename_has_async_property.d.ts +0 -6
  309. package/build/codemods/codemod_0002-rename_async_query_fields.d.ts +0 -6
  310. package/build/codemods/codemod_0003-rename_find_paginated.d.ts +0 -6
  311. package/build/codemods/index.d.ts +0 -8
  312. package/build/config.d.ts +0 -178
  313. package/build/docs/cache.d.ts +0 -13
  314. package/build/docs/generate-metadata-docs.d.ts +0 -5
  315. package/build/docs/index.d.ts +0 -13
  316. package/build/docs/parsing.d.ts +0 -45
  317. package/build/findEntityScopes.d.ts +0 -10
  318. package/build/foreignKeyOrdering.d.ts +0 -2
  319. package/build/generate.d.ts +0 -11
  320. package/build/generateEntitiesFile.d.ts +0 -6
  321. package/build/generateEntityCodegenFile.d.ts +0 -11
  322. package/build/generateEntityFile.d.ts +0 -5
  323. package/build/generateEntityTestFile.d.ts +0 -5
  324. package/build/generateEnumFile.d.ts +0 -4
  325. package/build/generateFactoriesFiles.d.ts +0 -3
  326. package/build/generateMetadataFile.d.ts +0 -4
  327. package/build/generatePgEnumFile.d.ts +0 -4
  328. package/build/index.d.ts +0 -11
  329. package/build/inheritance.d.ts +0 -9
  330. package/build/keywords.d.ts +0 -1
  331. package/build/loadMetadata.d.ts +0 -25
  332. package/build/logger.d.ts +0 -9
  333. package/build/scanEntityFiles.d.ts +0 -4
  334. package/build/symbols.d.ts +0 -110
  335. package/build/tsdoc.d.ts +0 -11
  336. package/build/utils.d.ts +0 -30
  337. package/build/write-json-schema.d.ts +0 -1
@@ -0,0 +1,16 @@
1
+ import { ParsedDoc } from "./markdown.cjs";
2
+ import { generateMetadataDocsFile } from "./generate-metadata-docs.cjs";
3
+ import { buildJSDocBlock, generatedTag } from "./parsing.cjs";
4
+ //#region src/docs/index.d.ts
5
+ /** Loads each entity's parsed `.md` doc, i.e. for injecting into codegen JSDocs & runtime metadata. */
6
+ declare function loadEntityDocs(entitiesDir: string, entityNames: string[]): Promise<Record<string, ParsedDoc>>;
7
+ /**
8
+ * Run the full docs sync pipeline with mtime-based caching:
9
+ * 1. backfill .md from .ts JSDocs
10
+ * 2. sync .md back into .ts JSDocs
11
+ * 3. save the cache
12
+ */
13
+ declare function syncDocs(entitiesDir: string, entityNames: string[]): Promise<void>;
14
+ //#endregion
15
+ export { type ParsedDoc, buildJSDocBlock, generateMetadataDocsFile, generatedTag, loadEntityDocs, syncDocs };
16
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../../src/docs/index.ts"],"mappings":";;;;;iBAWsB,eAAe,qBAAqB,wBAAwB,QAAQ,eAAe;;;;;;;iBAiBnF,SAAS,qBAAqB,wBAAwB"}
@@ -0,0 +1,16 @@
1
+ import { ParsedDoc } from "./markdown.mjs";
2
+ import { generateMetadataDocsFile } from "./generate-metadata-docs.mjs";
3
+ import { buildJSDocBlock, generatedTag } from "./parsing.mjs";
4
+ //#region src/docs/index.d.ts
5
+ /** Loads each entity's parsed `.md` doc, i.e. for injecting into codegen JSDocs & runtime metadata. */
6
+ declare function loadEntityDocs(entitiesDir: string, entityNames: string[]): Promise<Record<string, ParsedDoc>>;
7
+ /**
8
+ * Run the full docs sync pipeline with mtime-based caching:
9
+ * 1. backfill .md from .ts JSDocs
10
+ * 2. sync .md back into .ts JSDocs
11
+ * 3. save the cache
12
+ */
13
+ declare function syncDocs(entitiesDir: string, entityNames: string[]): Promise<void>;
14
+ //#endregion
15
+ export { type ParsedDoc, buildJSDocBlock, generateMetadataDocsFile, generatedTag, loadEntityDocs, syncDocs };
16
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/docs/index.ts"],"mappings":";;;;;iBAWsB,eAAe,qBAAqB,wBAAwB,QAAQ,eAAe;;;;;;;iBAiBnF,SAAS,qBAAqB,wBAAwB"}
@@ -1,104 +1,85 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generatedTag = exports.buildJSDocBlock = exports.generateMetadataDocsFile = void 0;
4
- exports.loadEntityDocs = loadEntityDocs;
5
- exports.syncDocs = syncDocs;
6
- const fs_1 = require("fs");
7
- const path_1 = require("path");
8
- const cache_1 = require("./cache");
9
- const markdown_1 = require("./markdown");
10
- const parsing_1 = require("./parsing");
11
- var generate_metadata_docs_1 = require("./generate-metadata-docs");
12
- Object.defineProperty(exports, "generateMetadataDocsFile", { enumerable: true, get: function () { return generate_metadata_docs_1.generateMetadataDocsFile; } });
13
- var parsing_2 = require("./parsing");
14
- Object.defineProperty(exports, "buildJSDocBlock", { enumerable: true, get: function () { return parsing_2.buildJSDocBlock; } });
15
- Object.defineProperty(exports, "generatedTag", { enumerable: true, get: function () { return parsing_2.generatedTag; } });
1
+ import { DocsCache, getMtime } from "./cache.js";
2
+ import { getMarkdownFilePath, maybeReadMarkdownFile, updateMarkdownDoc } from "./markdown.js";
3
+ import { applyEdits, buildJSDocBlock, buildJSDocEdit, generatedTag, parseEntityJSDocs } from "./parsing.js";
4
+ import { generateMetadataDocsFile } from "./generate-metadata-docs.js";
5
+ import { promises } from "fs";
6
+ import { join } from "path";
7
+ //#region src/docs/index.ts
16
8
  /** Loads each entity's parsed `.md` doc, i.e. for injecting into codegen JSDocs & runtime metadata. */
17
9
  async function loadEntityDocs(entitiesDir, entityNames) {
18
- const result = {};
19
- await Promise.all(entityNames.map(async (entityName) => {
20
- const doc = await (0, markdown_1.maybeReadMarkdownFile)((0, markdown_1.getMarkdownFilePath)(entitiesDir, entityName));
21
- if (doc)
22
- result[entityName] = doc;
23
- }));
24
- return result;
10
+ const result = {};
11
+ await Promise.all(entityNames.map(async (entityName) => {
12
+ const doc = await maybeReadMarkdownFile(getMarkdownFilePath(entitiesDir, entityName));
13
+ if (doc) result[entityName] = doc;
14
+ }));
15
+ return result;
25
16
  }
26
17
  /**
27
- * Run the full docs sync pipeline with mtime-based caching:
28
- * 1. backfill .md from .ts JSDocs
29
- * 2. sync .md back into .ts JSDocs
30
- * 3. save the cache
31
- */
18
+ * Run the full docs sync pipeline with mtime-based caching:
19
+ * 1. backfill .md from .ts JSDocs
20
+ * 2. sync .md back into .ts JSDocs
21
+ * 3. save the cache
22
+ */
32
23
  async function syncDocs(entitiesDir, entityNames) {
33
- const cache = await cache_1.DocsCache.load();
34
- // Stat all files upfront in parallel to determine which entities need processing
35
- const stats = await Promise.all(entityNames.map(async (entityName) => {
36
- const tsPath = (0, path_1.join)(entitiesDir, `${entityName}.ts`);
37
- const mdPath = (0, markdown_1.getMarkdownFilePath)(entitiesDir, entityName);
38
- const [tsMtime, mdMtime] = await Promise.all([(0, cache_1.getMtime)(tsPath), (0, cache_1.getMtime)(mdPath)]);
39
- return { entityName, tsPath, mdPath, tsMtime, mdMtime };
40
- }));
41
- const dirty = stats.filter((s) => s.tsMtime !== -1 && !cache.isUpToDate(s.entityName, s.tsMtime, s.mdMtime));
42
- if (dirty.length > 0) {
43
- // Step 1: backfill .md from .ts
44
- await Promise.all(dirty.map((s) => backfillMarkdownFromJsdoc(s.tsPath, s.mdPath)));
45
- // Step 2: sync .md into .ts (re-read .md mtimes since backfill may have written them)
46
- await Promise.all(dirty.map((s) => syncMarkdownToJsdoc(s.entityName, s.tsPath, s.mdPath)));
47
- // Record final mtimes after both passes
48
- await Promise.all(dirty.map(async (s) => {
49
- const [tsMtime, mdMtime] = await Promise.all([(0, cache_1.getMtime)(s.tsPath), (0, cache_1.getMtime)(s.mdPath)]);
50
- cache.update(s.entityName, tsMtime, mdMtime);
51
- }));
52
- }
53
- await cache.save();
24
+ const cache = await DocsCache.load();
25
+ const dirty = (await Promise.all(entityNames.map(async (entityName) => {
26
+ const tsPath = join(entitiesDir, `${entityName}.ts`);
27
+ const mdPath = getMarkdownFilePath(entitiesDir, entityName);
28
+ const [tsMtime, mdMtime] = await Promise.all([getMtime(tsPath), getMtime(mdPath)]);
29
+ return {
30
+ entityName,
31
+ tsPath,
32
+ mdPath,
33
+ tsMtime,
34
+ mdMtime
35
+ };
36
+ }))).filter((s) => s.tsMtime !== -1 && !cache.isUpToDate(s.entityName, s.tsMtime, s.mdMtime));
37
+ if (dirty.length > 0) {
38
+ await Promise.all(dirty.map((s) => backfillMarkdownFromJsdoc(s.tsPath, s.mdPath)));
39
+ await Promise.all(dirty.map((s) => syncMarkdownToJsdoc(s.entityName, s.tsPath, s.mdPath)));
40
+ await Promise.all(dirty.map(async (s) => {
41
+ const [tsMtime, mdMtime] = await Promise.all([getMtime(s.tsPath), getMtime(s.mdPath)]);
42
+ cache.update(s.entityName, tsMtime, mdMtime);
43
+ }));
44
+ }
45
+ await cache.save();
54
46
  }
55
47
  /** Sync a single entity's Markdown docs into its .ts file. */
56
48
  async function syncMarkdownToJsdoc(entityName, tsPath, mdPath) {
57
- const doc = await (0, markdown_1.maybeReadMarkdownFile)(mdPath);
58
- if (!doc || (!doc.overview && Object.keys(doc.fields).length === 0))
59
- return;
60
- const source = await fs_1.promises.readFile(tsPath, "utf-8");
61
- const { classNode, members } = (0, parsing_1.parseEntityJSDocs)(source);
62
- const tag = (0, parsing_1.generatedTag)(entityName);
63
- const edits = [];
64
- if (doc.overview && classNode) {
65
- edits.push((0, parsing_1.buildJSDocEdit)(classNode, `${doc.overview}\n${tag}`));
66
- }
67
- for (const [fieldName, fieldDoc] of Object.entries(doc.fields)) {
68
- if (!fieldDoc)
69
- continue;
70
- for (const member of members.filter((m) => m.name === fieldName && m.kind !== "method")) {
71
- edits.push((0, parsing_1.buildJSDocEdit)(member.node, `${fieldDoc}\n${tag}`));
72
- }
73
- }
74
- if (edits.length > 0) {
75
- const updated = (0, parsing_1.applyEdits)(source, edits);
76
- if (updated !== source) {
77
- await fs_1.promises.writeFile(tsPath, updated, "utf-8");
78
- }
79
- }
49
+ const doc = await maybeReadMarkdownFile(mdPath);
50
+ if (!doc || !doc.overview && Object.keys(doc.fields).length === 0) return;
51
+ const source = await promises.readFile(tsPath, "utf-8");
52
+ const { classNode, members } = parseEntityJSDocs(source);
53
+ const tag = generatedTag(entityName);
54
+ const edits = [];
55
+ if (doc.overview && classNode) edits.push(buildJSDocEdit(classNode, `${doc.overview}\n${tag}`));
56
+ for (const [fieldName, fieldDoc] of Object.entries(doc.fields)) {
57
+ if (!fieldDoc) continue;
58
+ for (const member of members.filter((m) => m.name === fieldName && m.kind !== "method")) edits.push(buildJSDocEdit(member.node, `${fieldDoc}\n${tag}`));
59
+ }
60
+ if (edits.length > 0) {
61
+ const updated = applyEdits(source, edits);
62
+ if (updated !== source) await promises.writeFile(tsPath, updated, "utf-8");
63
+ }
80
64
  }
81
65
  /**
82
- * Backfill a single entity's .md file from JSDocs in its .ts file.
83
- *
84
- * If the .md doesn't exist, creates it. If it does exist, merges in any
85
- * fields that are documented in .ts but missing from the .md.
86
- */
66
+ * Backfill a single entity's .md file from JSDocs in its .ts file.
67
+ *
68
+ * If the .md doesn't exist, creates it. If it does exist, merges in any
69
+ * fields that are documented in .ts but missing from the .md.
70
+ */
87
71
  async function backfillMarkdownFromJsdoc(tsPath, mdPath) {
88
- const source = await fs_1.promises.readFile(tsPath, "utf-8");
89
- const { classDoc, fieldDocs } = (0, parsing_1.parseEntityJSDocs)(source);
90
- if (!classDoc && Object.keys(fieldDocs).length === 0)
91
- return;
92
- const existingDoc = await (0, markdown_1.maybeReadMarkdownFile)(mdPath);
93
- const newFields = {};
94
- for (const [name, doc] of Object.entries(fieldDocs)) {
95
- if (!existingDoc?.fields[name]) {
96
- newFields[name] = doc;
97
- }
98
- }
99
- const newOverview = !existingDoc ? classDoc : existingDoc.overview ? undefined : classDoc;
100
- if (!newOverview && Object.keys(newFields).length === 0)
101
- return;
102
- await (0, markdown_1.updateMarkdownDoc)(mdPath, newOverview, newFields);
72
+ const source = await promises.readFile(tsPath, "utf-8");
73
+ const { classDoc, fieldDocs } = parseEntityJSDocs(source);
74
+ if (!classDoc && Object.keys(fieldDocs).length === 0) return;
75
+ const existingDoc = await maybeReadMarkdownFile(mdPath);
76
+ const newFields = {};
77
+ for (const [name, doc] of Object.entries(fieldDocs)) if (!existingDoc?.fields[name]) newFields[name] = doc;
78
+ const newOverview = !existingDoc ? classDoc : existingDoc.overview ? void 0 : classDoc;
79
+ if (!newOverview && Object.keys(newFields).length === 0) return;
80
+ await updateMarkdownDoc(mdPath, newOverview, newFields);
103
81
  }
82
+ //#endregion
83
+ export { buildJSDocBlock, generateMetadataDocsFile, generatedTag, loadEntityDocs, syncDocs };
84
+
104
85
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/docs/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["fs"],"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":";;;;;;;;AAWA,eAAsB,eAAe,aAAqB,aAA2D;CACnH,MAAM,SAAoC,CAAC;CAC3C,MAAM,QAAQ,IACZ,YAAY,IAAI,OAAO,eAAe;EACpC,MAAM,MAAM,MAAM,sBAAsB,oBAAoB,aAAa,UAAU,CAAC;EACpF,IAAI,KAAK,OAAO,cAAc;CAChC,CAAC,CACH;CACA,OAAO;AACT;;;;;;;AAQA,eAAsB,SAAS,aAAqB,aAAsC;CACxF,MAAM,QAAQ,MAAM,UAAU,KAAK;CAYnC,MAAM,SAAQ,MATM,QAAQ,IAC1B,YAAY,IAAI,OAAO,eAAe;EACpC,MAAM,SAAS,KAAK,aAAa,GAAG,WAAW,IAAI;EACnD,MAAM,SAAS,oBAAoB,aAAa,UAAU;EAC1D,MAAM,CAAC,SAAS,WAAW,MAAM,QAAQ,IAAI,CAAC,SAAS,MAAM,GAAG,SAAS,MAAM,CAAC,CAAC;EACjF,OAAO;GAAE;GAAY;GAAQ;GAAQ;GAAS;EAAQ;CACxD,CAAC,CACH,EAAA,CAEoB,QAAQ,MAAM,EAAE,YAAY,MAAM,CAAC,MAAM,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC;CAE3G,IAAI,MAAM,SAAS,GAAG;EAEpB,MAAM,QAAQ,IAAI,MAAM,KAAK,MAAM,0BAA0B,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;EAGjF,MAAM,QAAQ,IAAI,MAAM,KAAK,MAAM,oBAAoB,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;EAGzF,MAAM,QAAQ,IACZ,MAAM,IAAI,OAAO,MAAM;GACrB,MAAM,CAAC,SAAS,WAAW,MAAM,QAAQ,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,CAAC,CAAC;GACrF,MAAM,OAAO,EAAE,YAAY,SAAS,OAAO;EAC7C,CAAC,CACH;CACF;CAEA,MAAM,MAAM,KAAK;AACnB;;AAGA,eAAe,oBAAoB,YAAoB,QAAgB,QAA+B;CACpG,MAAM,MAAM,MAAM,sBAAsB,MAAM;CAC9C,IAAI,CAAC,OAAQ,CAAC,IAAI,YAAY,OAAO,KAAK,IAAI,MAAM,CAAC,CAAC,WAAW,GAAI;CAErE,MAAM,SAAS,MAAMA,SAAG,SAAS,QAAQ,OAAO;CAChD,MAAM,EAAE,WAAW,YAAY,kBAAkB,MAAM;CAEvD,MAAM,MAAM,aAAa,UAAU;CACnC,MAAM,QAAQ,CAAC;CACf,IAAI,IAAI,YAAY,WAClB,MAAM,KAAK,eAAe,WAAW,GAAG,IAAI,SAAS,IAAI,KAAK,CAAC;CAEjE,KAAK,MAAM,CAAC,WAAW,aAAa,OAAO,QAAQ,IAAI,MAAM,GAAG;EAC9D,IAAI,CAAC,UAAU;EACf,KAAK,MAAM,UAAU,QAAQ,QAAQ,MAAM,EAAE,SAAS,aAAa,EAAE,SAAS,QAAQ,GACpF,MAAM,KAAK,eAAe,OAAO,MAAM,GAAG,SAAS,IAAI,KAAK,CAAC;CAEjE;CAEA,IAAI,MAAM,SAAS,GAAG;EACpB,MAAM,UAAU,WAAW,QAAQ,KAAK;EACxC,IAAI,YAAY,QACd,MAAMA,SAAG,UAAU,QAAQ,SAAS,OAAO;CAE/C;AACF;;;;;;;AAQA,eAAe,0BAA0B,QAAgB,QAA+B;CACtF,MAAM,SAAS,MAAMA,SAAG,SAAS,QAAQ,OAAO;CAChD,MAAM,EAAE,UAAU,cAAc,kBAAkB,MAAM;CAExD,IAAI,CAAC,YAAY,OAAO,KAAK,SAAS,CAAC,CAAC,WAAW,GAAG;CAEtD,MAAM,cAAc,MAAM,sBAAsB,MAAM;CACtD,MAAM,YAAoC,CAAC;CAC3C,KAAK,MAAM,CAAC,MAAM,QAAQ,OAAO,QAAQ,SAAS,GAChD,IAAI,CAAC,aAAa,OAAO,OACvB,UAAU,QAAQ;CAGtB,MAAM,cAAc,CAAC,cAAc,WAAW,YAAY,WAAW,KAAA,IAAY;CAEjF,IAAI,CAAC,eAAe,OAAO,KAAK,SAAS,CAAC,CAAC,WAAW,GAAG;CAEzD,MAAM,kBAAkB,QAAQ,aAAa,SAAS;AACxD"}
@@ -0,0 +1,181 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
3
+ let fs = require("fs");
4
+ let path = require("path");
5
+ let prettier = require("prettier");
6
+ prettier = require_runtime.__toESM(prettier, 1);
7
+ //#region src/docs/markdown.ts
8
+ /** Read and parse a .md file if it exists, returning undefined if it doesn't. */
9
+ async function maybeReadMarkdownFile(filePath) {
10
+ try {
11
+ return parseMarkdownContent(await fs.promises.readFile(filePath, "utf-8"));
12
+ } catch {
13
+ return;
14
+ }
15
+ }
16
+ /** Reads a basic `overview` and per-field docs out of md content. */
17
+ function parseMarkdownContent(content) {
18
+ const lines = content.split("\n");
19
+ let currentSection = null;
20
+ let currentField = null;
21
+ const overviewLines = [];
22
+ const fields = {};
23
+ for (const line of lines) {
24
+ if (/^## Overview\s*$/.test(line)) {
25
+ currentSection = "overview";
26
+ currentField = null;
27
+ continue;
28
+ }
29
+ if (/^## Fields\s*$/.test(line)) {
30
+ currentSection = "fields";
31
+ currentField = null;
32
+ continue;
33
+ }
34
+ if (line.startsWith("## ")) {
35
+ currentSection = null;
36
+ currentField = null;
37
+ continue;
38
+ }
39
+ if (currentSection === "fields") {
40
+ const fieldMatch = line.match(/^### (\w+)\s*$/);
41
+ if (fieldMatch) {
42
+ currentField = fieldMatch[1];
43
+ fields[currentField] = [];
44
+ continue;
45
+ }
46
+ }
47
+ if (currentSection === "overview") overviewLines.push(line);
48
+ else if (currentSection === "fields" && currentField) fields[currentField].push(line);
49
+ }
50
+ return {
51
+ overview: trimBlankLines(overviewLines).join("\n"),
52
+ fields: Object.fromEntries(Object.entries(fields).map(([k, v]) => [k, trimBlankLines(v).join("\n")]))
53
+ };
54
+ }
55
+ /** Create a new .md file from scratch (used only for initial backfill when no .md exists). */
56
+ async function writeMarkdownDoc(filePath, overview, fields) {
57
+ const parts = [];
58
+ parts.push("## Overview");
59
+ parts.push(overview || "");
60
+ parts.push("");
61
+ if (fields && Object.keys(fields).length > 0) {
62
+ parts.push("## Fields");
63
+ parts.push("");
64
+ for (const [fieldName, fieldDoc] of Object.entries(fields)) {
65
+ parts.push(`### ${fieldName}`);
66
+ parts.push("");
67
+ parts.push(fieldDoc);
68
+ parts.push("");
69
+ }
70
+ }
71
+ const prettierConfig = await (0, prettier.resolveConfig)(filePath);
72
+ const content = await prettier.default.format(parts.join("\n"), {
73
+ ...prettierConfig,
74
+ parser: "markdown",
75
+ plugins: []
76
+ });
77
+ await fs.promises.writeFile(filePath, content, "utf-8");
78
+ }
79
+ /**
80
+ * Update an existing .md file, merging in new/changed content without stomping user content.
81
+ * If the file doesn't exist, creates it from scratch.
82
+ */
83
+ async function updateMarkdownDoc(filePath, overview, fields) {
84
+ let existing = null;
85
+ try {
86
+ existing = await fs.promises.readFile(filePath, "utf-8");
87
+ } catch {}
88
+ if (existing !== null) {
89
+ const updated = mergeMarkdownContent(existing, overview, fields);
90
+ if (updated !== existing) await fs.promises.writeFile(filePath, updated, "utf-8");
91
+ } else await writeMarkdownDoc(filePath, overview ?? "", Object.keys(fields).length > 0 ? fields : void 0);
92
+ }
93
+ function getMarkdownFilePath(entitiesDir, entityName) {
94
+ return (0, path.join)(entitiesDir, `${entityName}.md`);
95
+ }
96
+ /** Trim leading/trailing blank lines but preserve internal blank lines. */
97
+ function trimBlankLines(lines) {
98
+ let start = 0;
99
+ while (start < lines.length && lines[start].trim() === "") start++;
100
+ let end = lines.length - 1;
101
+ while (end >= start && lines[end].trim() === "") end--;
102
+ return lines.slice(start, end + 1);
103
+ }
104
+ /**
105
+ * Merge updates into an existing .md file, preserving all user content.
106
+ *
107
+ * - If `overview` is provided and the file has `## Overview`, replaces its body
108
+ * - For each field in `fields`, if `### fieldName` exists, replaces its body;
109
+ * otherwise appends it to the `## Fields` section (creating the section if needed)
110
+ * - All other content (custom sections, tables, etc.) is preserved verbatim
111
+ */
112
+ function mergeMarkdownContent(existing, overview, fields) {
113
+ const lines = existing.split("\n");
114
+ const result = [];
115
+ const mergedFields = /* @__PURE__ */ new Set();
116
+ let fieldsEndIndex = -1;
117
+ let i = 0;
118
+ while (i < lines.length) {
119
+ const line = lines[i];
120
+ if (/^## Overview\s*$/.test(line) && overview !== void 0) {
121
+ result.push(line);
122
+ i++;
123
+ while (i < lines.length && !lines[i].startsWith("## ")) i++;
124
+ result.push(overview || "");
125
+ result.push("");
126
+ continue;
127
+ }
128
+ if (/^## Fields\s*$/.test(line)) {
129
+ result.push(line);
130
+ i++;
131
+ while (i < lines.length && !lines[i].startsWith("## ")) {
132
+ const fieldMatch = lines[i].match(/^### (\w+)\s*$/);
133
+ if (fieldMatch && fieldMatch[1] in fields) {
134
+ const fieldName = fieldMatch[1];
135
+ mergedFields.add(fieldName);
136
+ result.push(lines[i]);
137
+ i++;
138
+ while (i < lines.length && !/^###? /.test(lines[i]) && !lines[i].startsWith("## ")) i++;
139
+ result.push("");
140
+ result.push(fields[fieldName]);
141
+ result.push("");
142
+ } else {
143
+ result.push(lines[i]);
144
+ i++;
145
+ }
146
+ }
147
+ fieldsEndIndex = result.length;
148
+ continue;
149
+ }
150
+ result.push(line);
151
+ i++;
152
+ }
153
+ const newFields = Object.entries(fields).filter(([name]) => !mergedFields.has(name));
154
+ if (newFields.length > 0) {
155
+ if (fieldsEndIndex === -1) {
156
+ result.push("");
157
+ result.push("## Fields");
158
+ result.push("");
159
+ fieldsEndIndex = result.length;
160
+ }
161
+ const toInsert = [];
162
+ for (const [fieldName, fieldDoc] of newFields) {
163
+ toInsert.push(`### ${fieldName}`);
164
+ toInsert.push("");
165
+ toInsert.push(fieldDoc);
166
+ toInsert.push("");
167
+ }
168
+ result.splice(fieldsEndIndex, 0, ...toInsert);
169
+ }
170
+ return result.join("\n");
171
+ }
172
+ const testing = { mergeMarkdownContent };
173
+ //#endregion
174
+ exports.getMarkdownFilePath = getMarkdownFilePath;
175
+ exports.maybeReadMarkdownFile = maybeReadMarkdownFile;
176
+ exports.parseMarkdownContent = parseMarkdownContent;
177
+ exports.testing = testing;
178
+ exports.updateMarkdownDoc = updateMarkdownDoc;
179
+ exports.writeMarkdownDoc = writeMarkdownDoc;
180
+
181
+ //# sourceMappingURL=markdown.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.cjs","names":["resolveConfig","join"],"sources":["../../src/docs/markdown.ts"],"sourcesContent":["import { promises as fs } from \"fs\";\nimport { join } from \"path\";\n\nimport prettier, { resolveConfig } from \"prettier\";\n\nexport interface ParsedDoc {\n overview: string;\n fields: Record<string, string>;\n}\n\n/** Read and parse a .md file if it exists, returning undefined if it doesn't. */\nexport async function maybeReadMarkdownFile(filePath: string): Promise<ParsedDoc | undefined> {\n try {\n const content = await fs.readFile(filePath, \"utf-8\");\n return parseMarkdownContent(content);\n } catch {\n return undefined;\n }\n}\n\n/** Reads a basic `overview` and per-field docs out of md content. */\nexport function parseMarkdownContent(content: string): ParsedDoc {\n const lines = content.split(\"\\n\");\n let currentSection: \"overview\" | \"fields\" | null = null;\n let currentField: string | null = null;\n\n const overviewLines: string[] = [];\n const fields: Record<string, string[]> = {};\n\n for (const line of lines) {\n if (/^## Overview\\s*$/.test(line)) {\n currentSection = \"overview\";\n currentField = null;\n continue;\n }\n if (/^## Fields\\s*$/.test(line)) {\n currentSection = \"fields\";\n currentField = null;\n continue;\n }\n // Any other ## resets us out of known sections\n if (line.startsWith(\"## \")) {\n currentSection = null;\n currentField = null;\n continue;\n }\n\n if (currentSection === \"fields\") {\n const fieldMatch = line.match(/^### (\\w+)\\s*$/);\n if (fieldMatch) {\n currentField = fieldMatch[1];\n fields[currentField] = [];\n continue;\n }\n }\n\n if (currentSection === \"overview\") {\n overviewLines.push(line);\n } else if (currentSection === \"fields\" && currentField) {\n fields[currentField].push(line);\n }\n }\n\n return {\n overview: trimBlankLines(overviewLines).join(\"\\n\"),\n fields: Object.fromEntries(Object.entries(fields).map(([k, v]) => [k, trimBlankLines(v).join(\"\\n\")])),\n };\n}\n\n/** Create a new .md file from scratch (used only for initial backfill when no .md exists). */\nexport async function writeMarkdownDoc(\n filePath: string,\n overview: string,\n fields?: Record<string, string>,\n): Promise<void> {\n const parts: string[] = [];\n\n parts.push(\"## Overview\");\n parts.push(overview || \"\");\n parts.push(\"\");\n\n if (fields && Object.keys(fields).length > 0) {\n parts.push(\"## Fields\");\n parts.push(\"\");\n for (const [fieldName, fieldDoc] of Object.entries(fields)) {\n parts.push(`### ${fieldName}`);\n parts.push(\"\");\n parts.push(fieldDoc);\n parts.push(\"\");\n }\n }\n\n const prettierConfig = await resolveConfig(filePath);\n const content = await prettier.format(parts.join(\"\\n\"), {\n ...prettierConfig,\n parser: \"markdown\",\n plugins: [],\n });\n\n await fs.writeFile(filePath, content, \"utf-8\");\n}\n\n/**\n * Update an existing .md file, merging in new/changed content without stomping user content.\n * If the file doesn't exist, creates it from scratch.\n */\nexport async function updateMarkdownDoc(\n filePath: string,\n overview: string | undefined,\n fields: Record<string, string>,\n): Promise<void> {\n let existing: string | null = null;\n try {\n existing = await fs.readFile(filePath, \"utf-8\");\n } catch {\n // File doesn't exist\n }\n\n if (existing !== null) {\n const updated = mergeMarkdownContent(existing, overview, fields);\n if (updated !== existing) {\n await fs.writeFile(filePath, updated, \"utf-8\");\n }\n } else {\n await writeMarkdownDoc(filePath, overview ?? \"\", Object.keys(fields).length > 0 ? fields : undefined);\n }\n}\n\nexport function getMarkdownFilePath(entitiesDir: string, entityName: string): string {\n return join(entitiesDir, `${entityName}.md`);\n}\n\n/** Trim leading/trailing blank lines but preserve internal blank lines. */\nfunction trimBlankLines(lines: string[]): string[] {\n let start = 0;\n while (start < lines.length && lines[start].trim() === \"\") start++;\n let end = lines.length - 1;\n while (end >= start && lines[end].trim() === \"\") end--;\n return lines.slice(start, end + 1);\n}\n\n/**\n * Merge updates into an existing .md file, preserving all user content.\n *\n * - If `overview` is provided and the file has `## Overview`, replaces its body\n * - For each field in `fields`, if `### fieldName` exists, replaces its body;\n * otherwise appends it to the `## Fields` section (creating the section if needed)\n * - All other content (custom sections, tables, etc.) is preserved verbatim\n */\nfunction mergeMarkdownContent(existing: string, overview: string | undefined, fields: Record<string, string>): string {\n const lines = existing.split(\"\\n\");\n const result: string[] = [];\n\n // Track which fields we've already merged so we know what to append\n const mergedFields = new Set<string>();\n let fieldsEndIndex = -1;\n\n let i = 0;\n while (i < lines.length) {\n const line = lines[i];\n\n // Replace ## Overview body\n if (/^## Overview\\s*$/.test(line) && overview !== undefined) {\n result.push(line);\n i++;\n // Skip over old overview body (until next ## or EOF)\n while (i < lines.length && !lines[i].startsWith(\"## \")) i++;\n // Write new overview body\n result.push(overview || \"\");\n result.push(\"\");\n continue;\n }\n\n // Track where ## Fields section ends (for appending new fields)\n if (/^## Fields\\s*$/.test(line)) {\n result.push(line);\n i++;\n // Process the fields section line by line\n while (i < lines.length && !lines[i].startsWith(\"## \")) {\n const fieldMatch = lines[i].match(/^### (\\w+)\\s*$/);\n if (fieldMatch && fieldMatch[1] in fields) {\n const fieldName = fieldMatch[1];\n mergedFields.add(fieldName);\n result.push(lines[i]); // ### fieldName\n i++;\n // Skip old field body (until next ### or ## or EOF)\n while (i < lines.length && !/^###? /.test(lines[i]) && !lines[i].startsWith(\"## \")) i++;\n // Write new field body\n result.push(\"\");\n result.push(fields[fieldName]);\n result.push(\"\");\n } else {\n // Keep any line that isn't a field we're replacing (other ### fields, blank lines, etc.)\n result.push(lines[i]);\n i++;\n }\n }\n fieldsEndIndex = result.length;\n continue;\n }\n\n result.push(line);\n i++;\n }\n\n // Append any fields that weren't already in the file\n const newFields = Object.entries(fields).filter(([name]) => !mergedFields.has(name));\n if (newFields.length > 0) {\n if (fieldsEndIndex === -1) {\n // No ## Fields section existed, create one\n result.push(\"\");\n result.push(\"## Fields\");\n result.push(\"\");\n fieldsEndIndex = result.length;\n }\n const toInsert: string[] = [];\n for (const [fieldName, fieldDoc] of newFields) {\n toInsert.push(`### ${fieldName}`);\n toInsert.push(\"\");\n toInsert.push(fieldDoc);\n toInsert.push(\"\");\n }\n result.splice(fieldsEndIndex, 0, ...toInsert);\n }\n\n return result.join(\"\\n\");\n}\n\nexport const testing = { mergeMarkdownContent };\n"],"mappings":"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"}
@@ -1,19 +1,20 @@
1
- export interface ParsedDoc {
2
- overview: string;
3
- fields: Record<string, string>;
1
+ //#region src/docs/markdown.d.ts
2
+ interface ParsedDoc {
3
+ overview: string;
4
+ fields: Record<string, string>;
4
5
  }
5
6
  /** Read and parse a .md file if it exists, returning undefined if it doesn't. */
6
- export declare function maybeReadMarkdownFile(filePath: string): Promise<ParsedDoc | undefined>;
7
+ declare function maybeReadMarkdownFile(filePath: string): Promise<ParsedDoc | undefined>;
7
8
  /** Reads a basic `overview` and per-field docs out of md content. */
8
- export declare function parseMarkdownContent(content: string): ParsedDoc;
9
+ declare function parseMarkdownContent(content: string): ParsedDoc;
9
10
  /** Create a new .md file from scratch (used only for initial backfill when no .md exists). */
10
- export declare function writeMarkdownDoc(filePath: string, overview: string, fields?: Record<string, string>): Promise<void>;
11
+ declare function writeMarkdownDoc(filePath: string, overview: string, fields?: Record<string, string>): Promise<void>;
11
12
  /**
12
13
  * Update an existing .md file, merging in new/changed content without stomping user content.
13
14
  * If the file doesn't exist, creates it from scratch.
14
15
  */
15
- export declare function updateMarkdownDoc(filePath: string, overview: string | undefined, fields: Record<string, string>): Promise<void>;
16
- export declare function getMarkdownFilePath(entitiesDir: string, entityName: string): string;
16
+ declare function updateMarkdownDoc(filePath: string, overview: string | undefined, fields: Record<string, string>): Promise<void>;
17
+ declare function getMarkdownFilePath(entitiesDir: string, entityName: string): string;
17
18
  /**
18
19
  * Merge updates into an existing .md file, preserving all user content.
19
20
  *
@@ -23,7 +24,9 @@ export declare function getMarkdownFilePath(entitiesDir: string, entityName: str
23
24
  * - All other content (custom sections, tables, etc.) is preserved verbatim
24
25
  */
25
26
  declare function mergeMarkdownContent(existing: string, overview: string | undefined, fields: Record<string, string>): string;
26
- export declare const testing: {
27
- mergeMarkdownContent: typeof mergeMarkdownContent;
27
+ declare const testing: {
28
+ mergeMarkdownContent: typeof mergeMarkdownContent;
28
29
  };
29
- export {};
30
+ //#endregion
31
+ export { ParsedDoc, getMarkdownFilePath, maybeReadMarkdownFile, parseMarkdownContent, testing, updateMarkdownDoc, writeMarkdownDoc };
32
+ //# sourceMappingURL=markdown.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.d.cts","names":[],"sources":["../../src/docs/markdown.ts"],"mappings":";UAKiB;EACf;EACA,QAAQ;;;iBAIY,sBAAsB,mBAAmB,QAAQ;;iBAUvD,qBAAqB,kBAAkB;;iBAiDjC,iBACpB,kBACA,kBACA,SAAS,yBACR;;;;;iBAgCmB,kBACpB,kBACA,8BACA,QAAQ,yBACP;iBAkBa,oBAAoB,qBAAqB;;;;;;;;;iBAqBhD,qBAAqB,kBAAkB,8BAA8B,QAAQ;cA+EzE;+BAAA"}
@@ -0,0 +1,32 @@
1
+ //#region src/docs/markdown.d.ts
2
+ interface ParsedDoc {
3
+ overview: string;
4
+ fields: Record<string, string>;
5
+ }
6
+ /** Read and parse a .md file if it exists, returning undefined if it doesn't. */
7
+ declare function maybeReadMarkdownFile(filePath: string): Promise<ParsedDoc | undefined>;
8
+ /** Reads a basic `overview` and per-field docs out of md content. */
9
+ declare function parseMarkdownContent(content: string): ParsedDoc;
10
+ /** Create a new .md file from scratch (used only for initial backfill when no .md exists). */
11
+ declare function writeMarkdownDoc(filePath: string, overview: string, fields?: Record<string, string>): Promise<void>;
12
+ /**
13
+ * Update an existing .md file, merging in new/changed content without stomping user content.
14
+ * If the file doesn't exist, creates it from scratch.
15
+ */
16
+ declare function updateMarkdownDoc(filePath: string, overview: string | undefined, fields: Record<string, string>): Promise<void>;
17
+ declare function getMarkdownFilePath(entitiesDir: string, entityName: string): string;
18
+ /**
19
+ * Merge updates into an existing .md file, preserving all user content.
20
+ *
21
+ * - If `overview` is provided and the file has `## Overview`, replaces its body
22
+ * - For each field in `fields`, if `### fieldName` exists, replaces its body;
23
+ * otherwise appends it to the `## Fields` section (creating the section if needed)
24
+ * - All other content (custom sections, tables, etc.) is preserved verbatim
25
+ */
26
+ declare function mergeMarkdownContent(existing: string, overview: string | undefined, fields: Record<string, string>): string;
27
+ declare const testing: {
28
+ mergeMarkdownContent: typeof mergeMarkdownContent;
29
+ };
30
+ //#endregion
31
+ export { ParsedDoc, getMarkdownFilePath, maybeReadMarkdownFile, parseMarkdownContent, testing, updateMarkdownDoc, writeMarkdownDoc };
32
+ //# sourceMappingURL=markdown.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.d.mts","names":[],"sources":["../../src/docs/markdown.ts"],"mappings":";UAKiB;EACf;EACA,QAAQ;;;iBAIY,sBAAsB,mBAAmB,QAAQ;;iBAUvD,qBAAqB,kBAAkB;;iBAiDjC,iBACpB,kBACA,kBACA,SAAS,yBACR;;;;;iBAgCmB,kBACpB,kBACA,8BACA,QAAQ,yBACP;iBAkBa,oBAAoB,qBAAqB;;;;;;;;;iBAqBhD,qBAAqB,kBAAkB,8BAA8B,QAAQ;cA+EzE;+BAAA"}