@hot-updater/server 1.0.0-rc.2 → 1.0.0-rc.21

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 (328) hide show
  1. package/LICENSE +12 -14
  2. package/dist/adapters/drizzle.cjs +32 -75
  3. package/dist/adapters/drizzle.d.cts +13 -5
  4. package/dist/adapters/drizzle.d.mts +13 -5
  5. package/dist/adapters/drizzle.mjs +32 -77
  6. package/dist/adapters/drizzleExecutor.cjs +114 -0
  7. package/dist/adapters/drizzleExecutor.d.cts +9 -0
  8. package/dist/adapters/drizzleExecutor.d.mts +9 -0
  9. package/dist/adapters/drizzleExecutor.mjs +112 -0
  10. package/dist/adapters/kysely.cjs +22 -31
  11. package/dist/adapters/kysely.d.cts +10 -6
  12. package/dist/adapters/kysely.d.mts +10 -6
  13. package/dist/adapters/kysely.mjs +23 -33
  14. package/dist/adapters/kyselyExecutor.cjs +32 -0
  15. package/dist/adapters/kyselyExecutor.d.cts +11 -0
  16. package/dist/adapters/kyselyExecutor.d.mts +11 -0
  17. package/dist/adapters/kyselyExecutor.mjs +32 -0
  18. package/dist/adapters/mongodb.cjs +18 -54
  19. package/dist/adapters/mongodb.d.cts +10 -5
  20. package/dist/adapters/mongodb.d.mts +10 -5
  21. package/dist/adapters/mongodb.mjs +19 -56
  22. package/dist/adapters/mongodbAdapter.cjs +192 -0
  23. package/dist/adapters/mongodbAdapter.d.cts +9 -0
  24. package/dist/adapters/mongodbAdapter.d.mts +9 -0
  25. package/dist/adapters/mongodbAdapter.mjs +191 -0
  26. package/dist/adapters/prisma.cjs +35 -267
  27. package/dist/adapters/prisma.d.cts +12 -7
  28. package/dist/adapters/prisma.d.mts +12 -7
  29. package/dist/adapters/prisma.mjs +36 -268
  30. package/dist/adapters/prismaExecutor.cjs +63 -0
  31. package/dist/adapters/prismaExecutor.mjs +63 -0
  32. package/dist/adapters/sqlProviders.cjs +14 -0
  33. package/dist/adapters/sqlProviders.mjs +14 -0
  34. package/dist/assembly/assemblePlugins.cjs +144 -0
  35. package/dist/assembly/assemblePlugins.d.cts +5 -0
  36. package/dist/assembly/assemblePlugins.d.mts +5 -0
  37. package/dist/assembly/assemblePlugins.mjs +139 -0
  38. package/dist/assembly/clientPlugins.cjs +88 -0
  39. package/dist/assembly/clientPlugins.mjs +88 -0
  40. package/dist/assembly/configError.d.cts +2 -0
  41. package/dist/assembly/configError.d.mts +2 -0
  42. package/dist/assembly/configError.mjs +2 -0
  43. package/dist/core/api.cjs +51 -0
  44. package/dist/core/api.d.cts +54 -0
  45. package/dist/core/api.d.mts +54 -0
  46. package/dist/core/api.mjs +51 -0
  47. package/dist/core/baseCandidates.cjs +28 -0
  48. package/dist/core/baseCandidates.mjs +28 -0
  49. package/dist/core/operations.cjs +351 -0
  50. package/dist/core/operations.mjs +351 -0
  51. package/dist/core/reads.cjs +273 -0
  52. package/dist/core/reads.d.cts +9 -0
  53. package/dist/core/reads.d.mts +9 -0
  54. package/dist/core/reads.mjs +267 -0
  55. package/dist/core/releases.cjs +193 -0
  56. package/dist/core/releases.mjs +190 -0
  57. package/dist/core/writes.cjs +96 -0
  58. package/dist/core/writes.mjs +91 -0
  59. package/dist/createHotUpdaterCore.cjs +72 -91
  60. package/dist/createHotUpdaterCore.d.cts +106 -38
  61. package/dist/createHotUpdaterCore.d.mts +106 -38
  62. package/dist/createHotUpdaterCore.mjs +74 -89
  63. package/dist/db/engineDrizzleSchema.cjs +53 -0
  64. package/dist/db/engineDrizzleSchema.mjs +53 -0
  65. package/dist/db/enginePrismaSchema.cjs +84 -0
  66. package/dist/db/enginePrismaSchema.d.cts +5 -0
  67. package/dist/db/enginePrismaSchema.d.mts +5 -0
  68. package/dist/db/enginePrismaSchema.mjs +83 -0
  69. package/dist/db/releaseCatalog.cjs +24 -47
  70. package/dist/db/releaseCatalog.mjs +20 -44
  71. package/dist/db/updateArtifacts.cjs +43 -72
  72. package/dist/db/updateArtifacts.mjs +40 -69
  73. package/dist/handler.cjs +59 -43
  74. package/dist/handler.d.cts +3 -5
  75. package/dist/handler.d.mts +3 -5
  76. package/dist/handler.mjs +61 -43
  77. package/dist/handlerAdminRoutes.cjs +374 -0
  78. package/dist/handlerAdminRoutes.mjs +372 -0
  79. package/dist/handlerParameters.cjs +6 -11
  80. package/dist/handlerParameters.mjs +6 -10
  81. package/dist/handlerReleaseCatalogRoutes.cjs +32 -15
  82. package/dist/handlerReleaseCatalogRoutes.mjs +32 -15
  83. package/dist/handlerTypes.d.cts +2 -55
  84. package/dist/handlerTypes.d.mts +2 -55
  85. package/dist/handlerVersionRoutes.cjs +20 -4
  86. package/dist/handlerVersionRoutes.mjs +20 -4
  87. package/dist/index.cjs +9 -9
  88. package/dist/index.d.cts +8 -9
  89. package/dist/index.d.mts +8 -9
  90. package/dist/index.mjs +3 -4
  91. package/dist/node.cjs +3 -6
  92. package/dist/node.d.cts +2 -2
  93. package/dist/node.d.mts +2 -2
  94. package/dist/node.mjs +4 -4
  95. package/dist/package.cjs +1 -1
  96. package/dist/package.mjs +1 -1
  97. package/dist/plugins/api-keys/index.cjs +9 -0
  98. package/dist/plugins/api-keys/index.d.cts +1 -0
  99. package/dist/plugins/api-keys/index.d.mts +1 -0
  100. package/dist/plugins/api-keys/index.mjs +2 -0
  101. package/dist/plugins/definePlugin.d.cts +2 -0
  102. package/dist/plugins/definePlugin.d.mts +2 -0
  103. package/dist/plugins/insights/index.cjs +9 -0
  104. package/dist/plugins/insights/index.d.cts +1 -0
  105. package/dist/plugins/insights/index.d.mts +1 -0
  106. package/dist/plugins/insights/index.mjs +2 -0
  107. package/dist/plugins/official.cjs +30 -0
  108. package/dist/plugins/official.mjs +29 -0
  109. package/dist/storageAccess.cjs +13 -10
  110. package/dist/storageAccess.mjs +13 -10
  111. package/dist/types/index.d.cts +2 -28
  112. package/dist/types/index.d.mts +2 -28
  113. package/package.json +26 -14
  114. package/dist/_virtual/_rolldown/runtime.cjs +0 -23
  115. package/dist/adapters/databaseConstraintErrors.cjs +0 -22
  116. package/dist/adapters/databaseConstraintErrors.mjs +0 -21
  117. package/dist/adapters/databasePluginUtils.cjs +0 -116
  118. package/dist/adapters/databasePluginUtils.mjs +0 -106
  119. package/dist/adapters/drizzleCrud.cjs +0 -311
  120. package/dist/adapters/drizzleCrud.mjs +0 -308
  121. package/dist/adapters/drizzleLazyDB.cjs +0 -106
  122. package/dist/adapters/drizzleLazyDB.mjs +0 -106
  123. package/dist/adapters/drizzleQuery.cjs +0 -69
  124. package/dist/adapters/drizzleQuery.mjs +0 -69
  125. package/dist/adapters/insightsTransaction.cjs +0 -22
  126. package/dist/adapters/insightsTransaction.mjs +0 -22
  127. package/dist/adapters/kyselyCrud.cjs +0 -305
  128. package/dist/adapters/kyselyCrud.mjs +0 -304
  129. package/dist/adapters/kyselyQuery.cjs +0 -56
  130. package/dist/adapters/kyselyQuery.mjs +0 -56
  131. package/dist/adapters/mongodbCollections.cjs +0 -38
  132. package/dist/adapters/mongodbCollections.mjs +0 -32
  133. package/dist/adapters/mongodbQuery.cjs +0 -94
  134. package/dist/adapters/mongodbQuery.mjs +0 -86
  135. package/dist/adapters/mongodbReads.cjs +0 -210
  136. package/dist/adapters/mongodbReads.mjs +0 -210
  137. package/dist/adapters/mongodbWrites.cjs +0 -148
  138. package/dist/adapters/mongodbWrites.mjs +0 -148
  139. package/dist/adapters/prismaQuery.cjs +0 -57
  140. package/dist/adapters/prismaQuery.mjs +0 -56
  141. package/dist/adapters/prismaRows.cjs +0 -219
  142. package/dist/adapters/prismaRows.mjs +0 -209
  143. package/dist/apiKeys.cjs +0 -143
  144. package/dist/apiKeys.d.cts +0 -49
  145. package/dist/apiKeys.d.mts +0 -49
  146. package/dist/apiKeys.mjs +0 -133
  147. package/dist/db/createBundleDiff.cjs +0 -144
  148. package/dist/db/createBundleDiff.d.cts +0 -16
  149. package/dist/db/createBundleDiff.d.mts +0 -16
  150. package/dist/db/createBundleDiff.mjs +0 -141
  151. package/dist/db/databasePluginCore.cjs +0 -137
  152. package/dist/db/databasePluginCore.mjs +0 -137
  153. package/dist/db/fixedMigrator.cjs +0 -79
  154. package/dist/db/fixedMigrator.mjs +0 -78
  155. package/dist/db/fixedMigratorMongo.cjs +0 -321
  156. package/dist/db/fixedMigratorMongo.mjs +0 -321
  157. package/dist/db/fixedMigratorShared.cjs +0 -23
  158. package/dist/db/fixedMigratorShared.mjs +0 -18
  159. package/dist/db/index.cjs +0 -27
  160. package/dist/db/index.d.cts +0 -12
  161. package/dist/db/index.d.mts +0 -12
  162. package/dist/db/index.mjs +0 -22
  163. package/dist/db/mongoMigrationExecution.cjs +0 -11
  164. package/dist/db/mongoMigrationExecution.mjs +0 -11
  165. package/dist/db/releaseCatalog.d.cts +0 -16
  166. package/dist/db/releaseCatalog.d.mts +0 -16
  167. package/dist/db/schema/insightsCollation.cjs +0 -14
  168. package/dist/db/schema/insightsCollation.mjs +0 -14
  169. package/dist/db/schema/mongodb.cjs +0 -25
  170. package/dist/db/schema/mongodb.mjs +0 -25
  171. package/dist/db/schema/registry.cjs +0 -21
  172. package/dist/db/schema/registry.mjs +0 -17
  173. package/dist/db/schema/sql.cjs +0 -105
  174. package/dist/db/schema/sql.mjs +0 -97
  175. package/dist/db/schema/sqlOperations.cjs +0 -27
  176. package/dist/db/schema/sqlOperations.mjs +0 -26
  177. package/dist/db/schemaGenerators.cjs +0 -275
  178. package/dist/db/schemaGenerators.mjs +0 -273
  179. package/dist/db/schemaReadiness.cjs +0 -26
  180. package/dist/db/schemaReadiness.d.cts +0 -9
  181. package/dist/db/schemaReadiness.d.mts +0 -9
  182. package/dist/db/schemaReadiness.mjs +0 -25
  183. package/dist/db/sqlMigrationExecution.cjs +0 -67
  184. package/dist/db/sqlMigrationExecution.mjs +0 -67
  185. package/dist/db/types.cjs +0 -22
  186. package/dist/db/types.d.cts +0 -118
  187. package/dist/db/types.d.mts +0 -118
  188. package/dist/db/types.mjs +0 -19
  189. package/dist/handlerBundleRoutes.cjs +0 -155
  190. package/dist/handlerBundleRoutes.mjs +0 -155
  191. package/dist/handlerReleaseManagementRoutes.cjs +0 -124
  192. package/dist/handlerReleaseManagementRoutes.mjs +0 -124
  193. package/dist/insights/domain.d.cts +0 -89
  194. package/dist/insights/domain.d.mts +0 -89
  195. package/dist/insights/errors.cjs +0 -15
  196. package/dist/insights/errors.mjs +0 -14
  197. package/dist/insights/eventInput.cjs +0 -155
  198. package/dist/insights/eventInput.mjs +0 -153
  199. package/dist/insights/provider.cjs +0 -314
  200. package/dist/insights/provider.d.cts +0 -6
  201. package/dist/insights/provider.d.mts +0 -6
  202. package/dist/insights/provider.mjs +0 -314
  203. package/dist/insights/queryInput.cjs +0 -93
  204. package/dist/insights/queryInput.mjs +0 -91
  205. package/dist/insights/routes.cjs +0 -58
  206. package/dist/insights/routes.mjs +0 -56
  207. package/dist/insights/types.d.cts +0 -32
  208. package/dist/insights/types.d.mts +0 -32
  209. package/dist/schema/dsl.cjs +0 -103
  210. package/dist/schema/dsl.mjs +0 -87
  211. package/dist/schema/index.cjs +0 -20
  212. package/dist/schema/index.mjs +0 -7
  213. package/dist/schema/settings.cjs +0 -9
  214. package/dist/schema/settings.mjs +0 -9
  215. package/dist/schema/types.cjs +0 -8
  216. package/dist/schema/types.mjs +0 -6
  217. package/dist/schema/v1_0_0.cjs +0 -406
  218. package/dist/schema/v1_0_0.mjs +0 -398
  219. package/src/adapters/databaseConstraintErrors.ts +0 -25
  220. package/src/adapters/databasePluginTestDatabase.ts +0 -120
  221. package/src/adapters/databasePluginUtils.spec.ts +0 -29
  222. package/src/adapters/databasePluginUtils.ts +0 -214
  223. package/src/adapters/drizzle.spec.ts +0 -336
  224. package/src/adapters/drizzle.ts +0 -162
  225. package/src/adapters/drizzleCrud.ts +0 -571
  226. package/src/adapters/drizzleLazyDB.ts +0 -271
  227. package/src/adapters/drizzleQuery.ts +0 -164
  228. package/src/adapters/insightsTransaction.ts +0 -32
  229. package/src/adapters/kysely.spec.ts +0 -174
  230. package/src/adapters/kysely.ts +0 -110
  231. package/src/adapters/kyselyCrud.ts +0 -709
  232. package/src/adapters/kyselyQuery.ts +0 -128
  233. package/src/adapters/mongodb.integration.spec.ts +0 -210
  234. package/src/adapters/mongodb.spec.ts +0 -209
  235. package/src/adapters/mongodb.ts +0 -138
  236. package/src/adapters/mongodbCollections.ts +0 -67
  237. package/src/adapters/mongodbQuery.ts +0 -255
  238. package/src/adapters/mongodbReads.ts +0 -380
  239. package/src/adapters/mongodbRows.spec.ts +0 -64
  240. package/src/adapters/mongodbRows.ts +0 -118
  241. package/src/adapters/mongodbTestClient.ts +0 -377
  242. package/src/adapters/mongodbTestFilter.ts +0 -169
  243. package/src/adapters/mongodbWrites.ts +0 -287
  244. package/src/adapters/prisma.spec.ts +0 -293
  245. package/src/adapters/prisma.ts +0 -565
  246. package/src/adapters/prismaQuery.ts +0 -129
  247. package/src/adapters/prismaRows.spec.ts +0 -98
  248. package/src/adapters/prismaRows.ts +0 -337
  249. package/src/adapters/prismaTestClient.ts +0 -413
  250. package/src/apiKeys.integration.spec.ts +0 -192
  251. package/src/apiKeys.spec.ts +0 -162
  252. package/src/apiKeys.ts +0 -220
  253. package/src/calculatePagination.ts +0 -34
  254. package/src/createHotUpdaterCore.ts +0 -246
  255. package/src/db/bundleRows.spec.ts +0 -164
  256. package/src/db/bundleRows.ts +0 -10
  257. package/src/db/createBundleDiff.spec.ts +0 -450
  258. package/src/db/createBundleDiff.ts +0 -364
  259. package/src/db/databasePluginCore.spec.ts +0 -62
  260. package/src/db/databasePluginCore.testFixtures.ts +0 -76
  261. package/src/db/databasePluginCore.ts +0 -185
  262. package/src/db/databasePluginUpdateCheck.bench.ts +0 -110
  263. package/src/db/fixedMigrator.spec.ts +0 -296
  264. package/src/db/fixedMigrator.ts +0 -147
  265. package/src/db/fixedMigratorMongo.spec.ts +0 -239
  266. package/src/db/fixedMigratorMongo.ts +0 -425
  267. package/src/db/fixedMigratorShared.ts +0 -36
  268. package/src/db/hotUpdaterSchema.ts +0 -5
  269. package/src/db/index.spec.ts +0 -1269
  270. package/src/db/index.ts +0 -47
  271. package/src/db/mongoMigrationExecution.ts +0 -23
  272. package/src/db/node-sqlite.d.ts +0 -25
  273. package/src/db/releaseCatalog.ts +0 -148
  274. package/src/db/schema/definitions.ts +0 -1
  275. package/src/db/schema/insightsCollation.ts +0 -21
  276. package/src/db/schema/mongodb.ts +0 -40
  277. package/src/db/schema/registry.ts +0 -55
  278. package/src/db/schema/sql.ts +0 -244
  279. package/src/db/schema/sqlOperations.ts +0 -63
  280. package/src/db/schema/types.ts +0 -1
  281. package/src/db/schemaGenerators.ts +0 -494
  282. package/src/db/schemaReadiness.ts +0 -34
  283. package/src/db/sqlMigrationExecution.spec.ts +0 -65
  284. package/src/db/sqlMigrationExecution.ts +0 -108
  285. package/src/db/types.spec.ts +0 -63
  286. package/src/db/types.ts +0 -228
  287. package/src/db/updateArtifacts.spec.ts +0 -359
  288. package/src/db/updateArtifacts.ts +0 -541
  289. package/src/handler-standalone.integration.spec.ts +0 -528
  290. package/src/handler.spec.ts +0 -190
  291. package/src/handler.testFixtures.ts +0 -30
  292. package/src/handler.ts +0 -245
  293. package/src/handlerAuth.integration.spec.ts +0 -33
  294. package/src/handlerBundleRoutes.ts +0 -259
  295. package/src/handlerErrors.ts +0 -7
  296. package/src/handlerManagement.spec.ts +0 -262
  297. package/src/handlerParameters.ts +0 -105
  298. package/src/handlerReleaseCatalogRoutes.ts +0 -154
  299. package/src/handlerReleaseManagementRoutes.ts +0 -213
  300. package/src/handlerTypes.ts +0 -96
  301. package/src/handlerVersionRoutes.ts +0 -12
  302. package/src/index.ts +0 -30
  303. package/src/insights/domain.ts +0 -103
  304. package/src/insights/errors.ts +0 -11
  305. package/src/insights/eventInput.ts +0 -225
  306. package/src/insights/insights.integration.spec.ts +0 -381
  307. package/src/insights/provider.spec.ts +0 -385
  308. package/src/insights/provider.ts +0 -591
  309. package/src/insights/queryInput.ts +0 -141
  310. package/src/insights/routes.ts +0 -104
  311. package/src/insights/types.ts +0 -55
  312. package/src/internalRouter.ts +0 -104
  313. package/src/node.spec.ts +0 -119
  314. package/src/node.ts +0 -111
  315. package/src/releaseCatalogRoutes.integration.spec.ts +0 -238
  316. package/src/runtime.spec.ts +0 -194
  317. package/src/runtime.testFixtures.ts +0 -71
  318. package/src/schema/dsl-all-versions.spec.ts +0 -37
  319. package/src/schema/dsl.ts +0 -187
  320. package/src/schema/index.ts +0 -10
  321. package/src/schema/settings.ts +0 -15
  322. package/src/schema/types.ts +0 -79
  323. package/src/schema/v1_0_0.spec.ts +0 -220
  324. package/src/schema/v1_0_0.ts +0 -529
  325. package/src/storageAccess.spec.ts +0 -152
  326. package/src/storageAccess.ts +0 -141
  327. package/src/types/index.ts +0 -34
  328. package/src/version.ts +0 -3
package/src/schema/dsl.ts DELETED
@@ -1,187 +0,0 @@
1
- import type {
2
- HotUpdaterColumnSchema,
3
- HotUpdaterColumnType,
4
- HotUpdaterCheckSchema,
5
- HotUpdaterDefault,
6
- HotUpdaterForeignKeySchema,
7
- HotUpdaterIndexSchema,
8
- HotUpdaterRelationSchema,
9
- HotUpdaterTableSchema,
10
- HotUpdaterVersionedSchema,
11
- } from "./types";
12
-
13
- type DefaultValue =
14
- | boolean
15
- | number
16
- | string
17
- | Record<string, unknown>
18
- | readonly unknown[];
19
-
20
- export type HotUpdaterColumnDsl = {
21
- readonly dsl: "column";
22
- readonly ormName: string;
23
- readonly type: HotUpdaterColumnType;
24
- readonly default?: HotUpdaterDefault;
25
- readonly nullableValue?: true;
26
- readonly primaryKeyValue?: true;
27
- readonly providerCollations?: HotUpdaterColumnSchema["providerCollations"];
28
- readonly nullable: () => HotUpdaterColumnDsl;
29
- readonly primaryKey: () => HotUpdaterColumnDsl;
30
- readonly collate: (
31
- providerCollations: NonNullable<
32
- HotUpdaterColumnSchema["providerCollations"]
33
- >,
34
- ) => HotUpdaterColumnDsl;
35
- readonly defaultTo: (value: DefaultValue) => HotUpdaterColumnDsl;
36
- };
37
-
38
- export type HotUpdaterTableDsl = HotUpdaterTableSchema & {
39
- readonly dsl: "table";
40
- };
41
-
42
- const withDsl = <Value extends object, Dsl extends string>(
43
- value: Value,
44
- dsl: Dsl,
45
- ): Value & { readonly dsl: Dsl } =>
46
- Object.defineProperty(value, "dsl", {
47
- enumerable: false,
48
- value: dsl,
49
- }) as Value & { readonly dsl: Dsl };
50
-
51
- const defaultValue = (value: DefaultValue): HotUpdaterDefault =>
52
- typeof value === "object"
53
- ? { type: "json", value }
54
- : { type: "literal", value };
55
-
56
- const columnSchema = (column: HotUpdaterColumnDsl): HotUpdaterColumnSchema => ({
57
- ormName: column.ormName,
58
- type: column.type,
59
- ...(column.providerCollations
60
- ? { providerCollations: column.providerCollations }
61
- : {}),
62
- ...(column.nullableValue ? { nullable: true } : {}),
63
- ...(column.primaryKeyValue ? { primaryKey: true } : {}),
64
- ...(column.default ? { default: column.default } : {}),
65
- });
66
-
67
- type ColumnState = HotUpdaterColumnSchema & {
68
- readonly nullableValue?: boolean;
69
- readonly primaryKeyValue?: boolean;
70
- };
71
-
72
- const createColumn = (state: ColumnState): HotUpdaterColumnDsl => ({
73
- dsl: "column",
74
- ormName: state.ormName,
75
- type: state.type,
76
- ...(state.providerCollations
77
- ? { providerCollations: state.providerCollations }
78
- : {}),
79
- ...(state.nullableValue ? { nullableValue: true } : {}),
80
- ...(state.primaryKeyValue ? { primaryKeyValue: true } : {}),
81
- ...(state.default ? { default: state.default } : {}),
82
- nullable: () => createColumn({ ...state, nullableValue: true }),
83
- primaryKey: () => createColumn({ ...state, primaryKeyValue: true }),
84
- collate: (providerCollations) =>
85
- createColumn({ ...state, providerCollations }),
86
- defaultTo: (value) =>
87
- createColumn({ ...state, default: defaultValue(value) }),
88
- });
89
-
90
- export const varchar = <Length extends number>(
91
- length: Length,
92
- ): `varchar(${Length})` => `varchar(${length})` as `varchar(${Length})`;
93
-
94
- export const column = (
95
- ormName: string,
96
- type: HotUpdaterColumnType,
97
- ): HotUpdaterColumnDsl => createColumn({ ormName, type });
98
-
99
- export const idColumn = (
100
- ormName: string,
101
- type: HotUpdaterColumnType,
102
- ): HotUpdaterColumnDsl => column(ormName, type).primaryKey();
103
-
104
- export const uuid = (ormName: string): HotUpdaterColumnDsl =>
105
- column(ormName, "uuid");
106
-
107
- export const integer = (ormName: string): HotUpdaterColumnDsl =>
108
- column(ormName, "integer");
109
-
110
- export const float = (ormName: string): HotUpdaterColumnDsl =>
111
- column(ormName, "float");
112
-
113
- export const bool = (ormName: string): HotUpdaterColumnDsl =>
114
- column(ormName, "bool");
115
-
116
- export const json = (ormName: string): HotUpdaterColumnDsl =>
117
- column(ormName, "json");
118
-
119
- export const stringColumn = (ormName: string): HotUpdaterColumnDsl =>
120
- column(ormName, "string");
121
-
122
- export const largeString = (ormName: string): HotUpdaterColumnDsl =>
123
- column(ormName, "large-string");
124
-
125
- export const index = (
126
- name: string,
127
- columns: readonly string[],
128
- providers?: HotUpdaterIndexSchema["providers"],
129
- ): HotUpdaterIndexSchema => ({
130
- name,
131
- columns,
132
- ...(providers ? { providers } : {}),
133
- });
134
-
135
- export const uniqueIndex = (
136
- name: string,
137
- columns: readonly string[],
138
- providers?: HotUpdaterIndexSchema["providers"],
139
- ): HotUpdaterIndexSchema => ({
140
- name,
141
- columns,
142
- ...(providers ? { providers } : {}),
143
- unique: true,
144
- });
145
-
146
- export const foreignKey = (
147
- name: string,
148
- columns: readonly string[],
149
- referencedTable: string,
150
- referencedColumns: readonly string[],
151
- options: {
152
- readonly onDelete?: HotUpdaterForeignKeySchema["onDelete"];
153
- } = {},
154
- ): HotUpdaterForeignKeySchema => ({
155
- name,
156
- columns,
157
- referencedTable,
158
- referencedColumns,
159
- onUpdate: "restrict",
160
- onDelete: options.onDelete ?? "cascade",
161
- });
162
-
163
- export const check = (config: HotUpdaterCheckSchema): HotUpdaterCheckSchema =>
164
- config;
165
-
166
- export const relation = (
167
- config: HotUpdaterRelationSchema,
168
- ): HotUpdaterRelationSchema => config;
169
-
170
- export const table = (
171
- ormName: string,
172
- columns: Record<string, HotUpdaterColumnDsl>,
173
- extras: Omit<HotUpdaterTableSchema, "columns" | "ormName"> = {},
174
- ): HotUpdaterTableDsl =>
175
- withDsl(
176
- {
177
- ormName,
178
- columns: Object.values(columns).map(columnSchema),
179
- ...extras,
180
- },
181
- "table",
182
- );
183
-
184
- export const schema = (
185
- value: HotUpdaterVersionedSchema,
186
- ): HotUpdaterVersionedSchema & { readonly dsl: "schema" } =>
187
- withDsl({ ...value }, "schema");
@@ -1,10 +0,0 @@
1
- import type { HotUpdaterVersionedSchema } from "./types";
2
- import { v1_0_0 } from "./v1_0_0";
3
-
4
- export * from "./settings";
5
- export * from "./types";
6
- export * from "./v1_0_0";
7
-
8
- export const hotUpdaterSchemaVersions: readonly HotUpdaterVersionedSchema[] = [
9
- v1_0_0,
10
- ];
@@ -1,15 +0,0 @@
1
- import { idColumn, stringColumn, table, varchar } from "./dsl";
2
- import {
3
- HOT_UPDATER_SETTINGS_TABLE,
4
- type HotUpdaterSchemaVersion,
5
- } from "./types";
6
-
7
- export const createSettingsTable = (version: HotUpdaterSchemaVersion) =>
8
- table(
9
- HOT_UPDATER_SETTINGS_TABLE,
10
- {
11
- key: idColumn("key", varchar(255)),
12
- value: stringColumn("value").defaultTo(version),
13
- },
14
- { internal: true },
15
- );
@@ -1,79 +0,0 @@
1
- import type { ORMProvider } from "../db/types";
2
-
3
- export const HOT_UPDATER_SCHEMA_VERSION = "1.0.0";
4
- export const HOT_UPDATER_CORE_SCHEMA_KEY = "schema.core";
5
- export const HOT_UPDATER_SETTINGS_TABLE = "private_hot_updater_settings";
6
-
7
- export type HotUpdaterColumnType =
8
- | "bool"
9
- | "float"
10
- | "integer"
11
- | "json"
12
- | "large-string"
13
- | "string"
14
- | "uuid"
15
- | `varchar(${number})`;
16
-
17
- export type HotUpdaterDefault =
18
- | { readonly type: "literal"; readonly value: boolean | number | string }
19
- | { readonly type: "json"; readonly value: unknown };
20
-
21
- export interface HotUpdaterColumnSchema {
22
- readonly ormName: string;
23
- readonly type: HotUpdaterColumnType;
24
- readonly providerCollations?: Partial<Record<ORMProvider, string>>;
25
- readonly nullable?: boolean;
26
- readonly primaryKey?: boolean;
27
- readonly default?: HotUpdaterDefault;
28
- }
29
-
30
- export interface HotUpdaterIndexSchema {
31
- readonly name: string;
32
- readonly columns: readonly string[];
33
- readonly providers?: readonly ORMProvider[];
34
- readonly unique?: true;
35
- }
36
-
37
- export interface HotUpdaterCheckSchema {
38
- readonly name: string;
39
- readonly expression: string;
40
- readonly providerExpressions?: Partial<Record<ORMProvider, string>>;
41
- readonly sqliteInline?: boolean;
42
- }
43
-
44
- export interface HotUpdaterForeignKeySchema {
45
- readonly name: string;
46
- readonly columns: readonly string[];
47
- readonly referencedTable: string;
48
- readonly referencedColumns: readonly string[];
49
- readonly onUpdate: "restrict";
50
- readonly onDelete: "cascade" | "restrict" | "set null";
51
- }
52
-
53
- export interface HotUpdaterRelationSchema {
54
- readonly name: string;
55
- readonly fieldName: string;
56
- readonly targetFieldName: string;
57
- readonly relationName: string;
58
- readonly columns: readonly string[];
59
- readonly referencedTable: string;
60
- readonly referencedColumns: readonly string[];
61
- }
62
-
63
- export interface HotUpdaterTableSchema {
64
- readonly ormName: string;
65
- readonly columns: readonly HotUpdaterColumnSchema[];
66
- readonly indexes?: readonly HotUpdaterIndexSchema[];
67
- readonly checks?: readonly HotUpdaterCheckSchema[];
68
- readonly foreignKeys?: readonly HotUpdaterForeignKeySchema[];
69
- readonly relations?: readonly HotUpdaterRelationSchema[];
70
- readonly internal?: boolean;
71
- }
72
-
73
- export interface HotUpdaterVersionedSchema {
74
- readonly version: HotUpdaterSchemaVersion;
75
- readonly settingsTable: string;
76
- readonly tables: readonly HotUpdaterTableSchema[];
77
- }
78
-
79
- export type HotUpdaterSchemaVersion = "1.0.0";
@@ -1,220 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
-
3
- import { createTableSql } from "../db/schema/sql";
4
- import {
5
- generateDrizzleSchema,
6
- generatePrismaSchema,
7
- } from "../db/schemaGenerators";
8
- import {
9
- bundleEventsV100,
10
- bundleInstallationsV100,
11
- bundlePatchesV100,
12
- bundlesV100,
13
- releaseCatalogsV100,
14
- releasesV100,
15
- v1_0_0,
16
- } from "./v1_0_0";
17
-
18
- describe("v1.0.0 Release Catalog schema", () => {
19
- it("adds the canonical Release and catalog access paths", () => {
20
- expect(v1_0_0.tables.map(({ ormName }) => ormName)).toContain("releases");
21
- expect(v1_0_0.tables.map(({ ormName }) => ormName)).toContain(
22
- "release_catalogs",
23
- );
24
- expect(releasesV100.indexes).toContainEqual({
25
- columns: ["scope_key", "id"],
26
- name: "releases_scope_order_idx",
27
- });
28
- expect(
29
- releaseCatalogsV100.columns.find(({ ormName }) => ormName === "scope_key")
30
- ?.primaryKey,
31
- ).toBe(true);
32
- });
33
-
34
- it("keeps only immutable artifact fields on Bundle rows", () => {
35
- const fields = bundlesV100.columns.map(({ ormName }) => ormName);
36
-
37
- expect(fields).toEqual([
38
- "id",
39
- "platform",
40
- "file_hash",
41
- "git_commit_hash",
42
- "storage_uri",
43
- "archive_byte_size",
44
- "metadata",
45
- "manifest_storage_uri",
46
- "manifest_file_hash",
47
- "asset_base_storage_uri",
48
- ]);
49
- expect(fields).not.toContain("channel_id");
50
- expect(fields).not.toContain("enabled");
51
- expect(fields).not.toContain("target_app_version");
52
- });
53
-
54
- it("stores required archive and patch sizes as bounded floating columns", () => {
55
- const archiveSize = bundlesV100.columns.find(
56
- ({ ormName }) => ormName === "archive_byte_size",
57
- );
58
- const patchSize = bundlePatchesV100.columns.find(
59
- ({ ormName }) => ormName === "byte_size",
60
- );
61
- const sql = createTableSql("postgresql", "foreign-keys", v1_0_0).join("\n");
62
- const prisma = generatePrismaSchema("postgresql", v1_0_0);
63
- const drizzle = generateDrizzleSchema("postgresql", v1_0_0);
64
-
65
- expect(archiveSize?.type).toBe("float");
66
- expect(archiveSize?.nullable).toBeUndefined();
67
- expect(patchSize?.type).toBe("float");
68
- expect(patchSize?.nullable).toBeUndefined();
69
- expect(sql).toContain("archive_byte_size double precision not null");
70
- expect(sql).toContain("byte_size double precision not null");
71
- expect(sql).toContain("archive_byte_size <= 9007199254740991");
72
- expect(sql).toContain("byte_size <= 9007199254740991");
73
- expect(prisma).toContain("archive_byte_size Float");
74
- expect(prisma).toContain("byte_size Float");
75
- expect(drizzle).toContain(
76
- 'archive_byte_size: doublePrecision("archive_byte_size").notNull()',
77
- );
78
- expect(drizzle).toContain(
79
- 'byte_size: doublePrecision("byte_size").notNull()',
80
- );
81
- });
82
-
83
- it("keeps nullable sources while requiring the reported target Bundle", () => {
84
- for (const field of [
85
- "from_release_id",
86
- "to_release_id",
87
- "from_bundle_id",
88
- ]) {
89
- expect(
90
- bundleEventsV100.columns.find(({ ormName }) => ormName === field)
91
- ?.nullable,
92
- ).toBe(true);
93
- }
94
- expect(
95
- bundleEventsV100.columns.find(({ ormName }) => ormName === "to_bundle_id")
96
- ?.nullable,
97
- ).toBeUndefined();
98
- });
99
-
100
- it("stores one current row per installation with the required lookup indexes", () => {
101
- expect(
102
- bundleInstallationsV100.columns.find(
103
- ({ ormName }) => ormName === "install_id",
104
- )?.primaryKey,
105
- ).toBe(true);
106
- expect(bundleInstallationsV100.indexes).toEqual(
107
- expect.arrayContaining([
108
- {
109
- columns: ["user_id", "install_id"],
110
- name: "bundle_installations_user_id_idx",
111
- },
112
- {
113
- columns: ["received_at_ms"],
114
- name: "bundle_installations_received_at_idx",
115
- },
116
- ]),
117
- );
118
-
119
- const sql = createTableSql("postgresql", "foreign-keys", v1_0_0).join("\n");
120
- const prisma = generatePrismaSchema("postgresql", v1_0_0);
121
- const drizzle = generateDrizzleSchema("postgresql", v1_0_0);
122
- expect(sql).toContain("create table bundle_installations");
123
- expect(sql).toContain(
124
- 'install_id varchar(255) collate "C" primary key not null',
125
- );
126
- expect(sql).toContain(
127
- "create index bundle_installations_user_id_idx on bundle_installations(user_id, install_id)",
128
- );
129
- expect(sql).toContain(
130
- "create index bundle_installations_received_at_idx on bundle_installations(received_at_ms)",
131
- );
132
- expect(sql).toContain(
133
- "create index bundle_installations_bundle_idx on bundle_installations(platform, channel, to_bundle_id, received_at_ms)",
134
- );
135
- expect(sql).toContain(
136
- "create index bundle_events_from_bundle_idx on bundle_events(type, platform, channel, from_bundle_id, received_at_ms, id)",
137
- );
138
- expect(prisma).toContain("initial Prisma SQL migration");
139
- expect(prisma).toContain(
140
- 'alter table bundle_installations alter column install_id type varchar(255) collate "C"',
141
- );
142
- expect(prisma).toContain("model bundle_installations {");
143
- expect(prisma).toContain("install_id String @db.VarChar(255) @id");
144
- expect(drizzle).toContain("export const bundle_installations = pgTable(");
145
- expect(drizzle).toContain(
146
- 'index("bundle_installations_user_id_idx").on(table.user_id, table.install_id)',
147
- );
148
- });
149
-
150
- it("keeps identity indexes valid on MySQL and MSSQL", () => {
151
- const mysql = createTableSql("mysql", "foreign-keys", v1_0_0).join("\n");
152
- const mssql = createTableSql("mssql", "foreign-keys", v1_0_0).join("\n");
153
-
154
- expect(mysql).toContain(
155
- "install_id varchar(255) character set utf8mb4 collate utf8mb4_0900_bin not null",
156
- );
157
- expect(mysql).toContain("user_id varchar(255)");
158
- expect(mssql).toContain("install_id nvarchar(255) not null");
159
- expect(mssql).toContain("user_id nvarchar(255)");
160
-
161
- for (const sql of [mysql, mssql]) {
162
- expect(sql).toContain(
163
- "create index bundle_events_install_idx on bundle_events(install_id, type, received_at_ms, id)",
164
- );
165
- expect(sql).toContain(
166
- "create index bundle_installations_user_id_idx on bundle_installations(user_id, install_id)",
167
- );
168
- }
169
- expect(mssql).not.toContain("install_id nvarchar(max)");
170
- expect(mssql).not.toContain("user_id nvarchar(max)");
171
- });
172
-
173
- it("generates nullable source and artifact relations with the intended deletion rules", () => {
174
- const prisma = generatePrismaSchema("postgresql", v1_0_0);
175
- const drizzle = generateDrizzleSchema("postgresql", v1_0_0);
176
-
177
- expect(prisma).toContain("model releases {");
178
- expect(prisma).toContain("sourceRelease releases? @relation(");
179
- expect(prisma).toContain("onDelete: SetNull");
180
- expect(prisma).toContain("bundle bundles? @relation(");
181
- expect(drizzle).toContain("export const release_catalogs = pgTable(");
182
- expect(drizzle).toContain('index("releases_scope_order_idx")');
183
- expect(drizzle).toContain("foreignColumns: [table.id]");
184
- expect(drizzle).not.toContain("foreignColumns: [releases.id]");
185
- });
186
-
187
- it("creates both projection tables and their constraints from empty", () => {
188
- const sql = createTableSql("postgresql", "foreign-keys", v1_0_0).join("\n");
189
-
190
- expect(sql).toContain("create table releases");
191
- expect(sql).toContain("create table release_catalogs");
192
- expect(sql).toContain("releases_scope_order_idx");
193
- expect(sql).toContain("release_catalogs_generation_check");
194
- expect(sql).toContain("to_bundle_id uuid not null");
195
- expect(sql).toContain("from_bundle_id is not null");
196
- expect(sql).toContain("type = 'UNCHANGED' and from_bundle_id is null");
197
- expect(sql).toContain("on delete set null");
198
- });
199
-
200
- it("uses byte-bounded MySQL catalog keys", () => {
201
- const sql = createTableSql("mysql", "foreign-keys", v1_0_0).join("\n");
202
-
203
- expect(sql).toContain(
204
- "scope_key varchar(2048) character set ascii collate ascii_bin",
205
- );
206
- expect(sql).toContain(
207
- "channel_key varchar(1400) character set ascii collate ascii_bin",
208
- );
209
- expect(sql).toContain(
210
- "create index releases_scope_order_idx on releases(scope_key, id)",
211
- );
212
- expect(sql).toContain("payload mediumtext not null");
213
- expect(generatePrismaSchema("mysql", v1_0_0)).toContain(
214
- "payload String @db.MediumText",
215
- );
216
- expect(generateDrizzleSchema("mysql", v1_0_0)).toContain(
217
- 'payload: mediumtext("payload").notNull()',
218
- );
219
- });
220
- });