@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.
- package/LICENSE +12 -14
- package/dist/adapters/drizzle.cjs +32 -75
- package/dist/adapters/drizzle.d.cts +13 -5
- package/dist/adapters/drizzle.d.mts +13 -5
- package/dist/adapters/drizzle.mjs +32 -77
- 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 +22 -31
- package/dist/adapters/kysely.d.cts +10 -6
- package/dist/adapters/kysely.d.mts +10 -6
- package/dist/adapters/kysely.mjs +23 -33
- package/dist/adapters/kyselyExecutor.cjs +32 -0
- package/dist/adapters/kyselyExecutor.d.cts +11 -0
- package/dist/adapters/kyselyExecutor.d.mts +11 -0
- package/dist/adapters/kyselyExecutor.mjs +32 -0
- package/dist/adapters/mongodb.cjs +18 -54
- package/dist/adapters/mongodb.d.cts +10 -5
- package/dist/adapters/mongodb.d.mts +10 -5
- package/dist/adapters/mongodb.mjs +19 -56
- package/dist/adapters/mongodbAdapter.cjs +192 -0
- package/dist/adapters/mongodbAdapter.d.cts +9 -0
- package/dist/adapters/mongodbAdapter.d.mts +9 -0
- package/dist/adapters/mongodbAdapter.mjs +191 -0
- package/dist/adapters/prisma.cjs +35 -267
- package/dist/adapters/prisma.d.cts +12 -7
- package/dist/adapters/prisma.d.mts +12 -7
- package/dist/adapters/prisma.mjs +36 -268
- package/dist/adapters/prismaExecutor.cjs +63 -0
- package/dist/adapters/prismaExecutor.mjs +63 -0
- package/dist/adapters/sqlProviders.cjs +14 -0
- package/dist/adapters/sqlProviders.mjs +14 -0
- package/dist/assembly/assemblePlugins.cjs +144 -0
- package/dist/assembly/assemblePlugins.d.cts +5 -0
- package/dist/assembly/assemblePlugins.d.mts +5 -0
- package/dist/assembly/assemblePlugins.mjs +139 -0
- package/dist/assembly/clientPlugins.cjs +88 -0
- package/dist/assembly/clientPlugins.mjs +88 -0
- package/dist/assembly/configError.d.cts +2 -0
- package/dist/assembly/configError.d.mts +2 -0
- package/dist/assembly/configError.mjs +2 -0
- package/dist/core/api.cjs +51 -0
- package/dist/core/api.d.cts +54 -0
- package/dist/core/api.d.mts +54 -0
- package/dist/core/api.mjs +51 -0
- package/dist/core/baseCandidates.cjs +28 -0
- package/dist/core/baseCandidates.mjs +28 -0
- package/dist/core/operations.cjs +351 -0
- package/dist/core/operations.mjs +351 -0
- package/dist/core/reads.cjs +273 -0
- package/dist/core/reads.d.cts +9 -0
- package/dist/core/reads.d.mts +9 -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/writes.cjs +96 -0
- package/dist/core/writes.mjs +91 -0
- package/dist/createHotUpdaterCore.cjs +72 -91
- package/dist/createHotUpdaterCore.d.cts +106 -38
- package/dist/createHotUpdaterCore.d.mts +106 -38
- package/dist/createHotUpdaterCore.mjs +74 -89
- package/dist/db/engineDrizzleSchema.cjs +53 -0
- package/dist/db/engineDrizzleSchema.mjs +53 -0
- package/dist/db/enginePrismaSchema.cjs +84 -0
- package/dist/db/enginePrismaSchema.d.cts +5 -0
- package/dist/db/enginePrismaSchema.d.mts +5 -0
- package/dist/db/enginePrismaSchema.mjs +83 -0
- package/dist/db/releaseCatalog.cjs +24 -47
- package/dist/db/releaseCatalog.mjs +20 -44
- package/dist/db/updateArtifacts.cjs +43 -72
- package/dist/db/updateArtifacts.mjs +40 -69
- package/dist/handler.cjs +59 -43
- package/dist/handler.d.cts +3 -5
- package/dist/handler.d.mts +3 -5
- package/dist/handler.mjs +61 -43
- package/dist/handlerAdminRoutes.cjs +374 -0
- package/dist/handlerAdminRoutes.mjs +372 -0
- package/dist/handlerParameters.cjs +6 -11
- package/dist/handlerParameters.mjs +6 -10
- package/dist/handlerReleaseCatalogRoutes.cjs +32 -15
- package/dist/handlerReleaseCatalogRoutes.mjs +32 -15
- package/dist/handlerTypes.d.cts +2 -55
- package/dist/handlerTypes.d.mts +2 -55
- package/dist/handlerVersionRoutes.cjs +20 -4
- package/dist/handlerVersionRoutes.mjs +20 -4
- package/dist/index.cjs +9 -9
- package/dist/index.d.cts +8 -9
- package/dist/index.d.mts +8 -9
- package/dist/index.mjs +3 -4
- package/dist/node.cjs +3 -6
- package/dist/node.d.cts +2 -2
- package/dist/node.d.mts +2 -2
- package/dist/node.mjs +4 -4
- package/dist/package.cjs +1 -1
- package/dist/package.mjs +1 -1
- package/dist/plugins/api-keys/index.cjs +9 -0
- package/dist/plugins/api-keys/index.d.cts +1 -0
- package/dist/plugins/api-keys/index.d.mts +1 -0
- package/dist/plugins/api-keys/index.mjs +2 -0
- package/dist/plugins/definePlugin.d.cts +2 -0
- package/dist/plugins/definePlugin.d.mts +2 -0
- package/dist/plugins/insights/index.cjs +9 -0
- package/dist/plugins/insights/index.d.cts +1 -0
- package/dist/plugins/insights/index.d.mts +1 -0
- package/dist/plugins/insights/index.mjs +2 -0
- package/dist/plugins/official.cjs +30 -0
- package/dist/plugins/official.mjs +29 -0
- package/dist/storageAccess.cjs +13 -10
- package/dist/storageAccess.mjs +13 -10
- package/dist/types/index.d.cts +2 -28
- package/dist/types/index.d.mts +2 -28
- package/package.json +26 -14
- package/dist/_virtual/_rolldown/runtime.cjs +0 -23
- package/dist/adapters/databaseConstraintErrors.cjs +0 -22
- package/dist/adapters/databaseConstraintErrors.mjs +0 -21
- package/dist/adapters/databasePluginUtils.cjs +0 -116
- package/dist/adapters/databasePluginUtils.mjs +0 -106
- package/dist/adapters/drizzleCrud.cjs +0 -311
- package/dist/adapters/drizzleCrud.mjs +0 -308
- package/dist/adapters/drizzleLazyDB.cjs +0 -106
- package/dist/adapters/drizzleLazyDB.mjs +0 -106
- package/dist/adapters/drizzleQuery.cjs +0 -69
- package/dist/adapters/drizzleQuery.mjs +0 -69
- package/dist/adapters/insightsTransaction.cjs +0 -22
- package/dist/adapters/insightsTransaction.mjs +0 -22
- package/dist/adapters/kyselyCrud.cjs +0 -305
- package/dist/adapters/kyselyCrud.mjs +0 -304
- package/dist/adapters/kyselyQuery.cjs +0 -56
- package/dist/adapters/kyselyQuery.mjs +0 -56
- package/dist/adapters/mongodbCollections.cjs +0 -38
- package/dist/adapters/mongodbCollections.mjs +0 -32
- package/dist/adapters/mongodbQuery.cjs +0 -94
- package/dist/adapters/mongodbQuery.mjs +0 -86
- package/dist/adapters/mongodbReads.cjs +0 -210
- package/dist/adapters/mongodbReads.mjs +0 -210
- package/dist/adapters/mongodbWrites.cjs +0 -148
- package/dist/adapters/mongodbWrites.mjs +0 -148
- package/dist/adapters/prismaQuery.cjs +0 -57
- package/dist/adapters/prismaQuery.mjs +0 -56
- package/dist/adapters/prismaRows.cjs +0 -219
- package/dist/adapters/prismaRows.mjs +0 -209
- package/dist/apiKeys.cjs +0 -143
- package/dist/apiKeys.d.cts +0 -49
- package/dist/apiKeys.d.mts +0 -49
- package/dist/apiKeys.mjs +0 -133
- package/dist/db/createBundleDiff.cjs +0 -144
- package/dist/db/createBundleDiff.d.cts +0 -16
- package/dist/db/createBundleDiff.d.mts +0 -16
- package/dist/db/createBundleDiff.mjs +0 -141
- package/dist/db/databasePluginCore.cjs +0 -137
- 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 -321
- package/dist/db/fixedMigratorMongo.mjs +0 -321
- package/dist/db/fixedMigratorShared.cjs +0 -23
- package/dist/db/fixedMigratorShared.mjs +0 -18
- package/dist/db/index.cjs +0 -27
- package/dist/db/index.d.cts +0 -12
- package/dist/db/index.d.mts +0 -12
- package/dist/db/index.mjs +0 -22
- package/dist/db/mongoMigrationExecution.cjs +0 -11
- package/dist/db/mongoMigrationExecution.mjs +0 -11
- package/dist/db/releaseCatalog.d.cts +0 -16
- package/dist/db/releaseCatalog.d.mts +0 -16
- package/dist/db/schema/insightsCollation.cjs +0 -14
- package/dist/db/schema/insightsCollation.mjs +0 -14
- 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 -105
- 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 -275
- package/dist/db/schemaGenerators.mjs +0 -273
- package/dist/db/schemaReadiness.cjs +0 -26
- package/dist/db/schemaReadiness.d.cts +0 -9
- package/dist/db/schemaReadiness.d.mts +0 -9
- package/dist/db/schemaReadiness.mjs +0 -25
- package/dist/db/sqlMigrationExecution.cjs +0 -67
- package/dist/db/sqlMigrationExecution.mjs +0 -67
- package/dist/db/types.cjs +0 -22
- package/dist/db/types.d.cts +0 -118
- package/dist/db/types.d.mts +0 -118
- package/dist/db/types.mjs +0 -19
- package/dist/handlerBundleRoutes.cjs +0 -155
- package/dist/handlerBundleRoutes.mjs +0 -155
- package/dist/handlerReleaseManagementRoutes.cjs +0 -124
- package/dist/handlerReleaseManagementRoutes.mjs +0 -124
- package/dist/insights/domain.d.cts +0 -89
- package/dist/insights/domain.d.mts +0 -89
- package/dist/insights/errors.cjs +0 -15
- package/dist/insights/errors.mjs +0 -14
- package/dist/insights/eventInput.cjs +0 -155
- package/dist/insights/eventInput.mjs +0 -153
- package/dist/insights/provider.cjs +0 -314
- package/dist/insights/provider.d.cts +0 -6
- package/dist/insights/provider.d.mts +0 -6
- package/dist/insights/provider.mjs +0 -314
- package/dist/insights/queryInput.cjs +0 -93
- package/dist/insights/queryInput.mjs +0 -91
- package/dist/insights/routes.cjs +0 -58
- package/dist/insights/routes.mjs +0 -56
- package/dist/insights/types.d.cts +0 -32
- package/dist/insights/types.d.mts +0 -32
- package/dist/schema/dsl.cjs +0 -103
- package/dist/schema/dsl.mjs +0 -87
- package/dist/schema/index.cjs +0 -20
- 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 -406
- package/dist/schema/v1_0_0.mjs +0 -398
- package/src/adapters/databaseConstraintErrors.ts +0 -25
- package/src/adapters/databasePluginTestDatabase.ts +0 -120
- package/src/adapters/databasePluginUtils.spec.ts +0 -29
- package/src/adapters/databasePluginUtils.ts +0 -214
- package/src/adapters/drizzle.spec.ts +0 -336
- package/src/adapters/drizzle.ts +0 -162
- package/src/adapters/drizzleCrud.ts +0 -571
- package/src/adapters/drizzleLazyDB.ts +0 -271
- package/src/adapters/drizzleQuery.ts +0 -164
- package/src/adapters/insightsTransaction.ts +0 -32
- package/src/adapters/kysely.spec.ts +0 -174
- package/src/adapters/kysely.ts +0 -110
- package/src/adapters/kyselyCrud.ts +0 -709
- package/src/adapters/kyselyQuery.ts +0 -128
- package/src/adapters/mongodb.integration.spec.ts +0 -210
- package/src/adapters/mongodb.spec.ts +0 -209
- package/src/adapters/mongodb.ts +0 -138
- package/src/adapters/mongodbCollections.ts +0 -67
- package/src/adapters/mongodbQuery.ts +0 -255
- package/src/adapters/mongodbReads.ts +0 -380
- package/src/adapters/mongodbRows.spec.ts +0 -64
- package/src/adapters/mongodbRows.ts +0 -118
- package/src/adapters/mongodbTestClient.ts +0 -377
- package/src/adapters/mongodbTestFilter.ts +0 -169
- package/src/adapters/mongodbWrites.ts +0 -287
- package/src/adapters/prisma.spec.ts +0 -293
- package/src/adapters/prisma.ts +0 -565
- package/src/adapters/prismaQuery.ts +0 -129
- package/src/adapters/prismaRows.spec.ts +0 -98
- package/src/adapters/prismaRows.ts +0 -337
- package/src/adapters/prismaTestClient.ts +0 -413
- package/src/apiKeys.integration.spec.ts +0 -192
- package/src/apiKeys.spec.ts +0 -162
- package/src/apiKeys.ts +0 -220
- package/src/calculatePagination.ts +0 -34
- package/src/createHotUpdaterCore.ts +0 -246
- package/src/db/bundleRows.spec.ts +0 -164
- package/src/db/bundleRows.ts +0 -10
- package/src/db/createBundleDiff.spec.ts +0 -450
- package/src/db/createBundleDiff.ts +0 -364
- 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 -110
- package/src/db/fixedMigrator.spec.ts +0 -296
- package/src/db/fixedMigrator.ts +0 -147
- package/src/db/fixedMigratorMongo.spec.ts +0 -239
- package/src/db/fixedMigratorMongo.ts +0 -425
- package/src/db/fixedMigratorShared.ts +0 -36
- package/src/db/hotUpdaterSchema.ts +0 -5
- package/src/db/index.spec.ts +0 -1269
- package/src/db/index.ts +0 -47
- package/src/db/mongoMigrationExecution.ts +0 -23
- package/src/db/node-sqlite.d.ts +0 -25
- package/src/db/releaseCatalog.ts +0 -148
- package/src/db/schema/definitions.ts +0 -1
- package/src/db/schema/insightsCollation.ts +0 -21
- package/src/db/schema/mongodb.ts +0 -40
- package/src/db/schema/registry.ts +0 -55
- package/src/db/schema/sql.ts +0 -244
- package/src/db/schema/sqlOperations.ts +0 -63
- package/src/db/schema/types.ts +0 -1
- package/src/db/schemaGenerators.ts +0 -494
- 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 -63
- package/src/db/types.ts +0 -228
- package/src/db/updateArtifacts.spec.ts +0 -359
- package/src/db/updateArtifacts.ts +0 -541
- package/src/handler-standalone.integration.spec.ts +0 -528
- package/src/handler.spec.ts +0 -190
- package/src/handler.testFixtures.ts +0 -30
- package/src/handler.ts +0 -245
- package/src/handlerAuth.integration.spec.ts +0 -33
- package/src/handlerBundleRoutes.ts +0 -259
- package/src/handlerErrors.ts +0 -7
- package/src/handlerManagement.spec.ts +0 -262
- package/src/handlerParameters.ts +0 -105
- package/src/handlerReleaseCatalogRoutes.ts +0 -154
- package/src/handlerReleaseManagementRoutes.ts +0 -213
- package/src/handlerTypes.ts +0 -96
- package/src/handlerVersionRoutes.ts +0 -12
- package/src/index.ts +0 -30
- package/src/insights/domain.ts +0 -103
- package/src/insights/errors.ts +0 -11
- package/src/insights/eventInput.ts +0 -225
- package/src/insights/insights.integration.spec.ts +0 -381
- package/src/insights/provider.spec.ts +0 -385
- package/src/insights/provider.ts +0 -591
- package/src/insights/queryInput.ts +0 -141
- package/src/insights/routes.ts +0 -104
- package/src/insights/types.ts +0 -55
- package/src/internalRouter.ts +0 -104
- package/src/node.spec.ts +0 -119
- package/src/node.ts +0 -111
- package/src/releaseCatalogRoutes.integration.spec.ts +0 -238
- package/src/runtime.spec.ts +0 -194
- package/src/runtime.testFixtures.ts +0 -71
- package/src/schema/dsl-all-versions.spec.ts +0 -37
- 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 -220
- package/src/schema/v1_0_0.ts +0 -529
- package/src/storageAccess.spec.ts +0 -152
- package/src/storageAccess.ts +0 -141
- package/src/types/index.ts +0 -34
- package/src/version.ts +0 -3
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
import { createArtifactResolver, createReleaseCatalogReader } from "./releaseCatalog.mjs";
|
|
2
|
-
import { createDatabaseClient, deleteRelease, preflightReleasePolicy, rebuildReleaseCatalog, updateReleasePolicy } from "@hot-updater/plugin-core";
|
|
3
|
-
import { decodeChannelKey } from "@hot-updater/core";
|
|
4
|
-
//#region src/db/databasePluginCore.ts
|
|
5
|
-
function createDatabasePluginCore(database, resolveFileUrl, options) {
|
|
6
|
-
const client = createDatabaseClient(database);
|
|
7
|
-
const beforeOperation = options?.beforeOperation;
|
|
8
|
-
const getReleaseCatalog = createReleaseCatalogReader(database);
|
|
9
|
-
const getArtifact = createArtifactResolver({
|
|
10
|
-
database,
|
|
11
|
-
readStorageText: options?.readStorageText,
|
|
12
|
-
resolveFileUrl
|
|
13
|
-
});
|
|
14
|
-
return {
|
|
15
|
-
api: {
|
|
16
|
-
async getBundleById(id) {
|
|
17
|
-
await beforeOperation?.();
|
|
18
|
-
return client.getBundleById(id);
|
|
19
|
-
},
|
|
20
|
-
async getReleaseCatalog(input) {
|
|
21
|
-
await beforeOperation?.();
|
|
22
|
-
return getReleaseCatalog(input);
|
|
23
|
-
},
|
|
24
|
-
async getArtifactInfo(targetBundleId, currentBundleId) {
|
|
25
|
-
await beforeOperation?.();
|
|
26
|
-
return getArtifact(targetBundleId, currentBundleId);
|
|
27
|
-
},
|
|
28
|
-
async getReleaseById(id) {
|
|
29
|
-
await beforeOperation?.();
|
|
30
|
-
return database.models.releases.findById(id);
|
|
31
|
-
},
|
|
32
|
-
async getReleasesByScope(input) {
|
|
33
|
-
await beforeOperation?.();
|
|
34
|
-
return database.models.releases.findManyByScope({
|
|
35
|
-
...input,
|
|
36
|
-
consistency: "strong"
|
|
37
|
-
});
|
|
38
|
-
},
|
|
39
|
-
async getReleases(input) {
|
|
40
|
-
await beforeOperation?.();
|
|
41
|
-
return database.models.releases.findMany(input);
|
|
42
|
-
},
|
|
43
|
-
async getReleaseCatalogByScopeKey(scopeKey) {
|
|
44
|
-
await beforeOperation?.();
|
|
45
|
-
return database.models.releaseCatalogs.findByScopeKey(scopeKey);
|
|
46
|
-
},
|
|
47
|
-
async getReleaseCatalogs(input) {
|
|
48
|
-
await beforeOperation?.();
|
|
49
|
-
return database.models.releaseCatalogs.findMany(input);
|
|
50
|
-
},
|
|
51
|
-
async updateReleasePolicy(input) {
|
|
52
|
-
await beforeOperation?.();
|
|
53
|
-
return updateReleasePolicy({
|
|
54
|
-
database,
|
|
55
|
-
...input
|
|
56
|
-
});
|
|
57
|
-
},
|
|
58
|
-
async preflightReleasePolicy(input) {
|
|
59
|
-
await beforeOperation?.();
|
|
60
|
-
return preflightReleasePolicy({
|
|
61
|
-
database,
|
|
62
|
-
...input
|
|
63
|
-
});
|
|
64
|
-
},
|
|
65
|
-
async deleteRelease(input) {
|
|
66
|
-
await beforeOperation?.();
|
|
67
|
-
return deleteRelease({
|
|
68
|
-
database,
|
|
69
|
-
...input
|
|
70
|
-
});
|
|
71
|
-
},
|
|
72
|
-
async rebuildReleaseCatalog(scopeKey) {
|
|
73
|
-
await beforeOperation?.();
|
|
74
|
-
const catalog = await database.models.releaseCatalogs.findByScopeKey(scopeKey);
|
|
75
|
-
if (catalog === null) throw new Error(`Release catalog "${scopeKey}" was not found.`);
|
|
76
|
-
return rebuildReleaseCatalog({
|
|
77
|
-
database,
|
|
78
|
-
scope: {
|
|
79
|
-
channelId: catalog.channel_id,
|
|
80
|
-
channelName: decodeChannelKey(catalog.channel_key),
|
|
81
|
-
fingerprintHash: catalog.fingerprint_hash,
|
|
82
|
-
platform: catalog.platform,
|
|
83
|
-
scopeKey: catalog.scope_key,
|
|
84
|
-
strategy: catalog.strategy
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
},
|
|
88
|
-
async commitDatabase(input) {
|
|
89
|
-
await beforeOperation?.();
|
|
90
|
-
return database.commit(input);
|
|
91
|
-
},
|
|
92
|
-
async getChannels() {
|
|
93
|
-
await beforeOperation?.();
|
|
94
|
-
return client.getChannels();
|
|
95
|
-
},
|
|
96
|
-
async insertChannel(input) {
|
|
97
|
-
await beforeOperation?.();
|
|
98
|
-
return database.models.channels.insert(input);
|
|
99
|
-
},
|
|
100
|
-
async deleteChannel(input) {
|
|
101
|
-
await beforeOperation?.();
|
|
102
|
-
return database.models.channels.delete(input);
|
|
103
|
-
},
|
|
104
|
-
async getBundles(options) {
|
|
105
|
-
await beforeOperation?.();
|
|
106
|
-
return client.getBundles(options);
|
|
107
|
-
},
|
|
108
|
-
async insertBundle(bundle) {
|
|
109
|
-
await beforeOperation?.();
|
|
110
|
-
await client.insertBundle(bundle);
|
|
111
|
-
},
|
|
112
|
-
async insertBundles(bundles) {
|
|
113
|
-
await beforeOperation?.();
|
|
114
|
-
await client.mutate(async (transaction) => {
|
|
115
|
-
for (const bundle of bundles) await transaction.insertBundle(bundle);
|
|
116
|
-
});
|
|
117
|
-
},
|
|
118
|
-
async updateBundleById(bundleId, update) {
|
|
119
|
-
await beforeOperation?.();
|
|
120
|
-
await client.updateBundleById(bundleId, update);
|
|
121
|
-
},
|
|
122
|
-
async deleteBundleById(bundleId) {
|
|
123
|
-
await beforeOperation?.();
|
|
124
|
-
await client.deleteBundleById(bundleId);
|
|
125
|
-
}
|
|
126
|
-
},
|
|
127
|
-
adapterName: database.name,
|
|
128
|
-
createMigrator: () => {
|
|
129
|
-
throw new Error("createMigrator is only available for Kysely/MongoDB database plugins.");
|
|
130
|
-
},
|
|
131
|
-
generateSchema: () => {
|
|
132
|
-
throw new Error("generateSchema is only available for Drizzle/Prisma database plugins.");
|
|
133
|
-
}
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
//#endregion
|
|
137
|
-
export { createDatabasePluginCore };
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
const require_types = require("../schema/types.cjs");
|
|
2
|
-
const require_fixedMigratorShared = require("./fixedMigratorShared.cjs");
|
|
3
|
-
const require_sql = require("./schema/sql.cjs");
|
|
4
|
-
const require_sqlOperations = require("./schema/sqlOperations.cjs");
|
|
5
|
-
const require_sqlMigrationExecution = require("./sqlMigrationExecution.cjs");
|
|
6
|
-
const require_fixedMigratorMongo = require("./fixedMigratorMongo.cjs");
|
|
7
|
-
let kysely = require("kysely");
|
|
8
|
-
//#region src/db/fixedMigrator.ts
|
|
9
|
-
const isMissingSettingsTableError = (error) => {
|
|
10
|
-
if (!(error instanceof Error)) return false;
|
|
11
|
-
const message = error.message.toLowerCase();
|
|
12
|
-
return message.includes("private_hot_updater_settings") && (message.includes("does not exist") || message.includes("no such table") || message.includes("doesn't exist") || message.includes("not found"));
|
|
13
|
-
};
|
|
14
|
-
const createKyselyMigrator = ({ db, provider, relationMode = "foreign-keys" }) => {
|
|
15
|
-
const getSetting = async (key) => {
|
|
16
|
-
try {
|
|
17
|
-
const row = (await kysely.sql`select ${kysely.sql.ref("value")} from ${kysely.sql.table(require_types.HOT_UPDATER_SETTINGS_TABLE)} where ${kysely.sql.ref("key")} = ${key} limit 1`.execute(db)).rows[0];
|
|
18
|
-
if (!row) return void 0;
|
|
19
|
-
if (typeof row.value !== "string") throw new Error(`Invalid Hot Updater schema setting: ${key}`);
|
|
20
|
-
return row.value;
|
|
21
|
-
} catch (error) {
|
|
22
|
-
if (!isMissingSettingsTableError(error)) throw error;
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
};
|
|
26
|
-
const getCoreVersion = () => getSetting(require_types.HOT_UPDATER_CORE_SCHEMA_KEY);
|
|
27
|
-
const getSchemaVersions = async () => {
|
|
28
|
-
return {
|
|
29
|
-
coreVersion: await getCoreVersion(),
|
|
30
|
-
legacyCoreVersion: require_fixedMigratorShared.inferLegacyCoreSchemaVersion(await getSetting("version"))
|
|
31
|
-
};
|
|
32
|
-
};
|
|
33
|
-
const getVersion = async () => {
|
|
34
|
-
const { coreVersion, legacyCoreVersion } = await getSchemaVersions();
|
|
35
|
-
return coreVersion ?? legacyCoreVersion;
|
|
36
|
-
};
|
|
37
|
-
const makeResult = async (options = {}) => {
|
|
38
|
-
require_fixedMigratorShared.assertSupportedMigrationMode(options);
|
|
39
|
-
const { coreVersion, legacyCoreVersion } = await getSchemaVersions();
|
|
40
|
-
if (require_fixedMigratorShared.isCurrentSchemaVersion(coreVersion)) return require_fixedMigratorShared.getEmptyMigrationResult();
|
|
41
|
-
require_fixedMigratorShared.assertCurrentOrEmptySchemaVersion(coreVersion ?? legacyCoreVersion);
|
|
42
|
-
const settingsStatement = require_sqlOperations.getSettingsInsertSql(provider);
|
|
43
|
-
const settingsOperation = options.updateSettings === false ? void 0 : {
|
|
44
|
-
type: "custom",
|
|
45
|
-
sql: settingsStatement
|
|
46
|
-
};
|
|
47
|
-
const statements = [...require_sql.createTableSql(provider, relationMode), settingsStatement];
|
|
48
|
-
return {
|
|
49
|
-
operations: require_sqlOperations.createSqlCreateOperations(provider, relationMode, settingsOperation),
|
|
50
|
-
getSQL: () => statements.map((statement) => `${statement};`).join("\n\n"),
|
|
51
|
-
execute: () => require_sqlMigrationExecution.executeMigrationStatements({
|
|
52
|
-
db,
|
|
53
|
-
provider,
|
|
54
|
-
statements
|
|
55
|
-
})
|
|
56
|
-
};
|
|
57
|
-
};
|
|
58
|
-
return {
|
|
59
|
-
getVersion,
|
|
60
|
-
getNameVariants: async () => void 0,
|
|
61
|
-
next: async () => {
|
|
62
|
-
const { coreVersion } = await getSchemaVersions();
|
|
63
|
-
return require_fixedMigratorShared.isCurrentSchemaVersion(coreVersion) ? void 0 : { version: require_types.HOT_UPDATER_SCHEMA_VERSION };
|
|
64
|
-
},
|
|
65
|
-
previous: async () => void 0,
|
|
66
|
-
up: makeResult,
|
|
67
|
-
down: async () => {
|
|
68
|
-
throw new Error("No previous schema to migrate to.");
|
|
69
|
-
},
|
|
70
|
-
migrateTo: async (version, options) => {
|
|
71
|
-
if (version !== "1.0.0") throw new Error(`Invalid version ${version}`);
|
|
72
|
-
return makeResult(options);
|
|
73
|
-
},
|
|
74
|
-
migrateToLatest: makeResult
|
|
75
|
-
};
|
|
76
|
-
};
|
|
77
|
-
//#endregion
|
|
78
|
-
exports.createKyselyMigrator = createKyselyMigrator;
|
|
79
|
-
exports.createMongoMigrator = require_fixedMigratorMongo.createMongoMigrator;
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { HOT_UPDATER_CORE_SCHEMA_KEY, HOT_UPDATER_SCHEMA_VERSION, HOT_UPDATER_SETTINGS_TABLE } from "../schema/types.mjs";
|
|
2
|
-
import { assertCurrentOrEmptySchemaVersion, assertSupportedMigrationMode, getEmptyMigrationResult, inferLegacyCoreSchemaVersion, isCurrentSchemaVersion } from "./fixedMigratorShared.mjs";
|
|
3
|
-
import { createTableSql } from "./schema/sql.mjs";
|
|
4
|
-
import { createSqlCreateOperations, getSettingsInsertSql } from "./schema/sqlOperations.mjs";
|
|
5
|
-
import { executeMigrationStatements } from "./sqlMigrationExecution.mjs";
|
|
6
|
-
import { createMongoMigrator } from "./fixedMigratorMongo.mjs";
|
|
7
|
-
import { sql } from "kysely";
|
|
8
|
-
//#region src/db/fixedMigrator.ts
|
|
9
|
-
const isMissingSettingsTableError = (error) => {
|
|
10
|
-
if (!(error instanceof Error)) return false;
|
|
11
|
-
const message = error.message.toLowerCase();
|
|
12
|
-
return message.includes("private_hot_updater_settings") && (message.includes("does not exist") || message.includes("no such table") || message.includes("doesn't exist") || message.includes("not found"));
|
|
13
|
-
};
|
|
14
|
-
const createKyselyMigrator = ({ db, provider, relationMode = "foreign-keys" }) => {
|
|
15
|
-
const getSetting = async (key) => {
|
|
16
|
-
try {
|
|
17
|
-
const row = (await sql`select ${sql.ref("value")} from ${sql.table(HOT_UPDATER_SETTINGS_TABLE)} where ${sql.ref("key")} = ${key} limit 1`.execute(db)).rows[0];
|
|
18
|
-
if (!row) return void 0;
|
|
19
|
-
if (typeof row.value !== "string") throw new Error(`Invalid Hot Updater schema setting: ${key}`);
|
|
20
|
-
return row.value;
|
|
21
|
-
} catch (error) {
|
|
22
|
-
if (!isMissingSettingsTableError(error)) throw error;
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
};
|
|
26
|
-
const getCoreVersion = () => getSetting(HOT_UPDATER_CORE_SCHEMA_KEY);
|
|
27
|
-
const getSchemaVersions = async () => {
|
|
28
|
-
return {
|
|
29
|
-
coreVersion: await getCoreVersion(),
|
|
30
|
-
legacyCoreVersion: inferLegacyCoreSchemaVersion(await getSetting("version"))
|
|
31
|
-
};
|
|
32
|
-
};
|
|
33
|
-
const getVersion = async () => {
|
|
34
|
-
const { coreVersion, legacyCoreVersion } = await getSchemaVersions();
|
|
35
|
-
return coreVersion ?? legacyCoreVersion;
|
|
36
|
-
};
|
|
37
|
-
const makeResult = async (options = {}) => {
|
|
38
|
-
assertSupportedMigrationMode(options);
|
|
39
|
-
const { coreVersion, legacyCoreVersion } = await getSchemaVersions();
|
|
40
|
-
if (isCurrentSchemaVersion(coreVersion)) return getEmptyMigrationResult();
|
|
41
|
-
assertCurrentOrEmptySchemaVersion(coreVersion ?? legacyCoreVersion);
|
|
42
|
-
const settingsStatement = getSettingsInsertSql(provider);
|
|
43
|
-
const settingsOperation = options.updateSettings === false ? void 0 : {
|
|
44
|
-
type: "custom",
|
|
45
|
-
sql: settingsStatement
|
|
46
|
-
};
|
|
47
|
-
const statements = [...createTableSql(provider, relationMode), settingsStatement];
|
|
48
|
-
return {
|
|
49
|
-
operations: createSqlCreateOperations(provider, relationMode, settingsOperation),
|
|
50
|
-
getSQL: () => statements.map((statement) => `${statement};`).join("\n\n"),
|
|
51
|
-
execute: () => executeMigrationStatements({
|
|
52
|
-
db,
|
|
53
|
-
provider,
|
|
54
|
-
statements
|
|
55
|
-
})
|
|
56
|
-
};
|
|
57
|
-
};
|
|
58
|
-
return {
|
|
59
|
-
getVersion,
|
|
60
|
-
getNameVariants: async () => void 0,
|
|
61
|
-
next: async () => {
|
|
62
|
-
const { coreVersion } = await getSchemaVersions();
|
|
63
|
-
return isCurrentSchemaVersion(coreVersion) ? void 0 : { version: HOT_UPDATER_SCHEMA_VERSION };
|
|
64
|
-
},
|
|
65
|
-
previous: async () => void 0,
|
|
66
|
-
up: makeResult,
|
|
67
|
-
down: async () => {
|
|
68
|
-
throw new Error("No previous schema to migrate to.");
|
|
69
|
-
},
|
|
70
|
-
migrateTo: async (version, options) => {
|
|
71
|
-
if (version !== "1.0.0") throw new Error(`Invalid version ${version}`);
|
|
72
|
-
return makeResult(options);
|
|
73
|
-
},
|
|
74
|
-
migrateToLatest: makeResult
|
|
75
|
-
};
|
|
76
|
-
};
|
|
77
|
-
//#endregion
|
|
78
|
-
export { createKyselyMigrator, createMongoMigrator };
|
|
@@ -1,321 +0,0 @@
|
|
|
1
|
-
const require_types = require("../schema/types.cjs");
|
|
2
|
-
const require_fixedMigratorShared = require("./fixedMigratorShared.cjs");
|
|
3
|
-
const require_registry = require("./schema/registry.cjs");
|
|
4
|
-
const require_mongoMigrationExecution = require("./mongoMigrationExecution.cjs");
|
|
5
|
-
const require_mongodb = require("./schema/mongodb.cjs");
|
|
6
|
-
//#region src/db/fixedMigratorMongo.ts
|
|
7
|
-
const isMongoNamespaceExistsError = (error) => {
|
|
8
|
-
if (!(error instanceof Error)) return false;
|
|
9
|
-
const mongoError = error;
|
|
10
|
-
return mongoError.code === 48 || mongoError.codeName === "NamespaceExists";
|
|
11
|
-
};
|
|
12
|
-
const isMongoNamespaceNotFoundError = (error) => {
|
|
13
|
-
if (!(error instanceof Error)) return false;
|
|
14
|
-
const mongoError = error;
|
|
15
|
-
return mongoError.code === 26 || mongoError.codeName === "NamespaceNotFound";
|
|
16
|
-
};
|
|
17
|
-
const ignoreExistingCollection = (error) => {
|
|
18
|
-
if (isMongoNamespaceExistsError(error)) return;
|
|
19
|
-
throw error;
|
|
20
|
-
};
|
|
21
|
-
const mongoNullableString = { bsonType: ["string", "null"] };
|
|
22
|
-
const mongoByteSize = {
|
|
23
|
-
bsonType: [
|
|
24
|
-
"double",
|
|
25
|
-
"int",
|
|
26
|
-
"long"
|
|
27
|
-
],
|
|
28
|
-
maximum: Number.MAX_SAFE_INTEGER,
|
|
29
|
-
minimum: 0
|
|
30
|
-
};
|
|
31
|
-
const mongoBundleValidator = { $and: [{ $jsonSchema: {
|
|
32
|
-
bsonType: "object",
|
|
33
|
-
properties: {
|
|
34
|
-
archive_byte_size: mongoByteSize,
|
|
35
|
-
asset_base_storage_uri: mongoNullableString,
|
|
36
|
-
file_hash: { bsonType: "string" },
|
|
37
|
-
git_commit_hash: mongoNullableString,
|
|
38
|
-
id: { bsonType: "string" },
|
|
39
|
-
manifest_file_hash: mongoNullableString,
|
|
40
|
-
manifest_storage_uri: mongoNullableString,
|
|
41
|
-
metadata: { bsonType: "object" },
|
|
42
|
-
platform: { enum: ["ios", "android"] },
|
|
43
|
-
storage_uri: { bsonType: "string" }
|
|
44
|
-
},
|
|
45
|
-
required: [
|
|
46
|
-
"id",
|
|
47
|
-
"platform",
|
|
48
|
-
"file_hash",
|
|
49
|
-
"git_commit_hash",
|
|
50
|
-
"storage_uri",
|
|
51
|
-
"archive_byte_size",
|
|
52
|
-
"metadata",
|
|
53
|
-
"manifest_storage_uri",
|
|
54
|
-
"manifest_file_hash",
|
|
55
|
-
"asset_base_storage_uri"
|
|
56
|
-
]
|
|
57
|
-
} }, { $expr: { $eq: [{ $trunc: "$archive_byte_size" }, "$archive_byte_size"] } }] };
|
|
58
|
-
const mongoPatchValidator = { $and: [{ $jsonSchema: {
|
|
59
|
-
bsonType: "object",
|
|
60
|
-
properties: {
|
|
61
|
-
base_bundle_id: { bsonType: "string" },
|
|
62
|
-
base_file_hash: { bsonType: "string" },
|
|
63
|
-
bundle_id: { bsonType: "string" },
|
|
64
|
-
id: { bsonType: "string" },
|
|
65
|
-
order_index: mongoByteSize,
|
|
66
|
-
byte_size: mongoByteSize,
|
|
67
|
-
patch_file_hash: { bsonType: "string" },
|
|
68
|
-
patch_storage_uri: { bsonType: "string" }
|
|
69
|
-
},
|
|
70
|
-
required: [
|
|
71
|
-
"id",
|
|
72
|
-
"bundle_id",
|
|
73
|
-
"base_bundle_id",
|
|
74
|
-
"base_file_hash",
|
|
75
|
-
"patch_file_hash",
|
|
76
|
-
"patch_storage_uri",
|
|
77
|
-
"byte_size",
|
|
78
|
-
"order_index"
|
|
79
|
-
]
|
|
80
|
-
} }, { $expr: { $and: [{ $eq: [{ $trunc: "$order_index" }, "$order_index"] }, { $eq: [{ $trunc: "$byte_size" }, "$byte_size"] }] } }] };
|
|
81
|
-
const mongoReleaseValidator = { $jsonSchema: {
|
|
82
|
-
bsonType: "object",
|
|
83
|
-
properties: {
|
|
84
|
-
bundle_id: mongoNullableString,
|
|
85
|
-
channel_id: { bsonType: "string" },
|
|
86
|
-
created_at_ms: { bsonType: [
|
|
87
|
-
"double",
|
|
88
|
-
"int",
|
|
89
|
-
"long"
|
|
90
|
-
] },
|
|
91
|
-
enabled: { bsonType: "bool" },
|
|
92
|
-
fingerprint_hash: mongoNullableString,
|
|
93
|
-
id: { bsonType: "string" },
|
|
94
|
-
kind: { enum: ["BUNDLE", "EMBEDDED"] },
|
|
95
|
-
message: mongoNullableString,
|
|
96
|
-
operation: { enum: [
|
|
97
|
-
"DEPLOY",
|
|
98
|
-
"PROMOTE",
|
|
99
|
-
"ROLLBACK"
|
|
100
|
-
] },
|
|
101
|
-
platform: { enum: ["ios", "android"] },
|
|
102
|
-
revision: { bsonType: ["int", "long"] },
|
|
103
|
-
rollout_cohort_count: { bsonType: ["int", "long"] },
|
|
104
|
-
scope_key: { bsonType: "string" },
|
|
105
|
-
should_force_update: { bsonType: "bool" },
|
|
106
|
-
source_release_id: mongoNullableString,
|
|
107
|
-
strategy: { enum: ["APP_VERSION", "FINGERPRINT"] },
|
|
108
|
-
target_app_version: mongoNullableString,
|
|
109
|
-
target_cohorts: {
|
|
110
|
-
bsonType: "array",
|
|
111
|
-
items: { bsonType: "string" }
|
|
112
|
-
},
|
|
113
|
-
updated_at_ms: { bsonType: [
|
|
114
|
-
"double",
|
|
115
|
-
"int",
|
|
116
|
-
"long"
|
|
117
|
-
] }
|
|
118
|
-
},
|
|
119
|
-
required: [
|
|
120
|
-
"id",
|
|
121
|
-
"revision",
|
|
122
|
-
"scope_key",
|
|
123
|
-
"channel_id",
|
|
124
|
-
"platform",
|
|
125
|
-
"kind",
|
|
126
|
-
"bundle_id",
|
|
127
|
-
"strategy",
|
|
128
|
-
"target_app_version",
|
|
129
|
-
"fingerprint_hash",
|
|
130
|
-
"enabled",
|
|
131
|
-
"should_force_update",
|
|
132
|
-
"message",
|
|
133
|
-
"rollout_cohort_count",
|
|
134
|
-
"target_cohorts",
|
|
135
|
-
"operation",
|
|
136
|
-
"source_release_id",
|
|
137
|
-
"created_at_ms",
|
|
138
|
-
"updated_at_ms"
|
|
139
|
-
]
|
|
140
|
-
} };
|
|
141
|
-
const mongoReleaseCatalogValidator = { $jsonSchema: {
|
|
142
|
-
bsonType: "object",
|
|
143
|
-
properties: {
|
|
144
|
-
catalog_id: { bsonType: "string" },
|
|
145
|
-
byte_size: { bsonType: ["int", "long"] },
|
|
146
|
-
catalog_hash: { bsonType: "string" },
|
|
147
|
-
channel_id: { bsonType: "string" },
|
|
148
|
-
channel_key: { bsonType: "string" },
|
|
149
|
-
fingerprint_hash: mongoNullableString,
|
|
150
|
-
generation: { bsonType: [
|
|
151
|
-
"double",
|
|
152
|
-
"int",
|
|
153
|
-
"long"
|
|
154
|
-
] },
|
|
155
|
-
is_tombstone: { bsonType: "bool" },
|
|
156
|
-
payload: { bsonType: "string" },
|
|
157
|
-
platform: { enum: ["ios", "android"] },
|
|
158
|
-
scope_key: { bsonType: "string" },
|
|
159
|
-
strategy: { enum: ["APP_VERSION", "FINGERPRINT"] },
|
|
160
|
-
updated_at_ms: { bsonType: [
|
|
161
|
-
"double",
|
|
162
|
-
"int",
|
|
163
|
-
"long"
|
|
164
|
-
] }
|
|
165
|
-
},
|
|
166
|
-
required: [
|
|
167
|
-
"scope_key",
|
|
168
|
-
"catalog_id",
|
|
169
|
-
"strategy",
|
|
170
|
-
"channel_id",
|
|
171
|
-
"channel_key",
|
|
172
|
-
"platform",
|
|
173
|
-
"fingerprint_hash",
|
|
174
|
-
"generation",
|
|
175
|
-
"payload",
|
|
176
|
-
"catalog_hash",
|
|
177
|
-
"byte_size",
|
|
178
|
-
"is_tombstone",
|
|
179
|
-
"updated_at_ms"
|
|
180
|
-
]
|
|
181
|
-
} };
|
|
182
|
-
const createSettingsKeyIndexOperation = () => ({
|
|
183
|
-
description: `Ensure unique MongoDB index: ${require_types.HOT_UPDATER_SETTINGS_TABLE}(key)`,
|
|
184
|
-
type: "custom"
|
|
185
|
-
});
|
|
186
|
-
const createMongoMigrator = (client) => {
|
|
187
|
-
const settings = client.db().collection(require_types.HOT_UPDATER_SETTINGS_TABLE);
|
|
188
|
-
const getSetting = async (key) => {
|
|
189
|
-
const [row, duplicate] = await settings.find({ key }).limit(2).toArray();
|
|
190
|
-
if (!row) return void 0;
|
|
191
|
-
if (duplicate) throw new Error(`Duplicate Hot Updater schema setting: ${key}`);
|
|
192
|
-
if (typeof row.value !== "string") throw new Error(`Invalid Hot Updater schema setting: ${key}`);
|
|
193
|
-
return row.value;
|
|
194
|
-
};
|
|
195
|
-
const getCoreVersion = () => getSetting(require_types.HOT_UPDATER_CORE_SCHEMA_KEY);
|
|
196
|
-
const getSchemaVersions = async () => {
|
|
197
|
-
return {
|
|
198
|
-
coreVersion: await getCoreVersion(),
|
|
199
|
-
legacyCoreVersion: require_fixedMigratorShared.inferLegacyCoreSchemaVersion(await getSetting("version"))
|
|
200
|
-
};
|
|
201
|
-
};
|
|
202
|
-
const getVersion = async () => {
|
|
203
|
-
const { coreVersion, legacyCoreVersion } = await getSchemaVersions();
|
|
204
|
-
return coreVersion ?? legacyCoreVersion;
|
|
205
|
-
};
|
|
206
|
-
const getSettingsKeyIndexState = async () => {
|
|
207
|
-
const index = (await settings.listIndexes().toArray().catch((error) => {
|
|
208
|
-
if (isMongoNamespaceNotFoundError(error)) return [];
|
|
209
|
-
throw error;
|
|
210
|
-
})).find(({ key }) => {
|
|
211
|
-
const fields = Object.entries(key);
|
|
212
|
-
return fields.length === 1 && fields[0]?.[0] === "key" && fields[0][1] === 1;
|
|
213
|
-
});
|
|
214
|
-
if (!index) return "missing";
|
|
215
|
-
return index.unique === true && index.sparse !== true && index.partialFilterExpression === void 0 ? "unique" : "non-unique";
|
|
216
|
-
};
|
|
217
|
-
const rejectNonUniqueSettingsKeyIndex = () => {
|
|
218
|
-
throw new Error("Hot Updater settings key index must enforce uniqueness for every key.");
|
|
219
|
-
};
|
|
220
|
-
const ensureSettingsKeyIndex = async () => {
|
|
221
|
-
const state = await getSettingsKeyIndexState();
|
|
222
|
-
if (state === "unique") return;
|
|
223
|
-
if (state === "non-unique") rejectNonUniqueSettingsKeyIndex();
|
|
224
|
-
await settings.createIndex({ key: 1 }, { unique: true });
|
|
225
|
-
};
|
|
226
|
-
const makeResult = async (options = {}) => {
|
|
227
|
-
require_fixedMigratorShared.assertSupportedMigrationMode(options);
|
|
228
|
-
const { coreVersion, legacyCoreVersion } = await getSchemaVersions();
|
|
229
|
-
const settingsKeyIndexState = await getSettingsKeyIndexState();
|
|
230
|
-
if (settingsKeyIndexState === "non-unique") rejectNonUniqueSettingsKeyIndex();
|
|
231
|
-
if (require_fixedMigratorShared.isCurrentSchemaVersion(coreVersion)) {
|
|
232
|
-
if (settingsKeyIndexState === "unique") return require_fixedMigratorShared.getEmptyMigrationResult();
|
|
233
|
-
return {
|
|
234
|
-
...require_fixedMigratorShared.getEmptyMigrationResult(),
|
|
235
|
-
execute: ensureSettingsKeyIndex,
|
|
236
|
-
operations: [createSettingsKeyIndexOperation()]
|
|
237
|
-
};
|
|
238
|
-
}
|
|
239
|
-
require_fixedMigratorShared.assertCurrentOrEmptySchemaVersion(coreVersion ?? legacyCoreVersion);
|
|
240
|
-
const settingsOperation = options.updateSettings === false ? void 0 : {
|
|
241
|
-
type: "custom",
|
|
242
|
-
key: require_types.HOT_UPDATER_CORE_SCHEMA_KEY,
|
|
243
|
-
value: require_types.HOT_UPDATER_SCHEMA_VERSION
|
|
244
|
-
};
|
|
245
|
-
return {
|
|
246
|
-
operations: [createSettingsKeyIndexOperation(), ...require_mongodb.createMongoMigrationOperations(settingsOperation)],
|
|
247
|
-
execute: async () => {
|
|
248
|
-
const db = client.db();
|
|
249
|
-
await require_mongoMigrationExecution.executeMongoMigration({
|
|
250
|
-
updateSettings: options.updateSettings !== false,
|
|
251
|
-
backend: {
|
|
252
|
-
ensureCollections: async () => {
|
|
253
|
-
for (const table of require_registry.hotUpdaterSchema.tables) {
|
|
254
|
-
if (table.internal) continue;
|
|
255
|
-
await db.createCollection(table.ormName).catch(ignoreExistingCollection);
|
|
256
|
-
}
|
|
257
|
-
},
|
|
258
|
-
ensureIndexes: async () => {
|
|
259
|
-
await ensureSettingsKeyIndex();
|
|
260
|
-
for (const table of require_registry.hotUpdaterSchema.tables) {
|
|
261
|
-
if (table.internal) continue;
|
|
262
|
-
const isInsights = table.ormName === "bundle_events" || table.ormName === "bundle_installations";
|
|
263
|
-
const collection = db.collection(table.ormName);
|
|
264
|
-
const collation = isInsights ? { locale: "simple" } : void 0;
|
|
265
|
-
const primaryKey = table.columns.find((column) => column.primaryKey);
|
|
266
|
-
if (!primaryKey) throw new Error(`MongoDB table ${table.ormName} does not define a primary key.`);
|
|
267
|
-
const idIndexName = `${table.ormName}_${primaryKey.ormName}_idx`;
|
|
268
|
-
await collection.createIndex({ [primaryKey.ormName]: 1 }, {
|
|
269
|
-
name: idIndexName,
|
|
270
|
-
unique: true,
|
|
271
|
-
...collation ? { collation } : {}
|
|
272
|
-
});
|
|
273
|
-
for (const index of (table.indexes ?? []).filter((item) => require_registry.schemaIndexAppliesToProvider(item, "mongodb"))) await collection.createIndex(Object.fromEntries(index.columns.map((column) => [column, 1])), {
|
|
274
|
-
name: index.name,
|
|
275
|
-
...index.unique ? { unique: true } : {},
|
|
276
|
-
...collation ? { collation } : {}
|
|
277
|
-
});
|
|
278
|
-
}
|
|
279
|
-
},
|
|
280
|
-
enforceSchema: async () => {
|
|
281
|
-
for (const [collection, validator] of [
|
|
282
|
-
["bundles", mongoBundleValidator],
|
|
283
|
-
["bundle_patches", mongoPatchValidator],
|
|
284
|
-
["releases", mongoReleaseValidator],
|
|
285
|
-
["release_catalogs", mongoReleaseCatalogValidator]
|
|
286
|
-
]) await db.command({
|
|
287
|
-
collMod: collection,
|
|
288
|
-
validationAction: "error",
|
|
289
|
-
validationLevel: "strict",
|
|
290
|
-
validator
|
|
291
|
-
});
|
|
292
|
-
},
|
|
293
|
-
updateVersion: async () => {
|
|
294
|
-
await settings.updateOne({ key: require_types.HOT_UPDATER_CORE_SCHEMA_KEY }, { $set: { value: require_types.HOT_UPDATER_SCHEMA_VERSION } }, { upsert: true });
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
});
|
|
298
|
-
}
|
|
299
|
-
};
|
|
300
|
-
};
|
|
301
|
-
return {
|
|
302
|
-
getVersion,
|
|
303
|
-
getNameVariants: async () => void 0,
|
|
304
|
-
next: async () => {
|
|
305
|
-
const { coreVersion } = await getSchemaVersions();
|
|
306
|
-
return require_fixedMigratorShared.isCurrentSchemaVersion(coreVersion) ? void 0 : { version: require_types.HOT_UPDATER_SCHEMA_VERSION };
|
|
307
|
-
},
|
|
308
|
-
previous: async () => void 0,
|
|
309
|
-
up: makeResult,
|
|
310
|
-
down: async () => {
|
|
311
|
-
throw new Error("No previous schema to migrate to.");
|
|
312
|
-
},
|
|
313
|
-
migrateTo: async (version, options) => {
|
|
314
|
-
if (version !== "1.0.0") throw new Error(`Invalid version ${version}`);
|
|
315
|
-
return makeResult(options);
|
|
316
|
-
},
|
|
317
|
-
migrateToLatest: makeResult
|
|
318
|
-
};
|
|
319
|
-
};
|
|
320
|
-
//#endregion
|
|
321
|
-
exports.createMongoMigrator = createMongoMigrator;
|