@hot-updater/server 1.0.0-rc.1 → 1.0.0-rc.16
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.
- package/dist/_virtual/_rolldown/runtime.cjs +1 -1
- package/dist/adapters/drizzle.cjs +35 -69
- package/dist/adapters/drizzle.d.cts +13 -6
- package/dist/adapters/drizzle.d.mts +13 -6
- package/dist/adapters/drizzle.mjs +34 -69
- package/dist/adapters/drizzleExecutor.cjs +114 -0
- package/dist/adapters/drizzleExecutor.d.cts +9 -0
- package/dist/adapters/drizzleExecutor.d.mts +9 -0
- package/dist/adapters/drizzleExecutor.mjs +112 -0
- package/dist/adapters/kysely.cjs +25 -31
- package/dist/adapters/kysely.d.cts +10 -7
- package/dist/adapters/kysely.d.mts +10 -7
- package/dist/adapters/kysely.mjs +25 -31
- package/dist/adapters/kyselyExecutor.cjs +32 -0
- package/dist/adapters/kyselyExecutor.d.cts +12 -0
- package/dist/adapters/kyselyExecutor.d.mts +12 -0
- package/dist/adapters/kyselyExecutor.mjs +32 -0
- package/dist/adapters/mongodb.cjs +28 -27
- package/dist/adapters/mongodb.d.cts +10 -5
- package/dist/adapters/mongodb.d.mts +10 -5
- package/dist/adapters/mongodb.mjs +28 -27
- package/dist/adapters/mongodbAdapter.cjs +174 -0
- package/dist/adapters/mongodbAdapter.d.cts +9 -0
- package/dist/adapters/mongodbAdapter.d.mts +9 -0
- package/dist/adapters/mongodbAdapter.mjs +173 -0
- package/dist/adapters/prisma.cjs +38 -220
- package/dist/adapters/prisma.d.cts +12 -8
- package/dist/adapters/prisma.d.mts +12 -8
- package/dist/adapters/prisma.mjs +38 -219
- package/dist/adapters/prismaExecutor.cjs +64 -0
- package/dist/adapters/prismaExecutor.mjs +64 -0
- package/dist/adapters/sqlProviders.cjs +9 -0
- package/dist/adapters/sqlProviders.mjs +9 -0
- package/dist/apiKeys.cjs +8 -8
- package/dist/apiKeys.d.cts +1 -24
- package/dist/apiKeys.d.mts +1 -24
- package/dist/apiKeys.mjs +5 -9
- package/dist/assembly/assemblePlugins.cjs +147 -0
- package/dist/assembly/assemblePlugins.d.cts +12 -0
- package/dist/assembly/assemblePlugins.d.mts +12 -0
- package/dist/assembly/assemblePlugins.mjs +146 -0
- package/dist/assembly/databasePlugins.cjs +23 -0
- package/dist/assembly/databasePlugins.d.cts +43 -0
- package/dist/assembly/databasePlugins.d.mts +43 -0
- package/dist/assembly/databasePlugins.mjs +22 -0
- package/dist/core/api.cjs +91 -0
- package/dist/core/api.d.cts +65 -0
- package/dist/core/api.d.mts +65 -0
- package/dist/core/api.mjs +87 -0
- package/dist/core/baseCandidates.cjs +71 -0
- package/dist/core/baseCandidates.d.cts +17 -0
- package/dist/core/baseCandidates.d.mts +17 -0
- package/dist/core/baseCandidates.mjs +69 -0
- package/dist/core/operations.cjs +350 -0
- package/dist/core/operations.mjs +350 -0
- package/dist/core/reads.cjs +273 -0
- package/dist/core/reads.d.cts +48 -0
- package/dist/core/reads.d.mts +48 -0
- package/dist/core/reads.mjs +267 -0
- package/dist/core/releases.cjs +193 -0
- package/dist/core/releases.mjs +190 -0
- package/dist/core/schema.cjs +279 -0
- package/dist/core/schema.d.cts +307 -0
- package/dist/core/schema.d.mts +307 -0
- package/dist/core/schema.mjs +277 -0
- package/dist/core/writes.cjs +96 -0
- package/dist/core/writes.mjs +91 -0
- package/dist/createHotUpdaterCore.cjs +61 -63
- package/dist/createHotUpdaterCore.d.cts +53 -45
- package/dist/createHotUpdaterCore.d.mts +53 -45
- package/dist/createHotUpdaterCore.mjs +61 -63
- package/dist/database/cursor.cjs +44 -0
- package/dist/database/cursor.d.cts +7 -0
- package/dist/database/cursor.d.mts +7 -0
- package/dist/database/cursor.mjs +40 -0
- package/dist/database/database.cjs +44 -0
- package/dist/database/database.d.cts +123 -0
- package/dist/database/database.d.mts +123 -0
- package/dist/database/database.mjs +44 -0
- package/dist/database/definitions.d.cts +68 -0
- package/dist/database/definitions.d.mts +68 -0
- package/dist/database/engine.cjs +37 -0
- package/dist/database/engine.d.cts +40 -0
- package/dist/database/engine.d.mts +40 -0
- package/dist/database/engine.mjs +37 -0
- package/dist/database/engineAggregates.cjs +115 -0
- package/dist/database/engineAggregates.mjs +112 -0
- package/dist/database/engineReads.cjs +180 -0
- package/dist/database/engineReads.d.cts +35 -0
- package/dist/database/engineReads.d.mts +35 -0
- package/dist/database/engineReads.mjs +179 -0
- package/dist/database/engineTransaction.cjs +403 -0
- package/dist/database/engineTransaction.d.cts +26 -0
- package/dist/database/engineTransaction.d.mts +26 -0
- package/dist/database/engineTransaction.mjs +402 -0
- package/dist/database/errors.cjs +27 -0
- package/dist/database/errors.d.cts +21 -0
- package/dist/database/errors.d.mts +21 -0
- package/dist/database/errors.mjs +24 -0
- package/dist/database/fence.cjs +124 -0
- package/dist/database/fence.d.cts +42 -0
- package/dist/database/fence.d.mts +42 -0
- package/dist/database/fence.mjs +116 -0
- package/dist/database/index.cjs +127 -0
- package/dist/database/index.d.cts +17 -0
- package/dist/database/index.d.mts +17 -0
- package/dist/database/index.mjs +15 -0
- package/dist/database/kv/kvAdapter.cjs +273 -0
- package/dist/database/kv/kvAdapter.d.cts +101 -0
- package/dist/database/kv/kvAdapter.d.mts +101 -0
- package/dist/database/kv/kvAdapter.mjs +272 -0
- package/dist/database/resolveSchema.cjs +196 -0
- package/dist/database/resolveSchema.d.cts +42 -0
- package/dist/database/resolveSchema.d.mts +42 -0
- package/dist/database/resolveSchema.mjs +193 -0
- package/dist/database/schema.cjs +21 -0
- package/dist/database/schema.d.cts +61 -0
- package/dist/database/schema.d.mts +61 -0
- package/dist/database/schema.mjs +20 -0
- package/dist/database/sql/sqlAdapter.cjs +282 -0
- package/dist/database/sql/sqlAdapter.d.cts +46 -0
- package/dist/database/sql/sqlAdapter.d.mts +46 -0
- package/dist/database/sql/sqlAdapter.mjs +279 -0
- package/dist/database/sql/sqlSchema.cjs +115 -0
- package/dist/database/sql/sqlSchema.d.cts +8 -0
- package/dist/database/sql/sqlSchema.d.mts +8 -0
- package/dist/database/sql/sqlSchema.mjs +111 -0
- package/dist/db/builtInDatabase.cjs +104 -0
- package/dist/db/builtInDatabase.d.cts +38 -0
- package/dist/db/builtInDatabase.d.mts +38 -0
- package/dist/db/builtInDatabase.mjs +97 -0
- package/dist/db/createBundleDiff.cjs +6 -6
- package/dist/db/createBundleDiff.d.cts +4 -7
- package/dist/db/createBundleDiff.d.mts +4 -7
- package/dist/db/createBundleDiff.mjs +5 -5
- package/dist/db/engineDrizzleSchema.cjs +54 -0
- package/dist/db/engineDrizzleSchema.mjs +54 -0
- package/dist/db/engineMigrator.cjs +53 -0
- package/dist/db/engineMigrator.mjs +53 -0
- package/dist/db/enginePrismaSchema.cjs +85 -0
- package/dist/db/enginePrismaSchema.d.cts +5 -0
- package/dist/db/enginePrismaSchema.d.mts +5 -0
- package/dist/db/enginePrismaSchema.mjs +84 -0
- package/dist/db/engineSql.cjs +26 -0
- package/dist/db/engineSql.d.cts +17 -0
- package/dist/db/engineSql.d.mts +17 -0
- package/dist/db/engineSql.mjs +25 -0
- package/dist/db/engineSqlMigrator.cjs +66 -0
- package/dist/db/engineSqlMigrator.mjs +66 -0
- package/dist/db/fixedMigratorShared.cjs +0 -11
- package/dist/db/fixedMigratorShared.mjs +1 -8
- package/dist/db/index.cjs +23 -8
- package/dist/db/index.d.cts +10 -4
- package/dist/db/index.d.mts +10 -4
- package/dist/db/index.mjs +16 -8
- package/dist/db/releaseCatalog.cjs +20 -44
- package/dist/db/releaseCatalog.d.cts +2 -3
- package/dist/db/releaseCatalog.d.mts +2 -3
- package/dist/db/releaseCatalog.mjs +20 -44
- package/dist/db/schemaSettings.cjs +63 -0
- package/dist/db/schemaSettings.d.cts +12 -0
- package/dist/db/schemaSettings.d.mts +12 -0
- package/dist/db/schemaSettings.mjs +62 -0
- package/dist/db/settingsMigrator.cjs +92 -0
- package/dist/db/settingsMigrator.mjs +89 -0
- package/dist/db/types.cjs +3 -12
- package/dist/db/types.d.cts +26 -69
- package/dist/db/types.d.mts +26 -69
- package/dist/db/types.mjs +2 -11
- package/dist/db/updateArtifacts.cjs +38 -68
- package/dist/db/updateArtifacts.mjs +40 -69
- package/dist/handler.cjs +72 -43
- package/dist/handler.d.cts +3 -6
- package/dist/handler.d.mts +3 -6
- package/dist/handler.mjs +73 -43
- package/dist/handlerAdminRoutes.cjs +375 -0
- package/dist/handlerAdminRoutes.mjs +373 -0
- package/dist/handlerParameters.cjs +6 -11
- package/dist/handlerParameters.mjs +6 -10
- package/dist/handlerReleaseCatalogRoutes.cjs +11 -14
- package/dist/handlerReleaseCatalogRoutes.mjs +11 -13
- package/dist/handlerTypes.d.cts +2 -56
- package/dist/handlerTypes.d.mts +2 -56
- package/dist/handlerVersionRoutes.cjs +20 -4
- package/dist/handlerVersionRoutes.d.cts +1 -0
- package/dist/handlerVersionRoutes.d.mts +1 -0
- package/dist/handlerVersionRoutes.mjs +20 -4
- package/dist/index.cjs +4 -7
- package/dist/index.d.cts +10 -9
- package/dist/index.d.mts +10 -9
- package/dist/index.mjs +4 -4
- package/dist/insights/domain.d.cts +53 -70
- package/dist/insights/domain.d.mts +53 -70
- package/dist/insights/errors.cjs +35 -8
- package/dist/insights/errors.mjs +35 -8
- package/dist/insights/eventInput.cjs +64 -24
- package/dist/insights/eventInput.mjs +63 -25
- package/dist/insights/provider.cjs +356 -0
- package/dist/insights/provider.d.cts +6 -0
- package/dist/insights/provider.d.mts +6 -0
- package/dist/insights/provider.mjs +355 -0
- package/dist/insights/queryInput.cjs +78 -43
- package/dist/insights/queryInput.mjs +76 -40
- package/dist/insights/routes.cjs +94 -34
- package/dist/insights/routes.mjs +93 -35
- package/dist/insights/types.d.cts +27 -12
- package/dist/insights/types.d.mts +27 -12
- package/dist/node.d.cts +1 -2
- package/dist/node.d.mts +1 -2
- package/dist/package.cjs +1 -1
- package/dist/package.mjs +1 -1
- package/dist/plugins/api-keys/index.cjs +50 -0
- package/dist/plugins/api-keys/index.d.cts +85 -0
- package/dist/plugins/api-keys/index.d.mts +85 -0
- package/dist/plugins/api-keys/index.mjs +47 -0
- package/dist/plugins/api-keys/model.cjs +58 -0
- package/dist/plugins/api-keys/model.d.cts +8 -0
- package/dist/plugins/api-keys/model.d.mts +8 -0
- package/dist/plugins/api-keys/model.mjs +58 -0
- package/dist/plugins/api-keys/schema.cjs +38 -0
- package/dist/plugins/api-keys/schema.d.cts +44 -0
- package/dist/plugins/api-keys/schema.d.mts +44 -0
- package/dist/plugins/api-keys/schema.mjs +39 -0
- package/dist/plugins/builtIn.cjs +7 -0
- package/dist/plugins/builtIn.mjs +6 -0
- package/dist/plugins/definePlugin.cjs +5 -0
- package/dist/plugins/definePlugin.d.cts +73 -0
- package/dist/plugins/definePlugin.d.mts +73 -0
- package/dist/plugins/definePlugin.mjs +5 -0
- package/dist/plugins/index.cjs +17 -0
- package/dist/plugins/index.d.cts +9 -0
- package/dist/plugins/index.d.mts +9 -0
- package/dist/plugins/index.mjs +7 -0
- package/dist/plugins/insights/index.cjs +48 -0
- package/dist/plugins/insights/index.d.cts +295 -0
- package/dist/plugins/insights/index.d.mts +295 -0
- package/dist/plugins/insights/index.mjs +44 -0
- package/dist/plugins/insights/model.cjs +17 -0
- package/dist/plugins/insights/model.d.cts +10 -0
- package/dist/plugins/insights/model.d.mts +10 -0
- package/dist/plugins/insights/model.mjs +17 -0
- package/dist/plugins/insights/reads.cjs +471 -0
- package/dist/plugins/insights/reads.mjs +466 -0
- package/dist/plugins/insights/recordEvent.cjs +135 -0
- package/dist/plugins/insights/recordEvent.d.cts +13 -0
- package/dist/plugins/insights/recordEvent.d.mts +13 -0
- package/dist/plugins/insights/recordEvent.mjs +132 -0
- package/dist/plugins/insights/schema.cjs +347 -0
- package/dist/plugins/insights/schema.d.cts +258 -0
- package/dist/plugins/insights/schema.d.mts +258 -0
- package/dist/plugins/insights/schema.mjs +344 -0
- package/dist/storageAccess.cjs +0 -1
- package/dist/types/index.d.cts +2 -29
- package/dist/types/index.d.mts +2 -29
- package/package.json +30 -7
- package/src/adapters/drizzle.conformance.integration.spec.ts +34 -0
- package/src/adapters/drizzle.readBudgets.integration.spec.ts +41 -0
- package/src/adapters/drizzle.spec.ts +277 -208
- package/src/adapters/drizzle.ts +48 -128
- package/src/adapters/drizzleExecutor.ts +166 -0
- package/src/adapters/kysely.conformance.integration.spec.ts +36 -0
- package/src/adapters/kysely.readBudgets.integration.spec.ts +42 -0
- package/src/adapters/kysely.spec.ts +212 -117
- package/src/adapters/kysely.ts +32 -87
- package/src/adapters/kyselyExecutor.ts +53 -0
- package/src/adapters/mongodb.integration.spec.ts +180 -0
- package/src/adapters/mongodb.readBudgets.integration.spec.ts +61 -0
- package/src/adapters/mongodb.ts +36 -65
- package/src/adapters/mongodbAdapter.ts +293 -0
- package/src/adapters/prisma.conformance.integration.spec.ts +36 -0
- package/src/adapters/prisma.integration.spec.ts +138 -0
- package/src/adapters/prisma.readBudgets.integration.spec.ts +40 -0
- package/src/adapters/prisma.spec.ts +226 -173
- package/src/adapters/prisma.ts +60 -451
- package/src/adapters/prismaExecutor.ts +107 -0
- package/src/adapters/prismaTestClients.ts +175 -0
- package/src/adapters/sqlProviders.ts +14 -0
- package/src/apiKeys.integration.spec.ts +19 -119
- package/src/apiKeys.spec.ts +39 -35
- package/src/apiKeys.ts +2 -8
- package/src/assembly/assemblePlugins.ts +269 -0
- package/src/assembly/assembly.spec.ts +325 -0
- package/src/assembly/assembly.types.spec.ts +155 -0
- package/src/assembly/builtInRoutes.spec.ts +213 -0
- package/src/assembly/databasePlugins.spec.ts +71 -0
- package/src/assembly/databasePlugins.ts +96 -0
- package/src/core/api.ts +139 -0
- package/src/core/baseCandidates.spec.ts +378 -0
- package/src/core/baseCandidates.ts +136 -0
- package/src/core/index.ts +44 -0
- package/src/core/operations.spec.ts +415 -0
- package/src/core/operations.ts +551 -0
- package/src/core/reads.spec.ts +300 -0
- package/src/core/reads.ts +417 -0
- package/src/core/releases.spec.ts +308 -0
- package/src/core/releases.ts +345 -0
- package/src/core/schema.ts +173 -0
- package/src/core/writes.ts +160 -0
- package/src/createHotUpdaterCore.ts +191 -167
- package/src/database/cursor.ts +65 -0
- package/src/database/database.ts +335 -0
- package/src/database/database.types.spec.ts +135 -0
- package/src/database/definitions.ts +72 -0
- package/src/database/engine.ts +62 -0
- package/src/database/engineAggregates.spec.ts +539 -0
- package/src/database/engineAggregates.ts +193 -0
- package/src/database/engineReads.spec.ts +219 -0
- package/src/database/engineReads.ts +302 -0
- package/src/database/engineTransaction.spec.ts +710 -0
- package/src/database/engineTransaction.ts +588 -0
- package/src/database/errors.ts +30 -0
- package/src/database/fence.spec.ts +223 -0
- package/src/database/fence.ts +171 -0
- package/src/database/index.ts +154 -0
- package/src/database/kv/kvAdapter.conformance.integration.spec.ts +17 -0
- package/src/database/kv/kvAdapter.readBudgets.integration.spec.ts +17 -0
- package/src/database/kv/kvAdapter.spec.ts +468 -0
- package/src/database/kv/kvAdapter.ts +450 -0
- package/src/database/kv/kvTestStore.ts +91 -0
- package/src/database/memory.readBudgets.integration.spec.ts +13 -0
- package/src/database/resolveSchema.spec.ts +230 -0
- package/src/database/resolveSchema.ts +372 -0
- package/src/database/schema.ts +169 -0
- package/src/database/schema.types.spec.ts +94 -0
- package/src/database/sql/docker-compose.yml +36 -0
- package/src/database/sql/sqlAdapter.integration.spec.ts +148 -0
- package/src/database/sql/sqlAdapter.readBudgets.integration.spec.ts +109 -0
- package/src/database/sql/sqlAdapter.spec.ts +255 -0
- package/src/database/sql/sqlAdapter.ts +532 -0
- package/src/database/sql/sqlSchema.ts +205 -0
- package/src/database/sql/sqlTestExecutors.ts +183 -0
- package/src/databaseTestSuite.spec.ts +39 -0
- package/src/db/builtInDatabase.ts +149 -0
- package/src/db/bundleRows.spec.ts +3 -3
- package/src/db/createBundleDiff.spec.ts +43 -29
- package/src/db/createBundleDiff.ts +13 -7
- package/src/db/engineDrizzleSchema.ts +72 -0
- package/src/db/engineMigrator.ts +105 -0
- package/src/db/enginePrismaSchema.ts +147 -0
- package/src/db/engineSql.spec.ts +129 -0
- package/src/db/engineSql.ts +48 -0
- package/src/db/engineSqlMigrator.ts +116 -0
- package/src/db/fixedMigratorShared.ts +1 -20
- package/src/db/index.spec.ts +116 -824
- package/src/db/index.ts +43 -14
- package/src/db/pluginTables.spec.ts +218 -0
- package/src/db/releaseCatalog.ts +48 -90
- package/src/db/schemaSettings.ts +104 -0
- package/src/db/settingsMigrator.spec.ts +65 -0
- package/src/db/settingsMigrator.ts +152 -0
- package/src/db/types.ts +25 -165
- package/src/db/updateArtifacts.spec.ts +170 -294
- package/src/db/updateArtifacts.ts +74 -142
- package/src/db/updateCheck.bench.ts +47 -0
- package/src/handler-standalone.integration.spec.ts +204 -412
- package/src/handler.spec.ts +134 -51
- package/src/handler.testFixtures.ts +14 -19
- package/src/handler.ts +163 -75
- package/src/handlerAdminRoutes.spec.ts +183 -0
- package/src/handlerAdminRoutes.ts +536 -0
- package/src/handlerAuth.integration.spec.ts +3 -3
- package/src/handlerManagement.spec.ts +136 -196
- package/src/handlerReleaseCatalogRoutes.ts +15 -17
- package/src/handlerTypes.ts +3 -80
- package/src/handlerVersionRoutes.ts +20 -7
- package/src/index.ts +7 -14
- package/src/insights/domain.ts +56 -77
- package/src/insights/errors.spec.ts +48 -0
- package/src/insights/errors.ts +50 -6
- package/src/insights/eventInput.ts +80 -27
- package/src/insights/insights.integration.spec.ts +525 -44
- package/src/insights/provider.spec.ts +574 -0
- package/src/insights/provider.ts +667 -0
- package/src/insights/queryInput.ts +113 -73
- package/src/insights/routes.ts +125 -69
- package/src/insights/types.ts +47 -36
- package/src/lintRules.spec.ts +76 -0
- package/src/plugins/api-keys/apiKeysPlugin.spec.ts +172 -0
- package/src/plugins/api-keys/index.ts +66 -0
- package/src/plugins/api-keys/model.ts +69 -0
- package/src/plugins/api-keys/schema.ts +22 -0
- package/src/plugins/builtIn.ts +5 -0
- package/src/plugins/definePlugin.ts +100 -0
- package/src/plugins/index.ts +55 -0
- package/src/plugins/insights/index.ts +86 -0
- package/src/plugins/insights/insightsRollout.integration.spec.ts +187 -0
- package/src/plugins/insights/model.spec.ts +66 -0
- package/src/plugins/insights/model.ts +19 -0
- package/src/plugins/insights/reads.spec.ts +725 -0
- package/src/plugins/insights/reads.ts +707 -0
- package/src/plugins/insights/recordEvent.spec.ts +443 -0
- package/src/plugins/insights/recordEvent.ts +238 -0
- package/src/plugins/insights/schema.ts +229 -0
- package/src/plugins/pluginTestHarness.spec.ts +56 -0
- package/src/readBudgets.testFixtures.ts +15 -0
- package/src/releaseCatalogRoutes.integration.spec.ts +47 -92
- package/src/runtime.spec.ts +91 -77
- package/src/runtime.testFixtures.ts +28 -44
- package/src/runtimeBundles.integration.spec.ts +112 -0
- package/src/testUtilsMutation.integration.spec.ts +215 -0
- package/src/testUtilsPackage.integration.spec.ts +176 -0
- package/src/types/index.ts +0 -32
- package/dist/adapters/databaseConstraintErrors.cjs +0 -23
- package/dist/adapters/databaseConstraintErrors.mjs +0 -21
- package/dist/adapters/databasePluginUtils.cjs +0 -117
- package/dist/adapters/databasePluginUtils.mjs +0 -106
- package/dist/adapters/drizzleCrud.cjs +0 -250
- package/dist/adapters/drizzleCrud.mjs +0 -249
- package/dist/adapters/drizzleLazyDB.cjs +0 -101
- package/dist/adapters/drizzleLazyDB.mjs +0 -101
- package/dist/adapters/drizzleQuery.cjs +0 -68
- package/dist/adapters/drizzleQuery.mjs +0 -67
- package/dist/adapters/kyselyCrud.cjs +0 -254
- package/dist/adapters/kyselyCrud.mjs +0 -253
- package/dist/adapters/kyselyQuery.cjs +0 -56
- package/dist/adapters/kyselyQuery.mjs +0 -55
- package/dist/adapters/mongodbCollections.cjs +0 -36
- package/dist/adapters/mongodbCollections.mjs +0 -30
- package/dist/adapters/mongodbQuery.cjs +0 -77
- package/dist/adapters/mongodbQuery.mjs +0 -70
- package/dist/adapters/mongodbReads.cjs +0 -148
- package/dist/adapters/mongodbReads.mjs +0 -147
- package/dist/adapters/mongodbWrites.cjs +0 -134
- package/dist/adapters/mongodbWrites.mjs +0 -133
- package/dist/adapters/prismaQuery.cjs +0 -58
- package/dist/adapters/prismaQuery.mjs +0 -56
- package/dist/adapters/prismaRows.cjs +0 -198
- package/dist/adapters/prismaRows.mjs +0 -188
- package/dist/db/databasePluginCore.cjs +0 -138
- package/dist/db/databasePluginCore.mjs +0 -137
- package/dist/db/fixedMigrator.cjs +0 -79
- package/dist/db/fixedMigrator.mjs +0 -78
- package/dist/db/fixedMigratorMongo.cjs +0 -319
- package/dist/db/fixedMigratorMongo.mjs +0 -319
- package/dist/db/mongoMigrationExecution.cjs +0 -11
- package/dist/db/mongoMigrationExecution.mjs +0 -11
- package/dist/db/schema/mongodb.cjs +0 -25
- package/dist/db/schema/mongodb.mjs +0 -25
- package/dist/db/schema/registry.cjs +0 -21
- package/dist/db/schema/registry.mjs +0 -17
- package/dist/db/schema/sql.cjs +0 -101
- package/dist/db/schema/sql.mjs +0 -97
- package/dist/db/schema/sqlOperations.cjs +0 -27
- package/dist/db/schema/sqlOperations.mjs +0 -26
- package/dist/db/schemaGenerators.cjs +0 -256
- package/dist/db/schemaGenerators.mjs +0 -254
- package/dist/db/schemaReadiness.cjs +0 -24
- package/dist/db/schemaReadiness.d.cts +0 -8
- package/dist/db/schemaReadiness.d.mts +0 -8
- package/dist/db/schemaReadiness.mjs +0 -23
- package/dist/db/sqlMigrationExecution.cjs +0 -67
- package/dist/db/sqlMigrationExecution.mjs +0 -66
- package/dist/handlerBundleRoutes.cjs +0 -155
- package/dist/handlerBundleRoutes.mjs +0 -155
- package/dist/handlerReleaseManagementRoutes.cjs +0 -125
- package/dist/handlerReleaseManagementRoutes.mjs +0 -124
- package/dist/insights/bounded/activeOverview.cjs +0 -87
- package/dist/insights/bounded/activeOverview.mjs +0 -85
- package/dist/insights/bounded/installationSearch.cjs +0 -42
- package/dist/insights/bounded/installationSearch.mjs +0 -42
- package/dist/insights/bounded/persistence.cjs +0 -39
- package/dist/insights/bounded/persistence.mjs +0 -38
- package/dist/insights/bounded/provider.cjs +0 -170
- package/dist/insights/bounded/provider.d.cts +0 -7
- package/dist/insights/bounded/provider.d.mts +0 -7
- package/dist/insights/bounded/provider.mjs +0 -170
- package/dist/insights/bounded/scan.cjs +0 -144
- package/dist/insights/bounded/scan.mjs +0 -138
- package/dist/insights/persistence.d.cts +0 -6
- package/dist/insights/persistence.d.mts +0 -6
- package/dist/schema/dsl.cjs +0 -103
- package/dist/schema/dsl.mjs +0 -87
- package/dist/schema/index.cjs +0 -6
- package/dist/schema/index.mjs +0 -7
- package/dist/schema/settings.cjs +0 -9
- package/dist/schema/settings.mjs +0 -9
- package/dist/schema/types.cjs +0 -8
- package/dist/schema/types.mjs +0 -6
- package/dist/schema/v1_0_0.cjs +0 -364
- package/dist/schema/v1_0_0.mjs +0 -357
- package/src/adapters/databaseConstraintErrors.ts +0 -25
- package/src/adapters/databasePluginTestDatabase.ts +0 -106
- package/src/adapters/databasePluginUtils.spec.ts +0 -29
- package/src/adapters/databasePluginUtils.ts +0 -214
- package/src/adapters/drizzleCrud.ts +0 -419
- package/src/adapters/drizzleLazyDB.ts +0 -257
- package/src/adapters/drizzleQuery.ts +0 -164
- package/src/adapters/kyselyCrud.ts +0 -588
- package/src/adapters/kyselyQuery.ts +0 -128
- package/src/adapters/mongodb.spec.ts +0 -141
- package/src/adapters/mongodbCollections.ts +0 -62
- package/src/adapters/mongodbQuery.ts +0 -226
- package/src/adapters/mongodbReads.ts +0 -311
- package/src/adapters/mongodbRows.spec.ts +0 -64
- package/src/adapters/mongodbRows.ts +0 -118
- package/src/adapters/mongodbTestClient.ts +0 -342
- package/src/adapters/mongodbTestFilter.ts +0 -166
- package/src/adapters/mongodbWrites.ts +0 -260
- package/src/adapters/prismaQuery.ts +0 -129
- package/src/adapters/prismaRows.spec.ts +0 -98
- package/src/adapters/prismaRows.ts +0 -301
- package/src/adapters/prismaTestClient.ts +0 -396
- package/src/calculatePagination.ts +0 -34
- package/src/db/databasePluginCore.spec.ts +0 -62
- package/src/db/databasePluginCore.testFixtures.ts +0 -76
- package/src/db/databasePluginCore.ts +0 -185
- package/src/db/databasePluginUpdateCheck.bench.ts +0 -107
- package/src/db/fixedMigrator.spec.ts +0 -231
- package/src/db/fixedMigrator.ts +0 -147
- package/src/db/fixedMigratorMongo.spec.ts +0 -192
- package/src/db/fixedMigratorMongo.ts +0 -425
- package/src/db/hotUpdaterSchema.ts +0 -5
- package/src/db/mongoMigrationExecution.ts +0 -23
- package/src/db/schema/definitions.ts +0 -1
- package/src/db/schema/mongodb.ts +0 -40
- package/src/db/schema/registry.ts +0 -55
- package/src/db/schema/sql.ts +0 -241
- package/src/db/schema/sqlOperations.ts +0 -63
- package/src/db/schema/types.ts +0 -1
- package/src/db/schemaGenerators.ts +0 -466
- package/src/db/schemaReadiness.ts +0 -34
- package/src/db/sqlMigrationExecution.spec.ts +0 -65
- package/src/db/sqlMigrationExecution.ts +0 -108
- package/src/db/types.spec.ts +0 -55
- package/src/handlerBundleRoutes.ts +0 -259
- package/src/handlerReleaseManagementRoutes.ts +0 -213
- package/src/insights/bounded/activeOverview.spec.ts +0 -189
- package/src/insights/bounded/activeOverview.ts +0 -148
- package/src/insights/bounded/installationSearch.spec.ts +0 -130
- package/src/insights/bounded/installationSearch.ts +0 -69
- package/src/insights/bounded/persistence.ts +0 -43
- package/src/insights/bounded/provider.spec.ts +0 -219
- package/src/insights/bounded/provider.ts +0 -229
- package/src/insights/bounded/scan.ts +0 -235
- package/src/insights/persistence.ts +0 -10
- package/src/schema/dsl-all-versions.spec.ts +0 -35
- package/src/schema/dsl.ts +0 -187
- package/src/schema/index.ts +0 -10
- package/src/schema/settings.ts +0 -15
- package/src/schema/types.ts +0 -79
- package/src/schema/v1_0_0.spec.ts +0 -146
- package/src/schema/v1_0_0.ts +0 -465
package/src/adapters/prisma.ts
CHANGED
|
@@ -1,465 +1,74 @@
|
|
|
1
|
+
import { createSqlAdapter } from "../database/sql/sqlAdapter";
|
|
1
2
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
builtInSettings,
|
|
4
|
+
builtInTarget,
|
|
5
|
+
createEngineDatabase,
|
|
6
|
+
} from "../db/builtInDatabase";
|
|
5
7
|
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
type
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
} from "
|
|
12
|
-
|
|
13
|
-
import {
|
|
14
|
-
getHotUpdaterSchemaVersion,
|
|
15
|
-
hotUpdaterSchema,
|
|
16
|
-
} from "../db/schema/registry";
|
|
17
|
-
import { generatePrismaSchema } from "../db/schemaGenerators";
|
|
18
|
-
import type {
|
|
19
|
-
DatabaseAdapterWithCapabilities,
|
|
20
|
-
ORMProvider,
|
|
21
|
-
ORMSQLProvider,
|
|
22
|
-
SchemaGenerator,
|
|
23
|
-
} from "../db/types";
|
|
24
|
-
import {
|
|
25
|
-
isChannelDeleteReferencedError,
|
|
26
|
-
translateChannelDeleteError,
|
|
27
|
-
} from "./databaseConstraintErrors";
|
|
28
|
-
import { hasNullOrderOverrides, sortRowsByOrder } from "./databasePluginUtils";
|
|
29
|
-
import { createPrismaOrderBy, createPrismaWhere } from "./prismaQuery";
|
|
8
|
+
generatePrismaEngineSchema,
|
|
9
|
+
prismaCollationStatements,
|
|
10
|
+
type PrismaProvider,
|
|
11
|
+
} from "../db/enginePrismaSchema";
|
|
12
|
+
import { createSettingsMigrator } from "../db/settingsMigrator";
|
|
13
|
+
import type { SchemaGenerator, ToolingDatabase } from "../db/types";
|
|
30
14
|
import {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
parsePrismaApiKeyRow,
|
|
36
|
-
parsePrismaPatchRow,
|
|
37
|
-
parsePrismaReleaseCatalogRow,
|
|
38
|
-
parsePrismaReleaseRow,
|
|
39
|
-
parsePrismaRows,
|
|
40
|
-
PrismaAdapterError,
|
|
41
|
-
} from "./prismaRows";
|
|
15
|
+
prismaExecutor,
|
|
16
|
+
type PrismaTransactionalClient,
|
|
17
|
+
} from "./prismaExecutor";
|
|
18
|
+
import { checkSqlProvider } from "./sqlProviders";
|
|
42
19
|
|
|
43
|
-
type
|
|
44
|
-
|
|
45
|
-
type PrismaTransactionOptions = {
|
|
46
|
-
readonly isolationLevel: "Serializable";
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
type PrismaTransactionClient = object & {
|
|
50
|
-
readonly $transaction: <TResult>(
|
|
51
|
-
callback: (client: object) => Promise<TResult>,
|
|
52
|
-
options?: PrismaTransactionOptions,
|
|
53
|
-
) => Promise<TResult>;
|
|
54
|
-
};
|
|
20
|
+
export type { PrismaProvider };
|
|
55
21
|
|
|
56
22
|
export interface PrismaConfig {
|
|
23
|
+
/** A Prisma client: raw queries and interactive transactions run on it. */
|
|
57
24
|
readonly prisma: object;
|
|
58
|
-
readonly provider:
|
|
59
|
-
readonly relationMode?: PrismaRelationMode;
|
|
60
|
-
readonly db?: unknown;
|
|
25
|
+
readonly provider: PrismaProvider;
|
|
61
26
|
}
|
|
62
27
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
isolationLevel === "serializable"
|
|
75
|
-
? client.$transaction(callback, { isolationLevel: "Serializable" })
|
|
76
|
-
: client.$transaction(callback);
|
|
77
|
-
if (isolationLevel === "default") return execute();
|
|
78
|
-
|
|
79
|
-
return (async () => {
|
|
80
|
-
for (let attempt = 0; ; attempt += 1) {
|
|
81
|
-
try {
|
|
82
|
-
return await execute();
|
|
83
|
-
} catch (error) {
|
|
84
|
-
if (
|
|
85
|
-
attempt >= 2 ||
|
|
86
|
-
typeof error !== "object" ||
|
|
87
|
-
error === null ||
|
|
88
|
-
!("code" in error) ||
|
|
89
|
-
error.code !== "P2034"
|
|
90
|
-
) {
|
|
91
|
-
throw error;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
})();
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
const assertPrismaProvider = (provider: ORMProvider): void => {
|
|
99
|
-
if (provider === "mongodb") {
|
|
100
|
-
throw new PrismaAdapterError(
|
|
101
|
-
"Prisma adapter does not support MongoDB; use mongodbAdapter instead",
|
|
102
|
-
);
|
|
103
|
-
}
|
|
104
|
-
};
|
|
105
|
-
|
|
106
|
-
const findMany = async (
|
|
107
|
-
client: object,
|
|
108
|
-
input: FindManyDatabaseImplementationInput,
|
|
109
|
-
provider: ORMSQLProvider,
|
|
110
|
-
): Promise<readonly DatabaseImplementationResult[]> => {
|
|
111
|
-
if (input.distinctOn !== undefined) {
|
|
112
|
-
throw new DatabasePluginInputError("invalid-operation");
|
|
113
|
-
}
|
|
114
|
-
const rawOrderBy = input.orderBy;
|
|
115
|
-
const orderBy = createPrismaOrderBy(rawOrderBy);
|
|
116
|
-
const shouldSortInMemory =
|
|
117
|
-
rawOrderBy !== undefined && hasNullOrderOverrides(rawOrderBy);
|
|
118
|
-
const rows = shouldSortInMemory
|
|
119
|
-
? sortRowsByOrder(
|
|
120
|
-
(await getPrismaDelegate(client, input.model).findMany({
|
|
121
|
-
where: createPrismaWhere(input.where, provider),
|
|
122
|
-
})) as Record<string, unknown>[],
|
|
123
|
-
rawOrderBy,
|
|
124
|
-
).slice(input.offset, input.offset + input.limit)
|
|
125
|
-
: await getPrismaDelegate(client, input.model).findMany({
|
|
126
|
-
where: createPrismaWhere(input.where, provider),
|
|
127
|
-
...(orderBy ? { orderBy } : {}),
|
|
128
|
-
skip: input.offset,
|
|
129
|
-
take: input.limit,
|
|
130
|
-
});
|
|
131
|
-
switch (input.model) {
|
|
132
|
-
case "bundles":
|
|
133
|
-
return parsePrismaRows(rows, parsePrismaBundleRow);
|
|
134
|
-
case "bundle_patches":
|
|
135
|
-
return parsePrismaRows(rows, parsePrismaPatchRow);
|
|
136
|
-
case "bundle_events":
|
|
137
|
-
return parsePrismaRows(rows, parsePrismaBundleEventRow);
|
|
138
|
-
case "channels":
|
|
139
|
-
return parsePrismaRows(rows, parsePrismaChannelRow);
|
|
140
|
-
case "api_keys":
|
|
141
|
-
return parsePrismaRows(rows, parsePrismaApiKeyRow);
|
|
142
|
-
case "releases":
|
|
143
|
-
return parsePrismaRows(rows, parsePrismaReleaseRow);
|
|
144
|
-
case "release_catalogs":
|
|
145
|
-
return parsePrismaRows(rows, parsePrismaReleaseCatalogRow);
|
|
146
|
-
}
|
|
147
|
-
};
|
|
148
|
-
|
|
149
|
-
const assertPatchReferences = async (
|
|
150
|
-
client: object,
|
|
151
|
-
bundleId: string,
|
|
152
|
-
baseBundleId: string,
|
|
153
|
-
): Promise<void> => {
|
|
154
|
-
const ids = Array.from(new Set([bundleId, baseBundleId]));
|
|
155
|
-
const count = await getPrismaDelegate(client, "bundles").count({
|
|
156
|
-
where: { id: { in: ids } },
|
|
157
|
-
});
|
|
158
|
-
if (count !== ids.length) {
|
|
159
|
-
throw new PrismaAdapterError("patch references a missing bundle");
|
|
160
|
-
}
|
|
161
|
-
};
|
|
162
|
-
|
|
163
|
-
const createCrudImplementation = (
|
|
164
|
-
client: object,
|
|
165
|
-
provider: ORMSQLProvider,
|
|
166
|
-
relationMode: PrismaRelationMode,
|
|
167
|
-
): TransactionDatabasePluginImplementation &
|
|
168
|
-
Pick<DatabasePluginImplementation, "deleteChannel" | "insertChannel"> => ({
|
|
169
|
-
deleteChannel: async ({ id }) => {
|
|
170
|
-
const channels = getPrismaDelegate(client, "channels");
|
|
171
|
-
const existing = await channels.findFirst({ where: { id } });
|
|
172
|
-
if (existing === null) return { deleted: false, reason: "not_found" };
|
|
173
|
-
const referencedReleases = await getPrismaDelegate(
|
|
174
|
-
client,
|
|
175
|
-
"releases",
|
|
176
|
-
).count({ where: { channel_id: id } });
|
|
177
|
-
if (referencedReleases > 0) {
|
|
178
|
-
return { deleted: false, reason: "not_empty" };
|
|
179
|
-
}
|
|
180
|
-
try {
|
|
181
|
-
await channels.deleteMany({ where: { id } });
|
|
182
|
-
} catch (error) {
|
|
183
|
-
if (isChannelDeleteReferencedError(error)) {
|
|
184
|
-
return { deleted: false, reason: "not_empty" };
|
|
185
|
-
}
|
|
186
|
-
throw error;
|
|
187
|
-
}
|
|
188
|
-
return { deleted: true };
|
|
189
|
-
},
|
|
190
|
-
insertChannel: async (input) => {
|
|
191
|
-
const delegate = getPrismaDelegate(client, "channels");
|
|
192
|
-
const existing = await delegate.findFirst({
|
|
193
|
-
where: { name: input.row.name },
|
|
194
|
-
});
|
|
195
|
-
if (existing !== null) {
|
|
196
|
-
return { row: parsePrismaChannelRow(existing), inserted: false };
|
|
197
|
-
}
|
|
198
|
-
const row = parsePrismaChannelRow(
|
|
199
|
-
await delegate.upsert({
|
|
200
|
-
where: { name: input.row.name },
|
|
201
|
-
create: input.row,
|
|
202
|
-
update: {},
|
|
203
|
-
}),
|
|
204
|
-
);
|
|
205
|
-
return { row, inserted: row.id === input.row.id };
|
|
206
|
-
},
|
|
207
|
-
create: async (input) => {
|
|
208
|
-
if (input.model === "bundle_patches") {
|
|
209
|
-
await assertPatchReferences(
|
|
210
|
-
client,
|
|
211
|
-
input.data.bundle_id,
|
|
212
|
-
input.data.base_bundle_id,
|
|
213
|
-
);
|
|
214
|
-
}
|
|
215
|
-
const delegate = getPrismaDelegate(client, input.model);
|
|
216
|
-
let row: unknown;
|
|
217
|
-
if (input.onConflict === "ignore") {
|
|
218
|
-
const where =
|
|
219
|
-
input.model === "channels"
|
|
220
|
-
? { name: input.data.name }
|
|
221
|
-
: { hash: input.data.hash };
|
|
222
|
-
row = await delegate.upsert({
|
|
223
|
-
where,
|
|
224
|
-
create: input.data,
|
|
225
|
-
update: {},
|
|
226
|
-
});
|
|
227
|
-
} else {
|
|
228
|
-
row = await delegate.create({ data: input.data });
|
|
229
|
-
}
|
|
230
|
-
switch (input.model) {
|
|
231
|
-
case "bundles":
|
|
232
|
-
return parsePrismaBundleRow(row);
|
|
233
|
-
case "bundle_patches":
|
|
234
|
-
return parsePrismaPatchRow(row);
|
|
235
|
-
case "bundle_events":
|
|
236
|
-
return parsePrismaBundleEventRow(row);
|
|
237
|
-
case "channels":
|
|
238
|
-
return parsePrismaChannelRow(row);
|
|
239
|
-
case "api_keys":
|
|
240
|
-
return parsePrismaApiKeyRow(row);
|
|
241
|
-
case "releases":
|
|
242
|
-
return parsePrismaReleaseRow(row);
|
|
243
|
-
case "release_catalogs":
|
|
244
|
-
return parsePrismaReleaseCatalogRow(row);
|
|
245
|
-
}
|
|
246
|
-
},
|
|
247
|
-
update: async (input) => {
|
|
248
|
-
const id = input.where[0]?.value;
|
|
249
|
-
if (typeof id !== "string") {
|
|
250
|
-
throw new PrismaAdapterError(
|
|
251
|
-
`${input.model} update requires a string id`,
|
|
252
|
-
);
|
|
253
|
-
}
|
|
254
|
-
if (input.model === "api_keys") {
|
|
255
|
-
const delegate = getPrismaDelegate(client, "api_keys");
|
|
256
|
-
const current = await delegate.findFirst({ where: { id } });
|
|
257
|
-
if (current === null) return null;
|
|
258
|
-
await delegate.update({ where: { id }, data: input.update });
|
|
259
|
-
const stored = await delegate.findFirst({ where: { id } });
|
|
260
|
-
return stored === null ? null : parsePrismaApiKeyRow(stored);
|
|
261
|
-
}
|
|
262
|
-
if (input.model === "releases") {
|
|
263
|
-
const delegate = getPrismaDelegate(client, "releases");
|
|
264
|
-
const current = await delegate.findFirst({ where: { id } });
|
|
265
|
-
if (current === null) return null;
|
|
266
|
-
await delegate.update({ where: { id }, data: input.update });
|
|
267
|
-
const stored = await delegate.findFirst({ where: { id } });
|
|
268
|
-
return stored === null ? null : parsePrismaReleaseRow(stored);
|
|
269
|
-
}
|
|
270
|
-
if (input.model === "release_catalogs") {
|
|
271
|
-
const delegate = getPrismaDelegate(client, "release_catalogs");
|
|
272
|
-
const current = await delegate.findFirst({ where: { scope_key: id } });
|
|
273
|
-
if (current === null) return null;
|
|
274
|
-
await delegate.update({ where: { scope_key: id }, data: input.update });
|
|
275
|
-
const stored = await delegate.findFirst({ where: { scope_key: id } });
|
|
276
|
-
return stored === null ? null : parsePrismaReleaseCatalogRow(stored);
|
|
277
|
-
}
|
|
278
|
-
const delegate = getPrismaDelegate(client, "bundles");
|
|
279
|
-
if (delegate.updateMany === undefined) {
|
|
280
|
-
throw new PrismaAdapterError(
|
|
281
|
-
'model delegate "bundles" requires updateMany',
|
|
282
|
-
);
|
|
283
|
-
}
|
|
284
|
-
const current = await delegate.findFirst({ where: { id } });
|
|
285
|
-
if (current === null) return null;
|
|
286
|
-
await delegate.updateMany({
|
|
287
|
-
where: { id },
|
|
288
|
-
data: input.update,
|
|
289
|
-
});
|
|
290
|
-
const stored = await delegate.findFirst({ where: { id } });
|
|
291
|
-
if (stored === null) return null;
|
|
292
|
-
return parsePrismaBundleRow(stored);
|
|
293
|
-
},
|
|
294
|
-
delete: async (input) => {
|
|
295
|
-
if (input.model === "bundles" && relationMode === "prisma") {
|
|
296
|
-
const rows = await getPrismaDelegate(client, "bundles").findMany({
|
|
297
|
-
where: createPrismaWhere(input.where, provider),
|
|
298
|
-
});
|
|
299
|
-
const ids = parsePrismaRows(rows, parsePrismaBundleRow).map(
|
|
300
|
-
({ id }) => id,
|
|
301
|
-
);
|
|
302
|
-
if (ids.length === 0) return;
|
|
303
|
-
await getPrismaDelegate(client, "bundle_patches").deleteMany({
|
|
304
|
-
where: {
|
|
305
|
-
OR: [{ bundle_id: { in: ids } }, { base_bundle_id: { in: ids } }],
|
|
306
|
-
},
|
|
307
|
-
});
|
|
308
|
-
}
|
|
309
|
-
try {
|
|
310
|
-
await getPrismaDelegate(client, input.model).deleteMany({
|
|
311
|
-
where: createPrismaWhere(input.where, provider),
|
|
312
|
-
});
|
|
313
|
-
} catch (error) {
|
|
314
|
-
if (input.model === "channels") {
|
|
315
|
-
translateChannelDeleteError(error);
|
|
316
|
-
}
|
|
317
|
-
throw error;
|
|
318
|
-
}
|
|
319
|
-
},
|
|
320
|
-
count: async (input) => {
|
|
321
|
-
if (input.distinct !== undefined) {
|
|
322
|
-
throw new DatabasePluginInputError("invalid-operation");
|
|
323
|
-
}
|
|
324
|
-
return getPrismaDelegate(client, input.model).count({
|
|
325
|
-
where: createPrismaWhere(input.where, provider),
|
|
326
|
-
});
|
|
327
|
-
},
|
|
328
|
-
findOne: async (input) => {
|
|
329
|
-
const row = await getPrismaDelegate(client, input.model).findFirst({
|
|
330
|
-
where: createPrismaWhere(input.where, provider),
|
|
331
|
-
});
|
|
332
|
-
if (row === null) return null;
|
|
333
|
-
switch (input.model) {
|
|
334
|
-
case "bundles":
|
|
335
|
-
return parsePrismaBundleRow(row);
|
|
336
|
-
case "bundle_patches":
|
|
337
|
-
return parsePrismaPatchRow(row);
|
|
338
|
-
case "channels":
|
|
339
|
-
return parsePrismaChannelRow(row);
|
|
340
|
-
case "api_keys":
|
|
341
|
-
return parsePrismaApiKeyRow(row);
|
|
342
|
-
case "releases":
|
|
343
|
-
return parsePrismaReleaseRow(row);
|
|
344
|
-
case "release_catalogs":
|
|
345
|
-
return parsePrismaReleaseCatalogRow(row);
|
|
346
|
-
}
|
|
347
|
-
},
|
|
348
|
-
findMany: (input) => findMany(client, input, provider),
|
|
349
|
-
});
|
|
350
|
-
|
|
351
|
-
const createPrismaImplementation = (
|
|
352
|
-
client: object,
|
|
353
|
-
relationMode: PrismaRelationMode,
|
|
354
|
-
provider: ORMSQLProvider,
|
|
355
|
-
): DatabasePluginImplementation => {
|
|
356
|
-
const crud = createCrudImplementation(client, provider, relationMode);
|
|
357
|
-
const implementation: DatabasePluginImplementation = {
|
|
358
|
-
...crud,
|
|
359
|
-
deleteChannel: (input) => {
|
|
360
|
-
if (!hasCallbackTransaction(client)) {
|
|
361
|
-
throw new PrismaAdapterError(
|
|
362
|
-
"channel deletion requires callback transactions",
|
|
363
|
-
);
|
|
364
|
-
}
|
|
365
|
-
return runPrismaTransaction(client, "serializable", (transactionClient) =>
|
|
366
|
-
createCrudImplementation(
|
|
367
|
-
transactionClient,
|
|
368
|
-
provider,
|
|
369
|
-
relationMode,
|
|
370
|
-
).deleteChannel(input),
|
|
371
|
-
);
|
|
372
|
-
},
|
|
373
|
-
delete: (input) => {
|
|
374
|
-
if (input.model !== "bundles" || relationMode === "foreign-keys") {
|
|
375
|
-
return crud.delete(input);
|
|
376
|
-
}
|
|
377
|
-
if (!hasCallbackTransaction(client)) {
|
|
378
|
-
throw new PrismaAdapterError(
|
|
379
|
-
'relation mode "prisma" requires callback transactions',
|
|
380
|
-
);
|
|
381
|
-
}
|
|
382
|
-
return runPrismaTransaction(client, "serializable", (transactionClient) =>
|
|
383
|
-
createCrudImplementation(
|
|
384
|
-
transactionClient,
|
|
385
|
-
provider,
|
|
386
|
-
relationMode,
|
|
387
|
-
).delete(input),
|
|
388
|
-
);
|
|
389
|
-
},
|
|
390
|
-
};
|
|
391
|
-
if (relationMode === "prisma" && !hasCallbackTransaction(client)) {
|
|
392
|
-
throw new PrismaAdapterError(
|
|
393
|
-
'relation mode "prisma" requires callback transactions',
|
|
394
|
-
);
|
|
395
|
-
}
|
|
396
|
-
if (!hasCallbackTransaction(client)) return implementation;
|
|
397
|
-
if (relationMode === "prisma") {
|
|
398
|
-
implementation.create = (input) =>
|
|
399
|
-
runPrismaTransaction(client, "serializable", (transactionClient) =>
|
|
400
|
-
createCrudImplementation(
|
|
401
|
-
transactionClient,
|
|
402
|
-
provider,
|
|
403
|
-
relationMode,
|
|
404
|
-
).create(input),
|
|
405
|
-
);
|
|
406
|
-
}
|
|
407
|
-
implementation.update = (input) =>
|
|
408
|
-
runPrismaTransaction(
|
|
409
|
-
client,
|
|
410
|
-
relationMode === "prisma" ? "serializable" : "default",
|
|
411
|
-
(transactionClient) =>
|
|
412
|
-
createCrudImplementation(
|
|
413
|
-
transactionClient,
|
|
414
|
-
provider,
|
|
415
|
-
relationMode,
|
|
416
|
-
).update(input),
|
|
417
|
-
);
|
|
418
|
-
return {
|
|
419
|
-
...implementation,
|
|
420
|
-
transaction: (callback) =>
|
|
421
|
-
runPrismaTransaction(
|
|
422
|
-
client,
|
|
423
|
-
"serializable",
|
|
424
|
-
async (transactionClient) => {
|
|
425
|
-
return callback(
|
|
426
|
-
createCrudImplementation(transactionClient, provider, relationMode),
|
|
427
|
-
);
|
|
428
|
-
},
|
|
429
|
-
),
|
|
430
|
-
};
|
|
431
|
-
};
|
|
432
|
-
|
|
433
|
-
export const prismaAdapter = (
|
|
434
|
-
config: PrismaConfig,
|
|
435
|
-
): DatabaseAdapterWithCapabilities => {
|
|
436
|
-
assertPrismaProvider(config.provider);
|
|
437
|
-
const adapter = createDatabasePluginAdapter(
|
|
438
|
-
"prisma",
|
|
439
|
-
createPrismaImplementation(
|
|
440
|
-
config.prisma,
|
|
441
|
-
config.relationMode ?? "foreign-keys",
|
|
442
|
-
config.provider,
|
|
443
|
-
),
|
|
28
|
+
/**
|
|
29
|
+
* Hot Updater's database on a Prisma client: the storage engine through the
|
|
30
|
+
* shared SQL core, fenced by the schema settings. `db generate` writes the
|
|
31
|
+
* models Prisma applies; `db migrate` then sets the collations Prisma cannot
|
|
32
|
+
* declare and writes the settings rows the fence checks.
|
|
33
|
+
*/
|
|
34
|
+
export const prismaAdapter = (config: PrismaConfig): ToolingDatabase => {
|
|
35
|
+
const provider = checkSqlProvider("prismaAdapter", config.provider);
|
|
36
|
+
const executor = prismaExecutor(
|
|
37
|
+
config.prisma as PrismaTransactionalClient,
|
|
38
|
+
provider,
|
|
444
39
|
);
|
|
445
|
-
return
|
|
446
|
-
|
|
40
|
+
return {
|
|
41
|
+
...createEngineDatabase({
|
|
447
42
|
name: "prisma",
|
|
448
|
-
|
|
449
|
-
commit: adapter.commit,
|
|
43
|
+
adapter: createSqlAdapter({ executor }),
|
|
450
44
|
}),
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
45
|
+
provider,
|
|
46
|
+
generateSchema: ((version, _name, { schema } = builtInTarget) => {
|
|
47
|
+
if (version !== "latest" && version !== builtInSettings["schema.core"]) {
|
|
48
|
+
throw new Error(`Invalid version ${version}`);
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
code: generatePrismaEngineSchema(provider, schema),
|
|
52
|
+
path: "prisma/schema.prisma",
|
|
53
|
+
};
|
|
54
|
+
}) satisfies SchemaGenerator,
|
|
55
|
+
createMigrator: ({ schema, settings } = builtInTarget) => {
|
|
56
|
+
const collations = prismaCollationStatements(provider, schema);
|
|
57
|
+
return createSettingsMigrator({
|
|
58
|
+
adapterName: "prisma",
|
|
59
|
+
executor,
|
|
60
|
+
settings,
|
|
61
|
+
applyTables: "`prisma db push` (or `prisma migrate`)",
|
|
62
|
+
...(collations.length === 0
|
|
63
|
+
? {}
|
|
64
|
+
: {
|
|
65
|
+
fixups: {
|
|
66
|
+
description:
|
|
67
|
+
"Set the collations Prisma cannot declare, so strings compare by their bytes",
|
|
68
|
+
statements: collations,
|
|
69
|
+
},
|
|
70
|
+
}),
|
|
71
|
+
});
|
|
463
72
|
},
|
|
464
|
-
|
|
73
|
+
};
|
|
465
74
|
};
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { SETTINGS_TABLE } from "../database/fence";
|
|
2
|
+
import type {
|
|
3
|
+
SqlConnection,
|
|
4
|
+
SqlDialect,
|
|
5
|
+
SqlExecutor,
|
|
6
|
+
} from "../database/sql/sqlAdapter";
|
|
7
|
+
import { quoteSql } from "../database/sql/sqlSchema";
|
|
8
|
+
|
|
9
|
+
/** The members of a Prisma client, or of its transaction client, the executor uses. */
|
|
10
|
+
export interface PrismaRawClient {
|
|
11
|
+
$queryRawUnsafe(query: string, ...values: unknown[]): Promise<unknown>;
|
|
12
|
+
$executeRawUnsafe(query: string, ...values: unknown[]): Promise<number>;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface PrismaTransactionalClient extends PrismaRawClient {
|
|
16
|
+
$transaction<T>(
|
|
17
|
+
fn: (tx: PrismaRawClient) => Promise<T>,
|
|
18
|
+
options?: { readonly maxWait?: number; readonly timeout?: number },
|
|
19
|
+
): Promise<T>;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Prisma reports a raw query's database error as P2010 with the database's
|
|
24
|
+
* code in `meta.code`, and a failed transaction as P2034. The error thrown on
|
|
25
|
+
* carries that code, as the SQL core classifies it, with Prisma's as `cause`.
|
|
26
|
+
*/
|
|
27
|
+
const withDatabaseCode = (dialect: SqlDialect, error: unknown): unknown => {
|
|
28
|
+
const { code, meta } = (error ?? {}) as {
|
|
29
|
+
code?: unknown;
|
|
30
|
+
meta?: { code?: unknown; message?: unknown };
|
|
31
|
+
};
|
|
32
|
+
const database =
|
|
33
|
+
code === "P2034"
|
|
34
|
+
? "40001"
|
|
35
|
+
: meta?.code === undefined
|
|
36
|
+
? undefined
|
|
37
|
+
: String(meta.code);
|
|
38
|
+
if (database === undefined) return error;
|
|
39
|
+
return Object.assign(
|
|
40
|
+
new Error(String(meta?.message ?? (error as Error).message), {
|
|
41
|
+
cause: error,
|
|
42
|
+
}),
|
|
43
|
+
{ code: dialect === "sqlite" ? `SQLITE:${database}` : database },
|
|
44
|
+
);
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
/** MySQL's ASCII keys are `VarBinary` in Prisma's schema, and read back as bytes. */
|
|
48
|
+
const decoder = new TextDecoder();
|
|
49
|
+
const decodeRow = (row: Record<string, unknown>) => {
|
|
50
|
+
for (const [column, value] of Object.entries(row)) {
|
|
51
|
+
if (value instanceof Uint8Array) row[column] = decoder.decode(value);
|
|
52
|
+
}
|
|
53
|
+
return row;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
const over = (dialect: SqlDialect, client: PrismaRawClient): SqlConnection => ({
|
|
57
|
+
async execute({ sql, params }) {
|
|
58
|
+
try {
|
|
59
|
+
if (/^\s*SELECT\b/iu.test(sql)) {
|
|
60
|
+
const rows = (await client.$queryRawUnsafe(sql, ...params)) as Record<
|
|
61
|
+
string,
|
|
62
|
+
unknown
|
|
63
|
+
>[];
|
|
64
|
+
return { rows: rows.map(decodeRow), changes: 0 };
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
rows: [],
|
|
68
|
+
changes: Number(await client.$executeRawUnsafe(sql, ...params)),
|
|
69
|
+
};
|
|
70
|
+
} catch (error) {
|
|
71
|
+
throw withDatabaseCode(dialect, error);
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
/** Taking the write lock first makes a SQLite transaction behave as BEGIN IMMEDIATE. */
|
|
77
|
+
const writeLock = (dialect: SqlDialect) =>
|
|
78
|
+
`UPDATE ${quoteSql(dialect, SETTINGS_TABLE.name)} SET ${quoteSql(dialect, "_v")} = ${quoteSql(dialect, "_v")} WHERE 0 = 1`;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* The SQL core's executor over a Prisma client, through raw queries and
|
|
82
|
+
* interactive transactions. A SQLite transaction takes the write lock with
|
|
83
|
+
* its first statement, as BEGIN IMMEDIATE would.
|
|
84
|
+
*/
|
|
85
|
+
export const prismaExecutor = (
|
|
86
|
+
client: PrismaTransactionalClient,
|
|
87
|
+
dialect: SqlDialect,
|
|
88
|
+
): SqlExecutor => ({
|
|
89
|
+
dialect,
|
|
90
|
+
...over(dialect, client),
|
|
91
|
+
async transaction(fn) {
|
|
92
|
+
try {
|
|
93
|
+
return await client.$transaction(
|
|
94
|
+
async (tx) => {
|
|
95
|
+
const connection = over(dialect, tx);
|
|
96
|
+
if (dialect === "sqlite") {
|
|
97
|
+
await connection.execute({ sql: writeLock(dialect), params: [] });
|
|
98
|
+
}
|
|
99
|
+
return fn(connection);
|
|
100
|
+
},
|
|
101
|
+
{ maxWait: 10_000, timeout: 30_000 },
|
|
102
|
+
);
|
|
103
|
+
} catch (error) {
|
|
104
|
+
throw withDatabaseCode(dialect, error);
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
});
|