joist-codegen 2.3.0-next.42 → 2.3.0-next.44

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,127 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_utils = require("./utils.cjs");
3
+ const require_docs_generate_metadata_docs = require("./docs/generate-metadata-docs.cjs");
4
+ const require_docs_index = require("./docs/index.cjs");
5
+ const require_findEntityScopes = require("./findEntityScopes.cjs");
6
+ const require_generateEntitiesFile = require("./generateEntitiesFile.cjs");
7
+ const require_symbols = require("./symbols.cjs");
8
+ const require_generateEntityCodegenFile = require("./generateEntityCodegenFile.cjs");
9
+ const require_generateEntityFile = require("./generateEntityFile.cjs");
10
+ const require_generateEntityTestFile = require("./generateEntityTestFile.cjs");
11
+ const require_generateEnumFile = require("./generateEnumFile.cjs");
12
+ const require_generateFactoriesFiles = require("./generateFactoriesFiles.cjs");
13
+ const require_generateMetadataFile = require("./generateMetadataFile.cjs");
14
+ const require_generatePgEnumFile = require("./generatePgEnumFile.cjs");
15
+ require("./index.cjs");
16
+ let ts_poet = require("ts-poet");
17
+ let fs_promises = require("fs/promises");
18
+ //#region src/generate.ts
19
+ const runtimeRequire = (0, require("node:module").createRequire)(require("url").pathToFileURL(__filename).href);
20
+ /** Generates our `${Entity}` and `${Entity}Codegen` files based on the `db` schema. */
21
+ async function generateFiles(config, dbMeta) {
22
+ const { entities, enums, pgEnums } = dbMeta;
23
+ const entityNames = entities.map((meta) => meta.entity.name);
24
+ const files = await readExistingFiles(config);
25
+ if (config.docs) await require_docs_index.syncDocs(config.entitiesDirectory, entityNames);
26
+ const entityDocs = config.docs || config.outputDocs ? await require_docs_index.loadEntityDocs(config.entitiesDirectory, entityNames) : {};
27
+ const scopeMembersByEntity = await require_findEntityScopes.findAllEntityScopes(config, entities.map((meta) => meta.entity));
28
+ const entityFiles = entities.map((meta) => {
29
+ const entityName = meta.entity.name;
30
+ const hasEntityFile = files.includes(`${entityName}.ts`);
31
+ return [{
32
+ name: `./codegen/${entityName}Codegen.ts`,
33
+ contents: require_generateEntityCodegenFile.generateEntityCodegenFile(config, dbMeta, meta, scopeMembersByEntity[entityName] ?? [], config.docs ? entityDocs[entityName] : void 0),
34
+ overwrite: true
35
+ }, ...hasEntityFile ? [] : [{
36
+ name: `${entityName}.ts`,
37
+ contents: require_generateEntityFile.generateEntityFile(config, meta),
38
+ overwrite: false
39
+ }, {
40
+ name: `${entityName}.test.ts`,
41
+ contents: require_generateEntityTestFile.generateEntityTestFile(config, meta),
42
+ overwrite: false
43
+ }]];
44
+ }).reduce(require_utils.merge, []);
45
+ const enumFiles = Object.values(enums).map((enumData) => {
46
+ const enumName = require_utils.tableToEntityName(config, enumData.table);
47
+ return [{
48
+ name: `./enums/${enumName}.ts`,
49
+ contents: require_generateEnumFile.generateEnumFile(config, enumData, enumName),
50
+ overwrite: true
51
+ }];
52
+ }).reduce(require_utils.merge, []);
53
+ const pgEnumFiles = Object.values(pgEnums).map((enumData) => {
54
+ return [{
55
+ name: `./enums/${enumData.name}.ts`,
56
+ contents: require_generatePgEnumFile.generatePgEnumFile(config, enumData),
57
+ overwrite: true
58
+ }];
59
+ }).reduce(require_utils.merge, []);
60
+ const contextType = config.contextType ? (0, ts_poet.imp)(`t:${config.contextType}`) : "{}";
61
+ const txnType = config.transactionType ? (0, ts_poet.imp)(`t:${config.transactionType}`) : "unknown";
62
+ const maybeTagDelimiter = config.tagDelimiter === void 0 ? ts_poet.code`` : ts_poet.code`tagDelimiter: ${config.tagDelimiter === "" ? "undefined" : JSON.stringify(config.tagDelimiter)},`;
63
+ const metadataFile = {
64
+ name: "./codegen/metadata.ts",
65
+ contents: ts_poet.code`
66
+ ${require_symbols.setRuntimeConfig}({
67
+ temporal: ${config.temporal ? { timeZone: typeof config.temporal === "boolean" ? "UTC" : config.temporal.timeZone } : "false"},
68
+ ${maybeTagDelimiter}
69
+ });
70
+
71
+ export class ${(0, ts_poet.def)("EntityManager")} extends ${require_symbols.JoistEntityManager}<${contextType}, Entity, ${txnType}> {}
72
+
73
+ export interface ${(0, ts_poet.def)("Entity")} extends ${require_symbols.Entity} {
74
+ id: ${require_generateEntityCodegenFile.getIdType(config)};
75
+ em: EntityManager;
76
+ }
77
+
78
+ ${entities.map((meta) => require_generateMetadataFile.generateMetadataFile(config, dbMeta, meta))}
79
+
80
+ export const allMetadata = [${entities.map((meta) => meta.entity.metaName).join(", ")}];
81
+ ${require_symbols.configureMetadata}(allMetadata);
82
+ `,
83
+ overwrite: true,
84
+ toStringOpts: { dprintOptions: { lineWidth: 400 } }
85
+ };
86
+ const enumsTables = Object.values(enums).map(({ table }) => table).sort((a, b) => a.name.localeCompare(b.name));
87
+ const entitiesFile = {
88
+ name: "./entities.ts",
89
+ contents: require_generateEntitiesFile.generateEntitiesFile(config, entities, enumsTables, Object.values(pgEnums)),
90
+ overwrite: true,
91
+ toStringOpts: { dprintOptions: { "module.sortExportDeclarations": "maintain" } }
92
+ };
93
+ const factoriesFiles = require_generateFactoriesFiles.generateFactoriesFiles(entities);
94
+ const esmExt = config.esm ? config.allowImportingTsExtensions ? ".ts" : ".js" : "";
95
+ const indexFile = {
96
+ name: "./index.ts",
97
+ contents: ts_poet.code`export * from "./entities${esmExt}"`,
98
+ overwrite: false
99
+ };
100
+ const pluginFiles = (await Promise.all((config.codegenPlugins ?? []).map((p) => {
101
+ return runtimeRequire(p).run(config, dbMeta);
102
+ }))).flat();
103
+ const docsFile = config.outputDocs ? require_docs_generate_metadata_docs.generateMetadataDocsFile(dbMeta, entityDocs) : void 0;
104
+ return [
105
+ ...entityFiles,
106
+ ...enumFiles,
107
+ ...pgEnumFiles,
108
+ entitiesFile,
109
+ ...factoriesFiles,
110
+ metadataFile,
111
+ ...docsFile ? [docsFile] : [],
112
+ indexFile,
113
+ ...pluginFiles
114
+ ];
115
+ }
116
+ /** Reads the `entitiesDirectory` but just ignores if it doesn't exist yet. */
117
+ async function readExistingFiles(config) {
118
+ try {
119
+ return await (0, fs_promises.readdir)(config.entitiesDirectory);
120
+ } catch (e) {
121
+ return [];
122
+ }
123
+ }
124
+ //#endregion
125
+ exports.generateFiles = generateFiles;
126
+
127
+ //# sourceMappingURL=generate.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.cjs","names":["createRequire","syncDocs","loadEntityDocs","findAllEntityScopes","generateEntityCodegenFile","generateEntityFile","generateEntityTestFile","merge","tableToEntityName","generateEnumFile","generatePgEnumFile","imp","setRuntimeConfig","def","JoistEntityManager","Entity","getIdType","generateMetadataFile","configureMetadata","generateEntitiesFile","generateFactoriesFiles","generateMetadataDocsFile","readdir"],"sources":["../src/generate.ts"],"sourcesContent":["import { readdir } from \"fs/promises\";\nimport { createRequire } from \"node:module\";\n\nimport { type CodegenFile, code, def, imp } from \"ts-poet\";\n\nimport { generateMetadataDocsFile, loadEntityDocs, syncDocs } from \"./docs/index.ts\";\nimport { findAllEntityScopes } from \"./findEntityScopes.ts\";\nimport { generateEntitiesFile } from \"./generateEntitiesFile.ts\";\nimport { generateEntityCodegenFile, getIdType } from \"./generateEntityCodegenFile.ts\";\nimport { generateEntityFile } from \"./generateEntityFile.ts\";\nimport { generateEntityTestFile } from \"./generateEntityTestFile.ts\";\nimport { generateEnumFile } from \"./generateEnumFile.ts\";\nimport { generateFactoriesFiles } from \"./generateFactoriesFiles.ts\";\nimport { generateMetadataFile } from \"./generateMetadataFile.ts\";\nimport { generatePgEnumFile } from \"./generatePgEnumFile.ts\";\nimport { type Config, type DbMetadata } from \"./index.ts\";\nimport { Entity, JoistEntityManager, configureMetadata, setRuntimeConfig } from \"./symbols.ts\";\nimport { merge, tableToEntityName } from \"./utils.ts\";\n\nconst runtimeRequire = createRequire(import.meta.url);\n\nexport type DPrintOptions = Record<string, unknown>;\n\n/**\n * Provides an API for hooking into the codegen build step.\n */\nexport interface CodegenPlugin {\n run(config: Config, dbMeta: DbMetadata): Promise<CodegenFile>;\n}\n\n/** Generates our `${Entity}` and `${Entity}Codegen` files based on the `db` schema. */\nexport async function generateFiles(config: Config, dbMeta: DbMetadata): Promise<CodegenFile[]> {\n const { entities, enums, pgEnums } = dbMeta;\n const entityNames = entities.map((meta) => meta.entity.name);\n\n // Find existing entities so that, besides just using `overwrite: false`, we can completely\n // skip making test files except for the _first_ time we create an entity. This achieves\n // `.history`-like \"create once\" behavior without the need for the `.history` file.\n const files = await readExistingFiles(config);\n\n // Sync documentation: backfill .md from existing JSDocs, then sync MD -> JSDoc\n if (config.docs) {\n await syncDocs(config.entitiesDirectory, entityNames);\n }\n\n // Load the .md docs once (post-sync) to inject into codegen JSDocs and the runtime metadata-docs.ts\n const entityDocs =\n config.docs || config.outputDocs ? await loadEntityDocs(config.entitiesDirectory, entityNames) : {};\n\n const scopeMembersByEntity = await findAllEntityScopes(\n config,\n entities.map((meta) => meta.entity),\n );\n\n const entityFiles = entities\n .map((meta) => {\n const entityName = meta.entity.name;\n const hasEntityFile = files.includes(`${entityName}.ts`);\n return [\n {\n name: `./codegen/${entityName}Codegen.ts`,\n contents: generateEntityCodegenFile(\n config,\n dbMeta,\n meta,\n scopeMembersByEntity[entityName] ?? [],\n config.docs ? entityDocs[entityName] : undefined,\n ),\n overwrite: true,\n },\n ...(hasEntityFile\n ? []\n : [\n { name: `${entityName}.ts`, contents: generateEntityFile(config, meta), overwrite: false },\n { name: `${entityName}.test.ts`, contents: generateEntityTestFile(config, meta), overwrite: false },\n ]),\n ];\n })\n .reduce(merge, []);\n\n const enumFiles = Object.values(enums)\n .map((enumData) => {\n const enumName = tableToEntityName(config, enumData.table);\n return [\n {\n name: `./enums/${enumName}.ts`,\n contents: generateEnumFile(config, enumData, enumName),\n overwrite: true,\n },\n ];\n })\n .reduce(merge, []);\n const pgEnumFiles = Object.values(pgEnums)\n .map((enumData) => {\n return [\n {\n name: `./enums/${enumData.name}.ts`,\n contents: generatePgEnumFile(config, enumData),\n overwrite: true,\n },\n ];\n })\n .reduce(merge, []);\n\n const contextType = config.contextType ? imp(`t:${config.contextType}`) : \"{}\";\n const txnType = config.transactionType ? imp(`t:${config.transactionType}`) : \"unknown\";\n const maybeTagDelimiter =\n config.tagDelimiter === undefined\n ? code``\n : code`tagDelimiter: ${config.tagDelimiter === \"\" ? \"undefined\" : JSON.stringify(config.tagDelimiter)},`;\n\n const metadataFile: CodegenFile = {\n name: \"./codegen/metadata.ts\",\n contents: code`\n ${setRuntimeConfig}({\n temporal: ${config.temporal ? { timeZone: typeof config.temporal === \"boolean\" ? \"UTC\" : config.temporal.timeZone } : \"false\"},\n ${maybeTagDelimiter}\n });\n \n export class ${def(\"EntityManager\")} extends ${JoistEntityManager}<${contextType}, Entity, ${txnType}> {}\n\n export interface ${def(\"Entity\")} extends ${Entity} {\n id: ${getIdType(config)};\n em: EntityManager;\n }\n\n ${entities.map((meta) => generateMetadataFile(config, dbMeta, meta))}\n\n export const allMetadata = [${entities.map((meta) => meta.entity.metaName).join(\", \")}];\n ${configureMetadata}(allMetadata);\n `,\n overwrite: true,\n toStringOpts: { dprintOptions: { lineWidth: 400 } },\n };\n\n const enumsTables = Object.values(enums)\n .map(({ table }) => table)\n .sort((a, b) => a.name.localeCompare(b.name));\n\n const entitiesFile: CodegenFile = {\n name: \"./entities.ts\",\n contents: generateEntitiesFile(config, entities, enumsTables, Object.values(pgEnums)),\n overwrite: true,\n toStringOpts: { dprintOptions: { \"module.sortExportDeclarations\": \"maintain\" } },\n };\n\n const factoriesFiles: CodegenFile[] = generateFactoriesFiles(entities);\n\n const esmExt = config.esm ? (config.allowImportingTsExtensions ? \".ts\" : \".js\") : \"\";\n const indexFile: CodegenFile = {\n name: \"./index.ts\",\n contents: code`export * from \"./entities${esmExt}\"`,\n overwrite: false,\n };\n\n // Look for modules to require and call the exported `.run(Config, DbMeta)` method\n const pluginFiles: CodegenFile[] = (\n await Promise.all(\n (config.codegenPlugins ?? []).map((p) => {\n const plugin = runtimeRequire(p) as CodegenPlugin;\n return plugin.run(config, dbMeta);\n }),\n )\n ).flat();\n\n // Generate metadata-docs.ts if enabled\n const docsFile = config.outputDocs ? generateMetadataDocsFile(dbMeta, entityDocs) : undefined;\n\n return [\n ...entityFiles,\n ...enumFiles,\n ...pgEnumFiles,\n entitiesFile,\n ...factoriesFiles,\n metadataFile,\n ...(docsFile ? [docsFile] : []),\n indexFile,\n ...pluginFiles,\n ];\n}\n\n/** Reads the `entitiesDirectory` but just ignores if it doesn't exist yet. */\nasync function readExistingFiles(config: Config): Promise<string[]> {\n try {\n return await readdir(config.entitiesDirectory);\n } catch (e) {\n return [];\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { Config } from "./config.cjs";
2
+ import "./index.cjs";
3
+ import { DbMetadata } from "./EntityDbMetadata.cjs";
4
+ import { CodegenFile } from "ts-poet";
5
+ //#region src/generate.d.ts
6
+ type DPrintOptions = Record<string, unknown>;
7
+ /**
8
+ * Provides an API for hooking into the codegen build step.
9
+ */
10
+ interface CodegenPlugin {
11
+ run(config: Config, dbMeta: DbMetadata): Promise<CodegenFile>;
12
+ }
13
+ /** Generates our `${Entity}` and `${Entity}Codegen` files based on the `db` schema. */
14
+ declare function generateFiles(config: Config, dbMeta: DbMetadata): Promise<CodegenFile[]>;
15
+ //#endregion
16
+ export { CodegenPlugin, DPrintOptions, generateFiles };
17
+ //# sourceMappingURL=generate.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.cts","names":[],"sources":["../src/generate.ts"],"mappings":";;;;;KAqBY,gBAAgB;;;;UAKX;EACf,IAAI,QAAQ,QAAQ,QAAQ,aAAa,QAAQ;;;iBAI7B,cAAc,QAAQ,QAAQ,QAAQ,aAAa,QAAQ"}
@@ -0,0 +1,17 @@
1
+ import { Config } from "./config.mjs";
2
+ import "./index.mjs";
3
+ import { DbMetadata } from "./EntityDbMetadata.mjs";
4
+ import { CodegenFile } from "ts-poet";
5
+ //#region src/generate.d.ts
6
+ type DPrintOptions = Record<string, unknown>;
7
+ /**
8
+ * Provides an API for hooking into the codegen build step.
9
+ */
10
+ interface CodegenPlugin {
11
+ run(config: Config, dbMeta: DbMetadata): Promise<CodegenFile>;
12
+ }
13
+ /** Generates our `${Entity}` and `${Entity}Codegen` files based on the `db` schema. */
14
+ declare function generateFiles(config: Config, dbMeta: DbMetadata): Promise<CodegenFile[]>;
15
+ //#endregion
16
+ export { CodegenPlugin, DPrintOptions, generateFiles };
17
+ //# sourceMappingURL=generate.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.mts","names":[],"sources":["../src/generate.ts"],"mappings":";;;;;KAqBY,gBAAgB;;;;UAKX;EACf,IAAI,QAAQ,QAAQ,QAAQ,aAAa,QAAQ;;;iBAI7B,cAAc,QAAQ,QAAQ,QAAQ,aAAa,QAAQ"}
package/build/generate.js CHANGED
@@ -1,147 +1,127 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateFiles = generateFiles;
4
- const promises_1 = require("fs/promises");
5
- const ts_poet_1 = require("ts-poet");
6
- const docs_1 = require("./docs");
7
- const findEntityScopes_1 = require("./findEntityScopes");
8
- const generateEntitiesFile_1 = require("./generateEntitiesFile");
9
- const generateEntityCodegenFile_1 = require("./generateEntityCodegenFile");
10
- const generateEntityFile_1 = require("./generateEntityFile");
11
- const generateEntityTestFile_1 = require("./generateEntityTestFile");
12
- const generateEnumFile_1 = require("./generateEnumFile");
13
- const generateFactoriesFiles_1 = require("./generateFactoriesFiles");
14
- const generateMetadataFile_1 = require("./generateMetadataFile");
15
- const generatePgEnumFile_1 = require("./generatePgEnumFile");
16
- const symbols_1 = require("./symbols");
17
- const utils_1 = require("./utils");
1
+ import { merge, tableToEntityName } from "./utils.js";
2
+ import { generateMetadataDocsFile } from "./docs/generate-metadata-docs.js";
3
+ import { loadEntityDocs, syncDocs } from "./docs/index.js";
4
+ import { findAllEntityScopes } from "./findEntityScopes.js";
5
+ import { generateEntitiesFile } from "./generateEntitiesFile.js";
6
+ import { Entity, JoistEntityManager, configureMetadata, setRuntimeConfig } from "./symbols.js";
7
+ import { generateEntityCodegenFile, getIdType } from "./generateEntityCodegenFile.js";
8
+ import { generateEntityFile } from "./generateEntityFile.js";
9
+ import { generateEntityTestFile } from "./generateEntityTestFile.js";
10
+ import { generateEnumFile } from "./generateEnumFile.js";
11
+ import { generateFactoriesFiles } from "./generateFactoriesFiles.js";
12
+ import { generateMetadataFile } from "./generateMetadataFile.js";
13
+ import { generatePgEnumFile } from "./generatePgEnumFile.js";
14
+ import "./index.js";
15
+ import { createRequire } from "node:module";
16
+ import { code, def, imp } from "ts-poet";
17
+ import { readdir } from "fs/promises";
18
+ //#region src/generate.ts
19
+ const runtimeRequire = createRequire(import.meta.url);
18
20
  /** Generates our `${Entity}` and `${Entity}Codegen` files based on the `db` schema. */
19
21
  async function generateFiles(config, dbMeta) {
20
- const { entities, enums, pgEnums } = dbMeta;
21
- const entityNames = entities.map((meta) => meta.entity.name);
22
- // Find existing entities so that, besides just using `overwrite: false`, we can completely
23
- // skip making test files except for the _first_ time we create an entity. This achieves
24
- // `.history`-like "create once" behavior without the need for the `.history` file.
25
- const files = await readExistingFiles(config);
26
- // Sync documentation: backfill .md from existing JSDocs, then sync MD -> JSDoc
27
- if (config.docs) {
28
- await (0, docs_1.syncDocs)(config.entitiesDirectory, entityNames);
29
- }
30
- // Load the .md docs once (post-sync) to inject into codegen JSDocs and the runtime metadata-docs.ts
31
- const entityDocs = config.docs || config.outputDocs ? await (0, docs_1.loadEntityDocs)(config.entitiesDirectory, entityNames) : {};
32
- const scopeMembersByEntity = await (0, findEntityScopes_1.findAllEntityScopes)(config, entities.map((meta) => meta.entity));
33
- const entityFiles = entities
34
- .map((meta) => {
35
- const entityName = meta.entity.name;
36
- const hasEntityFile = files.includes(`${entityName}.ts`);
37
- return [
38
- {
39
- name: `./codegen/${entityName}Codegen.ts`,
40
- contents: (0, generateEntityCodegenFile_1.generateEntityCodegenFile)(config, dbMeta, meta, scopeMembersByEntity[entityName] ?? [], config.docs ? entityDocs[entityName] : undefined),
41
- overwrite: true,
42
- },
43
- ...(hasEntityFile
44
- ? []
45
- : [
46
- { name: `${entityName}.ts`, contents: (0, generateEntityFile_1.generateEntityFile)(config, meta), overwrite: false },
47
- { name: `${entityName}.test.ts`, contents: (0, generateEntityTestFile_1.generateEntityTestFile)(config, meta), overwrite: false },
48
- ]),
49
- ];
50
- })
51
- .reduce(utils_1.merge, []);
52
- const enumFiles = Object.values(enums)
53
- .map((enumData) => {
54
- const enumName = (0, utils_1.tableToEntityName)(config, enumData.table);
55
- return [
56
- {
57
- name: `./enums/${enumName}.ts`,
58
- contents: (0, generateEnumFile_1.generateEnumFile)(config, enumData, enumName),
59
- overwrite: true,
60
- },
61
- ];
62
- })
63
- .reduce(utils_1.merge, []);
64
- const pgEnumFiles = Object.values(pgEnums)
65
- .map((enumData) => {
66
- return [
67
- {
68
- name: `./enums/${enumData.name}.ts`,
69
- contents: (0, generatePgEnumFile_1.generatePgEnumFile)(config, enumData),
70
- overwrite: true,
71
- },
72
- ];
73
- })
74
- .reduce(utils_1.merge, []);
75
- const contextType = config.contextType ? (0, ts_poet_1.imp)(`t:${config.contextType}`) : "{}";
76
- const txnType = config.transactionType ? (0, ts_poet_1.imp)(`t:${config.transactionType}`) : "unknown";
77
- const maybeTagDelimiter = config.tagDelimiter === undefined
78
- ? (0, ts_poet_1.code) ``
79
- : (0, ts_poet_1.code) `tagDelimiter: ${config.tagDelimiter === "" ? "undefined" : JSON.stringify(config.tagDelimiter)},`;
80
- const metadataFile = {
81
- name: "./codegen/metadata.ts",
82
- contents: (0, ts_poet_1.code) `
83
- ${symbols_1.setRuntimeConfig}({
22
+ const { entities, enums, pgEnums } = dbMeta;
23
+ const entityNames = entities.map((meta) => meta.entity.name);
24
+ const files = await readExistingFiles(config);
25
+ if (config.docs) await syncDocs(config.entitiesDirectory, entityNames);
26
+ const entityDocs = config.docs || config.outputDocs ? await loadEntityDocs(config.entitiesDirectory, entityNames) : {};
27
+ const scopeMembersByEntity = await findAllEntityScopes(config, entities.map((meta) => meta.entity));
28
+ const entityFiles = entities.map((meta) => {
29
+ const entityName = meta.entity.name;
30
+ const hasEntityFile = files.includes(`${entityName}.ts`);
31
+ return [{
32
+ name: `./codegen/${entityName}Codegen.ts`,
33
+ contents: generateEntityCodegenFile(config, dbMeta, meta, scopeMembersByEntity[entityName] ?? [], config.docs ? entityDocs[entityName] : void 0),
34
+ overwrite: true
35
+ }, ...hasEntityFile ? [] : [{
36
+ name: `${entityName}.ts`,
37
+ contents: generateEntityFile(config, meta),
38
+ overwrite: false
39
+ }, {
40
+ name: `${entityName}.test.ts`,
41
+ contents: generateEntityTestFile(config, meta),
42
+ overwrite: false
43
+ }]];
44
+ }).reduce(merge, []);
45
+ const enumFiles = Object.values(enums).map((enumData) => {
46
+ const enumName = tableToEntityName(config, enumData.table);
47
+ return [{
48
+ name: `./enums/${enumName}.ts`,
49
+ contents: generateEnumFile(config, enumData, enumName),
50
+ overwrite: true
51
+ }];
52
+ }).reduce(merge, []);
53
+ const pgEnumFiles = Object.values(pgEnums).map((enumData) => {
54
+ return [{
55
+ name: `./enums/${enumData.name}.ts`,
56
+ contents: generatePgEnumFile(config, enumData),
57
+ overwrite: true
58
+ }];
59
+ }).reduce(merge, []);
60
+ const contextType = config.contextType ? imp(`t:${config.contextType}`) : "{}";
61
+ const txnType = config.transactionType ? imp(`t:${config.transactionType}`) : "unknown";
62
+ const maybeTagDelimiter = config.tagDelimiter === void 0 ? code`` : code`tagDelimiter: ${config.tagDelimiter === "" ? "undefined" : JSON.stringify(config.tagDelimiter)},`;
63
+ const metadataFile = {
64
+ name: "./codegen/metadata.ts",
65
+ contents: code`
66
+ ${setRuntimeConfig}({
84
67
  temporal: ${config.temporal ? { timeZone: typeof config.temporal === "boolean" ? "UTC" : config.temporal.timeZone } : "false"},
85
68
  ${maybeTagDelimiter}
86
69
  });
87
70
 
88
- export class ${(0, ts_poet_1.def)("EntityManager")} extends ${symbols_1.JoistEntityManager}<${contextType}, Entity, ${txnType}> {}
71
+ export class ${def("EntityManager")} extends ${JoistEntityManager}<${contextType}, Entity, ${txnType}> {}
89
72
 
90
- export interface ${(0, ts_poet_1.def)("Entity")} extends ${symbols_1.Entity} {
91
- id: ${(0, generateEntityCodegenFile_1.getIdType)(config)};
73
+ export interface ${def("Entity")} extends ${Entity} {
74
+ id: ${getIdType(config)};
92
75
  em: EntityManager;
93
76
  }
94
77
 
95
- ${entities.map((meta) => (0, generateMetadataFile_1.generateMetadataFile)(config, dbMeta, meta))}
78
+ ${entities.map((meta) => generateMetadataFile(config, dbMeta, meta))}
96
79
 
97
80
  export const allMetadata = [${entities.map((meta) => meta.entity.metaName).join(", ")}];
98
- ${symbols_1.configureMetadata}(allMetadata);
81
+ ${configureMetadata}(allMetadata);
99
82
  `,
100
- overwrite: true,
101
- toStringOpts: { dprintOptions: { lineWidth: 400 } },
102
- };
103
- const enumsTables = Object.values(enums)
104
- .map(({ table }) => table)
105
- .sort((a, b) => a.name.localeCompare(b.name));
106
- const entitiesFile = {
107
- name: "./entities.ts",
108
- contents: (0, generateEntitiesFile_1.generateEntitiesFile)(config, entities, enumsTables, Object.values(pgEnums)),
109
- overwrite: true,
110
- toStringOpts: { dprintOptions: { "module.sortExportDeclarations": "maintain" } },
111
- };
112
- const factoriesFiles = (0, generateFactoriesFiles_1.generateFactoriesFiles)(entities);
113
- const esmExt = config.esm ? (config.allowImportingTsExtensions ? ".ts" : ".js") : "";
114
- const indexFile = {
115
- name: "./index.ts",
116
- contents: (0, ts_poet_1.code) `export * from "./entities${esmExt}"`,
117
- overwrite: false,
118
- };
119
- // Look for modules to require and call the exported `.run(Config, DbMeta)` method
120
- const pluginFiles = (await Promise.all((config.codegenPlugins ?? []).map((p) => {
121
- const plugin = require(p);
122
- return plugin.run(config, dbMeta);
123
- }))).flat();
124
- // Generate metadata-docs.ts if enabled
125
- const docsFile = config.outputDocs ? (0, docs_1.generateMetadataDocsFile)(dbMeta, entityDocs) : undefined;
126
- return [
127
- ...entityFiles,
128
- ...enumFiles,
129
- ...pgEnumFiles,
130
- entitiesFile,
131
- ...factoriesFiles,
132
- metadataFile,
133
- ...(docsFile ? [docsFile] : []),
134
- indexFile,
135
- ...pluginFiles,
136
- ];
83
+ overwrite: true,
84
+ toStringOpts: { dprintOptions: { lineWidth: 400 } }
85
+ };
86
+ const enumsTables = Object.values(enums).map(({ table }) => table).sort((a, b) => a.name.localeCompare(b.name));
87
+ const entitiesFile = {
88
+ name: "./entities.ts",
89
+ contents: generateEntitiesFile(config, entities, enumsTables, Object.values(pgEnums)),
90
+ overwrite: true,
91
+ toStringOpts: { dprintOptions: { "module.sortExportDeclarations": "maintain" } }
92
+ };
93
+ const factoriesFiles = generateFactoriesFiles(entities);
94
+ const esmExt = config.esm ? config.allowImportingTsExtensions ? ".ts" : ".js" : "";
95
+ const indexFile = {
96
+ name: "./index.ts",
97
+ contents: code`export * from "./entities${esmExt}"`,
98
+ overwrite: false
99
+ };
100
+ const pluginFiles = (await Promise.all((config.codegenPlugins ?? []).map((p) => {
101
+ return runtimeRequire(p).run(config, dbMeta);
102
+ }))).flat();
103
+ const docsFile = config.outputDocs ? generateMetadataDocsFile(dbMeta, entityDocs) : void 0;
104
+ return [
105
+ ...entityFiles,
106
+ ...enumFiles,
107
+ ...pgEnumFiles,
108
+ entitiesFile,
109
+ ...factoriesFiles,
110
+ metadataFile,
111
+ ...docsFile ? [docsFile] : [],
112
+ indexFile,
113
+ ...pluginFiles
114
+ ];
137
115
  }
138
116
  /** Reads the `entitiesDirectory` but just ignores if it doesn't exist yet. */
139
117
  async function readExistingFiles(config) {
140
- try {
141
- return await (0, promises_1.readdir)(config.entitiesDirectory);
142
- }
143
- catch (e) {
144
- return [];
145
- }
118
+ try {
119
+ return await readdir(config.entitiesDirectory);
120
+ } catch (e) {
121
+ return [];
122
+ }
146
123
  }
124
+ //#endregion
125
+ export { generateFiles };
126
+
147
127
  //# sourceMappingURL=generate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate.js","names":[],"sources":["../src/generate.ts"],"sourcesContent":["import { readdir } from \"fs/promises\";\nimport { createRequire } from \"node:module\";\n\nimport { type CodegenFile, code, def, imp } from \"ts-poet\";\n\nimport { generateMetadataDocsFile, loadEntityDocs, syncDocs } from \"./docs/index.ts\";\nimport { findAllEntityScopes } from \"./findEntityScopes.ts\";\nimport { generateEntitiesFile } from \"./generateEntitiesFile.ts\";\nimport { generateEntityCodegenFile, getIdType } from \"./generateEntityCodegenFile.ts\";\nimport { generateEntityFile } from \"./generateEntityFile.ts\";\nimport { generateEntityTestFile } from \"./generateEntityTestFile.ts\";\nimport { generateEnumFile } from \"./generateEnumFile.ts\";\nimport { generateFactoriesFiles } from \"./generateFactoriesFiles.ts\";\nimport { generateMetadataFile } from \"./generateMetadataFile.ts\";\nimport { generatePgEnumFile } from \"./generatePgEnumFile.ts\";\nimport { type Config, type DbMetadata } from \"./index.ts\";\nimport { Entity, JoistEntityManager, configureMetadata, setRuntimeConfig } from \"./symbols.ts\";\nimport { merge, tableToEntityName } from \"./utils.ts\";\n\nconst runtimeRequire = createRequire(import.meta.url);\n\nexport type DPrintOptions = Record<string, unknown>;\n\n/**\n * Provides an API for hooking into the codegen build step.\n */\nexport interface CodegenPlugin {\n run(config: Config, dbMeta: DbMetadata): Promise<CodegenFile>;\n}\n\n/** Generates our `${Entity}` and `${Entity}Codegen` files based on the `db` schema. */\nexport async function generateFiles(config: Config, dbMeta: DbMetadata): Promise<CodegenFile[]> {\n const { entities, enums, pgEnums } = dbMeta;\n const entityNames = entities.map((meta) => meta.entity.name);\n\n // Find existing entities so that, besides just using `overwrite: false`, we can completely\n // skip making test files except for the _first_ time we create an entity. This achieves\n // `.history`-like \"create once\" behavior without the need for the `.history` file.\n const files = await readExistingFiles(config);\n\n // Sync documentation: backfill .md from existing JSDocs, then sync MD -> JSDoc\n if (config.docs) {\n await syncDocs(config.entitiesDirectory, entityNames);\n }\n\n // Load the .md docs once (post-sync) to inject into codegen JSDocs and the runtime metadata-docs.ts\n const entityDocs =\n config.docs || config.outputDocs ? await loadEntityDocs(config.entitiesDirectory, entityNames) : {};\n\n const scopeMembersByEntity = await findAllEntityScopes(\n config,\n entities.map((meta) => meta.entity),\n );\n\n const entityFiles = entities\n .map((meta) => {\n const entityName = meta.entity.name;\n const hasEntityFile = files.includes(`${entityName}.ts`);\n return [\n {\n name: `./codegen/${entityName}Codegen.ts`,\n contents: generateEntityCodegenFile(\n config,\n dbMeta,\n meta,\n scopeMembersByEntity[entityName] ?? [],\n config.docs ? entityDocs[entityName] : undefined,\n ),\n overwrite: true,\n },\n ...(hasEntityFile\n ? []\n : [\n { name: `${entityName}.ts`, contents: generateEntityFile(config, meta), overwrite: false },\n { name: `${entityName}.test.ts`, contents: generateEntityTestFile(config, meta), overwrite: false },\n ]),\n ];\n })\n .reduce(merge, []);\n\n const enumFiles = Object.values(enums)\n .map((enumData) => {\n const enumName = tableToEntityName(config, enumData.table);\n return [\n {\n name: `./enums/${enumName}.ts`,\n contents: generateEnumFile(config, enumData, enumName),\n overwrite: true,\n },\n ];\n })\n .reduce(merge, []);\n const pgEnumFiles = Object.values(pgEnums)\n .map((enumData) => {\n return [\n {\n name: `./enums/${enumData.name}.ts`,\n contents: generatePgEnumFile(config, enumData),\n overwrite: true,\n },\n ];\n })\n .reduce(merge, []);\n\n const contextType = config.contextType ? imp(`t:${config.contextType}`) : \"{}\";\n const txnType = config.transactionType ? imp(`t:${config.transactionType}`) : \"unknown\";\n const maybeTagDelimiter =\n config.tagDelimiter === undefined\n ? code``\n : code`tagDelimiter: ${config.tagDelimiter === \"\" ? \"undefined\" : JSON.stringify(config.tagDelimiter)},`;\n\n const metadataFile: CodegenFile = {\n name: \"./codegen/metadata.ts\",\n contents: code`\n ${setRuntimeConfig}({\n temporal: ${config.temporal ? { timeZone: typeof config.temporal === \"boolean\" ? \"UTC\" : config.temporal.timeZone } : \"false\"},\n ${maybeTagDelimiter}\n });\n \n export class ${def(\"EntityManager\")} extends ${JoistEntityManager}<${contextType}, Entity, ${txnType}> {}\n\n export interface ${def(\"Entity\")} extends ${Entity} {\n id: ${getIdType(config)};\n em: EntityManager;\n }\n\n ${entities.map((meta) => generateMetadataFile(config, dbMeta, meta))}\n\n export const allMetadata = [${entities.map((meta) => meta.entity.metaName).join(\", \")}];\n ${configureMetadata}(allMetadata);\n `,\n overwrite: true,\n toStringOpts: { dprintOptions: { lineWidth: 400 } },\n };\n\n const enumsTables = Object.values(enums)\n .map(({ table }) => table)\n .sort((a, b) => a.name.localeCompare(b.name));\n\n const entitiesFile: CodegenFile = {\n name: \"./entities.ts\",\n contents: generateEntitiesFile(config, entities, enumsTables, Object.values(pgEnums)),\n overwrite: true,\n toStringOpts: { dprintOptions: { \"module.sortExportDeclarations\": \"maintain\" } },\n };\n\n const factoriesFiles: CodegenFile[] = generateFactoriesFiles(entities);\n\n const esmExt = config.esm ? (config.allowImportingTsExtensions ? \".ts\" : \".js\") : \"\";\n const indexFile: CodegenFile = {\n name: \"./index.ts\",\n contents: code`export * from \"./entities${esmExt}\"`,\n overwrite: false,\n };\n\n // Look for modules to require and call the exported `.run(Config, DbMeta)` method\n const pluginFiles: CodegenFile[] = (\n await Promise.all(\n (config.codegenPlugins ?? []).map((p) => {\n const plugin = runtimeRequire(p) as CodegenPlugin;\n return plugin.run(config, dbMeta);\n }),\n )\n ).flat();\n\n // Generate metadata-docs.ts if enabled\n const docsFile = config.outputDocs ? generateMetadataDocsFile(dbMeta, entityDocs) : undefined;\n\n return [\n ...entityFiles,\n ...enumFiles,\n ...pgEnumFiles,\n entitiesFile,\n ...factoriesFiles,\n metadataFile,\n ...(docsFile ? [docsFile] : []),\n indexFile,\n ...pluginFiles,\n ];\n}\n\n/** Reads the `entitiesDirectory` but just ignores if it doesn't exist yet. */\nasync function readExistingFiles(config: Config): Promise<string[]> {\n try {\n return await readdir(config.entitiesDirectory);\n } catch (e) {\n return [];\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_utils = require("./utils.cjs");
3
+ require("./config.cjs");
4
+ require("./index.cjs");
5
+ require("./EntityDbMetadata.cjs");
6
+ require("pg-structure");
7
+ let ts_poet = require("ts-poet");
8
+ //#region src/generateEntitiesFile.ts
9
+ function generateEntitiesFile(config, entities, enums, pgEnums) {
10
+ const baseClasses = entities.filter((e) => e.baseClassName === void 0);
11
+ const subClasses = entities.filter((e) => e.baseClassName !== void 0);
12
+ const esmExt = config.esm ? config.allowImportingTsExtensions ? ".ts" : ".js" : "";
13
+ return ts_poet.code`
14
+ // organize-imports-ignore
15
+
16
+ // This file drives our import order to avoid undefined errors
17
+ // when the subclasses extend the base classes, see:
18
+ // https://medium.com/visual-development/how-to-fix-nasty-circular-dependency-issues-once-and-for-all-in-javascript-typescript-a04c987cf0de
19
+ ${enums.map((table) => {
20
+ return `export * from "./enums/${require_utils.tableToEntityName(config, table)}${esmExt}";`;
21
+ })}
22
+ ${pgEnums.map((meta) => {
23
+ return `export * from "./enums/${meta.name}${esmExt}";`;
24
+ })}
25
+ ${baseClasses.map((meta) => {
26
+ return `export * from "./codegen/${meta.entity.name}Codegen${esmExt}";`;
27
+ })}
28
+ ${baseClasses.map((meta) => {
29
+ return `export * from "./${meta.entity.name}${esmExt}";`;
30
+ })}
31
+ ${subClasses.map((meta) => {
32
+ return `export * from "./codegen/${meta.entity.name}Codegen${esmExt}";`;
33
+ })}
34
+ ${subClasses.map((meta) => {
35
+ return `export * from "./${meta.entity.name}${esmExt}";`;
36
+ })}
37
+ ${entities.map(({ entity }) => {
38
+ return `export * from "./factories/new${entity.name}${esmExt}";`;
39
+ })}
40
+ export * from "./codegen/metadata${esmExt}";
41
+ `;
42
+ }
43
+ //#endregion
44
+ exports.generateEntitiesFile = generateEntitiesFile;
45
+
46
+ //# sourceMappingURL=generateEntitiesFile.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateEntitiesFile.cjs","names":["tableToEntityName"],"sources":["../src/generateEntitiesFile.ts"],"sourcesContent":["import { type Table } from \"pg-structure\";\nimport { type Code, code } from \"ts-poet\";\n\nimport { type Config } from \"./config.ts\";\nimport { type EntityDbMetadata } from \"./EntityDbMetadata.ts\";\nimport { type PgEnumData } from \"./index.ts\";\nimport { tableToEntityName } from \"./utils.ts\";\n\nexport function generateEntitiesFile(\n config: Config,\n entities: EntityDbMetadata[],\n enums: Table[],\n pgEnums: PgEnumData[],\n): Code {\n // Output base types before subtypes, so that `class SmallPublisherCodegen extends Publisher` can\n // immediately resolve the `Publisher` symbol. Assume only 1 level of inheritance for now.\n const baseClasses = entities.filter((e) => e.baseClassName === undefined);\n const subClasses = entities.filter((e) => e.baseClassName !== undefined);\n\n const esmExt = config.esm ? (config.allowImportingTsExtensions ? \".ts\" : \".js\") : \"\";\n\n return code`\n // organize-imports-ignore\n\n // This file drives our import order to avoid undefined errors\n // when the subclasses extend the base classes, see:\n // https://medium.com/visual-development/how-to-fix-nasty-circular-dependency-issues-once-and-for-all-in-javascript-typescript-a04c987cf0de\n ${enums.map((table) => {\n return `export * from \"./enums/${tableToEntityName(config, table)}${esmExt}\";`;\n })}\n ${pgEnums.map((meta) => {\n return `export * from \"./enums/${meta.name}${esmExt}\";`;\n })}\n ${baseClasses.map((meta) => {\n return `export * from \"./codegen/${meta.entity.name}Codegen${esmExt}\";`;\n })}\n ${baseClasses.map((meta) => {\n return `export * from \"./${meta.entity.name}${esmExt}\";`;\n })}\n ${subClasses.map((meta) => {\n return `export * from \"./codegen/${meta.entity.name}Codegen${esmExt}\";`;\n })}\n ${subClasses.map((meta) => {\n return `export * from \"./${meta.entity.name}${esmExt}\";`;\n })}\n ${entities.map(({ entity }) => {\n return `export * from \"./factories/new${entity.name}${esmExt}\";`;\n })}\n export * from \"./codegen/metadata${esmExt}\";\n `;\n}\n"],"mappings":";;;;;;;;AAQA,SAAgB,qBACd,QACA,UACA,OACA,SACM;CAGN,MAAM,cAAc,SAAS,QAAQ,MAAM,EAAE,kBAAkB,KAAA,CAAS;CACxE,MAAM,aAAa,SAAS,QAAQ,MAAM,EAAE,kBAAkB,KAAA,CAAS;CAEvE,MAAM,SAAS,OAAO,MAAO,OAAO,6BAA6B,QAAQ,QAAS;CAElF,OAAO,QAAA,IAAI;;;;;;MAMP,MAAM,KAAK,UAAU;EACrB,OAAO,0BAA0BA,cAAAA,kBAAkB,QAAQ,KAAK,IAAI,OAAO;CAC7E,CAAC,EAAE;MACD,QAAQ,KAAK,SAAS;EACtB,OAAO,0BAA0B,KAAK,OAAO,OAAO;CACtD,CAAC,EAAE;MACD,YAAY,KAAK,SAAS;EAC1B,OAAO,4BAA4B,KAAK,OAAO,KAAK,SAAS,OAAO;CACtE,CAAC,EAAE;MACD,YAAY,KAAK,SAAS;EAC1B,OAAO,oBAAoB,KAAK,OAAO,OAAO,OAAO;CACvD,CAAC,EAAE;MACD,WAAW,KAAK,SAAS;EACzB,OAAO,4BAA4B,KAAK,OAAO,KAAK,SAAS,OAAO;CACtE,CAAC,EAAE;MACD,WAAW,KAAK,SAAS;EACzB,OAAO,oBAAoB,KAAK,OAAO,OAAO,OAAO;CACvD,CAAC,EAAE;MACD,SAAS,KAAK,EAAE,aAAa;EAC7B,OAAO,iCAAiC,OAAO,OAAO,OAAO;CAC/D,CAAC,EAAE;uCACgC,OAAO;;AAE9C"}
@@ -0,0 +1,11 @@
1
+ import { Config } from "./config.cjs";
2
+ import "./index.cjs";
3
+ import { PgEnumData } from "./loadMetadata.cjs";
4
+ import { EntityDbMetadata } from "./EntityDbMetadata.cjs";
5
+ import { Table } from "pg-structure";
6
+ import { Code } from "ts-poet";
7
+ //#region src/generateEntitiesFile.d.ts
8
+ declare function generateEntitiesFile(config: Config, entities: EntityDbMetadata[], enums: Table[], pgEnums: PgEnumData[]): Code;
9
+ //#endregion
10
+ export { generateEntitiesFile };
11
+ //# sourceMappingURL=generateEntitiesFile.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateEntitiesFile.d.cts","names":[],"sources":["../src/generateEntitiesFile.ts"],"mappings":";;;;;;;iBAQgB,qBACd,QAAQ,QACR,UAAU,oBACV,OAAO,SACP,SAAS,eACR"}
@@ -0,0 +1,11 @@
1
+ import { Config } from "./config.mjs";
2
+ import "./index.mjs";
3
+ import { PgEnumData } from "./loadMetadata.mjs";
4
+ import { EntityDbMetadata } from "./EntityDbMetadata.mjs";
5
+ import { Table } from "pg-structure";
6
+ import { Code } from "ts-poet";
7
+ //#region src/generateEntitiesFile.d.ts
8
+ declare function generateEntitiesFile(config: Config, entities: EntityDbMetadata[], enums: Table[], pgEnums: PgEnumData[]): Code;
9
+ //#endregion
10
+ export { generateEntitiesFile };
11
+ //# sourceMappingURL=generateEntitiesFile.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateEntitiesFile.d.mts","names":[],"sources":["../src/generateEntitiesFile.ts"],"mappings":";;;;;;;iBAQgB,qBACd,QAAQ,QACR,UAAU,oBACV,OAAO,SACP,SAAS,eACR"}