joist-codegen 2.3.0-next.6 → 2.3.0-next.61

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 (420) 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 -661
  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 -4
  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 -52
  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 +309 -347
  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 +19 -24
  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 +75 -80
  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 -12
  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 +89 -88
  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 +83 -111
  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 +110 -124
  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 +955 -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 +738 -827
  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 -5
  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 -78
  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 +116 -140
  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 +108 -127
  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.cts +16 -0
  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 +67 -0
  232. package/build/installSkills.js.map +1 -0
  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 -5
  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 +228 -0
  274. package/build/symbols.cjs.map +1 -0
  275. package/build/symbols.d.cts +115 -0
  276. package/build/symbols.d.cts.map +1 -0
  277. package/build/symbols.d.mts +115 -0
  278. package/build/symbols.d.mts.map +1 -0
  279. package/build/symbols.js +116 -113
  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 +37 -17
  304. package/skills/joist-docs/SKILL.md +133 -0
  305. package/skills/joist-em-basics/SKILL.md +114 -0
  306. package/skills/joist-partial-updates/SKILL.md +352 -0
  307. package/skills/joist-reactive-hints/SKILL.md +150 -0
  308. package/skills/joist-test-factories/SKILL.md +397 -0
  309. package/skills/joist-upsert/SKILL.md +95 -0
  310. package/build/EntityDbMetadata.d.ts +0 -269
  311. package/build/EntityDbMetadata.d.ts.map +0 -1
  312. package/build/EntityDbMetadata.test.d.ts +0 -2
  313. package/build/EntityDbMetadata.test.d.ts.map +0 -1
  314. package/build/EntityDbMetadata.test.js +0 -211
  315. package/build/EntityDbMetadata.test.js.map +0 -1
  316. package/build/assignTags.d.ts.map +0 -1
  317. package/build/codemods/Codemod.d.ts +0 -14
  318. package/build/codemods/Codemod.d.ts.map +0 -1
  319. package/build/codemods/Codemod.js.map +0 -1
  320. package/build/codemods/JscodeshiftMod.d.ts +0 -11
  321. package/build/codemods/JscodeshiftMod.d.ts.map +0 -1
  322. package/build/codemods/__tests__/codemod_0001-rename_has_async_property.test.d.ts +0 -2
  323. package/build/codemods/__tests__/codemod_0001-rename_has_async_property.test.d.ts.map +0 -1
  324. package/build/codemods/__tests__/codemod_0001-rename_has_async_property.test.js +0 -9
  325. package/build/codemods/__tests__/codemod_0001-rename_has_async_property.test.js.map +0 -1
  326. package/build/codemods/__tests__/codemod_0002-rename_async_query_fields.test.d.ts +0 -2
  327. package/build/codemods/__tests__/codemod_0002-rename_async_query_fields.test.d.ts.map +0 -1
  328. package/build/codemods/__tests__/codemod_0002-rename_async_query_fields.test.js +0 -9
  329. package/build/codemods/__tests__/codemod_0002-rename_async_query_fields.test.js.map +0 -1
  330. package/build/codemods/__tests__/codemod_0003-rename_find_paginated.test.d.ts +0 -2
  331. package/build/codemods/__tests__/codemod_0003-rename_find_paginated.test.d.ts.map +0 -1
  332. package/build/codemods/__tests__/codemod_0003-rename_find_paginated.test.js +0 -9
  333. package/build/codemods/__tests__/codemod_0003-rename_find_paginated.test.js.map +0 -1
  334. package/build/codemods/codemod_0001-rename_has_async_property.d.ts +0 -7
  335. package/build/codemods/codemod_0001-rename_has_async_property.d.ts.map +0 -1
  336. package/build/codemods/codemod_0002-rename_async_query_fields.d.ts +0 -7
  337. package/build/codemods/codemod_0002-rename_async_query_fields.d.ts.map +0 -1
  338. package/build/codemods/codemod_0003-rename_find_paginated.d.ts +0 -7
  339. package/build/codemods/codemod_0003-rename_find_paginated.d.ts.map +0 -1
  340. package/build/codemods/index.d.ts +0 -9
  341. package/build/codemods/index.d.ts.map +0 -1
  342. package/build/codemods/index.test.d.ts +0 -2
  343. package/build/codemods/index.test.d.ts.map +0 -1
  344. package/build/codemods/index.test.js +0 -24
  345. package/build/codemods/index.test.js.map +0 -1
  346. package/build/config.d.ts +0 -167
  347. package/build/config.d.ts.map +0 -1
  348. package/build/config.test.d.ts +0 -2
  349. package/build/config.test.d.ts.map +0 -1
  350. package/build/config.test.js +0 -78
  351. package/build/config.test.js.map +0 -1
  352. package/build/docs/cache.d.ts +0 -14
  353. package/build/docs/cache.d.ts.map +0 -1
  354. package/build/docs/cache.test.d.ts +0 -2
  355. package/build/docs/cache.test.d.ts.map +0 -1
  356. package/build/docs/cache.test.js +0 -47
  357. package/build/docs/cache.test.js.map +0 -1
  358. package/build/docs/generate-metadata-docs.d.ts +0 -6
  359. package/build/docs/generate-metadata-docs.d.ts.map +0 -1
  360. package/build/docs/index.d.ts +0 -9
  361. package/build/docs/index.d.ts.map +0 -1
  362. package/build/docs/index.test.d.ts +0 -2
  363. package/build/docs/index.test.d.ts.map +0 -1
  364. package/build/docs/index.test.js +0 -100
  365. package/build/docs/index.test.js.map +0 -1
  366. package/build/docs/markdown.d.ts.map +0 -1
  367. package/build/docs/markdown.test.d.ts +0 -2
  368. package/build/docs/markdown.test.d.ts.map +0 -1
  369. package/build/docs/markdown.test.js +0 -280
  370. package/build/docs/markdown.test.js.map +0 -1
  371. package/build/docs/parsing.d.ts +0 -42
  372. package/build/docs/parsing.d.ts.map +0 -1
  373. package/build/docs/parsing.test.d.ts +0 -2
  374. package/build/docs/parsing.test.d.ts.map +0 -1
  375. package/build/docs/parsing.test.js +0 -190
  376. package/build/docs/parsing.test.js.map +0 -1
  377. package/build/findEntityScopes.d.ts +0 -11
  378. package/build/findEntityScopes.d.ts.map +0 -1
  379. package/build/foreignKeyOrdering.d.ts +0 -3
  380. package/build/foreignKeyOrdering.d.ts.map +0 -1
  381. package/build/generate.d.ts +0 -12
  382. package/build/generate.d.ts.map +0 -1
  383. package/build/generateEntitiesFile.d.ts +0 -7
  384. package/build/generateEntitiesFile.d.ts.map +0 -1
  385. package/build/generateEntityCodegenFile.d.ts +0 -11
  386. package/build/generateEntityCodegenFile.d.ts.map +0 -1
  387. package/build/generateEntityFile.d.ts +0 -6
  388. package/build/generateEntityFile.d.ts.map +0 -1
  389. package/build/generateEntityTestFile.d.ts +0 -6
  390. package/build/generateEntityTestFile.d.ts.map +0 -1
  391. package/build/generateEnumFile.d.ts +0 -5
  392. package/build/generateEnumFile.d.ts.map +0 -1
  393. package/build/generateFactoriesFiles.d.ts +0 -4
  394. package/build/generateFactoriesFiles.d.ts.map +0 -1
  395. package/build/generateFlushFunction.d.ts.map +0 -1
  396. package/build/generateMetadataFile.d.ts +0 -5
  397. package/build/generateMetadataFile.d.ts.map +0 -1
  398. package/build/generatePgEnumFile.d.ts +0 -5
  399. package/build/generatePgEnumFile.d.ts.map +0 -1
  400. package/build/index.d.ts +0 -11
  401. package/build/index.d.ts.map +0 -1
  402. package/build/inheritance.d.ts +0 -10
  403. package/build/inheritance.d.ts.map +0 -1
  404. package/build/keywords.d.ts +0 -2
  405. package/build/keywords.d.ts.map +0 -1
  406. package/build/loadMetadata.d.ts +0 -26
  407. package/build/loadMetadata.d.ts.map +0 -1
  408. package/build/logger.d.ts +0 -10
  409. package/build/logger.d.ts.map +0 -1
  410. package/build/scanEntityFiles.d.ts +0 -5
  411. package/build/scanEntityFiles.d.ts.map +0 -1
  412. package/build/sortForeignKeys.d.ts.map +0 -1
  413. package/build/symbols.d.ts +0 -108
  414. package/build/symbols.d.ts.map +0 -1
  415. package/build/tsdoc.d.ts +0 -12
  416. package/build/tsdoc.d.ts.map +0 -1
  417. package/build/utils.d.ts +0 -31
  418. package/build/utils.d.ts.map +0 -1
  419. package/build/write-json-schema.d.ts +0 -2
  420. package/build/write-json-schema.d.ts.map +0 -1
@@ -0,0 +1,955 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
3
+ const require_utils = require("./utils.cjs");
4
+ const require_inheritance = require("./inheritance.cjs");
5
+ require("./config.cjs");
6
+ const require_docs_parsing = require("./docs/parsing.cjs");
7
+ require("./docs/index.cjs");
8
+ require("./findEntityScopes.cjs");
9
+ const require_keywords = require("./keywords.cjs");
10
+ const require_symbols = require("./symbols.cjs");
11
+ const require_tsdoc = require("./tsdoc.cjs");
12
+ require("./EntityDbMetadata.cjs");
13
+ let change_case = require("change-case");
14
+ let pluralize = require("pluralize");
15
+ pluralize = require_runtime.__toESM(pluralize, 1);
16
+ let ts_poet = require("ts-poet");
17
+ //#region src/generateEntityCodegenFile.ts
18
+ const { plural } = pluralize.default;
19
+ /** Creates the base class with the boilerplate annotations. */
20
+ function generateEntityCodegenFile(config, dbMeta, meta, scopeMembers = [], docs) {
21
+ const { entitiesByName: metasByName } = dbMeta;
22
+ const { entity, tagName } = meta;
23
+ const entityName = entity.name;
24
+ const fieldDocs = docs?.fields ?? {};
25
+ const varName = require_keywords.keywords.includes(tagName) ? require_utils.uncapitalize(entityName) : tagName;
26
+ const primitives = createPrimitives(meta, entity, fieldDocs);
27
+ primitives.push(...createRegularEnums(meta, entity, fieldDocs));
28
+ primitives.push(...createArrayEnums(meta, fieldDocs));
29
+ primitives.push(...createPgEnums(meta, fieldDocs));
30
+ const relations = createRelations(config, meta, entity);
31
+ const configName = `${(0, change_case.camelCase)(entityName)}Config`;
32
+ const scopeFnName = `${(0, change_case.camelCase)(entityName)}Scope`;
33
+ const metadata = (0, ts_poet.imp)(`${(0, change_case.camelCase)(entityName)}Meta@./entities.ts`);
34
+ const contextType = config.contextType ? (0, ts_poet.imp)(`t:${config.contextType}`) : "{}";
35
+ const factoryMethod = (0, ts_poet.imp)(`new${entity.name}@./entities.ts`);
36
+ const idMaybeCode = config.idType === "tagged-string" ? ts_poet.code`return this.idTaggedMaybe;` : ts_poet.code`return ${require_symbols.toIdOf}(${metadata}, this.idTaggedMaybe);`;
37
+ const idType = getIdType(config);
38
+ const maybeSoftDeleteMethods = meta.deletedAt ? ts_poet.code`
39
+ get isSoftDeletedEntity(): boolean {
40
+ return this.${meta.deletedAt.fieldName} !== undefined;
41
+ }
42
+
43
+ softDelete(): void {
44
+ if (this.isSoftDeletedEntity) return;
45
+ this.${meta.deletedAt.fieldName} = ${nowUTCCall(config, meta.deletedAt)};
46
+ }
47
+ ` : "";
48
+ const baseEntity = dbMeta.entities.find((e) => e.name === meta.baseClassName);
49
+ const subEntities = dbMeta.entities.filter((e) => e.baseClassName === meta.name);
50
+ const base = baseEntity?.entity.typeSymbol ?? ts_poet.code`${require_symbols.BaseEntity}<${require_symbols.EntityManager}, ${idType}>`;
51
+ const maybeBaseFields = baseEntity ? ts_poet.code`extends ${(0, ts_poet.imp)("t:" + baseEntity.entity.fieldsName + "@./entities.ts")}` : "";
52
+ const maybeBaseOpts = baseEntity ? ts_poet.code`extends ${baseEntity.entity.optsType}` : "";
53
+ const maybeBaseIdOpts = baseEntity ? ts_poet.code`extends ${(0, ts_poet.imp)("t:" + baseEntity.entity.idsOptsName + "@./entities.ts")}` : "";
54
+ const maybeBaseFilter = baseEntity ? ts_poet.code`extends ${(0, ts_poet.imp)("t:" + baseEntity.entity.filterName + "@./entities.ts")}` : "";
55
+ const maybeBaseGqlFilter = baseEntity ? ts_poet.code`extends ${(0, ts_poet.imp)("t:" + baseEntity.entity.graphqlFilterName + "@./entities.ts")}` : "";
56
+ const maybeBaseOrder = baseEntity ? ts_poet.code`extends ${baseEntity.entity.orderType}` : "";
57
+ meta.abstract && ts_poet.code`
58
+ if (this.constructor === ${entity.type} && !(em as any).fakeInstance) {
59
+ throw new Error(\`${entity.type} must be instantiated via a subtype\`);
60
+ }`;
61
+ let maybeOtherTypeChanges;
62
+ if (subEntities.length > 0) maybeOtherTypeChanges = (0, ts_poet.joinCode)([ts_poet.code`, `, ...[meta, ...subEntities].map((e) => ts_poet.code`keyof (${require_symbols.FieldsOf}<${e.entity.type}> & ${require_symbols.RelationsOf}<${e.entity.type}>)`)], { on: "|" });
63
+ else maybeOtherTypeChanges = "";
64
+ let maybeOtherLoaded;
65
+ if (baseEntity) maybeOtherLoaded = ts_poet.code`| ${baseEntity.entity.type}`;
66
+ else maybeOtherLoaded = "";
67
+ return ts_poet.code`
68
+ export type ${entity.idName} = ${require_symbols.Flavor}<${idType}, "${baseEntity ? baseEntity.name : entityName}">;
69
+
70
+ ${generatePolymorphicTypes(meta)}
71
+
72
+ export interface ${entity.fieldsName} ${maybeBaseFields} {
73
+ ${generateFieldsType(meta, idType)}
74
+ }
75
+
76
+ export interface ${entity.optsName} ${maybeBaseOpts} {
77
+ ${generateOptsFields(meta)}
78
+ }
79
+
80
+ export interface ${entity.idsOptsName} ${maybeBaseIdOpts} {
81
+ ${generateOptIdsFields(meta)}
82
+ }
83
+
84
+ export interface ${entity.filterName} ${maybeBaseFilter} {
85
+ ${generateFilterFields(metasByName, meta)}
86
+ }
87
+
88
+ export interface ${entity.graphqlFilterName} ${maybeBaseGqlFilter} {
89
+ ${generateGraphQLFilterFields(metasByName, meta)}
90
+ }
91
+
92
+ export interface ${entity.orderName} ${maybeBaseOrder} {
93
+ ${generateOrderFields(meta)}
94
+ }
95
+
96
+ export interface ${entity.factoryExtrasName} {
97
+ ${generateFactoryExtrasType(meta)}
98
+ }
99
+
100
+ export interface ${entity.scopesName} {
101
+ ${scopeMembers.map((member) => ts_poet.code`${member.name}: ${member.type};`)}
102
+ }
103
+
104
+ export type ${entity.scopeName} = ${require_symbols.Scope}<${entity.type}, ${entity.scopesName}>;
105
+
106
+ export const ${configName} = new ${require_symbols.ConfigApi}<${entity.type}, ${contextType}>();
107
+
108
+ export const ${scopeFnName} = ${require_symbols.newScopeFn}<${entity.type}, ${entity.scopeName}>("${entityName}");
109
+
110
+ ${generateDefaultValidationRules(dbMeta, meta, configName)}
111
+ ${generateDefaultValues(config, meta, configName)};
112
+
113
+ declare module "joist-core" {
114
+ interface TypeMap {
115
+ ${entityName}: {
116
+ entityType: ${entityName};
117
+ filterType: ${entity.filterName};
118
+ gqlFilterType: ${entity.graphqlFilterName};
119
+ orderType: ${entity.orderName};
120
+ optsType: ${entity.optsName};
121
+ fieldsType: ${entity.fieldsName};
122
+ optIdsType: ${entity.idsOptsName};
123
+ factoryExtrasType: ${entity.factoryExtrasName};
124
+ factoryOptsType: Parameters<typeof ${factoryMethod}>[1];
125
+ };
126
+ }
127
+ }
128
+
129
+ export abstract class ${entityName}Codegen extends ${base} implements ${require_symbols.ProjectEntity} {
130
+ static readonly tagName = "${tagName}";
131
+ static readonly metadata: ${require_symbols.EntityMetadata}<${entity.type}>;
132
+
133
+ declare readonly __type: {
134
+ ${baseEntity ? `0: "${baseEntity.name}",` : ""}
135
+ ${baseEntity ? 1 : 0}: "${entityName}",
136
+ };
137
+
138
+ ${relations.filter((r) => r.kind === "abstract").map((r) => {
139
+ return ts_poet.code`${relationDocBlock(fieldDocs, r.fieldName, entityName)}${r.line}${maybeComment(r.comment)}`;
140
+ })}
141
+ ${relations.filter((r) => r.kind === "concrete").map((r) => {
142
+ return ts_poet.code`${relationDocBlock(fieldDocs, r.fieldName, entityName)}readonly ${r.fieldName}: ${r.decl} = ${r.init};${maybeComment(r.comment)}`;
143
+ })}
144
+ ${relations.filter((r) => r.kind === "super").map((r) => {
145
+ return ts_poet.code`${relationDocBlock(fieldDocs, r.fieldName, entityName)}declare readonly ${r.fieldName}: ${r.decl};${maybeComment(r.comment)}`;
146
+ })}
147
+
148
+ get id(): ${entity.idName} {
149
+ return this.idMaybe || ${require_symbols.failNoIdYet}("${entityName}");
150
+ }
151
+
152
+ get idMaybe(): ${entity.idName} | undefined {
153
+ ${idMaybeCode}
154
+ }
155
+
156
+ get idTagged(): ${require_symbols.TaggedId} {
157
+ return this.idTaggedMaybe || ${require_symbols.failNoIdYet}("${entityName}");
158
+ }
159
+
160
+ get idTaggedMaybe(): ${require_symbols.TaggedId} | undefined {
161
+ return ${require_symbols.getField}(this, "id");
162
+ }
163
+
164
+ ${primitives}
165
+
166
+ ${require_tsdoc.tsdocComments.entity.setPartial}
167
+ set(opts: Partial<${entity.optsName}>): void {
168
+ ${require_symbols.setOpts}(this as any as ${entityName}, opts);
169
+ }
170
+
171
+ ${require_tsdoc.tsdocComments.entity.setPartial}
172
+ setPartial(opts: ${require_symbols.PartialOrNull}<${entity.optsName}>): void {
173
+ ${require_symbols.setOpts}(this as any as ${entityName}, opts as ${require_symbols.OptsOf}<${entityName}>, { partial: true });
174
+ }
175
+
176
+ ${require_tsdoc.tsdocComments.entity.setDeepPartial}
177
+ setDeepPartial(opts: ${require_symbols.DeepPartialOrNull}<${entityName}>): Promise<void> {
178
+ return ${require_symbols.updatePartial}(this as any as ${entityName}, opts);
179
+ }
180
+
181
+ ${require_tsdoc.tsdocComments.entity.changes}
182
+ get changes(): ${require_symbols.Changes}<${entityName}${maybeOtherTypeChanges}> {
183
+ return ${require_symbols.newChangesProxy}(this) as any;
184
+ }
185
+
186
+ ${maybeSoftDeleteMethods}
187
+
188
+ ${require_tsdoc.tsdocComments.entity.load}
189
+ load<U, V>(fn: (lens: ${require_symbols.Lens}<${entity.type}>) => ${require_symbols.Lens}<U, V>, opts: { sql?: boolean } = {}): Promise<V> {
190
+ return ${require_symbols.loadLens}(this as any as ${entityName}, fn, opts);
191
+ }
192
+
193
+ ${require_tsdoc.tsdocComments.entity.populate}
194
+ populate<const H extends ${require_symbols.LoadHint}<${entityName}>>(hint: H): Promise<${require_symbols.Loaded}<${entityName}, H>>;
195
+ populate<const H extends ${require_symbols.LoadHint}<${entityName}>>(opts: { hint: H, forceReload?: boolean }): Promise<${require_symbols.Loaded}<${entityName}, H>>;
196
+ populate<const H extends ${require_symbols.LoadHint}<${entityName}>, V>(hint: H, fn: (${varName}: Loaded<${entityName}, H>) => V): Promise<V>;
197
+ populate<const H extends ${require_symbols.LoadHint}<${entityName}>, V>(opts: { hint: H, forceReload?: boolean }, fn: (${varName}: Loaded<${entityName}, H>) => V): Promise<V>;
198
+ populate<const H extends ${require_symbols.LoadHint}<${entityName}>, V>(hintOrOpts: any, fn?: (${varName}: Loaded<${entityName}, H>) => V): Promise<${require_symbols.Loaded}<${entityName}, H> | V> {
199
+ return this.em.populate(this as any as ${entityName}, hintOrOpts, fn);
200
+ }
201
+
202
+ ${require_tsdoc.tsdocComments.entity.isLoaded}
203
+ isLoaded<const H extends ${require_symbols.LoadHint}<${entityName}>>(hint: H): this is ${require_symbols.Loaded}<${entityName}${maybeOtherLoaded}, H> {
204
+ return ${require_symbols.isLoaded}(this as any as ${entityName}, hint);
205
+ }
206
+
207
+ ${require_tsdoc.tsdocComments.entity.toJSON}
208
+ toJSON(): object;
209
+ toJSON<const H extends ${require_symbols.ToJsonHint}<${entityName}>>(hint: H): Promise<${require_symbols.JsonPayload}<${entityName}, H>>;
210
+ toJSON(hint?: any): object {
211
+ return !hint || typeof hint === "string" ? super.toJSON() : ${require_symbols.toJSON}(this, hint);
212
+ }
213
+ }
214
+ `;
215
+ }
216
+ function fieldHasDefaultValue(field) {
217
+ let { columnDefault } = field;
218
+ if (columnDefault === null) return false;
219
+ columnDefault = columnDefault.toString();
220
+ const fieldType = field.kind === "primitive" ? field.fieldType : "number";
221
+ return fieldType === "number" && !isNaN(parseInt(columnDefault)) || fieldType === "bigint" && !isNaN(parseInt(columnDefault)) || fieldType === "string" && /^'.*'$/.test(columnDefault) || fieldType === "boolean" && ["true", "false"].includes(columnDefault);
222
+ }
223
+ function generatePolymorphicTypes(meta) {
224
+ return meta.polymorphics.flatMap((pf) => [
225
+ ts_poet.code`export type ${pf.fieldType} = ${pf.components.map((c) => ts_poet.code`| ${c.otherEntity.type}`)};`,
226
+ ts_poet.code`export function get${pf.fieldType}Constructors(): ${require_symbols.MaybeAbstractEntityConstructor}<${pf.fieldType}>[] {
227
+ return [${pf.components.map((c) => ts_poet.code`${c.otherEntity.typeSymbol},`)}];
228
+ }`,
229
+ ts_poet.code`export function is${pf.fieldType}(maybeEntity: unknown): maybeEntity is ${pf.fieldType} {
230
+ return ${require_symbols.isEntity}(maybeEntity) && get${pf.fieldType}Constructors().some((type) => maybeEntity instanceof type);
231
+ }`
232
+ ]);
233
+ }
234
+ function generateDefaultValues(config, meta, configName) {
235
+ function notSync(field) {
236
+ return "derived" in field && field.derived !== "sync";
237
+ }
238
+ const primitives = meta.primitives.filter((field) => fieldHasDefaultValue(field)).filter(notSync).map(({ fieldName, columnDefault }) => {
239
+ return ts_poet.code`${configName}.setDefault("${fieldName}", ${columnDefault});`;
240
+ });
241
+ const pgEnums = meta.pgEnums.filter((field) => !!field.columnDefault).map(({ fieldName, columnDefault }) => {
242
+ return ts_poet.code`${configName}.setDefault("${fieldName}", ${columnDefault});`;
243
+ });
244
+ const enums = meta.enums.filter((field) => !!field.columnDefault && !field.isArray).filter(notSync).map(({ fieldName, columnDefault, enumRows, enumType, columnName }) => {
245
+ const defaultRow = enumRows.find((r) => r.id === Number(columnDefault)) || require_utils.fail(`Invalid default value ${columnDefault} for ${meta.tableName}.${columnName}`);
246
+ return ts_poet.code`${configName}.setDefault("${fieldName}", ${enumType}.${(0, change_case.pascalCase)(defaultRow.code)});`;
247
+ });
248
+ return [
249
+ ...primitives,
250
+ ...enums,
251
+ ...pgEnums
252
+ ];
253
+ }
254
+ function generateDefaultValidationRules(db, meta, configName) {
255
+ const rules = [
256
+ ...meta.primitives,
257
+ ...meta.enums,
258
+ ...meta.manyToOnes,
259
+ ...meta.polymorphics
260
+ ].filter((p) => p.notNull).map((p) => {
261
+ const { fieldName } = p;
262
+ const isReactive = "derived" in p && p.derived === "async";
263
+ if ("lazy" in p && p.lazy) return ts_poet.code`${configName}.addRule(${require_symbols.newRequiredLazyFieldRule}("${fieldName}"));`;
264
+ else if (isReactive) return ts_poet.code`${configName}.addRule("${fieldName}", ${require_symbols.newRequiredRule}("${fieldName}"));`;
265
+ else return ts_poet.code`${configName}.addRule(${require_symbols.newRequiredRule}("${fieldName}"));`;
266
+ });
267
+ if (meta.stiDiscriminatorField) {
268
+ const field = meta.enums.find((e) => e.fieldName === meta.stiDiscriminatorField) ?? require_utils.fail("STI field not found");
269
+ rules.push(ts_poet.code`${configName}.addRule(${require_symbols.cannotBeUpdated}("${field.fieldName}"));`);
270
+ }
271
+ const stiEntities = require_inheritance.getStiEntities(db.entities);
272
+ if (stiEntities.size > 0) for (const m2o of meta.manyToOnes) {
273
+ const target = stiEntities.get(m2o.otherEntity.name);
274
+ if (target && m2o.otherEntity.name !== target.base.name) rules.push(ts_poet.code`${configName}.addRule("${m2o.fieldName}", ${require_symbols.mustBeSubType}("${m2o.fieldName}"));`);
275
+ }
276
+ if (meta.baseType) meta.manyToOnes.filter((m2o) => meta.baseType?.manyToOnes?.find((o) => o.fieldName === m2o.fieldName && o.otherEntity.name !== m2o.otherEntity.name)).forEach((m2o) => {
277
+ rules.push(ts_poet.code`${configName}.addRule("${m2o.fieldName}", ${require_symbols.mustBeSubType}("${m2o.fieldName}"));`);
278
+ });
279
+ return rules;
280
+ }
281
+ function generateOptsFields(meta) {
282
+ const primitives = meta.primitives.map((field) => {
283
+ const { fieldName, fieldType, notNull, derived } = field;
284
+ if (derived) return ts_poet.code``;
285
+ return ts_poet.code`${fieldName}${maybeOptionalOrDefault(field)}: ${fieldType}${maybeUnionNull(notNull)};`;
286
+ });
287
+ const enums = meta.enums.map((field) => {
288
+ const { fieldName, enumType, notNull, isArray, derived } = field;
289
+ if (meta.stiDiscriminatorField === fieldName || derived) return ts_poet.code``;
290
+ else if (isArray) return ts_poet.code`${fieldName}?: ${enumType}[];`;
291
+ else return ts_poet.code`${fieldName}${maybeOptionalOrDefault(field)}: ${enumType}${maybeUnionNull(notNull)};`;
292
+ });
293
+ const pgEnums = meta.pgEnums.map((field) => {
294
+ const { fieldName, enumType, notNull } = field;
295
+ return ts_poet.code`${fieldName}${maybeOptionalOrDefault(field)}: ${enumType}${maybeUnionNull(notNull)};`;
296
+ });
297
+ const m2o = meta.manyToOnes.filter(({ derived }) => !derived).filter(({ fieldName }) => !meta.baseType?.manyToOnes.find((o) => o.fieldName === fieldName)).map((field) => {
298
+ const { fieldName, otherEntity, notNull } = field;
299
+ const maybeNull = maybeUnionNull(notNull);
300
+ return ts_poet.code`${fieldName}${maybeOptionalOrDefault(field)}: ${otherEntity.type} | ${otherEntity.idType} ${maybeNull};`;
301
+ });
302
+ const o2o = meta.oneToOnes.map(({ fieldName, otherEntity }) => {
303
+ return ts_poet.code`${fieldName}?: ${otherEntity.type} | null;`;
304
+ });
305
+ const o2m = meta.oneToManys.map(({ fieldName, otherEntity }) => {
306
+ return ts_poet.code`${fieldName}?: ${otherEntity.type}[];`;
307
+ });
308
+ const m2m = meta.manyToManys.filter(({ derived }) => !derived).map(({ fieldName, otherEntity }) => {
309
+ return ts_poet.code`${fieldName}?: ${otherEntity.type}[];`;
310
+ });
311
+ const m2mEnum = meta.manyToManyEnums.map(({ fieldName, enumType }) => {
312
+ return ts_poet.code`${fieldName}?: ${enumType}[];`;
313
+ });
314
+ const polys = meta.polymorphics.map((field) => {
315
+ const { fieldName, notNull, fieldType } = field;
316
+ return ts_poet.code`${fieldName}${maybeOptionalOrDefault(field)}: ${fieldType};`;
317
+ });
318
+ return [
319
+ ...primitives,
320
+ ...enums,
321
+ ...pgEnums,
322
+ ...m2o,
323
+ ...polys,
324
+ ...o2o,
325
+ ...o2m,
326
+ ...m2m,
327
+ ...m2mEnum
328
+ ];
329
+ }
330
+ function generateFieldsType(meta, idType) {
331
+ const id = ts_poet.code`id: { kind: "primitive"; type: ${idType}; unique: ${true}; nullable: never };`;
332
+ const primitives = meta.primitives.map((field) => {
333
+ const { fieldName, fieldType, notNull, unique, derived } = field;
334
+ return ts_poet.code`${fieldName}: { kind: "primitive"; type: ${fieldType}; unique: ${unique}; nullable: ${undefinedOrNever(notNull)}, derived: ${derived !== false} };`;
335
+ });
336
+ const enums = meta.enums.map((field) => {
337
+ const { fieldName, enumType, notNull, isArray } = field;
338
+ if (isArray) return ts_poet.code`${fieldName}: { kind: "enum"; type: ${enumType}[]; nullable: never };`;
339
+ else return ts_poet.code`${fieldName}: { kind: "enum"; type: ${enumType}; nullable: ${undefinedOrNever(notNull)} };`;
340
+ });
341
+ const pgEnums = meta.pgEnums.map(({ fieldName, enumType, notNull }) => {
342
+ const nullable = undefinedOrNever(notNull);
343
+ return ts_poet.code`${fieldName}: { kind: "enum"; type: ${enumType}; nullable: ${nullable}; native: true };`;
344
+ });
345
+ const m2o = meta.manyToOnes.map(({ fieldName, otherEntity, notNull, derived }) => {
346
+ return ts_poet.code`${fieldName}: { kind: "m2o"; type: ${otherEntity.type}; nullable: ${undefinedOrNever(notNull)}, derived: ${derived !== false} };`;
347
+ });
348
+ const polys = meta.polymorphics.map(({ fieldName, notNull, fieldType }) => {
349
+ return ts_poet.code`${fieldName}: { kind: "poly"; type: ${fieldType}; nullable: ${undefinedOrNever(notNull)} };`;
350
+ });
351
+ const m2m = meta.manyToManys.map(({ fieldName, otherEntity }) => {
352
+ return ts_poet.code`${fieldName}: { kind: "m2m"; type: ${otherEntity.type} };`;
353
+ });
354
+ const m2mEnum = meta.manyToManyEnums.map(({ fieldName, enumType }) => {
355
+ return ts_poet.code`${fieldName}: { kind: "m2mEnum"; type: ${enumType} };`;
356
+ });
357
+ const o2m = meta.oneToManys.map(({ fieldName, otherEntity }) => {
358
+ return ts_poet.code`${fieldName}: { kind: "o2m"; type: ${otherEntity.type} };`;
359
+ });
360
+ const o2o = meta.oneToOnes.map((field) => {
361
+ return ts_poet.code`${field.fieldName}: { kind: "o2o"; type: ${field.otherEntity.type} };`;
362
+ });
363
+ const lo2m = meta.largeOneToManys.map(({ fieldName, otherEntity }) => {
364
+ return ts_poet.code`${fieldName}: { kind: "o2m"; type: ${otherEntity.type} };`;
365
+ });
366
+ return [
367
+ id,
368
+ ...primitives,
369
+ ...enums,
370
+ ...pgEnums,
371
+ ...m2o,
372
+ ...polys,
373
+ ...m2m,
374
+ ...m2mEnum,
375
+ ...o2m,
376
+ ...o2o,
377
+ ...lo2m
378
+ ];
379
+ }
380
+ function generateOptIdsFields(meta) {
381
+ const m2o = meta.manyToOnes.filter(({ derived }) => !derived).map(({ fieldName, otherEntity }) => {
382
+ return ts_poet.code`${fieldName}Id?: ${otherEntity.idType} | null;`;
383
+ });
384
+ const o2o = meta.oneToOnes.map(({ fieldName, otherEntity }) => {
385
+ return ts_poet.code`${fieldName}Id?: ${otherEntity.idType} | null;`;
386
+ });
387
+ const o2m = meta.oneToManys.map(({ singularName, otherEntity }) => {
388
+ return ts_poet.code`${singularName}Ids?: ${otherEntity.idType}[] | null;`;
389
+ });
390
+ const m2m = meta.manyToManys.filter(({ derived }) => !derived).map(({ singularName, otherEntity }) => {
391
+ return ts_poet.code`${singularName}Ids?: ${otherEntity.idType}[] | null;`;
392
+ });
393
+ const polys = meta.polymorphics.map(({ fieldName, fieldType }) => {
394
+ return ts_poet.code`${fieldName}Id?: ${require_symbols.IdOf}<${fieldType}> | null;`;
395
+ });
396
+ return [
397
+ ...m2o,
398
+ ...polys,
399
+ ...o2o,
400
+ ...o2m,
401
+ ...m2m
402
+ ];
403
+ }
404
+ function generateFilterFields(metasByName, meta) {
405
+ const maybeId = meta.baseClassName ? [] : [ts_poet.code`id?: ${require_symbols.ValueFilter}<${meta.entity.idName}, never> | null;`];
406
+ const primitives = meta.primitives.map(({ fieldName, fieldType, notNull }) => {
407
+ if (fieldType === "boolean") return ts_poet.code`${fieldName}?: ${require_symbols.BooleanFilter}<${nullOrNever(notNull)}>;`;
408
+ else return ts_poet.code`${fieldName}?: ${require_symbols.ValueFilter}<${fieldType}, ${nullOrNever(notNull)}>;`;
409
+ });
410
+ const enums = meta.enums.map(({ fieldName, enumType, notNull, isArray }) => {
411
+ return ts_poet.code`${fieldName}?: ${require_symbols.ValueFilter}<${enumType}${isArray ? "[]" : ""}, ${nullOrNever(notNull)}>;`;
412
+ });
413
+ const pgEnums = meta.pgEnums.map(({ fieldName, enumType, notNull }) => {
414
+ return ts_poet.code`${fieldName}?: ${require_symbols.ValueFilter}<${enumType}, ${nullOrNever(notNull)}>;`;
415
+ });
416
+ const m2o = meta.manyToOnes.flatMap(({ fieldName, otherEntity, notNull }) => {
417
+ const otherMeta = metasByName[otherEntity.name] ?? require_utils.fail(`Could not find metadata for ${otherEntity.name}`);
418
+ return [ts_poet.code`${fieldName}?: ${require_symbols.EntityFilter}<${otherEntity.type}, ${otherEntity.idType}, ${require_symbols.FilterOf}<${otherEntity.type}>, ${nullOrNever(notNull)}>;`, ...otherMeta.subTypes.map((st) => {
419
+ return ts_poet.code`${fieldName}${st.name}?: ${require_symbols.EntityFilter}<${st.entity.type}, ${st.entity.idType}, ${require_symbols.FilterOf}<${st.entity.type}>, ${nullOrNever(notNull)}>;`;
420
+ })];
421
+ });
422
+ const o2o = meta.oneToOnes.map(({ fieldName, otherEntity }) => {
423
+ return ts_poet.code`${fieldName}?: ${require_symbols.EntityFilter}<${otherEntity.type}, ${otherEntity.idType}, ${require_symbols.FilterOf}<${otherEntity.type}>, null | undefined>;`;
424
+ });
425
+ const o2m = meta.oneToManys.flatMap(({ fieldName, otherEntity, otherColumnNotNull }) => {
426
+ const otherMeta = metasByName[otherEntity.name] ?? require_utils.fail(`Could not find metadata for ${otherEntity.name}`);
427
+ return [ts_poet.code`${fieldName}?: ${require_symbols.EntityFilter}<${otherEntity.type}, ${otherEntity.idType}, ${require_symbols.FilterOf}<${otherEntity.type}>, null | undefined>;`, ...otherMeta.subTypes.map((st) => {
428
+ return ts_poet.code`${fieldName}${st.name}?: ${require_symbols.EntityFilter}<${st.entity.type}, ${st.entity.idType}, ${require_symbols.FilterOf}<${st.entity.type}>, ${nullOrNever(otherColumnNotNull)}>;`;
429
+ })];
430
+ });
431
+ const m2m = meta.manyToManys.map(({ fieldName, otherEntity }) => {
432
+ return ts_poet.code`${fieldName}?: ${require_symbols.EntityFilter}<${otherEntity.type}, ${otherEntity.idType}, ${require_symbols.FilterOf}<${otherEntity.type}>, null | undefined>;`;
433
+ });
434
+ const m2mEnum = meta.manyToManyEnums.map(({ fieldName, enumType }) => {
435
+ return ts_poet.code`${fieldName}?: ${require_symbols.ValueFilter}<${enumType}, null | undefined>;`;
436
+ });
437
+ const polys = meta.polymorphics.flatMap(({ fieldName, fieldType, components, notNull }) => {
438
+ return [ts_poet.code`${fieldName}?: ${require_symbols.EntityFilter}<${fieldType}, ${require_symbols.IdOf}<${fieldType}>, never, ${nullOrNever(notNull)}>;`, ...components.map((comp) => {
439
+ const { type } = comp.otherEntity;
440
+ return ts_poet.code`${fieldName}${type}?: ${require_symbols.EntityFilter}<${type}, ${require_symbols.IdOf}<${type}>, ${require_symbols.FilterOf}<${type}>, null>;`;
441
+ })];
442
+ });
443
+ return [
444
+ ...maybeId,
445
+ ...primitives,
446
+ ...enums,
447
+ ...pgEnums,
448
+ ...m2o,
449
+ ...o2o,
450
+ ...o2m,
451
+ ...m2m,
452
+ ...m2mEnum,
453
+ ...polys
454
+ ];
455
+ }
456
+ function generateGraphQLFilterFields(metasByName, meta) {
457
+ const maybeId = meta.baseClassName ? [] : [ts_poet.code`id?: ${require_symbols.ValueGraphQLFilter}<${meta.entity.idName}>;`];
458
+ const primitives = meta.primitives.map(({ fieldName, fieldType }) => {
459
+ if (fieldType === "boolean") return ts_poet.code`${fieldName}?: ${require_symbols.BooleanGraphQLFilter};`;
460
+ else return ts_poet.code`${fieldName}?: ${require_symbols.ValueGraphQLFilter}<${fieldType}>;`;
461
+ });
462
+ const enums = meta.enums.map(({ fieldName, enumType, isArray }) => {
463
+ return ts_poet.code`${fieldName}?: ${require_symbols.ValueGraphQLFilter}<${enumType}${isArray ? "[]" : ""}>;`;
464
+ });
465
+ const pgEnums = meta.pgEnums.map(({ fieldName, enumType }) => {
466
+ return ts_poet.code`${fieldName}?: ${require_symbols.ValueGraphQLFilter}<${enumType}>;`;
467
+ });
468
+ const m2o = meta.manyToOnes.flatMap(({ fieldName, otherEntity, notNull }) => {
469
+ const otherMeta = metasByName[otherEntity.name];
470
+ return [
471
+ ts_poet.code`${fieldName}?: ${require_symbols.EntityGraphQLFilter}<${otherEntity.type}, ${otherEntity.idType}, ${require_symbols.GraphQLFilterOf}<${otherEntity.type}>, ${nullOrNever(notNull)}>;`,
472
+ ts_poet.code`${fieldName}Id?: ${require_symbols.ValueGraphQLFilter}<${otherEntity.idType}>;`,
473
+ ...otherMeta.subTypes.map((st) => {
474
+ return ts_poet.code`${fieldName}${st.name}?: ${require_symbols.EntityGraphQLFilter}<${st.entity.type}, ${st.entity.idType}, ${require_symbols.GraphQLFilterOf}<${st.entity.type}>, ${nullOrNever(notNull)}>;`;
475
+ })
476
+ ];
477
+ });
478
+ const o2o = meta.oneToOnes.map(({ fieldName, otherEntity }) => {
479
+ return ts_poet.code`${fieldName}?: ${require_symbols.EntityGraphQLFilter}<${otherEntity.type}, ${otherEntity.idType}, ${require_symbols.GraphQLFilterOf}<${otherEntity.type}>, null | undefined>;`;
480
+ });
481
+ const o2m = meta.oneToManys.flatMap(({ fieldName, otherEntity, otherColumnNotNull }) => {
482
+ const otherMeta = metasByName[otherEntity.name] ?? require_utils.fail(`Could not find metadata for ${otherEntity.name}`);
483
+ return [ts_poet.code`${fieldName}?: ${require_symbols.EntityGraphQLFilter}<${otherEntity.type}, ${otherEntity.idType}, ${require_symbols.GraphQLFilterOf}<${otherEntity.type}>, null | undefined>;`, ...otherMeta.subTypes.map((st) => {
484
+ return ts_poet.code`${fieldName}${st.name}?: ${require_symbols.EntityGraphQLFilter}<${st.entity.type}, ${st.entity.idType}, ${require_symbols.GraphQLFilterOf}<${st.entity.type}>, ${nullOrNever(otherColumnNotNull)}>;`;
485
+ })];
486
+ });
487
+ const m2m = meta.manyToManys.map(({ fieldName, otherEntity }) => {
488
+ return ts_poet.code`${fieldName}?: ${require_symbols.EntityGraphQLFilter}<${otherEntity.type}, ${otherEntity.idType}, ${require_symbols.GraphQLFilterOf}<${otherEntity.type}>, null | undefined>;`;
489
+ });
490
+ const m2mEnum = meta.manyToManyEnums.map(({ fieldName, enumType }) => {
491
+ return ts_poet.code`${fieldName}?: ${require_symbols.ValueGraphQLFilter}<${enumType}>;`;
492
+ });
493
+ const polys = meta.polymorphics.flatMap(({ fieldName, fieldType, components, notNull }) => {
494
+ return [
495
+ ts_poet.code`${fieldName}?: ${require_symbols.EntityGraphQLFilter}<${fieldType}, ${require_symbols.IdOf}<${fieldType}>, never, ${nullOrNever(notNull)}>;`,
496
+ ts_poet.code`${fieldName}Id?: ${require_symbols.ValueGraphQLFilter}<${require_symbols.IdOf}<${fieldType}>>;`,
497
+ ...components.map((comp) => {
498
+ const { type } = comp.otherEntity;
499
+ return ts_poet.code`${fieldName}${type}?: ${require_symbols.EntityGraphQLFilter}<${type}, ${require_symbols.IdOf}<${type}>, ${require_symbols.FilterOf}<${type}>, null>;`;
500
+ })
501
+ ];
502
+ });
503
+ return [
504
+ ...maybeId,
505
+ ...primitives,
506
+ ...enums,
507
+ ...pgEnums,
508
+ ...m2o,
509
+ ...o2o,
510
+ ...o2m,
511
+ ...m2m,
512
+ ...m2mEnum,
513
+ ...polys
514
+ ];
515
+ }
516
+ function generateOrderFields(meta) {
517
+ const maybeId = meta.baseClassName ? [] : [ts_poet.code`id?: ${require_symbols.OrderBy};`];
518
+ const primitives = meta.primitives.map(({ fieldName }) => {
519
+ return ts_poet.code`${fieldName}?: ${require_symbols.OrderBy};`;
520
+ });
521
+ const enums = meta.enums.map(({ fieldName }) => {
522
+ return ts_poet.code`${fieldName}?: ${require_symbols.OrderBy};`;
523
+ });
524
+ const pgEnums = meta.pgEnums.map(({ fieldName }) => {
525
+ return ts_poet.code`${fieldName}?: ${require_symbols.OrderBy};`;
526
+ });
527
+ const m2o = meta.manyToOnes.map(({ fieldName, otherEntity }) => {
528
+ return ts_poet.code`${fieldName}?: ${otherEntity.orderType};`;
529
+ });
530
+ return [
531
+ ...maybeId,
532
+ ...primitives,
533
+ ...enums,
534
+ ...pgEnums,
535
+ ...m2o
536
+ ];
537
+ }
538
+ function generateFactoryExtrasType(meta) {
539
+ function withName(fieldName) {
540
+ return `with${fieldName[0].toUpperCase() + fieldName.substring(1)}`;
541
+ }
542
+ const primitives = meta.primitives.filter((f) => f.derived === "async").map((field) => {
543
+ const { fieldName, fieldType, notNull } = field;
544
+ return ts_poet.code`${withName(fieldName)}?: ${fieldType}${maybeUnionNull(notNull)};`;
545
+ });
546
+ const enums = meta.enums.filter((f) => f.derived === "async").map((field) => {
547
+ const { fieldName, enumType, notNull, isArray } = field;
548
+ if (isArray) return ts_poet.code`${withName(fieldName)}?: ${enumType}[];`;
549
+ else return ts_poet.code`${withName(fieldName)}?: ${enumType}${maybeUnionNull(notNull)};`;
550
+ });
551
+ return [...primitives, ...enums];
552
+ }
553
+ function createPrimitives(meta, entity, fieldDocs) {
554
+ return meta.primitives.map((p) => {
555
+ const { fieldName, fieldType, notNull } = p;
556
+ const maybeOptional = notNull ? "" : " | undefined";
557
+ if (p.lazy) return ts_poet.code``;
558
+ let getter;
559
+ if (p.derived === "async") getter = ts_poet.code`
560
+ abstract readonly ${fieldName}: ${require_symbols.ReactiveField}<${entity.name}, ${p.fieldType}${maybeOptional}>;
561
+ `;
562
+ else if (p.derived === "sync") getter = ts_poet.code`
563
+ abstract get ${fieldName}(): ${fieldType}${maybeOptional};
564
+ `;
565
+ else if (p.zodSchema) getter = ts_poet.code`
566
+ get ${fieldName}(): ${require_symbols.Zod}.output<typeof ${p.zodSchema}>${maybeOptional} {
567
+ return ${require_symbols.getField}(this, "${fieldName}");
568
+ }
569
+ `;
570
+ else getter = ts_poet.code`
571
+ get ${fieldName}(): ${fieldType}${maybeOptional} {
572
+ return ${require_symbols.getField}(this, "${fieldName}");
573
+ }
574
+ `;
575
+ let setter;
576
+ const paramName = require_keywords.keywords.includes(fieldName) ? "value" : fieldName;
577
+ if (p.protected) setter = ts_poet.code`
578
+ protected set${(0, change_case.pascalCase)(fieldName)}(${paramName}: ${fieldType}${maybeOptional}) {
579
+ ${require_symbols.setField}(this, "${fieldName}", ${paramName});
580
+ }
581
+ `;
582
+ else if (p.derived) setter = "";
583
+ else if (p.superstruct) setter = ts_poet.code`
584
+ set ${fieldName}(value: ${fieldType}${maybeOptional}) {
585
+ if (value) {
586
+ ${require_symbols.SSAssert}(value, ${p.superstruct});
587
+ }
588
+ ${require_symbols.setField}(this, "${fieldName}", value);
589
+ }
590
+ `;
591
+ else if (p.zodSchema) setter = ts_poet.code`
592
+ set ${fieldName}(value: ${require_symbols.Zod}.input<typeof ${p.zodSchema}>${maybeOptional}) {
593
+ if (value) {
594
+ ${require_symbols.setField}(this, "${fieldName}", ${p.zodSchema}.parse(value));
595
+ } else {
596
+ ${require_symbols.setField}(this, "${fieldName}", value);
597
+ }
598
+ }
599
+ `;
600
+ else setter = ts_poet.code`
601
+ set ${fieldName}(${paramName}: ${fieldType}${maybeOptional}) {
602
+ ${require_symbols.setField}(this, "${fieldName}", ${paramName});
603
+ }
604
+ `;
605
+ return ts_poet.code`${fieldDocBlock(fieldDocs, fieldName, entity.name)}${getter} ${setter}`;
606
+ });
607
+ }
608
+ function createRegularEnums(meta, entity, fieldDocs) {
609
+ return meta.enums.filter((e) => !e.isArray).flatMap((e) => {
610
+ const { fieldName, enumType, enumDetailType, enumDetailsType, notNull, enumRows, derived } = e;
611
+ const maybeOptional = notNull ? "" : " | undefined";
612
+ const getByCode = ts_poet.code`${enumDetailType}.getByCode(this.${fieldName})`;
613
+ let getter;
614
+ if (derived === "async") getter = ts_poet.code`
615
+ abstract readonly ${fieldName}: ${require_symbols.ReactiveField}<${entity.name}, ${enumType}${maybeOptional}>;
616
+ `;
617
+ else if (derived === "sync") getter = ts_poet.code`
618
+ abstract get ${fieldName}(): ${enumType}${maybeOptional};
619
+ `;
620
+ else getter = ts_poet.code`
621
+ get ${fieldName}(): ${enumType}${maybeOptional} {
622
+ return ${require_symbols.getField}(this, "${fieldName}");
623
+ }
624
+
625
+ get ${fieldName}Details(): ${enumDetailsType}${maybeOptional} {
626
+ return ${notNull ? getByCode : ts_poet.code`this.${fieldName} ? ${getByCode} : undefined`};
627
+ }
628
+ `;
629
+ let setter;
630
+ if (derived) setter = ts_poet.code``;
631
+ else setter = ts_poet.code`
632
+ set ${fieldName}(${fieldName}: ${enumType}${maybeOptional}) {
633
+ ${require_symbols.setField}(this, "${fieldName}", ${fieldName});
634
+ }
635
+ `;
636
+ const codes = new Set(enumRows.map((r) => r.code));
637
+ const shouldPrefixAccessors = meta.enums.filter((other) => other !== e).some((other) => other.enumRows.some((r) => codes.has(r.code)));
638
+ const accessors = enumRows.map((row) => ts_poet.code`
639
+ get is${shouldPrefixAccessors ? (0, change_case.pascalCase)(fieldName) : ""}${(0, change_case.pascalCase)(row.code)}(): boolean {
640
+ return ${require_symbols.getField}(this, "${fieldName}") === ${enumType}.${(0, change_case.pascalCase)(row.code)};
641
+ }
642
+ `);
643
+ return [
644
+ ts_poet.code`${fieldDocBlock(fieldDocs, fieldName, entity.name)}${getter}`,
645
+ setter,
646
+ ...accessors
647
+ ];
648
+ });
649
+ }
650
+ function createArrayEnums(meta, fieldDocs) {
651
+ return meta.enums.filter((e) => e.isArray).flatMap((e) => {
652
+ const { fieldName, enumType, enumDetailType, enumDetailsType, enumRows } = e;
653
+ const getter = ts_poet.code`
654
+ get ${fieldName}(): ${enumType}[] {
655
+ return ${require_symbols.getField}(this, "${fieldName}") || [];
656
+ }
657
+
658
+ get ${fieldName}Details(): ${enumDetailsType}[] {
659
+ return this.${fieldName}.map(code => ${enumDetailType}.getByCode(code));
660
+ }
661
+ `;
662
+ const setter = ts_poet.code`
663
+ set ${fieldName}(${fieldName}: ${enumType}[]) {
664
+ ${require_symbols.setField}(this, "${fieldName}", ${fieldName});
665
+ }
666
+ `;
667
+ const codes = new Set(enumRows.map((r) => r.code));
668
+ const shouldPrefixAccessors = meta.enums.filter((other) => other !== e).some((other) => other.enumRows.some((r) => codes.has(r.code)));
669
+ const accessors = enumRows.map((row) => ts_poet.code`
670
+ get is${shouldPrefixAccessors ? (0, change_case.pascalCase)(fieldName) : ""}${(0, change_case.pascalCase)(row.code)}(): boolean {
671
+ return this.${fieldName}.includes(${enumType}.${(0, change_case.pascalCase)(row.code)});
672
+ }
673
+ `);
674
+ return [
675
+ ts_poet.code`${fieldDocBlock(fieldDocs, fieldName, meta.entity.name)}${getter}`,
676
+ setter,
677
+ ...accessors
678
+ ];
679
+ });
680
+ }
681
+ function createPgEnums(meta, fieldDocs) {
682
+ return meta.pgEnums.flatMap((e) => {
683
+ const { fieldName, enumType, enumValues, notNull } = e;
684
+ const maybeOptional = notNull ? "" : " | undefined";
685
+ const getter = ts_poet.code`
686
+ get ${fieldName}(): ${enumType}${maybeOptional} {
687
+ return ${require_symbols.getField}(this, "${fieldName}");
688
+ }
689
+ `;
690
+ const setter = ts_poet.code`
691
+ set ${fieldName}(${fieldName}: ${enumType}${maybeOptional}) {
692
+ ${require_symbols.setField}(this, "${fieldName}", ${fieldName});
693
+ }
694
+ `;
695
+ const codes = new Set(enumValues);
696
+ const shouldPrefixAccessors = meta.pgEnums.filter((other) => other !== e).some((other) => other.enumValues.some((r) => codes.has(r)));
697
+ const accessors = enumValues.map((row) => ts_poet.code`
698
+ get is${shouldPrefixAccessors ? (0, change_case.pascalCase)(fieldName) : ""}${(0, change_case.pascalCase)(row)}(): boolean {
699
+ return this.${fieldName} === ${enumType}.${(0, change_case.pascalCase)(row)};
700
+ }
701
+ `);
702
+ return [
703
+ ts_poet.code`${fieldDocBlock(fieldDocs, fieldName, meta.entity.name)}${getter}`,
704
+ setter,
705
+ ...accessors
706
+ ];
707
+ });
708
+ }
709
+ function createRelations(config, meta, entity) {
710
+ const m2o = meta.manyToOnes.map((m2o) => {
711
+ const { fieldName, otherEntity, otherFieldName, notNull } = m2o;
712
+ const maybeOptional = notNull ? "never" : "undefined";
713
+ if (m2o.derived === "async") return {
714
+ kind: "abstract",
715
+ fieldName,
716
+ line: ts_poet.code`abstract readonly ${fieldName}: ${require_symbols.ReactiveReference}<${entity.name}, ${otherEntity.type}, ${maybeOptional}>;`
717
+ };
718
+ return {
719
+ kind: "concrete",
720
+ fieldName,
721
+ decl: ts_poet.code`${require_symbols.ManyToOneReference}<${entity.type}, ${otherEntity.type}, ${maybeOptional}>`,
722
+ init: ts_poet.code`${require_symbols.hasOne}()`
723
+ };
724
+ });
725
+ const m2oBase = meta.baseType?.manyToOnes.filter((m2o) => !meta.manyToOnes.find((o) => o.fieldName === m2o.fieldName)).filter((m2o) => m2o.derived !== "async").map((m2o) => {
726
+ const { fieldName, otherEntity, notNull } = m2o;
727
+ const maybeOptional = notNull ? "never" : "undefined";
728
+ return {
729
+ kind: "super",
730
+ fieldName,
731
+ decl: ts_poet.code`${require_symbols.ManyToOneReference}<${entity.type}, ${otherEntity.type}, ${maybeOptional}>`
732
+ };
733
+ }) ?? [];
734
+ const m2oRecursive = meta.manyToOnes.filter((m2o) => m2o.otherEntity.name === meta.name).filter((m2o) => !(config.entities[meta.inheritanceType == "sti" && meta.baseClassName ? meta.baseClassName : meta.name]?.relations?.[m2o.fieldName]?.skipRecursiveRelations === true)).filter((m2o) => !m2o.derived).flatMap((m2o) => {
735
+ const { fieldName: m2oName, otherFieldName, otherEntity } = m2o;
736
+ const parentsField = `${plural(m2oName)}Recursive`;
737
+ const childrenField = meta.oneToOnes.find((o2o) => o2o.fieldName === otherFieldName) ? `${plural(otherFieldName)}Recursive` : `${otherFieldName}Recursive`;
738
+ return [{
739
+ kind: "concrete",
740
+ fieldName: parentsField,
741
+ decl: ts_poet.code`${require_symbols.ReadOnlyCollection}<${entity.type}, ${otherEntity.type}>`,
742
+ init: ts_poet.code`${require_symbols.hasRecursiveParents}("${m2oName}", "${childrenField}")`
743
+ }, {
744
+ kind: "concrete",
745
+ fieldName: childrenField,
746
+ decl: ts_poet.code`${require_symbols.ReadOnlyCollection}<${entity.type}, ${otherEntity.type}>`,
747
+ init: ts_poet.code`${require_symbols.hasRecursiveChildren}("${otherFieldName}", "${parentsField}")`
748
+ }];
749
+ });
750
+ const m2mRecursive = meta.manyToManys.filter((m2m) => m2m.otherEntity.name === meta.name).filter((m2m) => !m2m.derived).filter((m2m) => !(config.entities[meta.inheritanceType == "sti" && meta.baseClassName ? meta.baseClassName : meta.name]?.relations?.[m2m.fieldName]?.skipRecursiveRelations === true)).map((m2m) => {
751
+ const { fieldName, otherFieldName, otherEntity } = m2m;
752
+ return {
753
+ kind: "concrete",
754
+ fieldName: `${fieldName}Recursive`,
755
+ decl: ts_poet.code`${require_symbols.ReadOnlyCollection}<${entity.type}, ${otherEntity.type}>`,
756
+ init: ts_poet.code`${require_symbols.hasRecursiveM2m}("${fieldName}", "${otherFieldName}Recursive")`
757
+ };
758
+ });
759
+ return [
760
+ meta.oneToManys.map((o2m) => {
761
+ const { fieldName, otherEntity } = o2m;
762
+ return {
763
+ kind: "concrete",
764
+ fieldName,
765
+ decl: ts_poet.code`${require_symbols.Collection}<${entity.type}, ${otherEntity.type}>`,
766
+ init: ts_poet.code`${require_symbols.hasMany}()`
767
+ };
768
+ }),
769
+ meta.baseType?.oneToManys.filter((o2m) => !meta.oneToManys.find((o) => o.fieldName === o2m.fieldName)).map((o2m) => {
770
+ const { fieldName, otherEntity } = o2m;
771
+ return {
772
+ kind: "super",
773
+ fieldName,
774
+ decl: ts_poet.code`${require_symbols.Collection}<${entity.type}, ${otherEntity.type}>`
775
+ };
776
+ }) ?? [],
777
+ meta.largeOneToManys.map((o2m) => {
778
+ const { fieldName, otherEntity } = o2m;
779
+ return {
780
+ kind: "concrete",
781
+ fieldName,
782
+ decl: ts_poet.code`${require_symbols.LargeCollection}<${entity.type}, ${otherEntity.type}>`,
783
+ init: ts_poet.code`${require_symbols.hasLargeMany}()`
784
+ };
785
+ }),
786
+ m2o,
787
+ m2oBase,
788
+ m2oRecursive,
789
+ m2mRecursive,
790
+ meta.oneToOnes.map((o2o) => {
791
+ const { fieldName, otherEntity } = o2o;
792
+ return {
793
+ kind: "concrete",
794
+ fieldName,
795
+ decl: ts_poet.code`${require_symbols.OneToOneReference}<${entity.type}, ${otherEntity.type}>`,
796
+ init: ts_poet.code`${require_symbols.hasOneToOne}()`
797
+ };
798
+ }),
799
+ meta.baseType?.oneToOnes.map((o2o) => {
800
+ const { fieldName, otherEntity } = o2o;
801
+ return {
802
+ kind: "super",
803
+ fieldName,
804
+ decl: ts_poet.code`${require_symbols.OneToOneReference}<${entity.type}, ${otherEntity.type}>`
805
+ };
806
+ }) ?? [],
807
+ meta.manyToManys.map((m2m) => {
808
+ const { fieldName, otherEntity } = m2m;
809
+ const comment = `// ${m2m.joinTableName} ${m2m.columnName} ${m2m.otherColumnName}`;
810
+ if (m2m.derived === "async") return {
811
+ kind: "abstract",
812
+ fieldName,
813
+ line: ts_poet.code`abstract readonly ${fieldName}: ${require_symbols.ReactiveManyToMany}<${entity.name}, ${otherEntity.type}>;`,
814
+ comment
815
+ };
816
+ else if (m2m.derived === "otherSide") return {
817
+ kind: "concrete",
818
+ fieldName,
819
+ decl: ts_poet.code`${require_symbols.ReactiveManyToManyOtherSide}<${entity.type}, ${otherEntity.type}>`,
820
+ init: ts_poet.code`${require_symbols.hasReactiveManyToManyOtherSide}()`,
821
+ comment
822
+ };
823
+ else if (!m2m.derived) return {
824
+ kind: "concrete",
825
+ fieldName,
826
+ decl: ts_poet.code`${require_symbols.Collection}<${entity.type}, ${otherEntity.type}>`,
827
+ init: ts_poet.code`${require_symbols.hasManyToMany}()`,
828
+ comment
829
+ };
830
+ else require_utils.assertNever(m2m.derived);
831
+ }),
832
+ meta.baseType?.manyToManys.filter((m2m) => !m2m.derived).map((m2m) => {
833
+ const { fieldName, otherEntity } = m2m;
834
+ return {
835
+ kind: "super",
836
+ fieldName,
837
+ decl: ts_poet.code`${require_symbols.Collection}<${entity.type}, ${otherEntity.type}>`
838
+ };
839
+ }) ?? [],
840
+ meta.manyToManyEnums.map((m2m) => {
841
+ const { fieldName, enumType } = m2m;
842
+ const comment = `// ${m2m.joinTableName} ${m2m.columnName} ${m2m.otherColumnName}`;
843
+ return {
844
+ kind: "concrete",
845
+ fieldName,
846
+ decl: ts_poet.code`${require_symbols.EnumCollection}<${entity.type}, ${enumType}>`,
847
+ init: ts_poet.code`${require_symbols.hasEnumCollection}()`,
848
+ comment
849
+ };
850
+ }),
851
+ meta.baseType?.manyToManyEnums.map((m2m) => {
852
+ const { fieldName, enumType } = m2m;
853
+ return {
854
+ kind: "super",
855
+ fieldName,
856
+ decl: ts_poet.code`${require_symbols.EnumCollection}<${entity.type}, ${enumType}>`
857
+ };
858
+ }) ?? [],
859
+ meta.largeManyToManys.map((m2m) => {
860
+ const { joinTableName, fieldName, columnName, otherEntity, otherFieldName, otherColumnName } = m2m;
861
+ return {
862
+ kind: "concrete",
863
+ fieldName,
864
+ decl: ts_poet.code`${require_symbols.LargeCollection}<${entity.type}, ${otherEntity.type}>`,
865
+ init: ts_poet.code`
866
+ ${require_symbols.hasLargeManyToMany}(
867
+ "${joinTableName}",
868
+ "${columnName}",
869
+ "${otherFieldName}",
870
+ "${otherColumnName}",
871
+ ${m2m.hasJoinTableId},
872
+ );
873
+ `
874
+ };
875
+ }),
876
+ meta.polymorphics.map((p) => {
877
+ const { fieldName, notNull, fieldType } = p;
878
+ const maybeOptional = notNull ? "never" : "undefined";
879
+ return {
880
+ kind: "concrete",
881
+ fieldName,
882
+ decl: ts_poet.code`${require_symbols.PolymorphicReference}<${entity.type}, ${fieldType}, ${maybeOptional}>`,
883
+ init: ts_poet.code`${require_symbols.hasOnePolymorphic}()`
884
+ };
885
+ }),
886
+ meta.primitives.filter((p) => p.lazy).map((p) => {
887
+ const { fieldName, fieldType, notNull } = p;
888
+ const maybeOptional = notNull ? "" : " | undefined";
889
+ return {
890
+ kind: "concrete",
891
+ fieldName,
892
+ decl: ts_poet.code`${require_symbols.LazyField}<${entity.type}, ${fieldType}${maybeOptional}>`,
893
+ init: ts_poet.code`${require_symbols.hasLazyField}()`
894
+ };
895
+ })
896
+ ].flat();
897
+ }
898
+ /** Makes the field required if there is a `NOT NULL` and no db-or-config default. */
899
+ function maybeOptionalOrDefault(field) {
900
+ const hasDefault = field.kind !== "m2o" && field.kind !== "poly" && fieldHasDefaultValue(field) || field.hasConfigDefault;
901
+ return !field.notNull || hasDefault ? "?" : "";
902
+ }
903
+ function maybeUnionNull(notNull) {
904
+ return notNull ? "" : " | null";
905
+ }
906
+ function undefinedOrNever(notNull) {
907
+ return notNull ? "never" : "undefined";
908
+ }
909
+ function nullOrNever(notNull) {
910
+ return notNull ? "never" : "null";
911
+ }
912
+ /** Returns the nowUTC call for the deleted-at field's generated timestamp type. */
913
+ function nowUTCCall(config, field) {
914
+ if (!config.temporal) return ts_poet.code`${require_symbols.nowUTC}()`;
915
+ switch (field.columnType) {
916
+ case "date": return ts_poet.code`${require_symbols.nowUTC}("plainDate")`;
917
+ case "timestamp without time zone": return ts_poet.code`${require_symbols.nowUTC}("plainDateTime")`;
918
+ case "timestamp with time zone": return ts_poet.code`${require_symbols.nowUTC}("zonedDateTime")`;
919
+ default: return require_utils.fail(`Unsupported deleted-at column type ${field.columnType}`);
920
+ }
921
+ }
922
+ /** Prefixes the comment with a newline, so it gets its own line. */
923
+ function maybeComment(comment) {
924
+ return comment ? ` ${comment}\n` : "";
925
+ }
926
+ /**
927
+ * Renders a field's `.md` doc (plus its `@generated` tag) as a bare JSDoc block, or `""` if undocumented.
928
+ *
929
+ * Reuses the same {@link buildJSDocBlock} formatter the `.md` sync uses for hand-written `Entity.ts`
930
+ * members. Used directly before a getter template (which supplies its own leading newline), so the
931
+ * JSDoc lands immediately above the getter with no intervening blank line.
932
+ */
933
+ function fieldDocBlock(fieldDocs, fieldName, entityName) {
934
+ const doc = fieldDocs[fieldName];
935
+ return doc ? require_docs_parsing.buildJSDocBlock(`${doc}\n${require_docs_parsing.generatedTag(entityName)}`, 0) : "";
936
+ }
937
+ /** Like {@link fieldDocBlock} but wrapped in newlines, i.e. for inline `readonly x = ...` relation decls. */
938
+ function relationDocBlock(fieldDocs, fieldName, entityName) {
939
+ const block = fieldDocBlock(fieldDocs, fieldName, entityName);
940
+ return block ? `\n${block}\n` : "";
941
+ }
942
+ function getIdType(config) {
943
+ switch (config.idType) {
944
+ case "untagged-string":
945
+ case "tagged-string":
946
+ case void 0: return "string";
947
+ case "number": return "number";
948
+ default: return require_utils.assertNever(config.idType);
949
+ }
950
+ }
951
+ //#endregion
952
+ exports.generateEntityCodegenFile = generateEntityCodegenFile;
953
+ exports.getIdType = getIdType;
954
+
955
+ //# sourceMappingURL=generateEntityCodegenFile.cjs.map