@hot-updater/server 0.33.1 → 0.34.0

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 (198) hide show
  1. package/dist/_virtual/_rolldown/runtime.cjs +0 -2
  2. package/dist/adapters/drizzle.cjs +195 -2
  3. package/dist/adapters/drizzle.d.cts +7 -4
  4. package/dist/adapters/drizzle.d.mts +7 -4
  5. package/dist/adapters/drizzle.mjs +194 -2
  6. package/dist/adapters/drizzleLazyDB.cjs +53 -0
  7. package/dist/adapters/drizzleLazyDB.mjs +53 -0
  8. package/dist/adapters/kysely.cjs +154 -3
  9. package/dist/adapters/kysely.d.cts +18 -10
  10. package/dist/adapters/kysely.d.mts +18 -10
  11. package/dist/adapters/kysely.mjs +153 -3
  12. package/dist/adapters/mongodb.cjs +183 -2
  13. package/dist/adapters/mongodb.d.cts +5 -4
  14. package/dist/adapters/mongodb.d.mts +5 -4
  15. package/dist/adapters/mongodb.mjs +183 -2
  16. package/dist/adapters/prisma.cjs +200 -2
  17. package/dist/adapters/prisma.d.cts +9 -4
  18. package/dist/adapters/prisma.d.mts +9 -4
  19. package/dist/adapters/prisma.mjs +199 -2
  20. package/dist/db/bundleRows.cjs +82 -0
  21. package/dist/db/bundleRows.d.cts +33 -0
  22. package/dist/db/bundleRows.d.mts +33 -0
  23. package/dist/db/bundleRows.mjs +79 -0
  24. package/dist/db/fixedMigrator.cjs +136 -0
  25. package/dist/db/fixedMigrator.mjs +135 -0
  26. package/dist/db/index.cjs +17 -15
  27. package/dist/db/index.d.cts +3 -3
  28. package/dist/db/index.d.mts +3 -3
  29. package/dist/db/index.mjs +17 -15
  30. package/dist/db/pluginCore.cjs +13 -5
  31. package/dist/db/pluginCore.mjs +13 -5
  32. package/dist/db/schema/mongodb.cjs +17 -0
  33. package/dist/db/schema/mongodb.mjs +17 -0
  34. package/dist/db/schema/registry.cjs +23 -0
  35. package/dist/db/schema/registry.mjs +18 -0
  36. package/dist/db/schema/sql.cjs +84 -0
  37. package/dist/db/schema/sql.mjs +78 -0
  38. package/dist/db/schema/sqlMigrations.cjs +74 -0
  39. package/dist/db/schema/sqlMigrations.mjs +73 -0
  40. package/dist/db/schema/sqlOperations.cjs +27 -0
  41. package/dist/db/schema/sqlOperations.mjs +26 -0
  42. package/dist/db/schemaEnhancements.cjs +1 -152
  43. package/dist/db/schemaEnhancements.mjs +1 -149
  44. package/dist/db/schemaGenerators.cjs +222 -0
  45. package/dist/db/schemaGenerators.mjs +220 -0
  46. package/dist/db/schemaReadiness.cjs +23 -0
  47. package/dist/db/schemaReadiness.d.cts +8 -0
  48. package/dist/db/schemaReadiness.d.mts +8 -0
  49. package/dist/db/schemaReadiness.mjs +22 -0
  50. package/dist/db/types.cjs +10 -2
  51. package/dist/db/types.d.cts +58 -14
  52. package/dist/db/types.d.mts +58 -14
  53. package/dist/db/types.mjs +9 -1
  54. package/dist/index.cjs +2 -2
  55. package/dist/index.d.cts +3 -2
  56. package/dist/index.d.mts +3 -2
  57. package/dist/index.mjs +2 -2
  58. package/dist/{packages/server/package.cjs → package.cjs} +1 -1
  59. package/dist/{packages/server/package.mjs → package.mjs} +1 -1
  60. package/dist/runtime.cjs +9 -2
  61. package/dist/runtime.mjs +9 -2
  62. package/dist/schema/dsl.cjs +86 -0
  63. package/dist/schema/dsl.mjs +73 -0
  64. package/dist/schema/index.cjs +13 -0
  65. package/dist/schema/index.mjs +13 -0
  66. package/dist/schema/settings.cjs +9 -0
  67. package/dist/schema/settings.mjs +9 -0
  68. package/dist/schema/types.cjs +6 -0
  69. package/dist/schema/types.mjs +5 -0
  70. package/dist/schema/v0_21_0.cjs +33 -18
  71. package/dist/schema/v0_21_0.mjs +32 -18
  72. package/dist/schema/v0_29_0.cjs +40 -20
  73. package/dist/schema/v0_29_0.mjs +39 -20
  74. package/dist/schema/v0_31_0.cjs +77 -43
  75. package/dist/schema/v0_31_0.mjs +75 -43
  76. package/dist/version.cjs +1 -1
  77. package/dist/version.mjs +1 -1
  78. package/package.json +30 -16
  79. package/src/adapters/drizzle.spec.ts +75 -0
  80. package/src/adapters/drizzle.ts +328 -12
  81. package/src/adapters/drizzleLazyDB.ts +151 -0
  82. package/src/adapters/kysely.spec.ts +107 -0
  83. package/src/adapters/kysely.ts +349 -14
  84. package/src/adapters/mongodb.ts +298 -15
  85. package/src/adapters/prisma.ts +337 -12
  86. package/src/db/bundleRows.ts +140 -0
  87. package/src/db/fixedMigrator.spec.ts +89 -0
  88. package/src/db/fixedMigrator.ts +288 -0
  89. package/src/db/hotUpdaterSchema.ts +6 -0
  90. package/src/db/index.spec.ts +976 -13
  91. package/src/db/index.ts +37 -36
  92. package/src/db/pluginCore.spec.ts +17 -11
  93. package/src/db/pluginCore.ts +15 -6
  94. package/src/db/schema/definitions.ts +1 -0
  95. package/src/db/schema/mongodb.ts +26 -0
  96. package/src/db/schema/registry.ts +55 -0
  97. package/src/db/schema/sql.ts +200 -0
  98. package/src/db/schema/sqlMigrations.ts +219 -0
  99. package/src/db/schema/sqlOperations.ts +62 -0
  100. package/src/db/schema/types.ts +1 -0
  101. package/src/db/schemaEnhancements.ts +0 -405
  102. package/src/db/schemaGenerators.ts +382 -0
  103. package/src/db/schemaReadiness.ts +33 -0
  104. package/src/db/types.ts +69 -25
  105. package/src/runtime.spec.ts +70 -0
  106. package/src/runtime.ts +14 -2
  107. package/src/schema/dsl-all-versions.spec.ts +26 -0
  108. package/src/schema/dsl.ts +148 -0
  109. package/src/schema/index.ts +16 -0
  110. package/src/schema/settings.ts +15 -0
  111. package/src/schema/types.ts +73 -0
  112. package/src/schema/v0_21_0.ts +48 -18
  113. package/src/schema/v0_29_0.ts +58 -22
  114. package/src/schema/v0_31_0.spec.ts +73 -0
  115. package/src/schema/v0_31_0.ts +116 -54
  116. package/dist/_virtual/_rolldown/runtime.mjs +0 -6
  117. package/dist/calculatePagination.cjs +0 -25
  118. package/dist/calculatePagination.mjs +0 -25
  119. package/dist/db/ormCore.cjs +0 -577
  120. package/dist/db/ormCore.d.cts +0 -110
  121. package/dist/db/ormCore.d.mts +0 -110
  122. package/dist/db/ormCore.mjs +0 -575
  123. package/dist/node_modules/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/_u64.cjs +0 -112
  124. package/dist/node_modules/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/_u64.mjs +0 -108
  125. package/dist/node_modules/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/cryptoNode.cjs +0 -22
  126. package/dist/node_modules/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/cryptoNode.mjs +0 -18
  127. package/dist/node_modules/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/sha3.cjs +0 -219
  128. package/dist/node_modules/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/sha3.mjs +0 -214
  129. package/dist/node_modules/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/utils.cjs +0 -275
  130. package/dist/node_modules/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/utils.mjs +0 -270
  131. package/dist/node_modules/.pnpm/@paralleldrive_cuid2@2.3.1/node_modules/@paralleldrive/cuid2/index.cjs +0 -17
  132. package/dist/node_modules/.pnpm/@paralleldrive_cuid2@2.3.1/node_modules/@paralleldrive/cuid2/index.mjs +0 -13
  133. package/dist/node_modules/.pnpm/@paralleldrive_cuid2@2.3.1/node_modules/@paralleldrive/cuid2/src/index.cjs +0 -69
  134. package/dist/node_modules/.pnpm/@paralleldrive_cuid2@2.3.1/node_modules/@paralleldrive/cuid2/src/index.mjs +0 -65
  135. package/dist/node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare_workers-types@4.20260611.1_@electric-sql_pglite@0.4.1_@l_601a3995dfc55b0b7fac93cbe1e76579/node_modules/drizzle-orm/column.cjs +0 -52
  136. package/dist/node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare_workers-types@4.20260611.1_@electric-sql_pglite@0.4.1_@l_601a3995dfc55b0b7fac93cbe1e76579/node_modules/drizzle-orm/column.mjs +0 -52
  137. package/dist/node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare_workers-types@4.20260611.1_@electric-sql_pglite@0.4.1_@l_601a3995dfc55b0b7fac93cbe1e76579/node_modules/drizzle-orm/entity.cjs +0 -16
  138. package/dist/node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare_workers-types@4.20260611.1_@electric-sql_pglite@0.4.1_@l_601a3995dfc55b0b7fac93cbe1e76579/node_modules/drizzle-orm/entity.mjs +0 -15
  139. package/dist/node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare_workers-types@4.20260611.1_@electric-sql_pglite@0.4.1_@l_601a3995dfc55b0b7fac93cbe1e76579/node_modules/drizzle-orm/pg-core/columns/enum.cjs +0 -7
  140. package/dist/node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare_workers-types@4.20260611.1_@electric-sql_pglite@0.4.1_@l_601a3995dfc55b0b7fac93cbe1e76579/node_modules/drizzle-orm/pg-core/columns/enum.mjs +0 -7
  141. package/dist/node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare_workers-types@4.20260611.1_@electric-sql_pglite@0.4.1_@l_601a3995dfc55b0b7fac93cbe1e76579/node_modules/drizzle-orm/sql/expressions/conditions.cjs +0 -92
  142. package/dist/node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare_workers-types@4.20260611.1_@electric-sql_pglite@0.4.1_@l_601a3995dfc55b0b7fac93cbe1e76579/node_modules/drizzle-orm/sql/expressions/conditions.mjs +0 -78
  143. package/dist/node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare_workers-types@4.20260611.1_@electric-sql_pglite@0.4.1_@l_601a3995dfc55b0b7fac93cbe1e76579/node_modules/drizzle-orm/sql/expressions/select.cjs +0 -11
  144. package/dist/node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare_workers-types@4.20260611.1_@electric-sql_pglite@0.4.1_@l_601a3995dfc55b0b7fac93cbe1e76579/node_modules/drizzle-orm/sql/expressions/select.mjs +0 -10
  145. package/dist/node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare_workers-types@4.20260611.1_@electric-sql_pglite@0.4.1_@l_601a3995dfc55b0b7fac93cbe1e76579/node_modules/drizzle-orm/sql/sql.cjs +0 -383
  146. package/dist/node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare_workers-types@4.20260611.1_@electric-sql_pglite@0.4.1_@l_601a3995dfc55b0b7fac93cbe1e76579/node_modules/drizzle-orm/sql/sql.mjs +0 -366
  147. package/dist/node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare_workers-types@4.20260611.1_@electric-sql_pglite@0.4.1_@l_601a3995dfc55b0b7fac93cbe1e76579/node_modules/drizzle-orm/subquery.cjs +0 -17
  148. package/dist/node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare_workers-types@4.20260611.1_@electric-sql_pglite@0.4.1_@l_601a3995dfc55b0b7fac93cbe1e76579/node_modules/drizzle-orm/subquery.mjs +0 -17
  149. package/dist/node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare_workers-types@4.20260611.1_@electric-sql_pglite@0.4.1_@l_601a3995dfc55b0b7fac93cbe1e76579/node_modules/drizzle-orm/table.cjs +0 -60
  150. package/dist/node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare_workers-types@4.20260611.1_@electric-sql_pglite@0.4.1_@l_601a3995dfc55b0b7fac93cbe1e76579/node_modules/drizzle-orm/table.mjs +0 -59
  151. package/dist/node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare_workers-types@4.20260611.1_@electric-sql_pglite@0.4.1_@l_601a3995dfc55b0b7fac93cbe1e76579/node_modules/drizzle-orm/table.utils.cjs +0 -4
  152. package/dist/node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare_workers-types@4.20260611.1_@electric-sql_pglite@0.4.1_@l_601a3995dfc55b0b7fac93cbe1e76579/node_modules/drizzle-orm/table.utils.mjs +0 -4
  153. package/dist/node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare_workers-types@4.20260611.1_@electric-sql_pglite@0.4.1_@l_601a3995dfc55b0b7fac93cbe1e76579/node_modules/drizzle-orm/tracing.cjs +0 -6
  154. package/dist/node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare_workers-types@4.20260611.1_@electric-sql_pglite@0.4.1_@l_601a3995dfc55b0b7fac93cbe1e76579/node_modules/drizzle-orm/tracing.mjs +0 -6
  155. package/dist/node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare_workers-types@4.20260611.1_@electric-sql_pglite@0.4.1_@l_601a3995dfc55b0b7fac93cbe1e76579/node_modules/drizzle-orm/view-common.cjs +0 -4
  156. package/dist/node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare_workers-types@4.20260611.1_@electric-sql_pglite@0.4.1_@l_601a3995dfc55b0b7fac93cbe1e76579/node_modules/drizzle-orm/view-common.mjs +0 -4
  157. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/adapters/drizzle/index.cjs +0 -383
  158. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/adapters/drizzle/index.d.cts +0 -12
  159. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/adapters/drizzle/index.d.mts +0 -12
  160. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/adapters/drizzle/index.mjs +0 -383
  161. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/adapters/kysely/index.cjs +0 -4
  162. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/adapters/kysely/index.mjs +0 -5
  163. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/adapters/prisma/index.cjs +0 -339
  164. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/adapters/prisma/index.d.cts +0 -70
  165. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/adapters/prisma/index.d.mts +0 -70
  166. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/adapters/prisma/index.mjs +0 -339
  167. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/chunk-7PZK4ONR.cjs +0 -57
  168. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/chunk-7PZK4ONR.mjs +0 -56
  169. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/chunk-C6OTUURW.cjs +0 -330
  170. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/chunk-C6OTUURW.mjs +0 -326
  171. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/chunk-CHTIKPQU.cjs +0 -166
  172. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/chunk-CHTIKPQU.mjs +0 -163
  173. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/chunk-GUE4GMNC.cjs +0 -14
  174. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/chunk-GUE4GMNC.mjs +0 -13
  175. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/chunk-LHHP6UVP.cjs +0 -24
  176. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/chunk-LHHP6UVP.mjs +0 -24
  177. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/chunk-LVCPMTAT.cjs +0 -1190
  178. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/chunk-LVCPMTAT.mjs +0 -1189
  179. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/chunk-PK2W2SQ7.cjs +0 -197
  180. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/chunk-PK2W2SQ7.mjs +0 -197
  181. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/chunk-ZEQMAIFI.cjs +0 -410
  182. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/chunk-ZEQMAIFI.mjs +0 -400
  183. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/chunk-ZOCGSAWS.cjs +0 -213
  184. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/chunk-ZOCGSAWS.mjs +0 -212
  185. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/create-tg0451Y_.d.cts +0 -285
  186. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/create-tg0451Y_.d.mts +0 -285
  187. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/index-CMqePMTF.d.cts +0 -45
  188. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/index-CMqePMTF.d.mts +0 -45
  189. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/index.cjs +0 -69
  190. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/index.d.cts +0 -49
  191. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/index.d.mts +0 -49
  192. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/index.mjs +0 -67
  193. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/query/index.d.cts +0 -156
  194. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/query/index.d.mts +0 -156
  195. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/schema/index.cjs +0 -1
  196. package/dist/node_modules/.pnpm/fumadb@0.2.2_mongodb@6.20.0_@aws-sdk_credential-providers@3.1066.0_socks@2.8.9__prisma@_ee79457f0e32f18f0beb5c2db02e4f73/node_modules/fumadb/dist/schema/index.mjs +0 -2
  197. package/src/db/ormCore.ts +0 -1059
  198. package/src/db/ormUpdateCheck.bench.ts +0 -262
@@ -0,0 +1,140 @@
1
+ import type { Bundle, BundlePatchArtifact, Platform } from "@hot-updater/core";
2
+ import {
3
+ DEFAULT_ROLLOUT_COHORT_COUNT,
4
+ getAssetBaseStorageUri,
5
+ getBundlePatches,
6
+ getManifestFileHash,
7
+ getManifestStorageUri,
8
+ stripBundleArtifactMetadata,
9
+ } from "@hot-updater/core";
10
+
11
+ import { parseBundleMetadata } from "./updateArtifacts";
12
+
13
+ export type BundleRow = {
14
+ readonly id: string;
15
+ readonly platform: string;
16
+ readonly should_force_update: unknown;
17
+ readonly enabled: unknown;
18
+ readonly file_hash: string;
19
+ readonly git_commit_hash: string | null;
20
+ readonly message: string | null;
21
+ readonly channel: string;
22
+ readonly storage_uri: string;
23
+ readonly target_app_version: string | null;
24
+ readonly fingerprint_hash: string | null;
25
+ readonly metadata?: unknown;
26
+ readonly manifest_storage_uri?: string | null;
27
+ readonly manifest_file_hash?: string | null;
28
+ readonly asset_base_storage_uri?: string | null;
29
+ readonly rollout_cohort_count?: number | null;
30
+ readonly target_cohorts?: unknown;
31
+ };
32
+
33
+ export type BundlePatchRow = {
34
+ readonly id: string;
35
+ readonly bundle_id: string;
36
+ readonly base_bundle_id: string;
37
+ readonly base_file_hash: string;
38
+ readonly patch_file_hash: string;
39
+ readonly patch_storage_uri: string;
40
+ readonly order_index?: number | null;
41
+ };
42
+
43
+ const parseTargetCohorts = (value: unknown): string[] | null => {
44
+ if (!value) return null;
45
+ if (Array.isArray(value)) {
46
+ return value.filter((item): item is string => typeof item === "string");
47
+ }
48
+ if (typeof value !== "string") return null;
49
+ try {
50
+ const parsed = JSON.parse(value) as unknown;
51
+ return Array.isArray(parsed)
52
+ ? parsed.filter((item): item is string => typeof item === "string")
53
+ : null;
54
+ } catch {
55
+ return null;
56
+ }
57
+ };
58
+
59
+ const buildBundlePatchId = (bundleId: string, baseBundleId: string) =>
60
+ `${bundleId}:${baseBundleId}`;
61
+
62
+ export const bundleToRow = (bundle: Bundle): BundleRow => ({
63
+ id: bundle.id,
64
+ platform: bundle.platform,
65
+ should_force_update: bundle.shouldForceUpdate,
66
+ enabled: bundle.enabled,
67
+ file_hash: bundle.fileHash,
68
+ git_commit_hash: bundle.gitCommitHash,
69
+ message: bundle.message,
70
+ channel: bundle.channel,
71
+ storage_uri: bundle.storageUri,
72
+ target_app_version: bundle.targetAppVersion,
73
+ fingerprint_hash: bundle.fingerprintHash,
74
+ metadata: stripBundleArtifactMetadata(bundle.metadata) ?? {},
75
+ manifest_storage_uri: getManifestStorageUri(bundle),
76
+ manifest_file_hash: getManifestFileHash(bundle),
77
+ asset_base_storage_uri: getAssetBaseStorageUri(bundle),
78
+ rollout_cohort_count:
79
+ bundle.rolloutCohortCount ?? DEFAULT_ROLLOUT_COHORT_COUNT,
80
+ target_cohorts: bundle.targetCohorts ?? null,
81
+ });
82
+
83
+ export const bundleToPatchRows = (bundle: Bundle): BundlePatchRow[] =>
84
+ getBundlePatches(bundle).map((patch, index) => ({
85
+ id: buildBundlePatchId(bundle.id, patch.baseBundleId),
86
+ bundle_id: bundle.id,
87
+ base_bundle_id: patch.baseBundleId,
88
+ base_file_hash: patch.baseFileHash,
89
+ patch_file_hash: patch.patchFileHash,
90
+ patch_storage_uri: patch.patchStorageUri,
91
+ order_index: index,
92
+ }));
93
+
94
+ const mapPatchRowToPatch = (record: BundlePatchRow): BundlePatchArtifact => ({
95
+ baseBundleId: record.base_bundle_id,
96
+ baseFileHash: record.base_file_hash,
97
+ patchFileHash: record.patch_file_hash,
98
+ patchStorageUri: record.patch_storage_uri,
99
+ });
100
+
101
+ export const rowToBundle = (
102
+ record: BundleRow,
103
+ patchRecords: readonly BundlePatchRow[] = [],
104
+ ): Bundle => {
105
+ const patches = patchRecords
106
+ .slice()
107
+ .sort(
108
+ (left, right) =>
109
+ (left.order_index ?? 0) - (right.order_index ?? 0) ||
110
+ left.base_bundle_id.localeCompare(right.base_bundle_id),
111
+ )
112
+ .map(mapPatchRowToPatch);
113
+ const primaryPatch = patches[0] ?? null;
114
+
115
+ return {
116
+ id: record.id,
117
+ platform: record.platform as Platform,
118
+ shouldForceUpdate: Boolean(record.should_force_update),
119
+ enabled: Boolean(record.enabled),
120
+ fileHash: record.file_hash,
121
+ gitCommitHash: record.git_commit_hash ?? null,
122
+ message: record.message ?? null,
123
+ channel: record.channel,
124
+ storageUri: record.storage_uri,
125
+ targetAppVersion: record.target_app_version ?? null,
126
+ fingerprintHash: record.fingerprint_hash ?? null,
127
+ metadata: parseBundleMetadata(record.metadata),
128
+ manifestStorageUri: record.manifest_storage_uri ?? null,
129
+ manifestFileHash: record.manifest_file_hash ?? null,
130
+ assetBaseStorageUri: record.asset_base_storage_uri ?? null,
131
+ patches,
132
+ patchBaseBundleId: primaryPatch?.baseBundleId ?? null,
133
+ patchBaseFileHash: primaryPatch?.baseFileHash ?? null,
134
+ patchFileHash: primaryPatch?.patchFileHash ?? null,
135
+ patchStorageUri: primaryPatch?.patchStorageUri ?? null,
136
+ rolloutCohortCount:
137
+ record.rollout_cohort_count ?? DEFAULT_ROLLOUT_COHORT_COUNT,
138
+ targetCohorts: parseTargetCohorts(record.target_cohorts),
139
+ };
140
+ };
@@ -0,0 +1,89 @@
1
+ import { PGlite } from "@electric-sql/pglite";
2
+ import { Kysely } from "kysely";
3
+ import { PGliteDialect } from "kysely-pglite-dialect";
4
+ import { afterEach, describe, expect, it } from "vitest";
5
+
6
+ import { createKyselyMigrator } from "./fixedMigrator";
7
+
8
+ interface SettingsDatabase {
9
+ readonly private_hot_updater_settings: {
10
+ readonly key: string;
11
+ readonly value: string;
12
+ };
13
+ }
14
+
15
+ describe("createKyselyMigrator", () => {
16
+ const databases: PGlite[] = [];
17
+ const kyselyInstances: Kysely<SettingsDatabase>[] = [];
18
+
19
+ afterEach(async () => {
20
+ for (const kysely of kyselyInstances.splice(0)) {
21
+ await kysely.destroy();
22
+ }
23
+ for (const db of databases.splice(0)) {
24
+ await db.close();
25
+ }
26
+ });
27
+
28
+ it("includes the schema version row in fresh standalone SQL", async () => {
29
+ const db = new PGlite();
30
+ databases.push(db);
31
+ const kysely = new Kysely<SettingsDatabase>({
32
+ dialect: new PGliteDialect(db),
33
+ });
34
+ kyselyInstances.push(kysely);
35
+ const migrator = createKyselyMigrator({
36
+ db: kysely,
37
+ provider: "postgresql",
38
+ });
39
+
40
+ const migration = await migrator.migrateToLatest({
41
+ mode: "from-schema",
42
+ updateSettings: false,
43
+ });
44
+
45
+ expect(migration.getSQL?.()).toContain(
46
+ "insert into private_hot_updater_settings (key, value) values ('version', '0.31.0')",
47
+ );
48
+ expect(migration.operations).not.toContainEqual(
49
+ expect.objectContaining({
50
+ sql: expect.stringContaining(
51
+ "insert into private_hot_updater_settings",
52
+ ),
53
+ }),
54
+ );
55
+ });
56
+
57
+ it("rejects unknown schema versions before writing settings", async () => {
58
+ const db = new PGlite();
59
+ databases.push(db);
60
+ const kysely = new Kysely<SettingsDatabase>({
61
+ dialect: new PGliteDialect(db),
62
+ });
63
+ kyselyInstances.push(kysely);
64
+ await db.exec(`
65
+ create table private_hot_updater_settings (
66
+ key text primary key,
67
+ value text not null
68
+ );
69
+ insert into private_hot_updater_settings (key, value)
70
+ values ('version', '0.20.0');
71
+ `);
72
+ const migrator = createKyselyMigrator({
73
+ db: kysely,
74
+ provider: "postgresql",
75
+ });
76
+
77
+ await expect(
78
+ migrator.migrateToLatest({
79
+ mode: "from-schema",
80
+ updateSettings: true,
81
+ }),
82
+ ).rejects.toThrow("Unsupported Hot Updater schema version: 0.20.0");
83
+
84
+ const version = await db.query<{ value: string }>(
85
+ "select value from private_hot_updater_settings where key = 'version'",
86
+ );
87
+ expect(version.rows[0]?.value).toBe("0.20.0");
88
+ });
89
+ });
@@ -0,0 +1,288 @@
1
+ import type { Kysely } from "kysely";
2
+ import type { MongoClient } from "mongodb";
3
+
4
+ import {
5
+ HOT_UPDATER_SCHEMA_VERSION,
6
+ HOT_UPDATER_SETTINGS_TABLE,
7
+ } from "../schema/types";
8
+ import { createMongoMigrationOperations } from "./schema/mongodb";
9
+ import {
10
+ hotUpdaterSchema,
11
+ schemaIndexAppliesToProvider,
12
+ } from "./schema/registry";
13
+ import { createTableSql } from "./schema/sql";
14
+ import { createV029AlterSql, createV031AlterSql } from "./schema/sqlMigrations";
15
+ import {
16
+ createSqlCreateOperations,
17
+ getSettingsInsertSql,
18
+ } from "./schema/sqlOperations";
19
+ import type {
20
+ MigrateOptions,
21
+ MigrationOperation,
22
+ MigrationResult,
23
+ Migrator,
24
+ ORMSQLProvider,
25
+ RelationMode,
26
+ } from "./types";
27
+
28
+ interface SettingsDatabase {
29
+ readonly private_hot_updater_settings: {
30
+ readonly key: string;
31
+ readonly value: string;
32
+ };
33
+ }
34
+
35
+ const getEmptyResult = (): MigrationResult => ({
36
+ operations: [],
37
+ execute: async () => {},
38
+ getSQL: () => "",
39
+ });
40
+
41
+ const assertSupportedMigrationMode = (options: MigrateOptions): void => {
42
+ if (options.mode === "from-database") {
43
+ throw new Error("Hot Updater migrations support only mode: 'from-schema'.");
44
+ }
45
+ };
46
+
47
+ const isMissingSettingsTableError = (error: unknown): boolean => {
48
+ if (!(error instanceof Error)) return false;
49
+ const message = error.message.toLowerCase();
50
+ return (
51
+ message.includes("private_hot_updater_settings") &&
52
+ (message.includes("does not exist") ||
53
+ message.includes("no such table") ||
54
+ message.includes("doesn't exist") ||
55
+ message.includes("not found"))
56
+ );
57
+ };
58
+
59
+ const isMongoNamespaceExistsError = (error: unknown): boolean => {
60
+ if (!(error instanceof Error)) return false;
61
+ const mongoError = error as { code?: unknown; codeName?: unknown };
62
+ return mongoError.code === 48 || mongoError.codeName === "NamespaceExists";
63
+ };
64
+
65
+ const ignoreExistingCollection = (error: unknown): undefined => {
66
+ if (isMongoNamespaceExistsError(error)) {
67
+ return undefined;
68
+ }
69
+ throw error;
70
+ };
71
+
72
+ const toCustomOperations = (
73
+ statements: readonly string[],
74
+ settingsOperation?: MigrationOperation,
75
+ ): MigrationOperation[] => [
76
+ ...statements.map(
77
+ (statement): MigrationOperation => ({
78
+ type: "custom",
79
+ sql: statement,
80
+ }),
81
+ ),
82
+ ...(settingsOperation ? [settingsOperation] : []),
83
+ ];
84
+
85
+ const assertSupportedSchemaVersion = (
86
+ currentVersion: string | undefined,
87
+ ): void => {
88
+ if (
89
+ currentVersion !== undefined &&
90
+ currentVersion !== "0.21.0" &&
91
+ currentVersion !== "0.29.0"
92
+ ) {
93
+ throw new Error(
94
+ `Unsupported Hot Updater schema version: ${currentVersion}`,
95
+ );
96
+ }
97
+ };
98
+
99
+ export const createKyselyMigrator = ({
100
+ db,
101
+ provider,
102
+ relationMode = "foreign-keys",
103
+ }: {
104
+ db: Kysely<SettingsDatabase>;
105
+ provider: ORMSQLProvider;
106
+ relationMode?: RelationMode;
107
+ }): Migrator => {
108
+ const getVersion = async (): Promise<string | undefined> => {
109
+ try {
110
+ const row = await db
111
+ .selectFrom(HOT_UPDATER_SETTINGS_TABLE)
112
+ .select("value")
113
+ .where("key", "=", "version")
114
+ .executeTakeFirst();
115
+ return typeof row?.value === "string" ? row.value : undefined;
116
+ } catch (error) {
117
+ if (!isMissingSettingsTableError(error)) throw error;
118
+ return undefined;
119
+ }
120
+ };
121
+
122
+ const makeResult = async (
123
+ options: MigrateOptions = {},
124
+ ): Promise<MigrationResult> => {
125
+ assertSupportedMigrationMode(options);
126
+
127
+ const currentVersion = await getVersion();
128
+ if (currentVersion === HOT_UPDATER_SCHEMA_VERSION) {
129
+ return getEmptyResult();
130
+ }
131
+ assertSupportedSchemaVersion(currentVersion);
132
+
133
+ const settingsStatement = getSettingsInsertSql(provider);
134
+ const settingsOperation =
135
+ options.updateSettings === false
136
+ ? undefined
137
+ : ({
138
+ type: "custom",
139
+ sql: settingsStatement,
140
+ } satisfies MigrationOperation);
141
+ const executableSettingsStatements =
142
+ options.updateSettings === false ? [] : [settingsStatement];
143
+ const statements =
144
+ currentVersion === undefined
145
+ ? [...createTableSql(provider, relationMode), settingsStatement]
146
+ : [
147
+ ...(currentVersion === "0.21.0"
148
+ ? createV029AlterSql(provider)
149
+ : []),
150
+ ...(currentVersion === "0.21.0" || currentVersion === "0.29.0"
151
+ ? createV031AlterSql(provider, relationMode)
152
+ : []),
153
+ ...executableSettingsStatements,
154
+ ];
155
+ const operations =
156
+ currentVersion === undefined
157
+ ? createSqlCreateOperations(provider, relationMode, settingsOperation)
158
+ : toCustomOperations(
159
+ [
160
+ ...(currentVersion === "0.21.0"
161
+ ? createV029AlterSql(provider)
162
+ : []),
163
+ ...(currentVersion === "0.21.0" || currentVersion === "0.29.0"
164
+ ? createV031AlterSql(provider, relationMode)
165
+ : []),
166
+ ],
167
+ settingsOperation,
168
+ );
169
+
170
+ return {
171
+ operations,
172
+ getSQL: () => statements.map((statement) => `${statement};`).join("\n\n"),
173
+ execute: async () => {
174
+ const { sql } = await import("kysely");
175
+ for (const statement of statements) {
176
+ await sql.raw(statement).execute(db);
177
+ }
178
+ },
179
+ };
180
+ };
181
+
182
+ return {
183
+ getVersion,
184
+ getNameVariants: async () => undefined,
185
+ next: async () =>
186
+ (await getVersion()) === HOT_UPDATER_SCHEMA_VERSION
187
+ ? undefined
188
+ : { version: HOT_UPDATER_SCHEMA_VERSION },
189
+ previous: async () => undefined,
190
+ up: makeResult,
191
+ down: async () => {
192
+ throw new Error("No previous schema to migrate to.");
193
+ },
194
+ migrateTo: async (version, options) => {
195
+ if (version !== HOT_UPDATER_SCHEMA_VERSION) {
196
+ throw new Error(`Invalid version ${version}`);
197
+ }
198
+ return makeResult(options);
199
+ },
200
+ migrateToLatest: makeResult,
201
+ };
202
+ };
203
+
204
+ export const createMongoMigrator = (client: MongoClient): Migrator => {
205
+ const settings = client
206
+ .db()
207
+ .collection<{ key: string; value: unknown }>(HOT_UPDATER_SETTINGS_TABLE);
208
+ const getVersion = async (): Promise<string | undefined> => {
209
+ const row = await settings.findOne({ key: "version" });
210
+ return typeof row?.value === "string" ? row.value : undefined;
211
+ };
212
+ const makeResult = async (
213
+ options: MigrateOptions = {},
214
+ ): Promise<MigrationResult> => {
215
+ assertSupportedMigrationMode(options);
216
+
217
+ if ((await getVersion()) === HOT_UPDATER_SCHEMA_VERSION) {
218
+ return getEmptyResult();
219
+ }
220
+ const settingsOperation =
221
+ options.updateSettings === false
222
+ ? undefined
223
+ : ({
224
+ type: "custom",
225
+ key: "version",
226
+ value: HOT_UPDATER_SCHEMA_VERSION,
227
+ } satisfies MigrationOperation);
228
+ return {
229
+ operations: createMongoMigrationOperations(settingsOperation),
230
+ execute: async () => {
231
+ const db = client.db();
232
+ for (const table of hotUpdaterSchema.tables) {
233
+ if (table.internal) continue;
234
+ await db
235
+ .createCollection(table.ormName)
236
+ .catch(ignoreExistingCollection);
237
+ }
238
+ await db.collection("bundles").createIndex(
239
+ { id: 1 },
240
+ {
241
+ name: "bundles_id_idx",
242
+ },
243
+ );
244
+ for (const table of hotUpdaterSchema.tables) {
245
+ if (table.internal) continue;
246
+ for (const index of (table.indexes ?? []).filter((item) =>
247
+ schemaIndexAppliesToProvider(item, "mongodb"),
248
+ )) {
249
+ await db
250
+ .collection(table.ormName)
251
+ .createIndex(
252
+ Object.fromEntries(index.columns.map((column) => [column, 1])),
253
+ { name: index.name },
254
+ );
255
+ }
256
+ }
257
+ if (options.updateSettings !== false) {
258
+ await settings.updateOne(
259
+ { key: "version" },
260
+ { $set: { value: HOT_UPDATER_SCHEMA_VERSION } },
261
+ { upsert: true },
262
+ );
263
+ }
264
+ },
265
+ };
266
+ };
267
+
268
+ return {
269
+ getVersion,
270
+ getNameVariants: async () => undefined,
271
+ next: async () =>
272
+ (await getVersion()) === HOT_UPDATER_SCHEMA_VERSION
273
+ ? undefined
274
+ : { version: HOT_UPDATER_SCHEMA_VERSION },
275
+ previous: async () => undefined,
276
+ up: makeResult,
277
+ down: async () => {
278
+ throw new Error("No previous schema to migrate to.");
279
+ },
280
+ migrateTo: async (version, options) => {
281
+ if (version !== HOT_UPDATER_SCHEMA_VERSION) {
282
+ throw new Error(`Invalid version ${version}`);
283
+ }
284
+ return makeResult(options);
285
+ },
286
+ migrateToLatest: makeResult,
287
+ };
288
+ };
@@ -0,0 +1,6 @@
1
+ export * from "../schema";
2
+ export * from "./schema/mongodb";
3
+ export * from "./schema/registry";
4
+ export * from "./schema/sql";
5
+ export * from "./schema/sqlMigrations";
6
+ export * from "./schema/sqlOperations";