@hot-updater/server 0.33.2 → 0.35.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 (216) 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/{runtime.cjs → createHotUpdaterCore.cjs} +34 -12
  21. package/dist/createHotUpdaterCore.d.cts +25 -0
  22. package/dist/createHotUpdaterCore.d.mts +25 -0
  23. package/dist/{runtime.mjs → createHotUpdaterCore.mjs} +34 -10
  24. package/dist/db/bundleRows.cjs +82 -0
  25. package/dist/db/bundleRows.d.cts +33 -0
  26. package/dist/db/bundleRows.d.mts +33 -0
  27. package/dist/db/bundleRows.mjs +79 -0
  28. package/dist/db/createBundleDiff.cjs +1 -1
  29. package/dist/db/createBundleDiff.mjs +1 -1
  30. package/dist/db/fixedMigrator.cjs +136 -0
  31. package/dist/db/fixedMigrator.mjs +135 -0
  32. package/dist/db/index.cjs +24 -42
  33. package/dist/db/index.d.cts +7 -26
  34. package/dist/db/index.d.mts +7 -26
  35. package/dist/db/index.mjs +19 -41
  36. package/dist/db/pluginCore.cjs +13 -5
  37. package/dist/db/pluginCore.mjs +13 -5
  38. package/dist/db/schema/mongodb.cjs +17 -0
  39. package/dist/db/schema/mongodb.mjs +17 -0
  40. package/dist/db/schema/registry.cjs +23 -0
  41. package/dist/db/schema/registry.mjs +18 -0
  42. package/dist/db/schema/sql.cjs +84 -0
  43. package/dist/db/schema/sql.mjs +78 -0
  44. package/dist/db/schema/sqlMigrations.cjs +74 -0
  45. package/dist/db/schema/sqlMigrations.mjs +73 -0
  46. package/dist/db/schema/sqlOperations.cjs +27 -0
  47. package/dist/db/schema/sqlOperations.mjs +26 -0
  48. package/dist/db/schemaEnhancements.cjs +1 -152
  49. package/dist/db/schemaEnhancements.mjs +1 -149
  50. package/dist/db/schemaGenerators.cjs +222 -0
  51. package/dist/db/schemaGenerators.mjs +220 -0
  52. package/dist/db/schemaReadiness.cjs +23 -0
  53. package/dist/db/schemaReadiness.d.cts +8 -0
  54. package/dist/db/schemaReadiness.d.mts +8 -0
  55. package/dist/db/schemaReadiness.mjs +22 -0
  56. package/dist/db/types.cjs +10 -2
  57. package/dist/db/types.d.cts +58 -14
  58. package/dist/db/types.d.mts +58 -14
  59. package/dist/db/types.mjs +9 -1
  60. package/dist/index.cjs +2 -6
  61. package/dist/index.d.cts +3 -5
  62. package/dist/index.d.mts +3 -5
  63. package/dist/index.mjs +2 -4
  64. package/dist/node.cjs +2 -0
  65. package/dist/node.d.cts +7 -3
  66. package/dist/node.d.mts +7 -3
  67. package/dist/node.mjs +2 -1
  68. package/dist/{packages/server/package.cjs → package.cjs} +1 -1
  69. package/dist/{packages/server/package.mjs → package.mjs} +1 -1
  70. package/dist/schema/dsl.cjs +86 -0
  71. package/dist/schema/dsl.mjs +73 -0
  72. package/dist/schema/index.cjs +13 -0
  73. package/dist/schema/index.mjs +13 -0
  74. package/dist/schema/settings.cjs +9 -0
  75. package/dist/schema/settings.mjs +9 -0
  76. package/dist/schema/types.cjs +6 -0
  77. package/dist/schema/types.mjs +5 -0
  78. package/dist/schema/v0_21_0.cjs +33 -18
  79. package/dist/schema/v0_21_0.mjs +32 -18
  80. package/dist/schema/v0_29_0.cjs +40 -20
  81. package/dist/schema/v0_29_0.mjs +39 -20
  82. package/dist/schema/v0_31_0.cjs +77 -43
  83. package/dist/schema/v0_31_0.mjs +75 -43
  84. package/dist/types/index.d.cts +1 -1
  85. package/dist/types/index.d.mts +1 -1
  86. package/dist/version.cjs +1 -1
  87. package/dist/version.mjs +1 -1
  88. package/package.json +34 -20
  89. package/src/adapters/drizzle.spec.ts +76 -0
  90. package/src/adapters/drizzle.ts +328 -12
  91. package/src/adapters/drizzleLazyDB.ts +151 -0
  92. package/src/adapters/kysely.spec.ts +107 -0
  93. package/src/adapters/kysely.ts +349 -14
  94. package/src/adapters/mongodb.ts +298 -15
  95. package/src/adapters/prisma.ts +337 -12
  96. package/src/createHotUpdaterCore.ts +168 -0
  97. package/src/db/bundleRows.ts +140 -0
  98. package/src/db/fixedMigrator.spec.ts +89 -0
  99. package/src/db/fixedMigrator.ts +288 -0
  100. package/src/db/hotUpdaterSchema.ts +6 -0
  101. package/src/db/index.spec.ts +983 -19
  102. package/src/db/index.ts +37 -108
  103. package/src/db/pluginCore.spec.ts +17 -11
  104. package/src/db/pluginCore.ts +15 -6
  105. package/src/db/schema/definitions.ts +1 -0
  106. package/src/db/schema/mongodb.ts +26 -0
  107. package/src/db/schema/registry.ts +55 -0
  108. package/src/db/schema/sql.ts +200 -0
  109. package/src/db/schema/sqlMigrations.ts +219 -0
  110. package/src/db/schema/sqlOperations.ts +62 -0
  111. package/src/db/schema/types.ts +1 -0
  112. package/src/db/schemaEnhancements.ts +0 -405
  113. package/src/db/schemaGenerators.ts +382 -0
  114. package/src/db/schemaReadiness.ts +33 -0
  115. package/src/db/types.ts +69 -25
  116. package/src/handler-standalone.integration.spec.ts +3 -2
  117. package/src/index.ts +9 -3
  118. package/src/node.spec.ts +50 -0
  119. package/src/node.ts +7 -3
  120. package/src/runtime.spec.ts +132 -1
  121. package/src/schema/dsl-all-versions.spec.ts +26 -0
  122. package/src/schema/dsl.ts +148 -0
  123. package/src/schema/index.ts +16 -0
  124. package/src/schema/settings.ts +15 -0
  125. package/src/schema/types.ts +73 -0
  126. package/src/schema/v0_21_0.ts +48 -18
  127. package/src/schema/v0_29_0.ts +58 -22
  128. package/src/schema/v0_31_0.spec.ts +73 -0
  129. package/src/schema/v0_31_0.ts +116 -54
  130. package/src/types/index.ts +1 -1
  131. package/dist/_virtual/_rolldown/runtime.mjs +0 -6
  132. package/dist/calculatePagination.cjs +0 -25
  133. package/dist/calculatePagination.mjs +0 -25
  134. package/dist/db/ormCore.cjs +0 -577
  135. package/dist/db/ormCore.d.cts +0 -110
  136. package/dist/db/ormCore.d.mts +0 -110
  137. package/dist/db/ormCore.mjs +0 -575
  138. package/dist/node_modules/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/_u64.cjs +0 -112
  139. package/dist/node_modules/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/_u64.mjs +0 -108
  140. package/dist/node_modules/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/cryptoNode.cjs +0 -22
  141. package/dist/node_modules/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/cryptoNode.mjs +0 -18
  142. package/dist/node_modules/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/sha3.cjs +0 -219
  143. package/dist/node_modules/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/sha3.mjs +0 -214
  144. package/dist/node_modules/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/utils.cjs +0 -275
  145. package/dist/node_modules/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/utils.mjs +0 -270
  146. package/dist/node_modules/.pnpm/@paralleldrive_cuid2@2.3.1/node_modules/@paralleldrive/cuid2/index.cjs +0 -17
  147. package/dist/node_modules/.pnpm/@paralleldrive_cuid2@2.3.1/node_modules/@paralleldrive/cuid2/index.mjs +0 -13
  148. package/dist/node_modules/.pnpm/@paralleldrive_cuid2@2.3.1/node_modules/@paralleldrive/cuid2/src/index.cjs +0 -69
  149. package/dist/node_modules/.pnpm/@paralleldrive_cuid2@2.3.1/node_modules/@paralleldrive/cuid2/src/index.mjs +0 -65
  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/column.cjs +0 -52
  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/column.mjs +0 -52
  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/entity.cjs +0 -16
  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/entity.mjs +0 -15
  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/pg-core/columns/enum.cjs +0 -7
  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/pg-core/columns/enum.mjs +0 -7
  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/sql/expressions/conditions.cjs +0 -92
  157. 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
  158. 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
  159. 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
  160. 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
  161. 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
  162. 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
  163. 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
  164. 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
  165. 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
  166. 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
  167. 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
  168. 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
  169. 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
  170. 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
  171. 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
  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/adapters/drizzle/index.cjs +0 -383
  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/adapters/drizzle/index.d.cts +0 -12
  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/adapters/drizzle/index.d.mts +0 -12
  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/adapters/drizzle/index.mjs +0 -383
  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/adapters/kysely/index.cjs +0 -4
  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/adapters/kysely/index.mjs +0 -5
  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/adapters/prisma/index.cjs +0 -339
  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/adapters/prisma/index.d.cts +0 -70
  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/adapters/prisma/index.d.mts +0 -70
  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/adapters/prisma/index.mjs +0 -339
  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-7PZK4ONR.cjs +0 -57
  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-7PZK4ONR.mjs +0 -56
  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-C6OTUURW.cjs +0 -330
  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/chunk-C6OTUURW.mjs +0 -326
  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/chunk-CHTIKPQU.cjs +0 -166
  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/chunk-CHTIKPQU.mjs +0 -163
  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/chunk-GUE4GMNC.cjs +0 -14
  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/chunk-GUE4GMNC.mjs +0 -13
  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/chunk-LHHP6UVP.cjs +0 -24
  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/chunk-LHHP6UVP.mjs +0 -24
  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/chunk-LVCPMTAT.cjs +0 -1190
  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/chunk-LVCPMTAT.mjs +0 -1189
  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/chunk-PK2W2SQ7.cjs +0 -197
  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/chunk-PK2W2SQ7.mjs +0 -197
  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/chunk-ZEQMAIFI.cjs +0 -410
  197. 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
  198. 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
  199. 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
  200. 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
  201. 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
  202. 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
  203. 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
  204. 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
  205. 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
  206. 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
  207. 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
  208. 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
  209. 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
  210. 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
  211. 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
  212. package/dist/runtime.d.cts +0 -22
  213. package/dist/runtime.d.mts +0 -22
  214. package/src/db/ormCore.ts +0 -1059
  215. package/src/db/ormUpdateCheck.bench.ts +0 -262
  216. package/src/runtime.ts +0 -106
@@ -0,0 +1,382 @@
1
+ import {
2
+ HOT_UPDATER_SETTINGS_TABLE,
3
+ type HotUpdaterColumnSchema,
4
+ type HotUpdaterColumnType,
5
+ type HotUpdaterDefault,
6
+ type HotUpdaterRelationSchema,
7
+ type HotUpdaterTableSchema,
8
+ type HotUpdaterVersionedSchema,
9
+ } from "../schema/types";
10
+ import {
11
+ getHotUpdaterSchemaVersion,
12
+ hotUpdaterSchema,
13
+ schemaIndexAppliesToProvider,
14
+ } from "./schema/registry";
15
+ import type { ORMProvider, ORMSQLProvider, SchemaGenerator } from "./types";
16
+ import { getSQLProvider } from "./types";
17
+
18
+ const literal = (value: string): string => JSON.stringify(value);
19
+
20
+ const toPascalCase = (value: string): string =>
21
+ value
22
+ .split("_")
23
+ .filter(Boolean)
24
+ .map((part) => `${part.charAt(0).toUpperCase()}${part.slice(1)}`)
25
+ .join("");
26
+
27
+ const prismaDb = (type: HotUpdaterColumnType, provider: ORMProvider) => {
28
+ if (provider === "postgresql") {
29
+ if (type === "uuid") return " @db.Uuid";
30
+ if (type.startsWith("varchar")) return " @db.VarChar(255)";
31
+ }
32
+ if (provider === "mysql") {
33
+ if (type === "uuid") return " @db.Char(36)";
34
+ if (type.startsWith("varchar")) return " @db.VarChar(255)";
35
+ }
36
+ return "";
37
+ };
38
+
39
+ const prismaType = (
40
+ column: HotUpdaterColumnSchema,
41
+ provider: ORMProvider,
42
+ ): string => {
43
+ const base = (() => {
44
+ if (column.type === "bool") return "Boolean";
45
+ if (column.type === "integer") return "Int";
46
+ if (column.type === "json") return "Json";
47
+ return "String";
48
+ })();
49
+ return `${base}${column.nullable ? "?" : ""}${prismaDb(
50
+ column.type,
51
+ provider,
52
+ )}`;
53
+ };
54
+
55
+ const prismaDefault = (
56
+ column: HotUpdaterColumnSchema,
57
+ provider: ORMProvider,
58
+ ): string => {
59
+ if (!column.default) return "";
60
+ if (provider === "sqlite" && column.type === "json") return "";
61
+ if (column.default.type === "json") {
62
+ return ` @default(${literal(JSON.stringify(column.default.value))})`;
63
+ }
64
+ return ` @default(${JSON.stringify(column.default.value)})`;
65
+ };
66
+
67
+ const prismaField = (
68
+ column: HotUpdaterColumnSchema,
69
+ provider: ORMProvider,
70
+ ): string =>
71
+ [
72
+ column.ormName,
73
+ prismaType(column, provider),
74
+ column.primaryKey ? "@id" : undefined,
75
+ prismaDefault(column, provider).trim() || undefined,
76
+ ]
77
+ .filter(Boolean)
78
+ .join(" ");
79
+
80
+ const relationTargetFields = (
81
+ table: HotUpdaterTableSchema,
82
+ schema: HotUpdaterVersionedSchema,
83
+ ): readonly HotUpdaterRelationSchema[] =>
84
+ schema.tables.flatMap((sourceTable) =>
85
+ (sourceTable.relations ?? []).filter(
86
+ (relation) => relation.referencedTable === table.ormName,
87
+ ),
88
+ );
89
+
90
+ const prismaRelationFields = (
91
+ table: HotUpdaterTableSchema,
92
+ schema: HotUpdaterVersionedSchema,
93
+ ): string[] => {
94
+ const lines = relationTargetFields(table, schema).map(
95
+ (relation) =>
96
+ `${relation.fieldName} ${relation.referencedTable === table.ormName ? "bundle_patches" : relation.referencedTable}[] @relation(${literal(relation.relationName)})`,
97
+ );
98
+
99
+ for (const relation of table.relations ?? []) {
100
+ const targetType = toPascalCase(relation.referencedTable);
101
+ lines.push(
102
+ `${relation.targetFieldName} ${targetType === "Bundles" ? "bundles" : relation.referencedTable} @relation(${literal(relation.relationName)}, fields: [${relation.columns.join(", ")}], references: [${relation.referencedColumns.join(", ")}], onUpdate: Restrict, onDelete: Cascade)`,
103
+ );
104
+ }
105
+
106
+ return lines;
107
+ };
108
+
109
+ const prismaIndexes = (
110
+ table: HotUpdaterTableSchema,
111
+ provider: ORMProvider,
112
+ ): string[] =>
113
+ (table.indexes ?? [])
114
+ .filter((index) => schemaIndexAppliesToProvider(index, provider))
115
+ .map(
116
+ (index) =>
117
+ `@@index([${index.columns.join(", ")}], map: ${literal(index.name)})`,
118
+ );
119
+
120
+ export const generatePrismaSchema = (
121
+ provider: ORMProvider,
122
+ schema: HotUpdaterVersionedSchema = hotUpdaterSchema,
123
+ ) =>
124
+ schema.tables
125
+ .map((table) => {
126
+ const lines = [
127
+ ...table.columns.map((column) => prismaField(column, provider)),
128
+ ...prismaRelationFields(table, schema),
129
+ ...prismaIndexes(table, provider),
130
+ ];
131
+ return `model ${table.ormName} {\n${lines
132
+ .map((line) => ` ${line}`)
133
+ .join("\n")}\n}`;
134
+ })
135
+ .join("\n\n");
136
+
137
+ const drizzleImportSource = (provider: ORMSQLProvider) =>
138
+ provider === "sqlite"
139
+ ? "drizzle-orm/sqlite-core"
140
+ : provider === "mysql"
141
+ ? "drizzle-orm/mysql-core"
142
+ : "drizzle-orm/pg-core";
143
+
144
+ const drizzleTableFn = (provider: ORMSQLProvider) =>
145
+ provider === "sqlite"
146
+ ? "sqliteTable"
147
+ : provider === "mysql"
148
+ ? "mysqlTable"
149
+ : "pgTable";
150
+
151
+ const drizzleColumnFn = (
152
+ column: HotUpdaterColumnSchema,
153
+ provider: ORMSQLProvider,
154
+ ): { code: string; imports: readonly string[] } => {
155
+ if (provider === "sqlite") {
156
+ if (column.type === "bool") {
157
+ return {
158
+ code: `integer(${literal(column.ormName)}, { mode: "boolean" })`,
159
+ imports: ["integer"],
160
+ };
161
+ }
162
+ if (column.type === "integer") {
163
+ return {
164
+ code: `integer(${literal(column.ormName)})`,
165
+ imports: ["integer"],
166
+ };
167
+ }
168
+ if (column.type === "json") {
169
+ return {
170
+ code: `blob(${literal(column.ormName)}, { mode: "json" })`,
171
+ imports: ["blob"],
172
+ };
173
+ }
174
+ if (column.type.startsWith("varchar")) {
175
+ return {
176
+ code: `text(${literal(column.ormName)}, { length: 255 })`,
177
+ imports: ["text"],
178
+ };
179
+ }
180
+ return { code: `text(${literal(column.ormName)})`, imports: ["text"] };
181
+ }
182
+
183
+ if (provider === "mysql") {
184
+ if (column.type === "uuid") {
185
+ return {
186
+ code: `char(${literal(column.ormName)}, { length: 36 })`,
187
+ imports: ["char"],
188
+ };
189
+ }
190
+ if (column.type === "bool") {
191
+ return {
192
+ code: `boolean(${literal(column.ormName)})`,
193
+ imports: ["boolean"],
194
+ };
195
+ }
196
+ if (column.type === "integer") {
197
+ return { code: `int(${literal(column.ormName)})`, imports: ["int"] };
198
+ }
199
+ if (column.type === "json") {
200
+ return { code: `json(${literal(column.ormName)})`, imports: ["json"] };
201
+ }
202
+ if (column.type.startsWith("varchar")) {
203
+ return {
204
+ code: `varchar(${literal(column.ormName)}, { length: 255 })`,
205
+ imports: ["varchar"],
206
+ };
207
+ }
208
+ return { code: `text(${literal(column.ormName)})`, imports: ["text"] };
209
+ }
210
+
211
+ if (column.type === "uuid") {
212
+ return { code: `uuid(${literal(column.ormName)})`, imports: ["uuid"] };
213
+ }
214
+ if (column.type === "bool") {
215
+ return {
216
+ code: `boolean(${literal(column.ormName)})`,
217
+ imports: ["boolean"],
218
+ };
219
+ }
220
+ if (column.type === "integer") {
221
+ return {
222
+ code: `integer(${literal(column.ormName)})`,
223
+ imports: ["integer"],
224
+ };
225
+ }
226
+ if (column.type === "json") {
227
+ return { code: `json(${literal(column.ormName)})`, imports: ["json"] };
228
+ }
229
+ if (column.type.startsWith("varchar")) {
230
+ return {
231
+ code: `varchar(${literal(column.ormName)}, { length: 255 })`,
232
+ imports: ["varchar"],
233
+ };
234
+ }
235
+ return { code: `text(${literal(column.ormName)})`, imports: ["text"] };
236
+ };
237
+
238
+ const drizzleDefault = (value: HotUpdaterDefault | undefined): string => {
239
+ if (!value) return "";
240
+ if (value.type === "json") return ".default({})";
241
+ return `.default(${JSON.stringify(value.value)})`;
242
+ };
243
+
244
+ const drizzleColumn = (
245
+ table: HotUpdaterTableSchema,
246
+ column: HotUpdaterColumnSchema,
247
+ ): HotUpdaterColumnSchema => {
248
+ if (table.ormName !== HOT_UPDATER_SETTINGS_TABLE) return column;
249
+ if (column.ormName === "key") {
250
+ return { ...column, ormName: "id", type: "varchar(255)" };
251
+ }
252
+ if (column.ormName === "value") {
253
+ return { ...column, ormName: "version", type: "varchar(255)" };
254
+ }
255
+ return column;
256
+ };
257
+
258
+ const drizzleTable = (
259
+ table: HotUpdaterTableSchema,
260
+ provider: ORMSQLProvider,
261
+ imports: Set<string>,
262
+ ): string => {
263
+ const columns = table.columns.map((sourceColumn) => {
264
+ const column = drizzleColumn(table, sourceColumn);
265
+ const type = drizzleColumnFn(column, provider);
266
+ for (const item of type.imports) imports.add(item);
267
+ const chain = [
268
+ type.code,
269
+ column.primaryKey ? "primaryKey()" : undefined,
270
+ column.nullable ? undefined : "notNull()",
271
+ drizzleDefault(column.default).slice(1) || undefined,
272
+ ].filter(Boolean);
273
+ return ` ${column.ormName}: ${chain.join(".")}`;
274
+ });
275
+
276
+ const callbacks: string[] = [];
277
+ for (const foreignKey of table.foreignKeys ?? []) {
278
+ imports.add("foreignKey");
279
+ callbacks.push(`foreignKey({
280
+ columns: [table.${foreignKey.columns.join(", table.")}],
281
+ foreignColumns: [${foreignKey.referencedTable}.${foreignKey.referencedColumns.join(
282
+ `, ${foreignKey.referencedTable}.`,
283
+ )}],
284
+ name: ${literal(foreignKey.name)}
285
+ }).onUpdate(${literal(foreignKey.onUpdate)}).onDelete(${literal(
286
+ foreignKey.onDelete,
287
+ )})`);
288
+ }
289
+ for (const index of (table.indexes ?? []).filter((item) =>
290
+ schemaIndexAppliesToProvider(item, provider),
291
+ )) {
292
+ imports.add("index");
293
+ callbacks.push(
294
+ `index(${literal(index.name)}).on(${index.columns
295
+ .map((column) => `table.${column}`)
296
+ .join(", ")})`,
297
+ );
298
+ }
299
+
300
+ const args = [
301
+ literal(table.ormName),
302
+ `{\n${columns.join(",\n")}\n}`,
303
+ callbacks.length > 0
304
+ ? `(table) => [\n${callbacks.map((line) => ` ${line}`).join(",\n")}\n]`
305
+ : undefined,
306
+ ].filter(Boolean);
307
+
308
+ return `export const ${table.ormName} = ${drizzleTableFn(provider)}(${args.join(
309
+ ", ",
310
+ )})`;
311
+ };
312
+
313
+ const drizzleRelations = (table: HotUpdaterTableSchema): string | undefined => {
314
+ if (!table.relations || table.relations.length === 0) return undefined;
315
+ const lines = table.relations.map(
316
+ (
317
+ relation,
318
+ ) => ` ${relation.targetFieldName}: one(${relation.referencedTable}, {
319
+ relationName: ${literal(relation.relationName)},
320
+ fields: [${relation.columns.map((column) => `${table.ormName}.${column}`).join(", ")}],
321
+ references: [${relation.referencedColumns
322
+ .map((column) => `${relation.referencedTable}.${column}`)
323
+ .join(", ")}]
324
+ })`,
325
+ );
326
+ return `export const ${table.ormName}Relations = relations(${table.ormName}, ({ one }) => ({
327
+ ${lines.join(",\n")}
328
+ }))`;
329
+ };
330
+
331
+ export const generateDrizzleSchema = (
332
+ provider: ORMSQLProvider,
333
+ schema: HotUpdaterVersionedSchema = hotUpdaterSchema,
334
+ ) => {
335
+ const imports = new Set<string>([drizzleTableFn(provider)]);
336
+ const body: string[] = [];
337
+
338
+ for (const table of schema.tables) {
339
+ body.push(drizzleTable(table, provider, imports));
340
+ const relations = drizzleRelations(table);
341
+ if (relations) body.push(relations);
342
+ }
343
+
344
+ if (body.some((block) => block.includes("relations("))) {
345
+ body.unshift('import { relations } from "drizzle-orm"');
346
+ }
347
+
348
+ const importLine = `import { ${Array.from(imports)
349
+ .sort()
350
+ .join(", ")} } from "${drizzleImportSource(provider)}"`;
351
+
352
+ return [importLine, ...body].join("\n\n");
353
+ };
354
+
355
+ export const generateSchemaFromHotUpdaterSchema = (
356
+ adapterName: string,
357
+ provider: ORMProvider | undefined,
358
+ version: string | "latest",
359
+ fallback: ReturnType<SchemaGenerator>,
360
+ ): ReturnType<SchemaGenerator> => {
361
+ const schema =
362
+ version === "latest"
363
+ ? hotUpdaterSchema
364
+ : getHotUpdaterSchemaVersion(version);
365
+
366
+ if (adapterName === "prisma" && provider) {
367
+ return {
368
+ ...fallback,
369
+ code: generatePrismaSchema(provider, schema),
370
+ };
371
+ }
372
+
373
+ const sqlProvider = getSQLProvider(provider);
374
+ if (adapterName === "drizzle" && sqlProvider) {
375
+ return {
376
+ ...fallback,
377
+ code: generateDrizzleSchema(sqlProvider, schema),
378
+ };
379
+ }
380
+
381
+ return fallback;
382
+ };
@@ -0,0 +1,33 @@
1
+ import { HOT_UPDATER_SCHEMA_VERSION } from "../schema/types";
2
+ import type { Migrator } from "./types";
3
+
4
+ export class HotUpdaterSchemaMigrationRequiredError extends Error {
5
+ constructor(
6
+ readonly adapterName: string,
7
+ readonly currentVersion: string | undefined,
8
+ ) {
9
+ super(
10
+ currentVersion === undefined
11
+ ? `Hot Updater database schema is not initialized for ${adapterName}. Run \`hot-updater db migrate\` before using this adapter.`
12
+ : `Hot Updater database schema version ${currentVersion} is not supported by ${adapterName}. Run \`hot-updater db migrate\` to upgrade to ${HOT_UPDATER_SCHEMA_VERSION}.`,
13
+ );
14
+ this.name = "HotUpdaterSchemaMigrationRequiredError";
15
+ }
16
+ }
17
+
18
+ export const createSchemaReadinessChecker = (
19
+ adapterName: string,
20
+ createMigrator: (() => Migrator) | undefined,
21
+ ): (() => Promise<void>) => {
22
+ if (!createMigrator) return async () => {};
23
+
24
+ let ready = false;
25
+ return async () => {
26
+ if (ready) return;
27
+ const version = await createMigrator().getVersion();
28
+ if (version !== HOT_UPDATER_SCHEMA_VERSION) {
29
+ throw new HotUpdaterSchemaMigrationRequiredError(adapterName, version);
30
+ }
31
+ ready = true;
32
+ };
33
+ };
package/src/db/types.ts CHANGED
@@ -10,34 +10,84 @@ import type {
10
10
  HotUpdaterContext,
11
11
  RuntimeStoragePlugin,
12
12
  } from "@hot-updater/plugin-core";
13
- import { sqlProviders, type Provider, type SQLProvider } from "fumadb";
14
13
 
15
14
  import type { PaginatedResult } from "../types";
16
15
 
17
16
  export type DatabasePluginFactory<TContext = unknown> =
18
- () => DatabasePlugin<TContext>;
17
+ (() => DatabasePlugin<TContext>) & Partial<DatabaseAdapterCapabilities>;
19
18
 
20
- export type ORMProvider = Provider;
21
- export type ORMSQLProvider = SQLProvider;
19
+ export const sqlProviders = [
20
+ "sqlite",
21
+ "cockroachdb",
22
+ "mysql",
23
+ "postgresql",
24
+ "mssql",
25
+ ] as const;
22
26
 
23
- export interface ORMDatabaseAdapter {
24
- name: string;
27
+ export const noSqlProviders = ["mongodb"] as const;
28
+ export const providers = [...sqlProviders, ...noSqlProviders] as const;
29
+
30
+ export type ORMProvider = (typeof providers)[number];
31
+ export type ORMSQLProvider = (typeof sqlProviders)[number];
32
+ export type RelationMode = "foreign-keys" | "fumadb";
33
+
34
+ export interface MigrateOptions {
35
+ mode?: "from-schema" | "from-database";
36
+ updateSettings?: boolean;
37
+ unsafe?: boolean;
38
+ }
39
+
40
+ export type MigrationOperation =
41
+ | {
42
+ type: "create-table";
43
+ value: {
44
+ ormName: string;
45
+ columns: Record<string, { ormName: string; type: string }>;
46
+ };
47
+ }
48
+ | { type: "custom"; sql: string }
49
+ | { type: "custom"; key: string; value: unknown };
50
+
51
+ export interface MigrationResult {
52
+ operations: MigrationOperation[];
53
+ execute: () => Promise<void>;
54
+ getSQL?: () => string;
55
+ }
56
+
57
+ export interface Migrator {
58
+ getVersion: () => Promise<string | undefined>;
59
+ getNameVariants: () => Promise<unknown>;
60
+ next: () => Promise<{ version: string } | undefined>;
61
+ previous: () => Promise<{ version: string } | undefined>;
62
+ up: (options?: MigrateOptions) => Promise<MigrationResult>;
63
+ down: (options?: MigrateOptions) => Promise<MigrationResult>;
64
+ migrateTo: (
65
+ version: string,
66
+ options?: MigrateOptions,
67
+ ) => Promise<MigrationResult>;
68
+ migrateToLatest: (options?: MigrateOptions) => Promise<MigrationResult>;
69
+ }
70
+
71
+ export type SchemaGenerator = (
72
+ version: string | "latest",
73
+ name?: string,
74
+ ) => {
75
+ code: string;
76
+ path: string;
77
+ };
78
+
79
+ export interface DatabaseAdapterCapabilities {
80
+ adapterName?: string;
25
81
  provider?: ORMProvider;
26
- createORM(this: any, schema: any): unknown;
27
- getSchemaVersion(this: any): Promise<string | undefined>;
28
- generateSchema?: (
29
- this: any,
30
- schema: any,
31
- schemaName: string,
32
- ) => {
33
- code: string;
34
- path: string;
35
- };
36
- createMigrationEngine?: (this: any) => unknown;
82
+ createMigrator?: () => Migrator;
83
+ generateSchema?: SchemaGenerator;
37
84
  }
38
85
 
86
+ export type DatabaseAdapterWithCapabilities<TContext = unknown> =
87
+ DatabasePlugin<TContext> & DatabaseAdapterCapabilities;
88
+
39
89
  export type DatabaseAdapter<TContext = unknown> =
40
- | ORMDatabaseAdapter
90
+ | DatabaseAdapterWithCapabilities<TContext>
41
91
  | DatabasePlugin<TContext>
42
92
  | DatabasePluginFactory<TContext>;
43
93
 
@@ -59,12 +109,6 @@ export function isDatabasePlugin<TContext = unknown>(
59
109
  );
60
110
  }
61
111
 
62
- export function isFumaAdapter<TContext = unknown>(
63
- adapter: DatabaseAdapter<TContext>,
64
- ): adapter is ORMDatabaseAdapter {
65
- return !isDatabasePluginFactory(adapter) && !isDatabasePlugin(adapter);
66
- }
67
-
68
112
  export function getSQLProvider(
69
113
  provider: ORMProvider | undefined,
70
114
  ): ORMSQLProvider | undefined {
@@ -72,7 +116,7 @@ export function getSQLProvider(
72
116
  return undefined;
73
117
  }
74
118
 
75
- return sqlProviders.includes(provider as ORMSQLProvider)
119
+ return (sqlProviders as readonly string[]).includes(provider)
76
120
  ? (provider as ORMSQLProvider)
77
121
  : undefined;
78
122
  }
@@ -11,7 +11,8 @@ import { afterAll, afterEach, beforeAll, describe, expect, it } from "vitest";
11
11
 
12
12
  import { standaloneRepository } from "../../../plugins/standalone/src";
13
13
  import { kyselyAdapter } from "./adapters/kysely";
14
- import { createHotUpdater } from "./db";
14
+ import { createMigrator } from "./db";
15
+ import { createHotUpdater } from "./index";
15
16
 
16
17
  /**
17
18
  * Integration tests between @hot-updater/server handler and @hot-updater/standalone repository
@@ -46,7 +47,7 @@ const server = setupServer();
46
47
 
47
48
  beforeAll(async () => {
48
49
  // Initialize database
49
- const migrator = api.createMigrator();
50
+ const migrator = createMigrator(api);
50
51
  const result = await migrator.migrateToLatest({
51
52
  mode: "from-schema",
52
53
  updateSettings: true,
package/src/index.ts CHANGED
@@ -1,4 +1,10 @@
1
- export * from "./db";
2
- export * from "./handler";
1
+ export { createHandler } from "./handler";
2
+ export type { HandlerAPI, HandlerOptions, HandlerRoutes } from "./handler";
3
+ export { createHotUpdater } from "./createHotUpdaterCore";
4
+ export type {
5
+ CreateHotUpdaterOptions,
6
+ HotUpdaterAPI,
7
+ RuntimeHotUpdaterAPI,
8
+ } from "./createHotUpdaterCore";
3
9
  export * from "./types";
4
- export * from "./version";
10
+ export { HOT_UPDATER_SERVER_VERSION } from "./version";
@@ -0,0 +1,50 @@
1
+ import { describe, expect, it } from "vitest";
2
+
3
+ import { toNodeHandler } from "./node";
4
+
5
+ describe("server node entry", () => {
6
+ it("converts a Web Request handler to Node middleware", async () => {
7
+ const hotUpdater = {
8
+ handler: async (request: Request) =>
9
+ Response.json({
10
+ method: request.method,
11
+ pathname: new URL(request.url).pathname,
12
+ }),
13
+ };
14
+ const middleware = toNodeHandler(hotUpdater);
15
+ const headers = new Map<string, string | string[]>();
16
+ const response = {
17
+ body: "",
18
+ statusCode: 0,
19
+ status(code: number) {
20
+ this.statusCode = code;
21
+ return this;
22
+ },
23
+ setHeader(name: string, value: string | string[]) {
24
+ headers.set(name, value);
25
+ },
26
+ send(body: string) {
27
+ this.body = body;
28
+ },
29
+ end() {},
30
+ };
31
+
32
+ await middleware(
33
+ {
34
+ method: "GET",
35
+ url: "/api/check",
36
+ headers: { host: "example.com" },
37
+ protocol: "https",
38
+ get: (name: string) => (name === "host" ? "example.com" : undefined),
39
+ },
40
+ response,
41
+ );
42
+
43
+ expect(response.statusCode).toBe(200);
44
+ expect(headers.get("content-type")).toContain("application/json");
45
+ expect(JSON.parse(response.body)).toEqual({
46
+ method: "GET",
47
+ pathname: "/api/check",
48
+ });
49
+ });
50
+ });
package/src/node.ts CHANGED
@@ -1,5 +1,3 @@
1
- import type { HotUpdaterAPI } from "./types";
2
-
3
1
  /**
4
2
  * Node.js request/response types (compatible with Express, Connect, etc.)
5
3
  */
@@ -21,6 +19,12 @@ interface NodeResponse {
21
19
  [key: string]: unknown;
22
20
  }
23
21
 
22
+ type HandlerHotUpdaterAPI = {
23
+ readonly handler: (request: Request) => Promise<Response>;
24
+ };
25
+
26
+ export { HOT_UPDATER_SERVER_VERSION } from "./version";
27
+
24
28
  /**
25
29
  * Converts a Hot Updater handler to a Node.js-compatible middleware
26
30
  * Works with Express, Connect, and other frameworks using Node.js req/res
@@ -40,7 +44,7 @@ interface NodeResponse {
40
44
  * ```
41
45
  */
42
46
  export function toNodeHandler(
43
- hotUpdater: HotUpdaterAPI,
47
+ hotUpdater: HandlerHotUpdaterAPI,
44
48
  ): (req: any, res: any, next?: any) => Promise<void> {
45
49
  return async (req: NodeRequest, res: NodeResponse) => {
46
50
  try {