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

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 +951 -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 +734 -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,951 @@
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 lo2m = meta.largeOneToManys.map(({ fieldName, otherEntity }) => {
361
+ return ts_poet.code`${fieldName}: { kind: "o2m"; type: ${otherEntity.type} };`;
362
+ });
363
+ return [
364
+ id,
365
+ ...primitives,
366
+ ...enums,
367
+ ...pgEnums,
368
+ ...m2o,
369
+ ...polys,
370
+ ...m2m,
371
+ ...m2mEnum,
372
+ ...o2m,
373
+ ...lo2m
374
+ ];
375
+ }
376
+ function generateOptIdsFields(meta) {
377
+ const m2o = meta.manyToOnes.filter(({ derived }) => !derived).map(({ fieldName, otherEntity }) => {
378
+ return ts_poet.code`${fieldName}Id?: ${otherEntity.idType} | null;`;
379
+ });
380
+ const o2o = meta.oneToOnes.map(({ fieldName, otherEntity }) => {
381
+ return ts_poet.code`${fieldName}Id?: ${otherEntity.idType} | null;`;
382
+ });
383
+ const o2m = meta.oneToManys.map(({ singularName, otherEntity }) => {
384
+ return ts_poet.code`${singularName}Ids?: ${otherEntity.idType}[] | null;`;
385
+ });
386
+ const m2m = meta.manyToManys.filter(({ derived }) => !derived).map(({ singularName, otherEntity }) => {
387
+ return ts_poet.code`${singularName}Ids?: ${otherEntity.idType}[] | null;`;
388
+ });
389
+ const polys = meta.polymorphics.map(({ fieldName, fieldType }) => {
390
+ return ts_poet.code`${fieldName}Id?: ${require_symbols.IdOf}<${fieldType}> | null;`;
391
+ });
392
+ return [
393
+ ...m2o,
394
+ ...polys,
395
+ ...o2o,
396
+ ...o2m,
397
+ ...m2m
398
+ ];
399
+ }
400
+ function generateFilterFields(metasByName, meta) {
401
+ const maybeId = meta.baseClassName ? [] : [ts_poet.code`id?: ${require_symbols.ValueFilter}<${meta.entity.idName}, never> | null;`];
402
+ const primitives = meta.primitives.map(({ fieldName, fieldType, notNull }) => {
403
+ if (fieldType === "boolean") return ts_poet.code`${fieldName}?: ${require_symbols.BooleanFilter}<${nullOrNever(notNull)}>;`;
404
+ else return ts_poet.code`${fieldName}?: ${require_symbols.ValueFilter}<${fieldType}, ${nullOrNever(notNull)}>;`;
405
+ });
406
+ const enums = meta.enums.map(({ fieldName, enumType, notNull, isArray }) => {
407
+ return ts_poet.code`${fieldName}?: ${require_symbols.ValueFilter}<${enumType}${isArray ? "[]" : ""}, ${nullOrNever(notNull)}>;`;
408
+ });
409
+ const pgEnums = meta.pgEnums.map(({ fieldName, enumType, notNull }) => {
410
+ return ts_poet.code`${fieldName}?: ${require_symbols.ValueFilter}<${enumType}, ${nullOrNever(notNull)}>;`;
411
+ });
412
+ const m2o = meta.manyToOnes.flatMap(({ fieldName, otherEntity, notNull }) => {
413
+ const otherMeta = metasByName[otherEntity.name] ?? require_utils.fail(`Could not find metadata for ${otherEntity.name}`);
414
+ return [ts_poet.code`${fieldName}?: ${require_symbols.EntityFilter}<${otherEntity.type}, ${otherEntity.idType}, ${require_symbols.FilterOf}<${otherEntity.type}>, ${nullOrNever(notNull)}>;`, ...otherMeta.subTypes.map((st) => {
415
+ return ts_poet.code`${fieldName}${st.name}?: ${require_symbols.EntityFilter}<${st.entity.type}, ${st.entity.idType}, ${require_symbols.FilterOf}<${st.entity.type}>, ${nullOrNever(notNull)}>;`;
416
+ })];
417
+ });
418
+ const o2o = meta.oneToOnes.map(({ fieldName, otherEntity }) => {
419
+ return ts_poet.code`${fieldName}?: ${require_symbols.EntityFilter}<${otherEntity.type}, ${otherEntity.idType}, ${require_symbols.FilterOf}<${otherEntity.type}>, null | undefined>;`;
420
+ });
421
+ const o2m = meta.oneToManys.flatMap(({ fieldName, otherEntity, otherColumnNotNull }) => {
422
+ const otherMeta = metasByName[otherEntity.name] ?? require_utils.fail(`Could not find metadata for ${otherEntity.name}`);
423
+ return [ts_poet.code`${fieldName}?: ${require_symbols.EntityFilter}<${otherEntity.type}, ${otherEntity.idType}, ${require_symbols.FilterOf}<${otherEntity.type}>, null | undefined>;`, ...otherMeta.subTypes.map((st) => {
424
+ return ts_poet.code`${fieldName}${st.name}?: ${require_symbols.EntityFilter}<${st.entity.type}, ${st.entity.idType}, ${require_symbols.FilterOf}<${st.entity.type}>, ${nullOrNever(otherColumnNotNull)}>;`;
425
+ })];
426
+ });
427
+ const m2m = meta.manyToManys.map(({ fieldName, otherEntity }) => {
428
+ return ts_poet.code`${fieldName}?: ${require_symbols.EntityFilter}<${otherEntity.type}, ${otherEntity.idType}, ${require_symbols.FilterOf}<${otherEntity.type}>, null | undefined>;`;
429
+ });
430
+ const m2mEnum = meta.manyToManyEnums.map(({ fieldName, enumType }) => {
431
+ return ts_poet.code`${fieldName}?: ${require_symbols.ValueFilter}<${enumType}, null | undefined>;`;
432
+ });
433
+ const polys = meta.polymorphics.flatMap(({ fieldName, fieldType, components, notNull }) => {
434
+ return [ts_poet.code`${fieldName}?: ${require_symbols.EntityFilter}<${fieldType}, ${require_symbols.IdOf}<${fieldType}>, never, ${nullOrNever(notNull)}>;`, ...components.map((comp) => {
435
+ const { type } = comp.otherEntity;
436
+ return ts_poet.code`${fieldName}${type}?: ${require_symbols.EntityFilter}<${type}, ${require_symbols.IdOf}<${type}>, ${require_symbols.FilterOf}<${type}>, null>;`;
437
+ })];
438
+ });
439
+ return [
440
+ ...maybeId,
441
+ ...primitives,
442
+ ...enums,
443
+ ...pgEnums,
444
+ ...m2o,
445
+ ...o2o,
446
+ ...o2m,
447
+ ...m2m,
448
+ ...m2mEnum,
449
+ ...polys
450
+ ];
451
+ }
452
+ function generateGraphQLFilterFields(metasByName, meta) {
453
+ const maybeId = meta.baseClassName ? [] : [ts_poet.code`id?: ${require_symbols.ValueGraphQLFilter}<${meta.entity.idName}>;`];
454
+ const primitives = meta.primitives.map(({ fieldName, fieldType }) => {
455
+ if (fieldType === "boolean") return ts_poet.code`${fieldName}?: ${require_symbols.BooleanGraphQLFilter};`;
456
+ else return ts_poet.code`${fieldName}?: ${require_symbols.ValueGraphQLFilter}<${fieldType}>;`;
457
+ });
458
+ const enums = meta.enums.map(({ fieldName, enumType, isArray }) => {
459
+ return ts_poet.code`${fieldName}?: ${require_symbols.ValueGraphQLFilter}<${enumType}${isArray ? "[]" : ""}>;`;
460
+ });
461
+ const pgEnums = meta.pgEnums.map(({ fieldName, enumType }) => {
462
+ return ts_poet.code`${fieldName}?: ${require_symbols.ValueGraphQLFilter}<${enumType}>;`;
463
+ });
464
+ const m2o = meta.manyToOnes.flatMap(({ fieldName, otherEntity, notNull }) => {
465
+ const otherMeta = metasByName[otherEntity.name];
466
+ return [
467
+ ts_poet.code`${fieldName}?: ${require_symbols.EntityGraphQLFilter}<${otherEntity.type}, ${otherEntity.idType}, ${require_symbols.GraphQLFilterOf}<${otherEntity.type}>, ${nullOrNever(notNull)}>;`,
468
+ ts_poet.code`${fieldName}Id?: ${require_symbols.ValueGraphQLFilter}<${otherEntity.idType}>;`,
469
+ ...otherMeta.subTypes.map((st) => {
470
+ return ts_poet.code`${fieldName}${st.name}?: ${require_symbols.EntityGraphQLFilter}<${st.entity.type}, ${st.entity.idType}, ${require_symbols.GraphQLFilterOf}<${st.entity.type}>, ${nullOrNever(notNull)}>;`;
471
+ })
472
+ ];
473
+ });
474
+ const o2o = meta.oneToOnes.map(({ fieldName, otherEntity }) => {
475
+ return ts_poet.code`${fieldName}?: ${require_symbols.EntityGraphQLFilter}<${otherEntity.type}, ${otherEntity.idType}, ${require_symbols.GraphQLFilterOf}<${otherEntity.type}>, null | undefined>;`;
476
+ });
477
+ const o2m = meta.oneToManys.flatMap(({ fieldName, otherEntity, otherColumnNotNull }) => {
478
+ const otherMeta = metasByName[otherEntity.name] ?? require_utils.fail(`Could not find metadata for ${otherEntity.name}`);
479
+ return [ts_poet.code`${fieldName}?: ${require_symbols.EntityGraphQLFilter}<${otherEntity.type}, ${otherEntity.idType}, ${require_symbols.GraphQLFilterOf}<${otherEntity.type}>, null | undefined>;`, ...otherMeta.subTypes.map((st) => {
480
+ return ts_poet.code`${fieldName}${st.name}?: ${require_symbols.EntityGraphQLFilter}<${st.entity.type}, ${st.entity.idType}, ${require_symbols.GraphQLFilterOf}<${st.entity.type}>, ${nullOrNever(otherColumnNotNull)}>;`;
481
+ })];
482
+ });
483
+ const m2m = meta.manyToManys.map(({ fieldName, otherEntity }) => {
484
+ return ts_poet.code`${fieldName}?: ${require_symbols.EntityGraphQLFilter}<${otherEntity.type}, ${otherEntity.idType}, ${require_symbols.GraphQLFilterOf}<${otherEntity.type}>, null | undefined>;`;
485
+ });
486
+ const m2mEnum = meta.manyToManyEnums.map(({ fieldName, enumType }) => {
487
+ return ts_poet.code`${fieldName}?: ${require_symbols.ValueGraphQLFilter}<${enumType}>;`;
488
+ });
489
+ const polys = meta.polymorphics.flatMap(({ fieldName, fieldType, components, notNull }) => {
490
+ return [
491
+ ts_poet.code`${fieldName}?: ${require_symbols.EntityGraphQLFilter}<${fieldType}, ${require_symbols.IdOf}<${fieldType}>, never, ${nullOrNever(notNull)}>;`,
492
+ ts_poet.code`${fieldName}Id?: ${require_symbols.ValueGraphQLFilter}<${require_symbols.IdOf}<${fieldType}>>;`,
493
+ ...components.map((comp) => {
494
+ const { type } = comp.otherEntity;
495
+ return ts_poet.code`${fieldName}${type}?: ${require_symbols.EntityGraphQLFilter}<${type}, ${require_symbols.IdOf}<${type}>, ${require_symbols.FilterOf}<${type}>, null>;`;
496
+ })
497
+ ];
498
+ });
499
+ return [
500
+ ...maybeId,
501
+ ...primitives,
502
+ ...enums,
503
+ ...pgEnums,
504
+ ...m2o,
505
+ ...o2o,
506
+ ...o2m,
507
+ ...m2m,
508
+ ...m2mEnum,
509
+ ...polys
510
+ ];
511
+ }
512
+ function generateOrderFields(meta) {
513
+ const maybeId = meta.baseClassName ? [] : [ts_poet.code`id?: ${require_symbols.OrderBy};`];
514
+ const primitives = meta.primitives.map(({ fieldName }) => {
515
+ return ts_poet.code`${fieldName}?: ${require_symbols.OrderBy};`;
516
+ });
517
+ const enums = meta.enums.map(({ fieldName }) => {
518
+ return ts_poet.code`${fieldName}?: ${require_symbols.OrderBy};`;
519
+ });
520
+ const pgEnums = meta.pgEnums.map(({ fieldName }) => {
521
+ return ts_poet.code`${fieldName}?: ${require_symbols.OrderBy};`;
522
+ });
523
+ const m2o = meta.manyToOnes.map(({ fieldName, otherEntity }) => {
524
+ return ts_poet.code`${fieldName}?: ${otherEntity.orderType};`;
525
+ });
526
+ return [
527
+ ...maybeId,
528
+ ...primitives,
529
+ ...enums,
530
+ ...pgEnums,
531
+ ...m2o
532
+ ];
533
+ }
534
+ function generateFactoryExtrasType(meta) {
535
+ function withName(fieldName) {
536
+ return `with${fieldName[0].toUpperCase() + fieldName.substring(1)}`;
537
+ }
538
+ const primitives = meta.primitives.filter((f) => f.derived === "async").map((field) => {
539
+ const { fieldName, fieldType, notNull } = field;
540
+ return ts_poet.code`${withName(fieldName)}?: ${fieldType}${maybeUnionNull(notNull)};`;
541
+ });
542
+ const enums = meta.enums.filter((f) => f.derived === "async").map((field) => {
543
+ const { fieldName, enumType, notNull, isArray } = field;
544
+ if (isArray) return ts_poet.code`${withName(fieldName)}?: ${enumType}[];`;
545
+ else return ts_poet.code`${withName(fieldName)}?: ${enumType}${maybeUnionNull(notNull)};`;
546
+ });
547
+ return [...primitives, ...enums];
548
+ }
549
+ function createPrimitives(meta, entity, fieldDocs) {
550
+ return meta.primitives.map((p) => {
551
+ const { fieldName, fieldType, notNull } = p;
552
+ const maybeOptional = notNull ? "" : " | undefined";
553
+ if (p.lazy) return ts_poet.code``;
554
+ let getter;
555
+ if (p.derived === "async") getter = ts_poet.code`
556
+ abstract readonly ${fieldName}: ${require_symbols.ReactiveField}<${entity.name}, ${p.fieldType}${maybeOptional}>;
557
+ `;
558
+ else if (p.derived === "sync") getter = ts_poet.code`
559
+ abstract get ${fieldName}(): ${fieldType}${maybeOptional};
560
+ `;
561
+ else if (p.zodSchema) getter = ts_poet.code`
562
+ get ${fieldName}(): ${require_symbols.Zod}.output<typeof ${p.zodSchema}>${maybeOptional} {
563
+ return ${require_symbols.getField}(this, "${fieldName}");
564
+ }
565
+ `;
566
+ else getter = ts_poet.code`
567
+ get ${fieldName}(): ${fieldType}${maybeOptional} {
568
+ return ${require_symbols.getField}(this, "${fieldName}");
569
+ }
570
+ `;
571
+ let setter;
572
+ const paramName = require_keywords.keywords.includes(fieldName) ? "value" : fieldName;
573
+ if (p.protected) setter = ts_poet.code`
574
+ protected set${(0, change_case.pascalCase)(fieldName)}(${paramName}: ${fieldType}${maybeOptional}) {
575
+ ${require_symbols.setField}(this, "${fieldName}", ${paramName});
576
+ }
577
+ `;
578
+ else if (p.derived) setter = "";
579
+ else if (p.superstruct) setter = ts_poet.code`
580
+ set ${fieldName}(value: ${fieldType}${maybeOptional}) {
581
+ if (value) {
582
+ ${require_symbols.SSAssert}(value, ${p.superstruct});
583
+ }
584
+ ${require_symbols.setField}(this, "${fieldName}", value);
585
+ }
586
+ `;
587
+ else if (p.zodSchema) setter = ts_poet.code`
588
+ set ${fieldName}(value: ${require_symbols.Zod}.input<typeof ${p.zodSchema}>${maybeOptional}) {
589
+ if (value) {
590
+ ${require_symbols.setField}(this, "${fieldName}", ${p.zodSchema}.parse(value));
591
+ } else {
592
+ ${require_symbols.setField}(this, "${fieldName}", value);
593
+ }
594
+ }
595
+ `;
596
+ else setter = ts_poet.code`
597
+ set ${fieldName}(${paramName}: ${fieldType}${maybeOptional}) {
598
+ ${require_symbols.setField}(this, "${fieldName}", ${paramName});
599
+ }
600
+ `;
601
+ return ts_poet.code`${fieldDocBlock(fieldDocs, fieldName, entity.name)}${getter} ${setter}`;
602
+ });
603
+ }
604
+ function createRegularEnums(meta, entity, fieldDocs) {
605
+ return meta.enums.filter((e) => !e.isArray).flatMap((e) => {
606
+ const { fieldName, enumType, enumDetailType, enumDetailsType, notNull, enumRows, derived } = e;
607
+ const maybeOptional = notNull ? "" : " | undefined";
608
+ const getByCode = ts_poet.code`${enumDetailType}.getByCode(this.${fieldName})`;
609
+ let getter;
610
+ if (derived === "async") getter = ts_poet.code`
611
+ abstract readonly ${fieldName}: ${require_symbols.ReactiveField}<${entity.name}, ${enumType}${maybeOptional}>;
612
+ `;
613
+ else if (derived === "sync") getter = ts_poet.code`
614
+ abstract get ${fieldName}(): ${enumType}${maybeOptional};
615
+ `;
616
+ else getter = ts_poet.code`
617
+ get ${fieldName}(): ${enumType}${maybeOptional} {
618
+ return ${require_symbols.getField}(this, "${fieldName}");
619
+ }
620
+
621
+ get ${fieldName}Details(): ${enumDetailsType}${maybeOptional} {
622
+ return ${notNull ? getByCode : ts_poet.code`this.${fieldName} ? ${getByCode} : undefined`};
623
+ }
624
+ `;
625
+ let setter;
626
+ if (derived) setter = ts_poet.code``;
627
+ else setter = ts_poet.code`
628
+ set ${fieldName}(${fieldName}: ${enumType}${maybeOptional}) {
629
+ ${require_symbols.setField}(this, "${fieldName}", ${fieldName});
630
+ }
631
+ `;
632
+ const codes = new Set(enumRows.map((r) => r.code));
633
+ const shouldPrefixAccessors = meta.enums.filter((other) => other !== e).some((other) => other.enumRows.some((r) => codes.has(r.code)));
634
+ const accessors = enumRows.map((row) => ts_poet.code`
635
+ get is${shouldPrefixAccessors ? (0, change_case.pascalCase)(fieldName) : ""}${(0, change_case.pascalCase)(row.code)}(): boolean {
636
+ return ${require_symbols.getField}(this, "${fieldName}") === ${enumType}.${(0, change_case.pascalCase)(row.code)};
637
+ }
638
+ `);
639
+ return [
640
+ ts_poet.code`${fieldDocBlock(fieldDocs, fieldName, entity.name)}${getter}`,
641
+ setter,
642
+ ...accessors
643
+ ];
644
+ });
645
+ }
646
+ function createArrayEnums(meta, fieldDocs) {
647
+ return meta.enums.filter((e) => e.isArray).flatMap((e) => {
648
+ const { fieldName, enumType, enumDetailType, enumDetailsType, enumRows } = e;
649
+ const getter = ts_poet.code`
650
+ get ${fieldName}(): ${enumType}[] {
651
+ return ${require_symbols.getField}(this, "${fieldName}") || [];
652
+ }
653
+
654
+ get ${fieldName}Details(): ${enumDetailsType}[] {
655
+ return this.${fieldName}.map(code => ${enumDetailType}.getByCode(code));
656
+ }
657
+ `;
658
+ const setter = ts_poet.code`
659
+ set ${fieldName}(${fieldName}: ${enumType}[]) {
660
+ ${require_symbols.setField}(this, "${fieldName}", ${fieldName});
661
+ }
662
+ `;
663
+ const codes = new Set(enumRows.map((r) => r.code));
664
+ const shouldPrefixAccessors = meta.enums.filter((other) => other !== e).some((other) => other.enumRows.some((r) => codes.has(r.code)));
665
+ const accessors = enumRows.map((row) => ts_poet.code`
666
+ get is${shouldPrefixAccessors ? (0, change_case.pascalCase)(fieldName) : ""}${(0, change_case.pascalCase)(row.code)}(): boolean {
667
+ return this.${fieldName}.includes(${enumType}.${(0, change_case.pascalCase)(row.code)});
668
+ }
669
+ `);
670
+ return [
671
+ ts_poet.code`${fieldDocBlock(fieldDocs, fieldName, meta.entity.name)}${getter}`,
672
+ setter,
673
+ ...accessors
674
+ ];
675
+ });
676
+ }
677
+ function createPgEnums(meta, fieldDocs) {
678
+ return meta.pgEnums.flatMap((e) => {
679
+ const { fieldName, enumType, enumValues, notNull } = e;
680
+ const maybeOptional = notNull ? "" : " | undefined";
681
+ const getter = ts_poet.code`
682
+ get ${fieldName}(): ${enumType}${maybeOptional} {
683
+ return ${require_symbols.getField}(this, "${fieldName}");
684
+ }
685
+ `;
686
+ const setter = ts_poet.code`
687
+ set ${fieldName}(${fieldName}: ${enumType}${maybeOptional}) {
688
+ ${require_symbols.setField}(this, "${fieldName}", ${fieldName});
689
+ }
690
+ `;
691
+ const codes = new Set(enumValues);
692
+ const shouldPrefixAccessors = meta.pgEnums.filter((other) => other !== e).some((other) => other.enumValues.some((r) => codes.has(r)));
693
+ const accessors = enumValues.map((row) => ts_poet.code`
694
+ get is${shouldPrefixAccessors ? (0, change_case.pascalCase)(fieldName) : ""}${(0, change_case.pascalCase)(row)}(): boolean {
695
+ return this.${fieldName} === ${enumType}.${(0, change_case.pascalCase)(row)};
696
+ }
697
+ `);
698
+ return [
699
+ ts_poet.code`${fieldDocBlock(fieldDocs, fieldName, meta.entity.name)}${getter}`,
700
+ setter,
701
+ ...accessors
702
+ ];
703
+ });
704
+ }
705
+ function createRelations(config, meta, entity) {
706
+ const m2o = meta.manyToOnes.map((m2o) => {
707
+ const { fieldName, otherEntity, otherFieldName, notNull } = m2o;
708
+ const maybeOptional = notNull ? "never" : "undefined";
709
+ if (m2o.derived === "async") return {
710
+ kind: "abstract",
711
+ fieldName,
712
+ line: ts_poet.code`abstract readonly ${fieldName}: ${require_symbols.ReactiveReference}<${entity.name}, ${otherEntity.type}, ${maybeOptional}>;`
713
+ };
714
+ return {
715
+ kind: "concrete",
716
+ fieldName,
717
+ decl: ts_poet.code`${require_symbols.ManyToOneReference}<${entity.type}, ${otherEntity.type}, ${maybeOptional}>`,
718
+ init: ts_poet.code`${require_symbols.hasOne}()`
719
+ };
720
+ });
721
+ const m2oBase = meta.baseType?.manyToOnes.filter((m2o) => !meta.manyToOnes.find((o) => o.fieldName === m2o.fieldName)).filter((m2o) => m2o.derived !== "async").map((m2o) => {
722
+ const { fieldName, otherEntity, notNull } = m2o;
723
+ const maybeOptional = notNull ? "never" : "undefined";
724
+ return {
725
+ kind: "super",
726
+ fieldName,
727
+ decl: ts_poet.code`${require_symbols.ManyToOneReference}<${entity.type}, ${otherEntity.type}, ${maybeOptional}>`
728
+ };
729
+ }) ?? [];
730
+ 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) => {
731
+ const { fieldName: m2oName, otherFieldName, otherEntity } = m2o;
732
+ const parentsField = `${plural(m2oName)}Recursive`;
733
+ const childrenField = meta.oneToOnes.find((o2o) => o2o.fieldName === otherFieldName) ? `${plural(otherFieldName)}Recursive` : `${otherFieldName}Recursive`;
734
+ return [{
735
+ kind: "concrete",
736
+ fieldName: parentsField,
737
+ decl: ts_poet.code`${require_symbols.ReadOnlyCollection}<${entity.type}, ${otherEntity.type}>`,
738
+ init: ts_poet.code`${require_symbols.hasRecursiveParents}("${m2oName}", "${childrenField}")`
739
+ }, {
740
+ kind: "concrete",
741
+ fieldName: childrenField,
742
+ decl: ts_poet.code`${require_symbols.ReadOnlyCollection}<${entity.type}, ${otherEntity.type}>`,
743
+ init: ts_poet.code`${require_symbols.hasRecursiveChildren}("${otherFieldName}", "${parentsField}")`
744
+ }];
745
+ });
746
+ 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) => {
747
+ const { fieldName, otherFieldName, otherEntity } = m2m;
748
+ return {
749
+ kind: "concrete",
750
+ fieldName: `${fieldName}Recursive`,
751
+ decl: ts_poet.code`${require_symbols.ReadOnlyCollection}<${entity.type}, ${otherEntity.type}>`,
752
+ init: ts_poet.code`${require_symbols.hasRecursiveM2m}("${fieldName}", "${otherFieldName}Recursive")`
753
+ };
754
+ });
755
+ return [
756
+ meta.oneToManys.map((o2m) => {
757
+ const { fieldName, otherEntity } = o2m;
758
+ return {
759
+ kind: "concrete",
760
+ fieldName,
761
+ decl: ts_poet.code`${require_symbols.Collection}<${entity.type}, ${otherEntity.type}>`,
762
+ init: ts_poet.code`${require_symbols.hasMany}()`
763
+ };
764
+ }),
765
+ meta.baseType?.oneToManys.filter((o2m) => !meta.oneToManys.find((o) => o.fieldName === o2m.fieldName)).map((o2m) => {
766
+ const { fieldName, otherEntity } = o2m;
767
+ return {
768
+ kind: "super",
769
+ fieldName,
770
+ decl: ts_poet.code`${require_symbols.Collection}<${entity.type}, ${otherEntity.type}>`
771
+ };
772
+ }) ?? [],
773
+ meta.largeOneToManys.map((o2m) => {
774
+ const { fieldName, otherEntity } = o2m;
775
+ return {
776
+ kind: "concrete",
777
+ fieldName,
778
+ decl: ts_poet.code`${require_symbols.LargeCollection}<${entity.type}, ${otherEntity.type}>`,
779
+ init: ts_poet.code`${require_symbols.hasLargeMany}()`
780
+ };
781
+ }),
782
+ m2o,
783
+ m2oBase,
784
+ m2oRecursive,
785
+ m2mRecursive,
786
+ meta.oneToOnes.map((o2o) => {
787
+ const { fieldName, otherEntity } = o2o;
788
+ return {
789
+ kind: "concrete",
790
+ fieldName,
791
+ decl: ts_poet.code`${require_symbols.OneToOneReference}<${entity.type}, ${otherEntity.type}>`,
792
+ init: ts_poet.code`${require_symbols.hasOneToOne}()`
793
+ };
794
+ }),
795
+ meta.baseType?.oneToOnes.map((o2o) => {
796
+ const { fieldName, otherEntity } = o2o;
797
+ return {
798
+ kind: "super",
799
+ fieldName,
800
+ decl: ts_poet.code`${require_symbols.OneToOneReference}<${entity.type}, ${otherEntity.type}>`
801
+ };
802
+ }) ?? [],
803
+ meta.manyToManys.map((m2m) => {
804
+ const { fieldName, otherEntity } = m2m;
805
+ const comment = `// ${m2m.joinTableName} ${m2m.columnName} ${m2m.otherColumnName}`;
806
+ if (m2m.derived === "async") return {
807
+ kind: "abstract",
808
+ fieldName,
809
+ line: ts_poet.code`abstract readonly ${fieldName}: ${require_symbols.ReactiveManyToMany}<${entity.name}, ${otherEntity.type}>;`,
810
+ comment
811
+ };
812
+ else if (m2m.derived === "otherSide") return {
813
+ kind: "concrete",
814
+ fieldName,
815
+ decl: ts_poet.code`${require_symbols.ReactiveManyToManyOtherSide}<${entity.type}, ${otherEntity.type}>`,
816
+ init: ts_poet.code`${require_symbols.hasReactiveManyToManyOtherSide}()`,
817
+ comment
818
+ };
819
+ else if (!m2m.derived) return {
820
+ kind: "concrete",
821
+ fieldName,
822
+ decl: ts_poet.code`${require_symbols.Collection}<${entity.type}, ${otherEntity.type}>`,
823
+ init: ts_poet.code`${require_symbols.hasManyToMany}()`,
824
+ comment
825
+ };
826
+ else require_utils.assertNever(m2m.derived);
827
+ }),
828
+ meta.baseType?.manyToManys.filter((m2m) => !m2m.derived).map((m2m) => {
829
+ const { fieldName, otherEntity } = m2m;
830
+ return {
831
+ kind: "super",
832
+ fieldName,
833
+ decl: ts_poet.code`${require_symbols.Collection}<${entity.type}, ${otherEntity.type}>`
834
+ };
835
+ }) ?? [],
836
+ meta.manyToManyEnums.map((m2m) => {
837
+ const { fieldName, enumType } = m2m;
838
+ const comment = `// ${m2m.joinTableName} ${m2m.columnName} ${m2m.otherColumnName}`;
839
+ return {
840
+ kind: "concrete",
841
+ fieldName,
842
+ decl: ts_poet.code`${require_symbols.EnumCollection}<${entity.type}, ${enumType}>`,
843
+ init: ts_poet.code`${require_symbols.hasEnumCollection}()`,
844
+ comment
845
+ };
846
+ }),
847
+ meta.baseType?.manyToManyEnums.map((m2m) => {
848
+ const { fieldName, enumType } = m2m;
849
+ return {
850
+ kind: "super",
851
+ fieldName,
852
+ decl: ts_poet.code`${require_symbols.EnumCollection}<${entity.type}, ${enumType}>`
853
+ };
854
+ }) ?? [],
855
+ meta.largeManyToManys.map((m2m) => {
856
+ const { joinTableName, fieldName, columnName, otherEntity, otherFieldName, otherColumnName } = m2m;
857
+ return {
858
+ kind: "concrete",
859
+ fieldName,
860
+ decl: ts_poet.code`${require_symbols.LargeCollection}<${entity.type}, ${otherEntity.type}>`,
861
+ init: ts_poet.code`
862
+ ${require_symbols.hasLargeManyToMany}(
863
+ "${joinTableName}",
864
+ "${columnName}",
865
+ "${otherFieldName}",
866
+ "${otherColumnName}",
867
+ ${m2m.hasJoinTableId},
868
+ );
869
+ `
870
+ };
871
+ }),
872
+ meta.polymorphics.map((p) => {
873
+ const { fieldName, notNull, fieldType } = p;
874
+ const maybeOptional = notNull ? "never" : "undefined";
875
+ return {
876
+ kind: "concrete",
877
+ fieldName,
878
+ decl: ts_poet.code`${require_symbols.PolymorphicReference}<${entity.type}, ${fieldType}, ${maybeOptional}>`,
879
+ init: ts_poet.code`${require_symbols.hasOnePolymorphic}()`
880
+ };
881
+ }),
882
+ meta.primitives.filter((p) => p.lazy).map((p) => {
883
+ const { fieldName, fieldType, notNull } = p;
884
+ const maybeOptional = notNull ? "" : " | undefined";
885
+ return {
886
+ kind: "concrete",
887
+ fieldName,
888
+ decl: ts_poet.code`${require_symbols.LazyField}<${entity.type}, ${fieldType}${maybeOptional}>`,
889
+ init: ts_poet.code`${require_symbols.hasLazyField}()`
890
+ };
891
+ })
892
+ ].flat();
893
+ }
894
+ /** Makes the field required if there is a `NOT NULL` and no db-or-config default. */
895
+ function maybeOptionalOrDefault(field) {
896
+ const hasDefault = field.kind !== "m2o" && field.kind !== "poly" && fieldHasDefaultValue(field) || field.hasConfigDefault;
897
+ return !field.notNull || hasDefault ? "?" : "";
898
+ }
899
+ function maybeUnionNull(notNull) {
900
+ return notNull ? "" : " | null";
901
+ }
902
+ function undefinedOrNever(notNull) {
903
+ return notNull ? "never" : "undefined";
904
+ }
905
+ function nullOrNever(notNull) {
906
+ return notNull ? "never" : "null";
907
+ }
908
+ /** Returns the nowUTC call for the deleted-at field's generated timestamp type. */
909
+ function nowUTCCall(config, field) {
910
+ if (!config.temporal) return ts_poet.code`${require_symbols.nowUTC}()`;
911
+ switch (field.columnType) {
912
+ case "date": return ts_poet.code`${require_symbols.nowUTC}("plainDate")`;
913
+ case "timestamp without time zone": return ts_poet.code`${require_symbols.nowUTC}("plainDateTime")`;
914
+ case "timestamp with time zone": return ts_poet.code`${require_symbols.nowUTC}("zonedDateTime")`;
915
+ default: return require_utils.fail(`Unsupported deleted-at column type ${field.columnType}`);
916
+ }
917
+ }
918
+ /** Prefixes the comment with a newline, so it gets its own line. */
919
+ function maybeComment(comment) {
920
+ return comment ? ` ${comment}\n` : "";
921
+ }
922
+ /**
923
+ * Renders a field's `.md` doc (plus its `@generated` tag) as a bare JSDoc block, or `""` if undocumented.
924
+ *
925
+ * Reuses the same {@link buildJSDocBlock} formatter the `.md` sync uses for hand-written `Entity.ts`
926
+ * members. Used directly before a getter template (which supplies its own leading newline), so the
927
+ * JSDoc lands immediately above the getter with no intervening blank line.
928
+ */
929
+ function fieldDocBlock(fieldDocs, fieldName, entityName) {
930
+ const doc = fieldDocs[fieldName];
931
+ return doc ? require_docs_parsing.buildJSDocBlock(`${doc}\n${require_docs_parsing.generatedTag(entityName)}`, 0) : "";
932
+ }
933
+ /** Like {@link fieldDocBlock} but wrapped in newlines, i.e. for inline `readonly x = ...` relation decls. */
934
+ function relationDocBlock(fieldDocs, fieldName, entityName) {
935
+ const block = fieldDocBlock(fieldDocs, fieldName, entityName);
936
+ return block ? `\n${block}\n` : "";
937
+ }
938
+ function getIdType(config) {
939
+ switch (config.idType) {
940
+ case "untagged-string":
941
+ case "tagged-string":
942
+ case void 0: return "string";
943
+ case "number": return "number";
944
+ default: return require_utils.assertNever(config.idType);
945
+ }
946
+ }
947
+ //#endregion
948
+ exports.generateEntityCodegenFile = generateEntityCodegenFile;
949
+ exports.getIdType = getIdType;
950
+
951
+ //# sourceMappingURL=generateEntityCodegenFile.cjs.map