@hanzo/cms-drizzle 3.85.2

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 (599) hide show
  1. package/LICENSE.md +22 -0
  2. package/README.md +3 -0
  3. package/dist/count.d.ts +3 -0
  4. package/dist/count.d.ts.map +1 -0
  5. package/dist/count.js +26 -0
  6. package/dist/count.js.map +1 -0
  7. package/dist/countGlobalVersions.d.ts +3 -0
  8. package/dist/countGlobalVersions.d.ts.map +1 -0
  9. package/dist/countGlobalVersions.js +28 -0
  10. package/dist/countGlobalVersions.js.map +1 -0
  11. package/dist/countVersions.d.ts +3 -0
  12. package/dist/countVersions.d.ts.map +1 -0
  13. package/dist/countVersions.js +28 -0
  14. package/dist/countVersions.js.map +1 -0
  15. package/dist/create.d.ts +3 -0
  16. package/dist/create.d.ts.map +1 -0
  17. package/dist/create.js +28 -0
  18. package/dist/create.js.map +1 -0
  19. package/dist/createGlobal.d.ts +4 -0
  20. package/dist/createGlobal.d.ts.map +1 -0
  21. package/dist/createGlobal.js +28 -0
  22. package/dist/createGlobal.js.map +1 -0
  23. package/dist/createGlobalVersion.d.ts +4 -0
  24. package/dist/createGlobalVersion.d.ts.map +1 -0
  25. package/dist/createGlobalVersion.js +49 -0
  26. package/dist/createGlobalVersion.js.map +1 -0
  27. package/dist/createTableName.d.ts +31 -0
  28. package/dist/createTableName.d.ts.map +1 -0
  29. package/dist/createTableName.js +37 -0
  30. package/dist/createTableName.js.map +1 -0
  31. package/dist/createVersion.d.ts +4 -0
  32. package/dist/createVersion.d.ts.map +1 -0
  33. package/dist/createVersion.js +65 -0
  34. package/dist/createVersion.js.map +1 -0
  35. package/dist/deleteMany.d.ts +3 -0
  36. package/dist/deleteMany.d.ts.map +1 -0
  37. package/dist/deleteMany.js +51 -0
  38. package/dist/deleteMany.js.map +1 -0
  39. package/dist/deleteOne.d.ts +3 -0
  40. package/dist/deleteOne.d.ts.map +1 -0
  41. package/dist/deleteOne.js +67 -0
  42. package/dist/deleteOne.js.map +1 -0
  43. package/dist/deleteVersions.d.ts +3 -0
  44. package/dist/deleteVersions.d.ts.map +1 -0
  45. package/dist/deleteVersions.js +52 -0
  46. package/dist/deleteVersions.js.map +1 -0
  47. package/dist/destroy.d.ts +3 -0
  48. package/dist/destroy.d.ts.map +1 -0
  49. package/dist/destroy.js +17 -0
  50. package/dist/destroy.js.map +1 -0
  51. package/dist/exports/postgres.d.ts +16 -0
  52. package/dist/exports/postgres.d.ts.map +1 -0
  53. package/dist/exports/postgres.js +17 -0
  54. package/dist/exports/postgres.js.map +1 -0
  55. package/dist/exports/sqlite.d.ts +13 -0
  56. package/dist/exports/sqlite.d.ts.map +1 -0
  57. package/dist/exports/sqlite.js +14 -0
  58. package/dist/exports/sqlite.js.map +1 -0
  59. package/dist/exports/types-deprecated.d.ts +150 -0
  60. package/dist/exports/types-deprecated.d.ts.map +1 -0
  61. package/dist/exports/types-deprecated.js +5 -0
  62. package/dist/exports/types-deprecated.js.map +1 -0
  63. package/dist/find/buildFindManyArgs.d.ts +27 -0
  64. package/dist/find/buildFindManyArgs.d.ts.map +1 -0
  65. package/dist/find/buildFindManyArgs.js +96 -0
  66. package/dist/find/buildFindManyArgs.js.map +1 -0
  67. package/dist/find/chainMethods.d.ts +20 -0
  68. package/dist/find/chainMethods.d.ts.map +1 -0
  69. package/dist/find/chainMethods.js +16 -0
  70. package/dist/find/chainMethods.js.map +1 -0
  71. package/dist/find/findMany.d.ts +23 -0
  72. package/dist/find/findMany.d.ts.map +1 -0
  73. package/dist/find/findMany.js +173 -0
  74. package/dist/find/findMany.js.map +1 -0
  75. package/dist/find/traverseFields.d.ts +34 -0
  76. package/dist/find/traverseFields.d.ts.map +1 -0
  77. package/dist/find/traverseFields.js +653 -0
  78. package/dist/find/traverseFields.js.map +1 -0
  79. package/dist/find.d.ts +3 -0
  80. package/dist/find.d.ts.map +1 -0
  81. package/dist/find.js +25 -0
  82. package/dist/find.js.map +1 -0
  83. package/dist/findDistinct.d.ts +3 -0
  84. package/dist/findDistinct.d.ts.map +1 -0
  85. package/dist/findDistinct.js +135 -0
  86. package/dist/findDistinct.js.map +1 -0
  87. package/dist/findGlobal.d.ts +3 -0
  88. package/dist/findGlobal.d.ts.map +1 -0
  89. package/dist/findGlobal.js +24 -0
  90. package/dist/findGlobal.js.map +1 -0
  91. package/dist/findGlobalVersions.d.ts +3 -0
  92. package/dist/findGlobalVersions.d.ts.map +1 -0
  93. package/dist/findGlobalVersions.js +24 -0
  94. package/dist/findGlobalVersions.js.map +1 -0
  95. package/dist/findOne.d.ts +4 -0
  96. package/dist/findOne.d.ts.map +1 -0
  97. package/dist/findOne.js +25 -0
  98. package/dist/findOne.js.map +1 -0
  99. package/dist/findVersions.d.ts +3 -0
  100. package/dist/findVersions.d.ts.map +1 -0
  101. package/dist/findVersions.js +25 -0
  102. package/dist/findVersions.js.map +1 -0
  103. package/dist/index.d.ts +62 -0
  104. package/dist/index.d.ts.map +1 -0
  105. package/dist/index.js +61 -0
  106. package/dist/index.js.map +1 -0
  107. package/dist/migrate.d.ts +3 -0
  108. package/dist/migrate.d.ts.map +1 -0
  109. package/dist/migrate.js +98 -0
  110. package/dist/migrate.js.map +1 -0
  111. package/dist/migrateDown.d.ts +3 -0
  112. package/dist/migrateDown.d.ts.map +1 -0
  113. package/dist/migrateDown.js +64 -0
  114. package/dist/migrateDown.js.map +1 -0
  115. package/dist/migrateFresh.d.ts +8 -0
  116. package/dist/migrateFresh.d.ts.map +1 -0
  117. package/dist/migrateFresh.js +77 -0
  118. package/dist/migrateFresh.js.map +1 -0
  119. package/dist/migrateRefresh.d.ts +6 -0
  120. package/dist/migrateRefresh.d.ts.map +1 -0
  121. package/dist/migrateRefresh.js +104 -0
  122. package/dist/migrateRefresh.js.map +1 -0
  123. package/dist/migrateReset.d.ts +6 -0
  124. package/dist/migrateReset.d.ts.map +1 -0
  125. package/dist/migrateReset.js +86 -0
  126. package/dist/migrateReset.js.map +1 -0
  127. package/dist/migrateStatus.d.ts +3 -0
  128. package/dist/migrateStatus.d.ts.map +1 -0
  129. package/dist/migrateStatus.js +44 -0
  130. package/dist/migrateStatus.js.map +1 -0
  131. package/dist/postgres/columnToCodeConverter.d.ts +3 -0
  132. package/dist/postgres/columnToCodeConverter.d.ts.map +1 -0
  133. package/dist/postgres/columnToCodeConverter.js +93 -0
  134. package/dist/postgres/columnToCodeConverter.js.map +1 -0
  135. package/dist/postgres/countDistinct.d.ts +3 -0
  136. package/dist/postgres/countDistinct.d.ts.map +1 -0
  137. package/dist/postgres/countDistinct.js +24 -0
  138. package/dist/postgres/countDistinct.js.map +1 -0
  139. package/dist/postgres/createDatabase.d.ts +14 -0
  140. package/dist/postgres/createDatabase.d.ts.map +1 -0
  141. package/dist/postgres/createDatabase.js +76 -0
  142. package/dist/postgres/createDatabase.js.map +1 -0
  143. package/dist/postgres/createExtensions.d.ts +3 -0
  144. package/dist/postgres/createExtensions.d.ts.map +1 -0
  145. package/dist/postgres/createExtensions.js +16 -0
  146. package/dist/postgres/createExtensions.js.map +1 -0
  147. package/dist/postgres/createJSONQuery/index.d.ts +3 -0
  148. package/dist/postgres/createJSONQuery/index.d.ts.map +1 -0
  149. package/dist/postgres/createJSONQuery/index.js +67 -0
  150. package/dist/postgres/createJSONQuery/index.js.map +1 -0
  151. package/dist/postgres/defaultSnapshot.d.ts +3 -0
  152. package/dist/postgres/defaultSnapshot.d.ts.map +1 -0
  153. package/dist/postgres/defaultSnapshot.js +20 -0
  154. package/dist/postgres/defaultSnapshot.js.map +1 -0
  155. package/dist/postgres/deleteWhere.d.ts +3 -0
  156. package/dist/postgres/deleteWhere.d.ts.map +1 -0
  157. package/dist/postgres/deleteWhere.js +6 -0
  158. package/dist/postgres/deleteWhere.js.map +1 -0
  159. package/dist/postgres/dropDatabase.d.ts +3 -0
  160. package/dist/postgres/dropDatabase.d.ts.map +1 -0
  161. package/dist/postgres/dropDatabase.js +9 -0
  162. package/dist/postgres/dropDatabase.js.map +1 -0
  163. package/dist/postgres/execute.d.ts +3 -0
  164. package/dist/postgres/execute.d.ts.map +1 -0
  165. package/dist/postgres/execute.js +11 -0
  166. package/dist/postgres/execute.js.map +1 -0
  167. package/dist/postgres/init.d.ts +3 -0
  168. package/dist/postgres/init.d.ts.map +1 -0
  169. package/dist/postgres/init.js +41 -0
  170. package/dist/postgres/init.js.map +1 -0
  171. package/dist/postgres/insert.d.ts +3 -0
  172. package/dist/postgres/insert.d.ts.map +1 -0
  173. package/dist/postgres/insert.js +12 -0
  174. package/dist/postgres/insert.js.map +1 -0
  175. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.d.ts +19 -0
  176. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.d.ts.map +1 -0
  177. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js +173 -0
  178. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js.map +1 -0
  179. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/traverseFields.d.ts +11 -0
  180. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/traverseFields.d.ts.map +1 -0
  181. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/traverseFields.js +151 -0
  182. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/traverseFields.js.map +1 -0
  183. package/dist/postgres/predefinedMigrations/v2-v3/groupUpSQLStatements.d.ts +3 -0
  184. package/dist/postgres/predefinedMigrations/v2-v3/groupUpSQLStatements.d.ts.map +1 -0
  185. package/dist/postgres/predefinedMigrations/v2-v3/groupUpSQLStatements.js +114 -0
  186. package/dist/postgres/predefinedMigrations/v2-v3/groupUpSQLStatements.js.map +1 -0
  187. package/dist/postgres/predefinedMigrations/v2-v3/index.d.ts +23 -0
  188. package/dist/postgres/predefinedMigrations/v2-v3/index.d.ts.map +1 -0
  189. package/dist/postgres/predefinedMigrations/v2-v3/index.js +275 -0
  190. package/dist/postgres/predefinedMigrations/v2-v3/index.js.map +1 -0
  191. package/dist/postgres/predefinedMigrations/v2-v3/migrateRelationships.d.ts +19 -0
  192. package/dist/postgres/predefinedMigrations/v2-v3/migrateRelationships.d.ts.map +1 -0
  193. package/dist/postgres/predefinedMigrations/v2-v3/migrateRelationships.js +64 -0
  194. package/dist/postgres/predefinedMigrations/v2-v3/migrateRelationships.js.map +1 -0
  195. package/dist/postgres/predefinedMigrations/v2-v3/traverseFields.d.ts +22 -0
  196. package/dist/postgres/predefinedMigrations/v2-v3/traverseFields.d.ts.map +1 -0
  197. package/dist/postgres/predefinedMigrations/v2-v3/traverseFields.js +64 -0
  198. package/dist/postgres/predefinedMigrations/v2-v3/traverseFields.js.map +1 -0
  199. package/dist/postgres/predefinedMigrations/v2-v3/types.d.ts +9 -0
  200. package/dist/postgres/predefinedMigrations/v2-v3/types.d.ts.map +1 -0
  201. package/dist/postgres/predefinedMigrations/v2-v3/types.js +6 -0
  202. package/dist/postgres/predefinedMigrations/v2-v3/types.js.map +1 -0
  203. package/dist/postgres/requireDrizzleKit.d.ts +3 -0
  204. package/dist/postgres/requireDrizzleKit.d.ts.map +1 -0
  205. package/dist/postgres/requireDrizzleKit.js +13 -0
  206. package/dist/postgres/requireDrizzleKit.js.map +1 -0
  207. package/dist/postgres/schema/buildDrizzleTable.d.ts +7 -0
  208. package/dist/postgres/schema/buildDrizzleTable.d.ts.map +1 -0
  209. package/dist/postgres/schema/buildDrizzleTable.js +157 -0
  210. package/dist/postgres/schema/buildDrizzleTable.js.map +1 -0
  211. package/dist/postgres/schema/geometryColumn.d.ts +11 -0
  212. package/dist/postgres/schema/geometryColumn.d.ts.map +1 -0
  213. package/dist/postgres/schema/geometryColumn.js +18 -0
  214. package/dist/postgres/schema/geometryColumn.js.map +1 -0
  215. package/dist/postgres/schema/setColumnID.d.ts +3 -0
  216. package/dist/postgres/schema/setColumnID.d.ts.map +1 -0
  217. package/dist/postgres/schema/setColumnID.js +47 -0
  218. package/dist/postgres/schema/setColumnID.js.map +1 -0
  219. package/dist/postgres/types.d.ts +199 -0
  220. package/dist/postgres/types.d.ts.map +1 -0
  221. package/dist/postgres/types.js +3 -0
  222. package/dist/postgres/types.js.map +1 -0
  223. package/dist/queries/addJoinTable.d.ts +13 -0
  224. package/dist/queries/addJoinTable.d.ts.map +1 -0
  225. package/dist/queries/addJoinTable.js +15 -0
  226. package/dist/queries/addJoinTable.js.map +1 -0
  227. package/dist/queries/buildAndOrConditions.d.ts +21 -0
  228. package/dist/queries/buildAndOrConditions.d.ts.map +1 -0
  229. package/dist/queries/buildAndOrConditions.js +30 -0
  230. package/dist/queries/buildAndOrConditions.js.map +1 -0
  231. package/dist/queries/buildOrderBy.d.ts +22 -0
  232. package/dist/queries/buildOrderBy.d.ts.map +1 -0
  233. package/dist/queries/buildOrderBy.js +71 -0
  234. package/dist/queries/buildOrderBy.js.map +1 -0
  235. package/dist/queries/buildQuery.d.ts +35 -0
  236. package/dist/queries/buildQuery.d.ts.map +1 -0
  237. package/dist/queries/buildQuery.js +46 -0
  238. package/dist/queries/buildQuery.js.map +1 -0
  239. package/dist/queries/getTableAlias.d.ts +13 -0
  240. package/dist/queries/getTableAlias.d.ts.map +1 -0
  241. package/dist/queries/getTableAlias.js +20 -0
  242. package/dist/queries/getTableAlias.js.map +1 -0
  243. package/dist/queries/getTableColumnFromPath.d.ts +58 -0
  244. package/dist/queries/getTableColumnFromPath.d.ts.map +1 -0
  245. package/dist/queries/getTableColumnFromPath.js +793 -0
  246. package/dist/queries/getTableColumnFromPath.js.map +1 -0
  247. package/dist/queries/operatorMap.d.ts +6 -0
  248. package/dist/queries/operatorMap.d.ts.map +1 -0
  249. package/dist/queries/operatorMap.js +22 -0
  250. package/dist/queries/operatorMap.js.map +1 -0
  251. package/dist/queries/parseParams.d.ts +24 -0
  252. package/dist/queries/parseParams.d.ts.map +1 -0
  253. package/dist/queries/parseParams.js +356 -0
  254. package/dist/queries/parseParams.js.map +1 -0
  255. package/dist/queries/sanitizeQueryValue.d.ts +26 -0
  256. package/dist/queries/sanitizeQueryValue.d.ts.map +1 -0
  257. package/dist/queries/sanitizeQueryValue.js +246 -0
  258. package/dist/queries/sanitizeQueryValue.js.map +1 -0
  259. package/dist/queries/selectDistinct.d.ts +25 -0
  260. package/dist/queries/selectDistinct.d.ts.map +1 -0
  261. package/dist/queries/selectDistinct.js +29 -0
  262. package/dist/queries/selectDistinct.js.map +1 -0
  263. package/dist/queryDrafts.d.ts +3 -0
  264. package/dist/queryDrafts.d.ts.map +1 -0
  265. package/dist/queryDrafts.js +41 -0
  266. package/dist/queryDrafts.js.map +1 -0
  267. package/dist/schema/build.d.ts +50 -0
  268. package/dist/schema/build.d.ts.map +1 -0
  269. package/dist/schema/build.js +705 -0
  270. package/dist/schema/build.js.map +1 -0
  271. package/dist/schema/buildDrizzleRelations.d.ts +5 -0
  272. package/dist/schema/buildDrizzleRelations.d.ts.map +1 -0
  273. package/dist/schema/buildDrizzleRelations.js +28 -0
  274. package/dist/schema/buildDrizzleRelations.js.map +1 -0
  275. package/dist/schema/buildRawSchema.d.ts +9 -0
  276. package/dist/schema/buildRawSchema.d.ts.map +1 -0
  277. package/dist/schema/buildRawSchema.js +117 -0
  278. package/dist/schema/buildRawSchema.js.map +1 -0
  279. package/dist/schema/idToUUID.d.ts +3 -0
  280. package/dist/schema/idToUUID.d.ts.map +1 -0
  281. package/dist/schema/idToUUID.js +11 -0
  282. package/dist/schema/idToUUID.js.map +1 -0
  283. package/dist/schema/traverseFields.d.ts +44 -0
  284. package/dist/schema/traverseFields.d.ts.map +1 -0
  285. package/dist/schema/traverseFields.js +810 -0
  286. package/dist/schema/traverseFields.js.map +1 -0
  287. package/dist/schema/withDefault.d.ts +4 -0
  288. package/dist/schema/withDefault.d.ts.map +1 -0
  289. package/dist/schema/withDefault.js +11 -0
  290. package/dist/schema/withDefault.js.map +1 -0
  291. package/dist/sqlite/columnToCodeConverter.d.ts +3 -0
  292. package/dist/sqlite/columnToCodeConverter.d.ts.map +1 -0
  293. package/dist/sqlite/columnToCodeConverter.js +116 -0
  294. package/dist/sqlite/columnToCodeConverter.js.map +1 -0
  295. package/dist/sqlite/countDistinct.d.ts +3 -0
  296. package/dist/sqlite/countDistinct.d.ts.map +1 -0
  297. package/dist/sqlite/countDistinct.js +24 -0
  298. package/dist/sqlite/countDistinct.js.map +1 -0
  299. package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.d.ts +2 -0
  300. package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.d.ts.map +1 -0
  301. package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.js +14 -0
  302. package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.js.map +1 -0
  303. package/dist/sqlite/createJSONQuery/index.d.ts +3 -0
  304. package/dist/sqlite/createJSONQuery/index.d.ts.map +1 -0
  305. package/dist/sqlite/createJSONQuery/index.js +109 -0
  306. package/dist/sqlite/createJSONQuery/index.js.map +1 -0
  307. package/dist/sqlite/defaultSnapshot.d.ts +3 -0
  308. package/dist/sqlite/defaultSnapshot.d.ts.map +1 -0
  309. package/dist/sqlite/defaultSnapshot.js +15 -0
  310. package/dist/sqlite/defaultSnapshot.js.map +1 -0
  311. package/dist/sqlite/deleteWhere.d.ts +3 -0
  312. package/dist/sqlite/deleteWhere.d.ts.map +1 -0
  313. package/dist/sqlite/deleteWhere.js +6 -0
  314. package/dist/sqlite/deleteWhere.js.map +1 -0
  315. package/dist/sqlite/dropDatabase.d.ts +3 -0
  316. package/dist/sqlite/dropDatabase.d.ts.map +1 -0
  317. package/dist/sqlite/dropDatabase.js +19 -0
  318. package/dist/sqlite/dropDatabase.js.map +1 -0
  319. package/dist/sqlite/execute.d.ts +3 -0
  320. package/dist/sqlite/execute.d.ts.map +1 -0
  321. package/dist/sqlite/execute.js +13 -0
  322. package/dist/sqlite/execute.js.map +1 -0
  323. package/dist/sqlite/init.d.ts +3 -0
  324. package/dist/sqlite/init.d.ts.map +1 -0
  325. package/dist/sqlite/init.js +42 -0
  326. package/dist/sqlite/init.js.map +1 -0
  327. package/dist/sqlite/insert.d.ts +3 -0
  328. package/dist/sqlite/insert.d.ts.map +1 -0
  329. package/dist/sqlite/insert.js +21 -0
  330. package/dist/sqlite/insert.js.map +1 -0
  331. package/dist/sqlite/requireDrizzleKit.d.ts +3 -0
  332. package/dist/sqlite/requireDrizzleKit.d.ts.map +1 -0
  333. package/dist/sqlite/requireDrizzleKit.js +12 -0
  334. package/dist/sqlite/requireDrizzleKit.js.map +1 -0
  335. package/dist/sqlite/schema/buildDrizzleTable.d.ts +3 -0
  336. package/dist/sqlite/schema/buildDrizzleTable.d.ts.map +1 -0
  337. package/dist/sqlite/schema/buildDrizzleTable.js +153 -0
  338. package/dist/sqlite/schema/buildDrizzleTable.js.map +1 -0
  339. package/dist/sqlite/schema/setColumnID.d.ts +3 -0
  340. package/dist/sqlite/schema/setColumnID.d.ts.map +1 -0
  341. package/dist/sqlite/schema/setColumnID.js +48 -0
  342. package/dist/sqlite/schema/setColumnID.js.map +1 -0
  343. package/dist/sqlite/types.d.ts +214 -0
  344. package/dist/sqlite/types.d.ts.map +1 -0
  345. package/dist/sqlite/types.js +3 -0
  346. package/dist/sqlite/types.js.map +1 -0
  347. package/dist/transactions/beginTransaction.d.ts +3 -0
  348. package/dist/transactions/beginTransaction.d.ts.map +1 -0
  349. package/dist/transactions/beginTransaction.js +59 -0
  350. package/dist/transactions/beginTransaction.js.map +1 -0
  351. package/dist/transactions/commitTransaction.d.ts +3 -0
  352. package/dist/transactions/commitTransaction.d.ts.map +1 -0
  353. package/dist/transactions/commitTransaction.js +18 -0
  354. package/dist/transactions/commitTransaction.js.map +1 -0
  355. package/dist/transactions/rollbackTransaction.d.ts +3 -0
  356. package/dist/transactions/rollbackTransaction.d.ts.map +1 -0
  357. package/dist/transactions/rollbackTransaction.js +16 -0
  358. package/dist/transactions/rollbackTransaction.js.map +1 -0
  359. package/dist/transform/read/hasManyNumber.d.ts +11 -0
  360. package/dist/transform/read/hasManyNumber.d.ts.map +1 -0
  361. package/dist/transform/read/hasManyNumber.js +28 -0
  362. package/dist/transform/read/hasManyNumber.js.map +1 -0
  363. package/dist/transform/read/hasManyText.d.ts +11 -0
  364. package/dist/transform/read/hasManyText.d.ts.map +1 -0
  365. package/dist/transform/read/hasManyText.js +20 -0
  366. package/dist/transform/read/hasManyText.js.map +1 -0
  367. package/dist/transform/read/index.d.ts +16 -0
  368. package/dist/transform/read/index.d.ts.map +1 -0
  369. package/dist/transform/read/index.js +49 -0
  370. package/dist/transform/read/index.js.map +1 -0
  371. package/dist/transform/read/relationship.d.ts +11 -0
  372. package/dist/transform/read/relationship.d.ts.map +1 -0
  373. package/dist/transform/read/relationship.js +69 -0
  374. package/dist/transform/read/relationship.js.map +1 -0
  375. package/dist/transform/read/traverseFields.d.ts +68 -0
  376. package/dist/transform/read/traverseFields.d.ts.map +1 -0
  377. package/dist/transform/read/traverseFields.js +542 -0
  378. package/dist/transform/read/traverseFields.js.map +1 -0
  379. package/dist/transform/write/array.d.ts +34 -0
  380. package/dist/transform/write/array.d.ts.map +1 -0
  381. package/dist/transform/write/array.js +73 -0
  382. package/dist/transform/write/array.js.map +1 -0
  383. package/dist/transform/write/blocks.d.ts +33 -0
  384. package/dist/transform/write/blocks.d.ts.map +1 -0
  385. package/dist/transform/write/blocks.js +78 -0
  386. package/dist/transform/write/blocks.js.map +1 -0
  387. package/dist/transform/write/index.d.ts +15 -0
  388. package/dist/transform/write/index.d.ts.map +1 -0
  389. package/dist/transform/write/index.js +51 -0
  390. package/dist/transform/write/index.js.map +1 -0
  391. package/dist/transform/write/numbers.d.ts +8 -0
  392. package/dist/transform/write/numbers.d.ts.map +1 -0
  393. package/dist/transform/write/numbers.js +11 -0
  394. package/dist/transform/write/numbers.js.map +1 -0
  395. package/dist/transform/write/relationships.d.ts +10 -0
  396. package/dist/transform/write/relationships.d.ts.map +1 -0
  397. package/dist/transform/write/relationships.js +27 -0
  398. package/dist/transform/write/relationships.js.map +1 -0
  399. package/dist/transform/write/selects.d.ts +8 -0
  400. package/dist/transform/write/selects.d.ts.map +1 -0
  401. package/dist/transform/write/selects.js +20 -0
  402. package/dist/transform/write/selects.js.map +1 -0
  403. package/dist/transform/write/texts.d.ts +8 -0
  404. package/dist/transform/write/texts.d.ts.map +1 -0
  405. package/dist/transform/write/texts.js +11 -0
  406. package/dist/transform/write/texts.js.map +1 -0
  407. package/dist/transform/write/traverseFields.d.ts +68 -0
  408. package/dist/transform/write/traverseFields.d.ts.map +1 -0
  409. package/dist/transform/write/traverseFields.js +661 -0
  410. package/dist/transform/write/traverseFields.js.map +1 -0
  411. package/dist/transform/write/types.d.ts +71 -0
  412. package/dist/transform/write/types.d.ts.map +1 -0
  413. package/dist/transform/write/types.js +3 -0
  414. package/dist/transform/write/types.js.map +1 -0
  415. package/dist/types.d.ts +355 -0
  416. package/dist/types.d.ts.map +1 -0
  417. package/dist/types.js +5 -0
  418. package/dist/types.js.map +1 -0
  419. package/dist/updateGlobal.d.ts +4 -0
  420. package/dist/updateGlobal.d.ts.map +1 -0
  421. package/dist/updateGlobal.js +34 -0
  422. package/dist/updateGlobal.js.map +1 -0
  423. package/dist/updateGlobalVersion.d.ts +4 -0
  424. package/dist/updateGlobalVersion.d.ts.map +1 -0
  425. package/dist/updateGlobalVersion.js +44 -0
  426. package/dist/updateGlobalVersion.js.map +1 -0
  427. package/dist/updateJobs.d.ts +3 -0
  428. package/dist/updateJobs.d.ts.map +1 -0
  429. package/dist/updateJobs.js +84 -0
  430. package/dist/updateJobs.js.map +1 -0
  431. package/dist/updateMany.d.ts +3 -0
  432. package/dist/updateMany.d.ts.map +1 -0
  433. package/dist/updateMany.js +76 -0
  434. package/dist/updateMany.js.map +1 -0
  435. package/dist/updateOne.d.ts +3 -0
  436. package/dist/updateOne.d.ts.map +1 -0
  437. package/dist/updateOne.js +69 -0
  438. package/dist/updateOne.js.map +1 -0
  439. package/dist/updateVersion.d.ts +4 -0
  440. package/dist/updateVersion.d.ts.map +1 -0
  441. package/dist/updateVersion.js +45 -0
  442. package/dist/updateVersion.js.map +1 -0
  443. package/dist/upsert.d.ts +3 -0
  444. package/dist/upsert.d.ts.map +1 -0
  445. package/dist/upsert.js +17 -0
  446. package/dist/upsert.js.map +1 -0
  447. package/dist/upsertRow/deleteExistingArrayRows.d.ts +10 -0
  448. package/dist/upsertRow/deleteExistingArrayRows.d.ts.map +1 -0
  449. package/dist/upsertRow/deleteExistingArrayRows.js +14 -0
  450. package/dist/upsertRow/deleteExistingArrayRows.js.map +1 -0
  451. package/dist/upsertRow/deleteExistingRowsByPath.d.ts +14 -0
  452. package/dist/upsertRow/deleteExistingRowsByPath.d.ts.map +1 -0
  453. package/dist/upsertRow/deleteExistingRowsByPath.js +45 -0
  454. package/dist/upsertRow/deleteExistingRowsByPath.js.map +1 -0
  455. package/dist/upsertRow/handleUpsertError.d.ts +19 -0
  456. package/dist/upsertRow/handleUpsertError.d.ts.map +1 -0
  457. package/dist/upsertRow/handleUpsertError.js +66 -0
  458. package/dist/upsertRow/handleUpsertError.js.map +1 -0
  459. package/dist/upsertRow/handleUpsertError.spec.js +42 -0
  460. package/dist/upsertRow/handleUpsertError.spec.js.map +1 -0
  461. package/dist/upsertRow/index.d.ts +11 -0
  462. package/dist/upsertRow/index.d.ts.map +1 -0
  463. package/dist/upsertRow/index.js +668 -0
  464. package/dist/upsertRow/index.js.map +1 -0
  465. package/dist/upsertRow/insertArrays.d.ts +14 -0
  466. package/dist/upsertRow/insertArrays.d.ts.map +1 -0
  467. package/dist/upsertRow/insertArrays.js +87 -0
  468. package/dist/upsertRow/insertArrays.js.map +1 -0
  469. package/dist/upsertRow/shouldUseOptimizedUpsertRow.d.ts +10 -0
  470. package/dist/upsertRow/shouldUseOptimizedUpsertRow.d.ts.map +1 -0
  471. package/dist/upsertRow/shouldUseOptimizedUpsertRow.js +63 -0
  472. package/dist/upsertRow/shouldUseOptimizedUpsertRow.js.map +1 -0
  473. package/dist/upsertRow/types.d.ts +47 -0
  474. package/dist/upsertRow/types.d.ts.map +1 -0
  475. package/dist/upsertRow/types.js +3 -0
  476. package/dist/upsertRow/types.js.map +1 -0
  477. package/dist/utilities/appendPrefixToKeys.d.ts +2 -0
  478. package/dist/utilities/appendPrefixToKeys.d.ts.map +1 -0
  479. package/dist/utilities/appendPrefixToKeys.js +6 -0
  480. package/dist/utilities/appendPrefixToKeys.js.map +1 -0
  481. package/dist/utilities/blocksToJsonMigrator.d.ts +15 -0
  482. package/dist/utilities/blocksToJsonMigrator.d.ts.map +1 -0
  483. package/dist/utilities/blocksToJsonMigrator.js +587 -0
  484. package/dist/utilities/blocksToJsonMigrator.js.map +1 -0
  485. package/dist/utilities/buildCreateMigration.d.ts +10 -0
  486. package/dist/utilities/buildCreateMigration.d.ts.map +1 -0
  487. package/dist/utilities/buildCreateMigration.js +121 -0
  488. package/dist/utilities/buildCreateMigration.js.map +1 -0
  489. package/dist/utilities/buildForeignKeyName.d.ts +7 -0
  490. package/dist/utilities/buildForeignKeyName.d.ts.map +1 -0
  491. package/dist/utilities/buildForeignKeyName.js +18 -0
  492. package/dist/utilities/buildForeignKeyName.js.map +1 -0
  493. package/dist/utilities/buildIndexName.d.ts +8 -0
  494. package/dist/utilities/buildIndexName.d.ts.map +1 -0
  495. package/dist/utilities/buildIndexName.js +19 -0
  496. package/dist/utilities/buildIndexName.js.map +1 -0
  497. package/dist/utilities/createBlocksMap.d.ts +5 -0
  498. package/dist/utilities/createBlocksMap.d.ts.map +1 -0
  499. package/dist/utilities/createBlocksMap.js +35 -0
  500. package/dist/utilities/createBlocksMap.js.map +1 -0
  501. package/dist/utilities/createRelationshipMap.d.ts +2 -0
  502. package/dist/utilities/createRelationshipMap.d.ts.map +1 -0
  503. package/dist/utilities/createRelationshipMap.js +21 -0
  504. package/dist/utilities/createRelationshipMap.js.map +1 -0
  505. package/dist/utilities/createSchemaGenerator.d.ts +11 -0
  506. package/dist/utilities/createSchemaGenerator.d.ts.map +1 -0
  507. package/dist/utilities/createSchemaGenerator.js +257 -0
  508. package/dist/utilities/createSchemaGenerator.js.map +1 -0
  509. package/dist/utilities/escapeSQLValue.d.ts +3 -0
  510. package/dist/utilities/escapeSQLValue.d.ts.map +1 -0
  511. package/dist/utilities/escapeSQLValue.js +20 -0
  512. package/dist/utilities/escapeSQLValue.js.map +1 -0
  513. package/dist/utilities/executeSchemaHooks.d.ts +24 -0
  514. package/dist/utilities/executeSchemaHooks.d.ts.map +1 -0
  515. package/dist/utilities/executeSchemaHooks.js +21 -0
  516. package/dist/utilities/executeSchemaHooks.js.map +1 -0
  517. package/dist/utilities/extendDrizzleTable.d.ts +19 -0
  518. package/dist/utilities/extendDrizzleTable.d.ts.map +1 -0
  519. package/dist/utilities/extendDrizzleTable.js +38 -0
  520. package/dist/utilities/extendDrizzleTable.js.map +1 -0
  521. package/dist/utilities/getArrayRelationName.d.ts +7 -0
  522. package/dist/utilities/getArrayRelationName.d.ts.map +1 -0
  523. package/dist/utilities/getArrayRelationName.js +8 -0
  524. package/dist/utilities/getArrayRelationName.js.map +1 -0
  525. package/dist/utilities/getCollectionIdType.d.ts +7 -0
  526. package/dist/utilities/getCollectionIdType.d.ts.map +1 -0
  527. package/dist/utilities/getCollectionIdType.js +12 -0
  528. package/dist/utilities/getCollectionIdType.js.map +1 -0
  529. package/dist/utilities/getMigrationTemplate.d.ts +4 -0
  530. package/dist/utilities/getMigrationTemplate.d.ts.map +1 -0
  531. package/dist/utilities/getMigrationTemplate.js +13 -0
  532. package/dist/utilities/getMigrationTemplate.js.map +1 -0
  533. package/dist/utilities/getNameFromDrizzleTable.d.ts +3 -0
  534. package/dist/utilities/getNameFromDrizzleTable.d.ts.map +1 -0
  535. package/dist/utilities/getNameFromDrizzleTable.js +6 -0
  536. package/dist/utilities/getNameFromDrizzleTable.js.map +1 -0
  537. package/dist/utilities/getPrimaryDb.d.ts +6 -0
  538. package/dist/utilities/getPrimaryDb.d.ts.map +1 -0
  539. package/dist/utilities/getPrimaryDb.js +10 -0
  540. package/dist/utilities/getPrimaryDb.js.map +1 -0
  541. package/dist/utilities/getTransaction.d.ts +13 -0
  542. package/dist/utilities/getTransaction.d.ts.map +1 -0
  543. package/dist/utilities/getTransaction.js +20 -0
  544. package/dist/utilities/getTransaction.js.map +1 -0
  545. package/dist/utilities/hasLocalesTable.d.ts +9 -0
  546. package/dist/utilities/hasLocalesTable.d.ts.map +1 -0
  547. package/dist/utilities/hasLocalesTable.js +30 -0
  548. package/dist/utilities/hasLocalesTable.js.map +1 -0
  549. package/dist/utilities/isArrayOfRows.d.ts +2 -0
  550. package/dist/utilities/isArrayOfRows.d.ts.map +1 -0
  551. package/dist/utilities/isArrayOfRows.js +5 -0
  552. package/dist/utilities/isArrayOfRows.js.map +1 -0
  553. package/dist/utilities/isPolymorphicRelationship.d.ts +6 -0
  554. package/dist/utilities/isPolymorphicRelationship.d.ts.map +1 -0
  555. package/dist/utilities/isPolymorphicRelationship.js +5 -0
  556. package/dist/utilities/isPolymorphicRelationship.js.map +1 -0
  557. package/dist/utilities/isUUIDType.d.ts +2 -0
  558. package/dist/utilities/isUUIDType.d.ts.map +1 -0
  559. package/dist/utilities/isUUIDType.js +3 -0
  560. package/dist/utilities/isUUIDType.js.map +1 -0
  561. package/dist/utilities/isValidStringID.d.ts +2 -0
  562. package/dist/utilities/isValidStringID.d.ts.map +1 -0
  563. package/dist/utilities/isValidStringID.js +5 -0
  564. package/dist/utilities/isValidStringID.js.map +1 -0
  565. package/dist/utilities/isValidStringID.spec.js +15 -0
  566. package/dist/utilities/isValidStringID.spec.js.map +1 -0
  567. package/dist/utilities/json.d.ts +9 -0
  568. package/dist/utilities/json.d.ts.map +1 -0
  569. package/dist/utilities/json.js +33 -0
  570. package/dist/utilities/json.js.map +1 -0
  571. package/dist/utilities/migrationTableExists.d.ts +4 -0
  572. package/dist/utilities/migrationTableExists.d.ts.map +1 -0
  573. package/dist/utilities/migrationTableExists.js +25 -0
  574. package/dist/utilities/migrationTableExists.js.map +1 -0
  575. package/dist/utilities/parseError.d.ts +5 -0
  576. package/dist/utilities/parseError.d.ts.map +1 -0
  577. package/dist/utilities/parseError.js +15 -0
  578. package/dist/utilities/parseError.js.map +1 -0
  579. package/dist/utilities/pushDevSchema.d.ts +9 -0
  580. package/dist/utilities/pushDevSchema.d.ts.map +1 -0
  581. package/dist/utilities/pushDevSchema.js +83 -0
  582. package/dist/utilities/pushDevSchema.js.map +1 -0
  583. package/dist/utilities/rawConstraint.d.ts +10 -0
  584. package/dist/utilities/rawConstraint.d.ts.map +1 -0
  585. package/dist/utilities/rawConstraint.js +13 -0
  586. package/dist/utilities/rawConstraint.js.map +1 -0
  587. package/dist/utilities/readAfterWrite.d.ts +17 -0
  588. package/dist/utilities/readAfterWrite.d.ts.map +1 -0
  589. package/dist/utilities/readAfterWrite.js +21 -0
  590. package/dist/utilities/readAfterWrite.js.map +1 -0
  591. package/dist/utilities/sanitizePathSegment.d.ts +2 -0
  592. package/dist/utilities/sanitizePathSegment.d.ts.map +1 -0
  593. package/dist/utilities/sanitizePathSegment.js +14 -0
  594. package/dist/utilities/sanitizePathSegment.js.map +1 -0
  595. package/dist/utilities/validateExistingBlockIsIdentical.d.ts +22 -0
  596. package/dist/utilities/validateExistingBlockIsIdentical.d.ts.map +1 -0
  597. package/dist/utilities/validateExistingBlockIsIdentical.js +100 -0
  598. package/dist/utilities/validateExistingBlockIsIdentical.js.map +1 -0
  599. package/package.json +77 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTransaction.d.ts","sourceRoot":"","sources":["../../src/utilities/getTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIjD;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,GAAU,CAAC,SAAS,cAAc,4BAClD,CAAC,QACJ,OAAO,CAAC,UAAU,CAAC,KACxB,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAStB,CAAA"}
@@ -0,0 +1,20 @@
1
+ import { shouldReadFromPrimary } from './readAfterWrite.js';
2
+ /**
3
+ * Returns current db transaction instance from req or adapter.drizzle itself
4
+ *
5
+ * If a transaction session doesn't exist (e.g., it was already committed/rolled back),
6
+ * falls back to the default adapter.drizzle instance to prevent errors.
7
+ *
8
+ * When read replicas are configured and a write happened recently, returns the
9
+ * unwrapped primary to avoid replication-lag stale reads.
10
+ */ export const getTransaction = async (adapter, req)=>{
11
+ if (!req?.transactionID) {
12
+ if (shouldReadFromPrimary(adapter)) {
13
+ return adapter.primaryDrizzle;
14
+ }
15
+ return adapter.drizzle;
16
+ }
17
+ return adapter.sessions[await req.transactionID]?.db || adapter.drizzle;
18
+ };
19
+
20
+ //# sourceMappingURL=getTransaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/getTransaction.ts"],"sourcesContent":["import type { CMSRequest } from '@hanzo/cms'\n\nimport type { DrizzleAdapter } from '../types.js'\n\nimport { shouldReadFromPrimary } from './readAfterWrite.js'\n\n/**\n * Returns current db transaction instance from req or adapter.drizzle itself\n *\n * If a transaction session doesn't exist (e.g., it was already committed/rolled back),\n * falls back to the default adapter.drizzle instance to prevent errors.\n *\n * When read replicas are configured and a write happened recently, returns the\n * unwrapped primary to avoid replication-lag stale reads.\n */\nexport const getTransaction = async <T extends DrizzleAdapter = DrizzleAdapter>(\n adapter: T,\n req?: Partial<CMSRequest>,\n): Promise<T['drizzle']> => {\n if (!req?.transactionID) {\n if (shouldReadFromPrimary(adapter)) {\n return adapter.primaryDrizzle as T['drizzle']\n }\n return adapter.drizzle\n }\n\n return (adapter.sessions[await req.transactionID]?.db as T['drizzle']) || adapter.drizzle\n}\n"],"names":["shouldReadFromPrimary","getTransaction","adapter","req","transactionID","primaryDrizzle","drizzle","sessions","db"],"mappings":"AAIA,SAASA,qBAAqB,QAAQ,sBAAqB;AAE3D;;;;;;;;CAQC,GACD,OAAO,MAAMC,iBAAiB,OAC5BC,SACAC;IAEA,IAAI,CAACA,KAAKC,eAAe;QACvB,IAAIJ,sBAAsBE,UAAU;YAClC,OAAOA,QAAQG,cAAc;QAC/B;QACA,OAAOH,QAAQI,OAAO;IACxB;IAEA,OAAO,AAACJ,QAAQK,QAAQ,CAAC,MAAMJ,IAAIC,aAAa,CAAC,EAAEI,MAAuBN,QAAQI,OAAO;AAC3F,EAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Field } from '@hanzo/cms';
2
+ export declare const hasLocalesTable: ({ fields, parentIsLocalized, }: {
3
+ fields: Field[];
4
+ /**
5
+ * @todo make required in v4.0. Usually you'd wanna pass this in
6
+ */
7
+ parentIsLocalized?: boolean;
8
+ }) => boolean;
9
+ //# sourceMappingURL=hasLocalesTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hasLocalesTable.d.ts","sourceRoot":"","sources":["../../src/utilities/hasLocalesTable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAIvC,eAAO,MAAM,eAAe,mCAGzB;IACD,MAAM,EAAE,KAAK,EAAE,CAAA;IACf;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B,KAAG,OAyBH,CAAA"}
@@ -0,0 +1,30 @@
1
+ import { fieldAffectsData, fieldHasSubFields, fieldShouldBeLocalized } from '@hanzo/cms/shared';
2
+ export const hasLocalesTable = ({ fields, parentIsLocalized })=>{
3
+ return fields.some((field)=>{
4
+ // arrays always get a separate table
5
+ if (field.type === 'array') {
6
+ return false;
7
+ }
8
+ if (fieldAffectsData(field) && fieldShouldBeLocalized({
9
+ field,
10
+ parentIsLocalized
11
+ })) {
12
+ return true;
13
+ }
14
+ if (fieldHasSubFields(field)) {
15
+ return hasLocalesTable({
16
+ fields: field.fields,
17
+ parentIsLocalized: parentIsLocalized || 'localized' in field && field.localized
18
+ });
19
+ }
20
+ if (field.type === 'tabs') {
21
+ return field.tabs.some((tab)=>hasLocalesTable({
22
+ fields: tab.fields,
23
+ parentIsLocalized: parentIsLocalized || tab.localized
24
+ }));
25
+ }
26
+ return false;
27
+ });
28
+ };
29
+
30
+ //# sourceMappingURL=hasLocalesTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/hasLocalesTable.ts"],"sourcesContent":["import type { Field } from '@hanzo/cms'\n\nimport { fieldAffectsData, fieldHasSubFields, fieldShouldBeLocalized } from '@hanzo/cms/shared'\n\nexport const hasLocalesTable = ({\n fields,\n parentIsLocalized,\n}: {\n fields: Field[]\n /**\n * @todo make required in v4.0. Usually you'd wanna pass this in\n */\n parentIsLocalized?: boolean\n}): boolean => {\n return fields.some((field) => {\n // arrays always get a separate table\n if (field.type === 'array') {\n return false\n }\n if (fieldAffectsData(field) && fieldShouldBeLocalized({ field, parentIsLocalized })) {\n return true\n }\n if (fieldHasSubFields(field)) {\n return hasLocalesTable({\n fields: field.fields,\n parentIsLocalized: parentIsLocalized || ('localized' in field && field.localized),\n })\n }\n if (field.type === 'tabs') {\n return field.tabs.some((tab) =>\n hasLocalesTable({\n fields: tab.fields,\n parentIsLocalized: parentIsLocalized || tab.localized,\n }),\n )\n }\n return false\n })\n}\n"],"names":["fieldAffectsData","fieldHasSubFields","fieldShouldBeLocalized","hasLocalesTable","fields","parentIsLocalized","some","field","type","localized","tabs","tab"],"mappings":"AAEA,SAASA,gBAAgB,EAAEC,iBAAiB,EAAEC,sBAAsB,QAAQ,oBAAmB;AAE/F,OAAO,MAAMC,kBAAkB,CAAC,EAC9BC,MAAM,EACNC,iBAAiB,EAOlB;IACC,OAAOD,OAAOE,IAAI,CAAC,CAACC;QAClB,qCAAqC;QACrC,IAAIA,MAAMC,IAAI,KAAK,SAAS;YAC1B,OAAO;QACT;QACA,IAAIR,iBAAiBO,UAAUL,uBAAuB;YAAEK;YAAOF;QAAkB,IAAI;YACnF,OAAO;QACT;QACA,IAAIJ,kBAAkBM,QAAQ;YAC5B,OAAOJ,gBAAgB;gBACrBC,QAAQG,MAAMH,MAAM;gBACpBC,mBAAmBA,qBAAsB,eAAeE,SAASA,MAAME,SAAS;YAClF;QACF;QACA,IAAIF,MAAMC,IAAI,KAAK,QAAQ;YACzB,OAAOD,MAAMG,IAAI,CAACJ,IAAI,CAAC,CAACK,MACtBR,gBAAgB;oBACdC,QAAQO,IAAIP,MAAM;oBAClBC,mBAAmBA,qBAAqBM,IAAIF,SAAS;gBACvD;QAEJ;QACA,OAAO;IACT;AACF,EAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function isArrayOfRows(data: unknown): data is Record<string, unknown>[];
2
+ //# sourceMappingURL=isArrayOfRows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isArrayOfRows.d.ts","sourceRoot":"","sources":["../../src/utilities/isArrayOfRows.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAE9E"}
@@ -0,0 +1,5 @@
1
+ export function isArrayOfRows(data) {
2
+ return Array.isArray(data);
3
+ }
4
+
5
+ //# sourceMappingURL=isArrayOfRows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/isArrayOfRows.ts"],"sourcesContent":["export function isArrayOfRows(data: unknown): data is Record<string, unknown>[] {\n return Array.isArray(data)\n}\n"],"names":["isArrayOfRows","data","Array","isArray"],"mappings":"AAAA,OAAO,SAASA,cAAcC,IAAa;IACzC,OAAOC,MAAMC,OAAO,CAACF;AACvB"}
@@ -0,0 +1,6 @@
1
+ import type { CollectionSlug } from '@hanzo/cms';
2
+ export declare const isPolymorphicRelationship: (value: unknown) => value is {
3
+ relationTo: CollectionSlug;
4
+ value: number | string;
5
+ };
6
+ //# sourceMappingURL=isPolymorphicRelationship.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isPolymorphicRelationship.d.ts","sourceRoot":"","sources":["../../src/utilities/isPolymorphicRelationship.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEhD,eAAO,MAAM,yBAAyB,UAC7B,OAAO,KACb,KAAK,IAAI;IACV,UAAU,EAAE,cAAc,CAAA;IAC1B,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CASvB,CAAA"}
@@ -0,0 +1,5 @@
1
+ export const isPolymorphicRelationship = (value)=>{
2
+ return value && typeof value === 'object' && 'relationTo' in value && typeof value.relationTo === 'string' && 'value' in value;
3
+ };
4
+
5
+ //# sourceMappingURL=isPolymorphicRelationship.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/isPolymorphicRelationship.ts"],"sourcesContent":["import type { CollectionSlug } from '@hanzo/cms'\n\nexport const isPolymorphicRelationship = (\n value: unknown,\n): value is {\n relationTo: CollectionSlug\n value: number | string\n} => {\n return (\n value &&\n typeof value === 'object' &&\n 'relationTo' in value &&\n typeof value.relationTo === 'string' &&\n 'value' in value\n )\n}\n"],"names":["isPolymorphicRelationship","value","relationTo"],"mappings":"AAEA,OAAO,MAAMA,4BAA4B,CACvCC;IAKA,OACEA,SACA,OAAOA,UAAU,YACjB,gBAAgBA,SAChB,OAAOA,MAAMC,UAAU,KAAK,YAC5B,WAAWD;AAEf,EAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const isUUIDType: (idType: string) => boolean;
2
+ //# sourceMappingURL=isUUIDType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isUUIDType.d.ts","sourceRoot":"","sources":["../../src/utilities/isUUIDType.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,WAAY,MAAM,KAAG,OAAmD,CAAA"}
@@ -0,0 +1,3 @@
1
+ export const isUUIDType = (idType)=>idType === 'uuid' || idType === 'uuidv7';
2
+
3
+ //# sourceMappingURL=isUUIDType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/isUUIDType.ts"],"sourcesContent":["export const isUUIDType = (idType: string): boolean => idType === 'uuid' || idType === 'uuidv7'\n"],"names":["isUUIDType","idType"],"mappings":"AAAA,OAAO,MAAMA,aAAa,CAACC,SAA4BA,WAAW,UAAUA,WAAW,SAAQ"}
@@ -0,0 +1,2 @@
1
+ export declare function isValidStringID(value: string): boolean;
2
+ //# sourceMappingURL=isValidStringID.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isValidStringID.d.ts","sourceRoot":"","sources":["../../src/utilities/isValidStringID.ts"],"names":[],"mappings":"AAAA,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,WAE5C"}
@@ -0,0 +1,5 @@
1
+ export function isValidStringID(value) {
2
+ return /^[\w-]+$/.test(value);
3
+ }
4
+
5
+ //# sourceMappingURL=isValidStringID.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/isValidStringID.ts"],"sourcesContent":["export function isValidStringID(value: string) {\n return /^[\\w-]+$/.test(value)\n}\n"],"names":["isValidStringID","value","test"],"mappings":"AAAA,OAAO,SAASA,gBAAgBC,KAAa;IAC3C,OAAO,WAAWC,IAAI,CAACD;AACzB"}
@@ -0,0 +1,15 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { isValidStringID } from './isValidStringID.js';
3
+ describe('isValidStringID', ()=>{
4
+ it('should pass', ()=>{
5
+ expect(isValidStringID('1')).toBe(true);
6
+ expect(isValidStringID('a_b_c')).toBe(true);
7
+ expect(isValidStringID('8cc2df6d-6e07-4da4-be48-5fa747c3b92b')).toBe(true);
8
+ });
9
+ it('should not pass', ()=>{
10
+ expect(isValidStringID('1 2 3')).toBe(false);
11
+ expect(isValidStringID('1@')).toBe(false);
12
+ });
13
+ });
14
+
15
+ //# sourceMappingURL=isValidStringID.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/isValidStringID.spec.ts"],"sourcesContent":["import { describe, it, expect } from 'vitest'\nimport { isValidStringID } from './isValidStringID.js'\n\ndescribe('isValidStringID', () => {\n it('should pass', () => {\n expect(isValidStringID('1')).toBe(true)\n expect(isValidStringID('a_b_c')).toBe(true)\n expect(isValidStringID('8cc2df6d-6e07-4da4-be48-5fa747c3b92b')).toBe(true)\n })\n\n it('should not pass', () => {\n expect(isValidStringID('1 2 3')).toBe(false)\n expect(isValidStringID('1@')).toBe(false)\n })\n})\n"],"names":["describe","it","expect","isValidStringID","toBe"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,EAAE,EAAEC,MAAM,QAAQ,SAAQ;AAC7C,SAASC,eAAe,QAAQ,uBAAsB;AAEtDH,SAAS,mBAAmB;IAC1BC,GAAG,eAAe;QAChBC,OAAOC,gBAAgB,MAAMC,IAAI,CAAC;QAClCF,OAAOC,gBAAgB,UAAUC,IAAI,CAAC;QACtCF,OAAOC,gBAAgB,yCAAyCC,IAAI,CAAC;IACvE;IAEAH,GAAG,mBAAmB;QACpBC,OAAOC,gBAAgB,UAAUC,IAAI,CAAC;QACtCF,OAAOC,gBAAgB,OAAOC,IAAI,CAAC;IACrC;AACF"}
@@ -0,0 +1,9 @@
1
+ import type { Column, SQL } from 'drizzle-orm';
2
+ import type { DrizzleAdapter } from '../types.js';
3
+ export declare function jsonAgg(adapter: DrizzleAdapter, expression: SQL): SQL<unknown>;
4
+ /**
5
+ * @param shape Keys are interpolated into raw SQL — only use trusted, internally-generated key names
6
+ */
7
+ export declare function jsonBuildObject<T extends Record<string, Column | SQL>>(adapter: DrizzleAdapter, shape: T): SQL<unknown>;
8
+ export declare const jsonAggBuildObject: <T extends Record<string, Column | SQL>>(adapter: DrizzleAdapter, shape: T) => SQL<unknown>;
9
+ //# sourceMappingURL=json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/utilities/json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAK9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIjD,wBAAgB,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,gBAM/D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,EACpE,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,CAAC,gBAuBT;AAED,eAAO,MAAM,kBAAkB,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,WAC9D,cAAc,SAChB,CAAC,iBAGT,CAAA"}
@@ -0,0 +1,33 @@
1
+ import { sql } from 'drizzle-orm';
2
+ import { APIError } from '@hanzo/cms';
3
+ const SAFE_KEY_REGEX = /^\w+$/;
4
+ export function jsonAgg(adapter, expression) {
5
+ if (adapter.name === 'sqlite') {
6
+ return sql`coalesce(json_group_array(${expression}), '[]')`;
7
+ }
8
+ return sql`coalesce(json_agg(${expression}), '[]'::json)`;
9
+ }
10
+ /**
11
+ * @param shape Keys are interpolated into raw SQL — only use trusted, internally-generated key names
12
+ */ export function jsonBuildObject(adapter, shape) {
13
+ const chunks = [];
14
+ Object.entries(shape).forEach(([key, value])=>{
15
+ if (!SAFE_KEY_REGEX.test(key)) {
16
+ throw new APIError('Unsafe key passed to jsonBuildObject. Only alphanumeric characters and underscores are allowed.', 500);
17
+ }
18
+ if (chunks.length > 0) {
19
+ chunks.push(sql.raw(','));
20
+ }
21
+ chunks.push(sql.raw(`'${key}',`));
22
+ chunks.push(sql`${value}`);
23
+ });
24
+ if (adapter.name === 'sqlite') {
25
+ return sql`json_object(${sql.join(chunks)})`;
26
+ }
27
+ return sql`json_build_object(${sql.join(chunks)})`;
28
+ }
29
+ export const jsonAggBuildObject = (adapter, shape)=>{
30
+ return jsonAgg(adapter, jsonBuildObject(adapter, shape));
31
+ };
32
+
33
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/json.ts"],"sourcesContent":["import type { Column, SQL } from 'drizzle-orm'\n\nimport { sql } from 'drizzle-orm'\nimport { APIError } from '@hanzo/cms'\n\nimport type { DrizzleAdapter } from '../types.js'\n\nconst SAFE_KEY_REGEX = /^\\w+$/\n\nexport function jsonAgg(adapter: DrizzleAdapter, expression: SQL) {\n if (adapter.name === 'sqlite') {\n return sql`coalesce(json_group_array(${expression}), '[]')`\n }\n\n return sql`coalesce(json_agg(${expression}), '[]'::json)`\n}\n\n/**\n * @param shape Keys are interpolated into raw SQL — only use trusted, internally-generated key names\n */\nexport function jsonBuildObject<T extends Record<string, Column | SQL>>(\n adapter: DrizzleAdapter,\n shape: T,\n) {\n const chunks: SQL[] = []\n\n Object.entries(shape).forEach(([key, value]) => {\n if (!SAFE_KEY_REGEX.test(key)) {\n throw new APIError(\n 'Unsafe key passed to jsonBuildObject. Only alphanumeric characters and underscores are allowed.',\n 500,\n )\n }\n if (chunks.length > 0) {\n chunks.push(sql.raw(','))\n }\n chunks.push(sql.raw(`'${key}',`))\n chunks.push(sql`${value}`)\n })\n\n if (adapter.name === 'sqlite') {\n return sql`json_object(${sql.join(chunks)})`\n }\n\n return sql`json_build_object(${sql.join(chunks)})`\n}\n\nexport const jsonAggBuildObject = <T extends Record<string, Column | SQL>>(\n adapter: DrizzleAdapter,\n shape: T,\n) => {\n return jsonAgg(adapter, jsonBuildObject(adapter, shape))\n}\n"],"names":["sql","APIError","SAFE_KEY_REGEX","jsonAgg","adapter","expression","name","jsonBuildObject","shape","chunks","Object","entries","forEach","key","value","test","length","push","raw","join","jsonAggBuildObject"],"mappings":"AAEA,SAASA,GAAG,QAAQ,cAAa;AACjC,SAASC,QAAQ,QAAQ,aAAY;AAIrC,MAAMC,iBAAiB;AAEvB,OAAO,SAASC,QAAQC,OAAuB,EAAEC,UAAe;IAC9D,IAAID,QAAQE,IAAI,KAAK,UAAU;QAC7B,OAAON,GAAG,CAAC,0BAA0B,EAAEK,WAAW,QAAQ,CAAC;IAC7D;IAEA,OAAOL,GAAG,CAAC,kBAAkB,EAAEK,WAAW,cAAc,CAAC;AAC3D;AAEA;;CAEC,GACD,OAAO,SAASE,gBACdH,OAAuB,EACvBI,KAAQ;IAER,MAAMC,SAAgB,EAAE;IAExBC,OAAOC,OAAO,CAACH,OAAOI,OAAO,CAAC,CAAC,CAACC,KAAKC,MAAM;QACzC,IAAI,CAACZ,eAAea,IAAI,CAACF,MAAM;YAC7B,MAAM,IAAIZ,SACR,mGACA;QAEJ;QACA,IAAIQ,OAAOO,MAAM,GAAG,GAAG;YACrBP,OAAOQ,IAAI,CAACjB,IAAIkB,GAAG,CAAC;QACtB;QACAT,OAAOQ,IAAI,CAACjB,IAAIkB,GAAG,CAAC,CAAC,CAAC,EAAEL,IAAI,EAAE,CAAC;QAC/BJ,OAAOQ,IAAI,CAACjB,GAAG,CAAC,EAAEc,MAAM,CAAC;IAC3B;IAEA,IAAIV,QAAQE,IAAI,KAAK,UAAU;QAC7B,OAAON,GAAG,CAAC,YAAY,EAAEA,IAAImB,IAAI,CAACV,QAAQ,CAAC,CAAC;IAC9C;IAEA,OAAOT,GAAG,CAAC,kBAAkB,EAAEA,IAAImB,IAAI,CAACV,QAAQ,CAAC,CAAC;AACpD;AAEA,OAAO,MAAMW,qBAAqB,CAChChB,SACAI;IAEA,OAAOL,QAAQC,SAASG,gBAAgBH,SAASI;AACnD,EAAC"}
@@ -0,0 +1,4 @@
1
+ import type { LibSQLDatabase } from 'drizzle-orm/libsql';
2
+ import type { DrizzleAdapter, PostgresDB } from '../types.js';
3
+ export declare const migrationTableExists: (adapter: DrizzleAdapter, db?: LibSQLDatabase | PostgresDB) => Promise<boolean>;
4
+ //# sourceMappingURL=migrationTableExists.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrationTableExists.d.ts","sourceRoot":"","sources":["../../src/utilities/migrationTableExists.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAExD,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7D,eAAO,MAAM,oBAAoB,YACtB,cAAc,OAClB,cAAc,GAAG,UAAU,KAC/B,OAAO,CAAC,OAAO,CA2BjB,CAAA"}
@@ -0,0 +1,25 @@
1
+ export const migrationTableExists = async (adapter, db)=>{
2
+ let statement;
3
+ if (adapter.name === 'postgres') {
4
+ const prependSchema = adapter.schemaName ? `"${adapter.schemaName}".` : '';
5
+ statement = `SELECT to_regclass('${prependSchema}"cms_migrations"') AS exists;`;
6
+ }
7
+ if (adapter.name === 'sqlite') {
8
+ statement = `
9
+ SELECT CASE
10
+ WHEN COUNT(*) > 0 THEN 1
11
+ ELSE 0
12
+ END AS 'exists'
13
+ FROM sqlite_master
14
+ WHERE type = 'table'
15
+ AND name = 'cms_migrations';`;
16
+ }
17
+ const result = await adapter.execute({
18
+ drizzle: db ?? adapter.drizzle,
19
+ raw: statement
20
+ });
21
+ const [row] = result.rows;
22
+ return row && typeof row === 'object' && 'exists' in row && !!row.exists;
23
+ };
24
+
25
+ //# sourceMappingURL=migrationTableExists.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/migrationTableExists.ts"],"sourcesContent":["import type { LibSQLDatabase } from 'drizzle-orm/libsql'\n\nimport type { DrizzleAdapter, PostgresDB } from '../types.js'\n\nexport const migrationTableExists = async (\n adapter: DrizzleAdapter,\n db?: LibSQLDatabase | PostgresDB,\n): Promise<boolean> => {\n let statement\n\n if (adapter.name === 'postgres') {\n const prependSchema = adapter.schemaName ? `\"${adapter.schemaName}\".` : ''\n statement = `SELECT to_regclass('${prependSchema}\"cms_migrations\"') AS exists;`\n }\n\n if (adapter.name === 'sqlite') {\n statement = `\n SELECT CASE\n WHEN COUNT(*) > 0 THEN 1\n ELSE 0\n END AS 'exists'\n FROM sqlite_master\n WHERE type = 'table'\n AND name = 'cms_migrations';`\n }\n\n const result = await adapter.execute({\n drizzle: db ?? adapter.drizzle,\n raw: statement,\n })\n\n const [row] = result.rows\n\n return row && typeof row === 'object' && 'exists' in row && !!row.exists\n}\n"],"names":["migrationTableExists","adapter","db","statement","name","prependSchema","schemaName","result","execute","drizzle","raw","row","rows","exists"],"mappings":"AAIA,OAAO,MAAMA,uBAAuB,OAClCC,SACAC;IAEA,IAAIC;IAEJ,IAAIF,QAAQG,IAAI,KAAK,YAAY;QAC/B,MAAMC,gBAAgBJ,QAAQK,UAAU,GAAG,CAAC,CAAC,EAAEL,QAAQK,UAAU,CAAC,EAAE,CAAC,GAAG;QACxEH,YAAY,CAAC,oBAAoB,EAAEE,cAAc,6BAA6B,CAAC;IACjF;IAEA,IAAIJ,QAAQG,IAAI,KAAK,UAAU;QAC7BD,YAAY,CAAC;;;;;;;oCAOmB,CAAC;IACnC;IAEA,MAAMI,SAAS,MAAMN,QAAQO,OAAO,CAAC;QACnCC,SAASP,MAAMD,QAAQQ,OAAO;QAC9BC,KAAKP;IACP;IAEA,MAAM,CAACQ,IAAI,GAAGJ,OAAOK,IAAI;IAEzB,OAAOD,OAAO,OAAOA,QAAQ,YAAY,YAAYA,OAAO,CAAC,CAACA,IAAIE,MAAM;AAC1E,EAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Format error message with hint if available
3
+ */
4
+ export declare const parseError: (err: unknown, msg: string) => string;
5
+ //# sourceMappingURL=parseError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseError.d.ts","sourceRoot":"","sources":["../../src/utilities/parseError.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,UAAU,QAAS,OAAO,OAAO,MAAM,KAAG,MAUtD,CAAA"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Format error message with hint if available
3
+ */ export const parseError = (err, msg)=>{
4
+ let formattedMsg = `${msg}`;
5
+ if (err instanceof Error) {
6
+ formattedMsg += ` ${err.message}.`;
7
+ // Check if the error has a hint property
8
+ if ('hint' in err && typeof err.hint === 'string') {
9
+ formattedMsg += ` ${err.hint}.`;
10
+ }
11
+ }
12
+ return formattedMsg;
13
+ };
14
+
15
+ //# sourceMappingURL=parseError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/parseError.ts"],"sourcesContent":["/**\n * Format error message with hint if available\n */\nexport const parseError = (err: unknown, msg: string): string => {\n let formattedMsg = `${msg}`\n if (err instanceof Error) {\n formattedMsg += ` ${err.message}.`\n // Check if the error has a hint property\n if ('hint' in err && typeof err.hint === 'string') {\n formattedMsg += ` ${err.hint}.`\n }\n }\n return formattedMsg\n}\n"],"names":["parseError","err","msg","formattedMsg","Error","message","hint"],"mappings":"AAAA;;CAEC,GACD,OAAO,MAAMA,aAAa,CAACC,KAAcC;IACvC,IAAIC,eAAe,GAAGD,KAAK;IAC3B,IAAID,eAAeG,OAAO;QACxBD,gBAAgB,CAAC,CAAC,EAAEF,IAAII,OAAO,CAAC,CAAC,CAAC;QAClC,yCAAyC;QACzC,IAAI,UAAUJ,OAAO,OAAOA,IAAIK,IAAI,KAAK,UAAU;YACjDH,gBAAgB,CAAC,CAAC,EAAEF,IAAIK,IAAI,CAAC,CAAC,CAAC;QACjC;IACF;IACA,OAAOH;AACT,EAAC"}
@@ -0,0 +1,9 @@
1
+ import type { DrizzleAdapter } from '../types.js';
2
+ /**
3
+ * Pushes the development schema to the database using Drizzle.
4
+ *
5
+ * @param {DrizzleAdapter} adapter - The PostgresAdapter instance connected to the database.
6
+ * @returns {Promise<void>} - A promise that resolves once the schema push is complete.
7
+ */
8
+ export declare const pushDevSchema: (adapter: DrizzleAdapter) => Promise<void>;
9
+ //# sourceMappingURL=pushDevSchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pushDevSchema.d.ts","sourceRoot":"","sources":["../../src/utilities/pushDevSchema.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAwB,MAAM,aAAa,CAAA;AAUvE;;;;;GAKG;AACH,eAAO,MAAM,aAAa,YAAmB,cAAc,kBA6F1D,CAAA"}
@@ -0,0 +1,83 @@
1
+ import { dequal } from 'dequal';
2
+ import prompts from 'prompts';
3
+ const previousSchema = {
4
+ localeCodes: null,
5
+ rawTables: null
6
+ };
7
+ /**
8
+ * Pushes the development schema to the database using Drizzle.
9
+ *
10
+ * @param {DrizzleAdapter} adapter - The PostgresAdapter instance connected to the database.
11
+ * @returns {Promise<void>} - A promise that resolves once the schema push is complete.
12
+ */ export const pushDevSchema = async (adapter)=>{
13
+ if (process.env.CMS_FORCE_DRIZZLE_PUSH !== 'true') {
14
+ const localeCodes = adapter.cms.config.localization && adapter.cms.config.localization.localeCodes;
15
+ const equal = dequal(previousSchema, {
16
+ localeCodes,
17
+ rawTables: adapter.rawTables
18
+ });
19
+ if (equal) {
20
+ if (adapter.logger) {
21
+ adapter.cms.logger.info('No changes detected in schema, skipping schema push.');
22
+ }
23
+ return;
24
+ } else {
25
+ previousSchema.localeCodes = localeCodes;
26
+ previousSchema.rawTables = adapter.rawTables;
27
+ }
28
+ }
29
+ const { pushSchema } = adapter.requireDrizzleKit();
30
+ const { extensions = {}, tablesFilter } = adapter;
31
+ // This will prompt if clarifications are needed for Drizzle to push new schema
32
+ const { apply, hasDataLoss, warnings } = await pushSchema(adapter.schema, adapter.drizzle, adapter.schemaName ? [
33
+ adapter.schemaName
34
+ ] : undefined, tablesFilter, // Drizzle extensionsFilter supports only postgis for now
35
+ // https://github.com/drizzle-team/drizzle-orm/blob/83daf2d5cf023112de878bc2249ee2c41a2a5b1b/drizzle-kit/src/cli/validations/cli.ts#L26
36
+ extensions.postgis ? [
37
+ 'postgis'
38
+ ] : undefined);
39
+ if (warnings.length) {
40
+ let message = `Warnings detected during schema push: \n\n${warnings.join('\n')}\n\n`;
41
+ if (hasDataLoss) {
42
+ message += `DATA LOSS WARNING: Possible data loss detected if schema is pushed.\n\n`;
43
+ }
44
+ message += `Accept warnings and push schema to database?`;
45
+ const { confirm: acceptWarnings } = await prompts({
46
+ name: 'confirm',
47
+ type: 'confirm',
48
+ initial: false,
49
+ message
50
+ }, {
51
+ onCancel: ()=>{
52
+ process.exit(0);
53
+ }
54
+ });
55
+ // Exit if user does not accept warnings.
56
+ // Q: Is this the right type of exit for this interaction?
57
+ if (!acceptWarnings) {
58
+ process.exit(0);
59
+ }
60
+ }
61
+ await apply();
62
+ const migrationsTable = adapter.schemaName ? `"${adapter.schemaName}"."cms_migrations"` : '"cms_migrations"';
63
+ const drizzle = adapter.drizzle;
64
+ const result = await adapter.execute({
65
+ drizzle,
66
+ raw: `SELECT * FROM ${migrationsTable} WHERE batch = '-1'`
67
+ });
68
+ const devPush = result.rows;
69
+ if (!devPush.length) {
70
+ // Use drizzle for insert so $defaultFn's are called
71
+ await drizzle.insert(adapter.tables.cms_migrations).values({
72
+ name: 'dev',
73
+ batch: -1
74
+ });
75
+ } else {
76
+ await adapter.execute({
77
+ drizzle,
78
+ raw: `UPDATE ${migrationsTable} SET updated_at = CURRENT_TIMESTAMP WHERE batch = '-1'`
79
+ });
80
+ }
81
+ };
82
+
83
+ //# sourceMappingURL=pushDevSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/pushDevSchema.ts"],"sourcesContent":["import { dequal } from 'dequal'\nimport prompts from 'prompts'\n\nimport type { BasePostgresAdapter } from '../postgres/types.js'\nimport type { DrizzleAdapter, PostgresDB, RawTable } from '../types.js'\n\nconst previousSchema: {\n localeCodes: null | string[]\n rawTables: null | Record<string, RawTable>\n} = {\n localeCodes: null,\n rawTables: null,\n}\n\n/**\n * Pushes the development schema to the database using Drizzle.\n *\n * @param {DrizzleAdapter} adapter - The PostgresAdapter instance connected to the database.\n * @returns {Promise<void>} - A promise that resolves once the schema push is complete.\n */\nexport const pushDevSchema = async (adapter: DrizzleAdapter) => {\n if (process.env.CMS_FORCE_DRIZZLE_PUSH !== 'true') {\n const localeCodes =\n adapter.cms.config.localization && adapter.cms.config.localization.localeCodes\n\n const equal = dequal(previousSchema, {\n localeCodes,\n rawTables: adapter.rawTables,\n })\n\n if (equal) {\n if (adapter.logger) {\n adapter.cms.logger.info('No changes detected in schema, skipping schema push.')\n }\n\n return\n } else {\n previousSchema.localeCodes = localeCodes\n previousSchema.rawTables = adapter.rawTables\n }\n }\n\n const { pushSchema } = adapter.requireDrizzleKit()\n\n const { extensions = {}, tablesFilter } = adapter as BasePostgresAdapter\n\n // This will prompt if clarifications are needed for Drizzle to push new schema\n const { apply, hasDataLoss, warnings } = await pushSchema(\n adapter.schema,\n adapter.drizzle,\n adapter.schemaName ? [adapter.schemaName] : undefined,\n tablesFilter,\n // Drizzle extensionsFilter supports only postgis for now\n // https://github.com/drizzle-team/drizzle-orm/blob/83daf2d5cf023112de878bc2249ee2c41a2a5b1b/drizzle-kit/src/cli/validations/cli.ts#L26\n extensions.postgis ? ['postgis'] : undefined,\n )\n\n if (warnings.length) {\n let message = `Warnings detected during schema push: \\n\\n${warnings.join('\\n')}\\n\\n`\n\n if (hasDataLoss) {\n message += `DATA LOSS WARNING: Possible data loss detected if schema is pushed.\\n\\n`\n }\n\n message += `Accept warnings and push schema to database?`\n\n const { confirm: acceptWarnings } = await prompts(\n {\n name: 'confirm',\n type: 'confirm',\n initial: false,\n message,\n },\n {\n onCancel: () => {\n process.exit(0)\n },\n },\n )\n\n // Exit if user does not accept warnings.\n // Q: Is this the right type of exit for this interaction?\n if (!acceptWarnings) {\n process.exit(0)\n }\n }\n\n await apply()\n const migrationsTable = adapter.schemaName\n ? `\"${adapter.schemaName}\".\"cms_migrations\"`\n : '\"cms_migrations\"'\n\n const drizzle = adapter.drizzle as PostgresDB\n\n const result = await adapter.execute({\n drizzle,\n raw: `SELECT * FROM ${migrationsTable} WHERE batch = '-1'`,\n })\n\n const devPush = result.rows\n\n if (!devPush.length) {\n // Use drizzle for insert so $defaultFn's are called\n await drizzle.insert(adapter.tables.cms_migrations).values({\n name: 'dev',\n batch: -1,\n })\n } else {\n await adapter.execute({\n drizzle,\n raw: `UPDATE ${migrationsTable} SET updated_at = CURRENT_TIMESTAMP WHERE batch = '-1'`,\n })\n }\n}\n"],"names":["dequal","prompts","previousSchema","localeCodes","rawTables","pushDevSchema","adapter","process","env","CMS_FORCE_DRIZZLE_PUSH","cms","config","localization","equal","logger","info","pushSchema","requireDrizzleKit","extensions","tablesFilter","apply","hasDataLoss","warnings","schema","drizzle","schemaName","undefined","postgis","length","message","join","confirm","acceptWarnings","name","type","initial","onCancel","exit","migrationsTable","result","execute","raw","devPush","rows","insert","tables","cms_migrations","values","batch"],"mappings":"AAAA,SAASA,MAAM,QAAQ,SAAQ;AAC/B,OAAOC,aAAa,UAAS;AAK7B,MAAMC,iBAGF;IACFC,aAAa;IACbC,WAAW;AACb;AAEA;;;;;CAKC,GACD,OAAO,MAAMC,gBAAgB,OAAOC;IAClC,IAAIC,QAAQC,GAAG,CAACC,sBAAsB,KAAK,QAAQ;QACjD,MAAMN,cACJG,QAAQI,GAAG,CAACC,MAAM,CAACC,YAAY,IAAIN,QAAQI,GAAG,CAACC,MAAM,CAACC,YAAY,CAACT,WAAW;QAEhF,MAAMU,QAAQb,OAAOE,gBAAgB;YACnCC;YACAC,WAAWE,QAAQF,SAAS;QAC9B;QAEA,IAAIS,OAAO;YACT,IAAIP,QAAQQ,MAAM,EAAE;gBAClBR,QAAQI,GAAG,CAACI,MAAM,CAACC,IAAI,CAAC;YAC1B;YAEA;QACF,OAAO;YACLb,eAAeC,WAAW,GAAGA;YAC7BD,eAAeE,SAAS,GAAGE,QAAQF,SAAS;QAC9C;IACF;IAEA,MAAM,EAAEY,UAAU,EAAE,GAAGV,QAAQW,iBAAiB;IAEhD,MAAM,EAAEC,aAAa,CAAC,CAAC,EAAEC,YAAY,EAAE,GAAGb;IAE1C,+EAA+E;IAC/E,MAAM,EAAEc,KAAK,EAAEC,WAAW,EAAEC,QAAQ,EAAE,GAAG,MAAMN,WAC7CV,QAAQiB,MAAM,EACdjB,QAAQkB,OAAO,EACflB,QAAQmB,UAAU,GAAG;QAACnB,QAAQmB,UAAU;KAAC,GAAGC,WAC5CP,cACA,yDAAyD;IACzD,uIAAuI;IACvID,WAAWS,OAAO,GAAG;QAAC;KAAU,GAAGD;IAGrC,IAAIJ,SAASM,MAAM,EAAE;QACnB,IAAIC,UAAU,CAAC,0CAA0C,EAAEP,SAASQ,IAAI,CAAC,MAAM,IAAI,CAAC;QAEpF,IAAIT,aAAa;YACfQ,WAAW,CAAC,uEAAuE,CAAC;QACtF;QAEAA,WAAW,CAAC,4CAA4C,CAAC;QAEzD,MAAM,EAAEE,SAASC,cAAc,EAAE,GAAG,MAAM/B,QACxC;YACEgC,MAAM;YACNC,MAAM;YACNC,SAAS;YACTN;QACF,GACA;YACEO,UAAU;gBACR7B,QAAQ8B,IAAI,CAAC;YACf;QACF;QAGF,yCAAyC;QACzC,0DAA0D;QAC1D,IAAI,CAACL,gBAAgB;YACnBzB,QAAQ8B,IAAI,CAAC;QACf;IACF;IAEA,MAAMjB;IACN,MAAMkB,kBAAkBhC,QAAQmB,UAAU,GACtC,CAAC,CAAC,EAAEnB,QAAQmB,UAAU,CAAC,kBAAkB,CAAC,GAC1C;IAEJ,MAAMD,UAAUlB,QAAQkB,OAAO;IAE/B,MAAMe,SAAS,MAAMjC,QAAQkC,OAAO,CAAC;QACnChB;QACAiB,KAAK,CAAC,cAAc,EAAEH,gBAAgB,mBAAmB,CAAC;IAC5D;IAEA,MAAMI,UAAUH,OAAOI,IAAI;IAE3B,IAAI,CAACD,QAAQd,MAAM,EAAE;QACnB,oDAAoD;QACpD,MAAMJ,QAAQoB,MAAM,CAACtC,QAAQuC,MAAM,CAACC,cAAc,EAAEC,MAAM,CAAC;YACzDd,MAAM;YACNe,OAAO,CAAC;QACV;IACF,OAAO;QACL,MAAM1C,QAAQkC,OAAO,CAAC;YACpBhB;YACAiB,KAAK,CAAC,OAAO,EAAEH,gBAAgB,sDAAsD,CAAC;QACxF;IACF;AACF,EAAC"}
@@ -0,0 +1,10 @@
1
+ export declare const DistinctSymbol: unique symbol;
2
+ /**
3
+ * You can use this to inject a raw query to where
4
+ */
5
+ export declare const rawConstraint: (value: unknown) => {
6
+ type: symbol;
7
+ value: unknown;
8
+ };
9
+ export declare const isRawConstraint: (value: unknown) => value is ReturnType<typeof rawConstraint>;
10
+ //# sourceMappingURL=rawConstraint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rawConstraint.d.ts","sourceRoot":"","sources":["../../src/utilities/rawConstraint.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,eAA2B,CAAA;AAEtD;;GAEG;AACH,eAAO,MAAM,aAAa,UAAW,OAAO;;;CAG1C,CAAA;AAEF,eAAO,MAAM,eAAe,UAAW,OAAO,KAAG,KAAK,IAAI,UAAU,CAAC,OAAO,aAAa,CAExF,CAAA"}
@@ -0,0 +1,13 @@
1
+ const RawConstraintSymbol = Symbol('RawConstraint');
2
+ export const DistinctSymbol = Symbol('DistinctSymbol');
3
+ /**
4
+ * You can use this to inject a raw query to where
5
+ */ export const rawConstraint = (value)=>({
6
+ type: RawConstraintSymbol,
7
+ value
8
+ });
9
+ export const isRawConstraint = (value)=>{
10
+ return value && typeof value === 'object' && 'type' in value && value.type === RawConstraintSymbol;
11
+ };
12
+
13
+ //# sourceMappingURL=rawConstraint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/rawConstraint.ts"],"sourcesContent":["const RawConstraintSymbol = Symbol('RawConstraint')\n\nexport const DistinctSymbol = Symbol('DistinctSymbol')\n\n/**\n * You can use this to inject a raw query to where\n */\nexport const rawConstraint = (value: unknown) => ({\n type: RawConstraintSymbol,\n value,\n})\n\nexport const isRawConstraint = (value: unknown): value is ReturnType<typeof rawConstraint> => {\n return value && typeof value === 'object' && 'type' in value && value.type === RawConstraintSymbol\n}\n"],"names":["RawConstraintSymbol","Symbol","DistinctSymbol","rawConstraint","value","type","isRawConstraint"],"mappings":"AAAA,MAAMA,sBAAsBC,OAAO;AAEnC,OAAO,MAAMC,iBAAiBD,OAAO,kBAAiB;AAEtD;;CAEC,GACD,OAAO,MAAME,gBAAgB,CAACC,QAAoB,CAAA;QAChDC,MAAML;QACNI;IACF,CAAA,EAAE;AAEF,OAAO,MAAME,kBAAkB,CAACF;IAC9B,OAAOA,SAAS,OAAOA,UAAU,YAAY,UAAUA,SAASA,MAAMC,IAAI,KAAKL;AACjF,EAAC"}
@@ -0,0 +1,17 @@
1
+ import type { DrizzleAdapter } from '../types.js';
2
+ /**
3
+ * Tracks the last write timestamp on the adapter so that reads within a
4
+ * configurable window after a write are routed to the primary instead of a
5
+ * read replica.
6
+ *
7
+ * This avoids stale-read issues caused by replication lag when application
8
+ * code writes then immediately reads (e.g. create → findByID).
9
+ */
10
+ /** Call after any successful write to mark the adapter. */
11
+ export declare function markWrite(adapter: DrizzleAdapter): void;
12
+ /**
13
+ * Returns true when a recent write happened and reads should be routed to the
14
+ * primary to guarantee read-after-write consistency.
15
+ */
16
+ export declare function shouldReadFromPrimary(adapter: DrizzleAdapter): boolean;
17
+ //# sourceMappingURL=readAfterWrite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readAfterWrite.d.ts","sourceRoot":"","sources":["../../src/utilities/readAfterWrite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD;;;;;;;GAOG;AAEH,2DAA2D;AAC3D,wBAAgB,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAEvD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAKtE"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Tracks the last write timestamp on the adapter so that reads within a
3
+ * configurable window after a write are routed to the primary instead of a
4
+ * read replica.
5
+ *
6
+ * This avoids stale-read issues caused by replication lag when application
7
+ * code writes then immediately reads (e.g. create → findByID).
8
+ */ /** Call after any successful write to mark the adapter. */ export function markWrite(adapter) {
9
+ adapter.lastWriteTimestamp = Date.now();
10
+ }
11
+ /**
12
+ * Returns true when a recent write happened and reads should be routed to the
13
+ * primary to guarantee read-after-write consistency.
14
+ */ export function shouldReadFromPrimary(adapter) {
15
+ if (!adapter.primaryDrizzle || !adapter.lastWriteTimestamp) {
16
+ return false;
17
+ }
18
+ return Date.now() - adapter.lastWriteTimestamp < adapter.readReplicasAfterWriteInterval;
19
+ }
20
+
21
+ //# sourceMappingURL=readAfterWrite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/readAfterWrite.ts"],"sourcesContent":["import type { DrizzleAdapter } from '../types.js'\n\n/**\n * Tracks the last write timestamp on the adapter so that reads within a\n * configurable window after a write are routed to the primary instead of a\n * read replica.\n *\n * This avoids stale-read issues caused by replication lag when application\n * code writes then immediately reads (e.g. create → findByID).\n */\n\n/** Call after any successful write to mark the adapter. */\nexport function markWrite(adapter: DrizzleAdapter): void {\n adapter.lastWriteTimestamp = Date.now()\n}\n\n/**\n * Returns true when a recent write happened and reads should be routed to the\n * primary to guarantee read-after-write consistency.\n */\nexport function shouldReadFromPrimary(adapter: DrizzleAdapter): boolean {\n if (!adapter.primaryDrizzle || !adapter.lastWriteTimestamp) {\n return false\n }\n return Date.now() - adapter.lastWriteTimestamp < adapter.readReplicasAfterWriteInterval\n}\n"],"names":["markWrite","adapter","lastWriteTimestamp","Date","now","shouldReadFromPrimary","primaryDrizzle","readReplicasAfterWriteInterval"],"mappings":"AAEA;;;;;;;CAOC,GAED,yDAAyD,GACzD,OAAO,SAASA,UAAUC,OAAuB;IAC/CA,QAAQC,kBAAkB,GAAGC,KAAKC,GAAG;AACvC;AAEA;;;CAGC,GACD,OAAO,SAASC,sBAAsBJ,OAAuB;IAC3D,IAAI,CAACA,QAAQK,cAAc,IAAI,CAACL,QAAQC,kBAAkB,EAAE;QAC1D,OAAO;IACT;IACA,OAAOC,KAAKC,GAAG,KAAKH,QAAQC,kBAAkB,GAAGD,QAAQM,8BAA8B;AACzF"}
@@ -0,0 +1,2 @@
1
+ export declare const sanitizePathSegment: (segment: string) => string;
2
+ //# sourceMappingURL=sanitizePathSegment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitizePathSegment.d.ts","sourceRoot":"","sources":["../../src/utilities/sanitizePathSegment.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,mBAAmB,YAAa,MAAM,KAAG,MAQrD,CAAA"}
@@ -0,0 +1,14 @@
1
+ import { APIError } from '@hanzo/cms';
2
+ /**
3
+ * Validates that a path segment contains only allowed characters (word characters: [a-zA-Z0-9_]).
4
+ *
5
+ * @throws {APIError} if the segment contains characters outside /^[\w]+$/
6
+ */ const SAFE_PATH_SEGMENT_REGEX = /^\w+$/;
7
+ export const sanitizePathSegment = (segment)=>{
8
+ if (!SAFE_PATH_SEGMENT_REGEX.test(segment)) {
9
+ throw new APIError('Invalid path segment. Only alphanumeric characters and underscores are permitted.', 400);
10
+ }
11
+ return segment;
12
+ };
13
+
14
+ //# sourceMappingURL=sanitizePathSegment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/sanitizePathSegment.ts"],"sourcesContent":["import { APIError } from '@hanzo/cms'\n\n/**\n * Validates that a path segment contains only allowed characters (word characters: [a-zA-Z0-9_]).\n *\n * @throws {APIError} if the segment contains characters outside /^[\\w]+$/\n */\nconst SAFE_PATH_SEGMENT_REGEX = /^\\w+$/\n\nexport const sanitizePathSegment = (segment: string): string => {\n if (!SAFE_PATH_SEGMENT_REGEX.test(segment)) {\n throw new APIError(\n 'Invalid path segment. Only alphanumeric characters and underscores are permitted.',\n 400,\n )\n }\n return segment\n}\n"],"names":["APIError","SAFE_PATH_SEGMENT_REGEX","sanitizePathSegment","segment","test"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,aAAY;AAErC;;;;CAIC,GACD,MAAMC,0BAA0B;AAEhC,OAAO,MAAMC,sBAAsB,CAACC;IAClC,IAAI,CAACF,wBAAwBG,IAAI,CAACD,UAAU;QAC1C,MAAM,IAAIH,SACR,qFACA;IAEJ;IACA,OAAOG;AACT,EAAC"}
@@ -0,0 +1,22 @@
1
+ import type { Block, FlattenedBlock } from '@hanzo/cms';
2
+ import type { RawTable } from '../types.js';
3
+ type Args = {
4
+ block: Block;
5
+ localized: boolean;
6
+ /**
7
+ * @todo make required in v4.0. Usually you'd wanna pass this in
8
+ */
9
+ parentIsLocalized?: boolean;
10
+ rootTableName: string;
11
+ table: RawTable;
12
+ tableLocales?: RawTable;
13
+ };
14
+ /**
15
+ * returns true if all the fields in a block are identical to the existing table
16
+ */
17
+ export declare const validateExistingBlockIsIdentical: ({ block, localized, parentIsLocalized, table, tableLocales, }: Args) => boolean;
18
+ export declare const InternalBlockTableNameIndex: unique symbol;
19
+ export declare const setInternalBlockIndex: (block: FlattenedBlock, index: number) => void;
20
+ export declare const resolveBlockTableName: (block: FlattenedBlock, originalTableName: string) => string;
21
+ export {};
22
+ //# sourceMappingURL=validateExistingBlockIsIdentical.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateExistingBlockIsIdentical.d.ts","sourceRoot":"","sources":["../../src/utilities/validateExistingBlockIsIdentical.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAS,cAAc,EAAE,MAAM,YAAY,CAAA;AAS9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,KAAK,IAAI,GAAG;IACV,KAAK,EAAE,KAAK,CAAA;IACZ,SAAS,EAAE,OAAO,CAAA;IAClB;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,QAAQ,CAAA;IACf,YAAY,CAAC,EAAE,QAAQ,CAAA;CACxB,CAAA;AA+DD;;GAEG;AACH,eAAO,MAAM,gCAAgC,kEAM1C,IAAI,KAAG,OAwBT,CAAA;AAED,eAAO,MAAM,2BAA2B,eAAwC,CAAA;AAChF,eAAO,MAAM,qBAAqB,UAAW,cAAc,SAAS,MAAM,SAEzE,CAAA;AAED,eAAO,MAAM,qBAAqB,UAAW,cAAc,qBAAqB,MAAM,WAMrF,CAAA"}