@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,321 +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 { hotUpdaterSchema, schemaIndexAppliesToProvider } from "./schema/registry.mjs";
|
|
4
|
-
import { executeMongoMigration } from "./mongoMigrationExecution.mjs";
|
|
5
|
-
import { createMongoMigrationOperations } from "./schema/mongodb.mjs";
|
|
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: ${HOT_UPDATER_SETTINGS_TABLE}(key)`,
|
|
184
|
-
type: "custom"
|
|
185
|
-
});
|
|
186
|
-
const createMongoMigrator = (client) => {
|
|
187
|
-
const settings = client.db().collection(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(HOT_UPDATER_CORE_SCHEMA_KEY);
|
|
196
|
-
const getSchemaVersions = async () => {
|
|
197
|
-
return {
|
|
198
|
-
coreVersion: await getCoreVersion(),
|
|
199
|
-
legacyCoreVersion: 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
|
-
assertSupportedMigrationMode(options);
|
|
228
|
-
const { coreVersion, legacyCoreVersion } = await getSchemaVersions();
|
|
229
|
-
const settingsKeyIndexState = await getSettingsKeyIndexState();
|
|
230
|
-
if (settingsKeyIndexState === "non-unique") rejectNonUniqueSettingsKeyIndex();
|
|
231
|
-
if (isCurrentSchemaVersion(coreVersion)) {
|
|
232
|
-
if (settingsKeyIndexState === "unique") return getEmptyMigrationResult();
|
|
233
|
-
return {
|
|
234
|
-
...getEmptyMigrationResult(),
|
|
235
|
-
execute: ensureSettingsKeyIndex,
|
|
236
|
-
operations: [createSettingsKeyIndexOperation()]
|
|
237
|
-
};
|
|
238
|
-
}
|
|
239
|
-
assertCurrentOrEmptySchemaVersion(coreVersion ?? legacyCoreVersion);
|
|
240
|
-
const settingsOperation = options.updateSettings === false ? void 0 : {
|
|
241
|
-
type: "custom",
|
|
242
|
-
key: HOT_UPDATER_CORE_SCHEMA_KEY,
|
|
243
|
-
value: HOT_UPDATER_SCHEMA_VERSION
|
|
244
|
-
};
|
|
245
|
-
return {
|
|
246
|
-
operations: [createSettingsKeyIndexOperation(), ...createMongoMigrationOperations(settingsOperation)],
|
|
247
|
-
execute: async () => {
|
|
248
|
-
const db = client.db();
|
|
249
|
-
await executeMongoMigration({
|
|
250
|
-
updateSettings: options.updateSettings !== false,
|
|
251
|
-
backend: {
|
|
252
|
-
ensureCollections: async () => {
|
|
253
|
-
for (const table of 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 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) => 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: HOT_UPDATER_CORE_SCHEMA_KEY }, { $set: { value: 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 isCurrentSchemaVersion(coreVersion) ? void 0 : { version: 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
|
-
export { createMongoMigrator };
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
const require_types = require("../schema/types.cjs");
|
|
2
|
-
//#region src/db/fixedMigratorShared.ts
|
|
3
|
-
const getEmptyMigrationResult = () => ({
|
|
4
|
-
operations: [],
|
|
5
|
-
execute: async () => {},
|
|
6
|
-
getSQL: () => ""
|
|
7
|
-
});
|
|
8
|
-
const assertSupportedMigrationMode = (options) => {
|
|
9
|
-
if (options.mode === "from-database") throw new Error("Hot Updater migrations support only mode: 'from-schema'.");
|
|
10
|
-
};
|
|
11
|
-
const unsupportedSchemaUpgradeMessage = (version) => `Hot Updater v1 cannot migrate schema ${version} in place. Create a new empty database and run migrate or generate against schema ${require_types.HOT_UPDATER_SCHEMA_VERSION}.`;
|
|
12
|
-
const assertCurrentOrEmptySchemaVersion = (currentVersion) => {
|
|
13
|
-
if (currentVersion !== void 0 && currentVersion !== "1.0.0") throw new Error(unsupportedSchemaUpgradeMessage(currentVersion));
|
|
14
|
-
};
|
|
15
|
-
const inferLegacyCoreSchemaVersion = (legacyVersion) => legacyVersion;
|
|
16
|
-
const isCurrentSchemaVersion = (currentVersion) => currentVersion === require_types.HOT_UPDATER_SCHEMA_VERSION;
|
|
17
|
-
//#endregion
|
|
18
|
-
exports.assertCurrentOrEmptySchemaVersion = assertCurrentOrEmptySchemaVersion;
|
|
19
|
-
exports.assertSupportedMigrationMode = assertSupportedMigrationMode;
|
|
20
|
-
exports.getEmptyMigrationResult = getEmptyMigrationResult;
|
|
21
|
-
exports.inferLegacyCoreSchemaVersion = inferLegacyCoreSchemaVersion;
|
|
22
|
-
exports.isCurrentSchemaVersion = isCurrentSchemaVersion;
|
|
23
|
-
exports.unsupportedSchemaUpgradeMessage = unsupportedSchemaUpgradeMessage;
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { HOT_UPDATER_SCHEMA_VERSION } from "../schema/types.mjs";
|
|
2
|
-
//#region src/db/fixedMigratorShared.ts
|
|
3
|
-
const getEmptyMigrationResult = () => ({
|
|
4
|
-
operations: [],
|
|
5
|
-
execute: async () => {},
|
|
6
|
-
getSQL: () => ""
|
|
7
|
-
});
|
|
8
|
-
const assertSupportedMigrationMode = (options) => {
|
|
9
|
-
if (options.mode === "from-database") throw new Error("Hot Updater migrations support only mode: 'from-schema'.");
|
|
10
|
-
};
|
|
11
|
-
const unsupportedSchemaUpgradeMessage = (version) => `Hot Updater v1 cannot migrate schema ${version} in place. Create a new empty database and run migrate or generate against schema ${HOT_UPDATER_SCHEMA_VERSION}.`;
|
|
12
|
-
const assertCurrentOrEmptySchemaVersion = (currentVersion) => {
|
|
13
|
-
if (currentVersion !== void 0 && currentVersion !== "1.0.0") throw new Error(unsupportedSchemaUpgradeMessage(currentVersion));
|
|
14
|
-
};
|
|
15
|
-
const inferLegacyCoreSchemaVersion = (legacyVersion) => legacyVersion;
|
|
16
|
-
const isCurrentSchemaVersion = (currentVersion) => currentVersion === HOT_UPDATER_SCHEMA_VERSION;
|
|
17
|
-
//#endregion
|
|
18
|
-
export { assertCurrentOrEmptySchemaVersion, assertSupportedMigrationMode, getEmptyMigrationResult, inferLegacyCoreSchemaVersion, isCurrentSchemaVersion, unsupportedSchemaUpgradeMessage };
|
package/dist/db/index.cjs
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_version = require("../version.cjs");
|
|
3
|
-
const require_schemaReadiness = require("./schemaReadiness.cjs");
|
|
4
|
-
const require_createHotUpdaterCore = require("../createHotUpdaterCore.cjs");
|
|
5
|
-
const require_schemaGenerators = require("./schemaGenerators.cjs");
|
|
6
|
-
const require_createBundleDiff = require("./createBundleDiff.cjs");
|
|
7
|
-
//#region src/db/index.ts
|
|
8
|
-
const getDBMetadata = (hotUpdater) => {
|
|
9
|
-
const metadata = require_createHotUpdaterCore.getHotUpdaterCoreMetadata(hotUpdater);
|
|
10
|
-
if (!metadata) throw new Error("Database tooling requires a hotUpdater instance created by @hot-updater/server.");
|
|
11
|
-
return metadata;
|
|
12
|
-
};
|
|
13
|
-
function createMigrator(hotUpdater) {
|
|
14
|
-
const { adapterCapabilities, core } = getDBMetadata(hotUpdater);
|
|
15
|
-
return (adapterCapabilities.createMigrator ?? core.createMigrator)();
|
|
16
|
-
}
|
|
17
|
-
function generateSchema(hotUpdater, ...args) {
|
|
18
|
-
const { adapterCapabilities, core } = getDBMetadata(hotUpdater);
|
|
19
|
-
const schemaGenerator = adapterCapabilities.generateSchema ?? core.generateSchema;
|
|
20
|
-
return require_schemaGenerators.generateSchemaFromHotUpdaterSchema(hotUpdater.adapterName, adapterCapabilities.provider, args[0], schemaGenerator(...args));
|
|
21
|
-
}
|
|
22
|
-
//#endregion
|
|
23
|
-
exports.HOT_UPDATER_SERVER_VERSION = require_version.HOT_UPDATER_SERVER_VERSION;
|
|
24
|
-
exports.HotUpdaterSchemaMigrationRequiredError = require_schemaReadiness.HotUpdaterSchemaMigrationRequiredError;
|
|
25
|
-
exports.createBundleDiff = require_createBundleDiff.createBundleDiff;
|
|
26
|
-
exports.createMigrator = createMigrator;
|
|
27
|
-
exports.generateSchema = generateSchema;
|
package/dist/db/index.d.cts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { Migrator, SchemaGenerator } from "./types.cjs";
|
|
2
|
-
import { CreateBundleDiffDependencies, CreateBundleDiffInput, CreateBundleDiffOptions, createBundleDiff } from "./createBundleDiff.cjs";
|
|
3
|
-
import { HotUpdaterSchemaMigrationRequiredError } from "./schemaReadiness.cjs";
|
|
4
|
-
import { HOT_UPDATER_SERVER_VERSION } from "../version.cjs";
|
|
5
|
-
//#region src/db/index.d.ts
|
|
6
|
-
type HotUpdaterDBTarget = {
|
|
7
|
-
readonly adapterName: string;
|
|
8
|
-
};
|
|
9
|
-
declare function createMigrator(hotUpdater: HotUpdaterDBTarget): Migrator;
|
|
10
|
-
declare function generateSchema(hotUpdater: HotUpdaterDBTarget, ...args: Parameters<SchemaGenerator>): ReturnType<SchemaGenerator>;
|
|
11
|
-
//#endregion
|
|
12
|
-
export { CreateBundleDiffDependencies, CreateBundleDiffInput, CreateBundleDiffOptions, HOT_UPDATER_SERVER_VERSION, HotUpdaterDBTarget, HotUpdaterSchemaMigrationRequiredError, type Migrator, type SchemaGenerator, createBundleDiff, createMigrator, generateSchema };
|
package/dist/db/index.d.mts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { Migrator, SchemaGenerator } from "./types.mjs";
|
|
2
|
-
import { CreateBundleDiffDependencies, CreateBundleDiffInput, CreateBundleDiffOptions, createBundleDiff } from "./createBundleDiff.mjs";
|
|
3
|
-
import { HotUpdaterSchemaMigrationRequiredError } from "./schemaReadiness.mjs";
|
|
4
|
-
import { HOT_UPDATER_SERVER_VERSION } from "../version.mjs";
|
|
5
|
-
//#region src/db/index.d.ts
|
|
6
|
-
type HotUpdaterDBTarget = {
|
|
7
|
-
readonly adapterName: string;
|
|
8
|
-
};
|
|
9
|
-
declare function createMigrator(hotUpdater: HotUpdaterDBTarget): Migrator;
|
|
10
|
-
declare function generateSchema(hotUpdater: HotUpdaterDBTarget, ...args: Parameters<SchemaGenerator>): ReturnType<SchemaGenerator>;
|
|
11
|
-
//#endregion
|
|
12
|
-
export { CreateBundleDiffDependencies, CreateBundleDiffInput, CreateBundleDiffOptions, HOT_UPDATER_SERVER_VERSION, HotUpdaterDBTarget, HotUpdaterSchemaMigrationRequiredError, type Migrator, type SchemaGenerator, createBundleDiff, createMigrator, generateSchema };
|
package/dist/db/index.mjs
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { HOT_UPDATER_SERVER_VERSION } from "../version.mjs";
|
|
2
|
-
import { HotUpdaterSchemaMigrationRequiredError } from "./schemaReadiness.mjs";
|
|
3
|
-
import { getHotUpdaterCoreMetadata } from "../createHotUpdaterCore.mjs";
|
|
4
|
-
import { generateSchemaFromHotUpdaterSchema } from "./schemaGenerators.mjs";
|
|
5
|
-
import { createBundleDiff } from "./createBundleDiff.mjs";
|
|
6
|
-
//#region src/db/index.ts
|
|
7
|
-
const getDBMetadata = (hotUpdater) => {
|
|
8
|
-
const metadata = getHotUpdaterCoreMetadata(hotUpdater);
|
|
9
|
-
if (!metadata) throw new Error("Database tooling requires a hotUpdater instance created by @hot-updater/server.");
|
|
10
|
-
return metadata;
|
|
11
|
-
};
|
|
12
|
-
function createMigrator(hotUpdater) {
|
|
13
|
-
const { adapterCapabilities, core } = getDBMetadata(hotUpdater);
|
|
14
|
-
return (adapterCapabilities.createMigrator ?? core.createMigrator)();
|
|
15
|
-
}
|
|
16
|
-
function generateSchema(hotUpdater, ...args) {
|
|
17
|
-
const { adapterCapabilities, core } = getDBMetadata(hotUpdater);
|
|
18
|
-
const schemaGenerator = adapterCapabilities.generateSchema ?? core.generateSchema;
|
|
19
|
-
return generateSchemaFromHotUpdaterSchema(hotUpdater.adapterName, adapterCapabilities.provider, args[0], schemaGenerator(...args));
|
|
20
|
-
}
|
|
21
|
-
//#endregion
|
|
22
|
-
export { HOT_UPDATER_SERVER_VERSION, HotUpdaterSchemaMigrationRequiredError, createBundleDiff, createMigrator, generateSchema };
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
//#region src/db/mongoMigrationExecution.ts
|
|
2
|
-
const executeMongoMigration = async ({ backend, updateSettings }) => {
|
|
3
|
-
await backend.ensureCollections();
|
|
4
|
-
await backend.backfillData?.();
|
|
5
|
-
await backend.validateData?.();
|
|
6
|
-
await backend.ensureIndexes();
|
|
7
|
-
await backend.enforceSchema?.();
|
|
8
|
-
if (updateSettings) await backend.updateVersion();
|
|
9
|
-
};
|
|
10
|
-
//#endregion
|
|
11
|
-
exports.executeMongoMigration = executeMongoMigration;
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
//#region src/db/mongoMigrationExecution.ts
|
|
2
|
-
const executeMongoMigration = async ({ backend, updateSettings }) => {
|
|
3
|
-
await backend.ensureCollections();
|
|
4
|
-
await backend.backfillData?.();
|
|
5
|
-
await backend.validateData?.();
|
|
6
|
-
await backend.ensureIndexes();
|
|
7
|
-
await backend.enforceSchema?.();
|
|
8
|
-
if (updateSettings) await backend.updateVersion();
|
|
9
|
-
};
|
|
10
|
-
//#endregion
|
|
11
|
-
export { executeMongoMigration };
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { ArtifactInfo, ReleaseCatalog } from "@hot-updater/core";
|
|
2
|
-
import { DatabasePlugin } from "@hot-updater/plugin-core";
|
|
3
|
-
//#region src/db/releaseCatalog.d.ts
|
|
4
|
-
type ReleaseCatalogRequest = {
|
|
5
|
-
readonly strategy: "APP_VERSION";
|
|
6
|
-
readonly platform: "ios" | "android";
|
|
7
|
-
readonly channelKey: string;
|
|
8
|
-
readonly appVersion: string;
|
|
9
|
-
} | {
|
|
10
|
-
readonly strategy: "FINGERPRINT";
|
|
11
|
-
readonly platform: "ios" | "android";
|
|
12
|
-
readonly channelKey: string;
|
|
13
|
-
readonly fingerprintHash: string;
|
|
14
|
-
};
|
|
15
|
-
//#endregion
|
|
16
|
-
export { ReleaseCatalogRequest };
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { DatabasePlugin } from "@hot-updater/plugin-core";
|
|
2
|
-
import { ArtifactInfo, ReleaseCatalog } from "@hot-updater/core";
|
|
3
|
-
//#region src/db/releaseCatalog.d.ts
|
|
4
|
-
type ReleaseCatalogRequest = {
|
|
5
|
-
readonly strategy: "APP_VERSION";
|
|
6
|
-
readonly platform: "ios" | "android";
|
|
7
|
-
readonly channelKey: string;
|
|
8
|
-
readonly appVersion: string;
|
|
9
|
-
} | {
|
|
10
|
-
readonly strategy: "FINGERPRINT";
|
|
11
|
-
readonly platform: "ios" | "android";
|
|
12
|
-
readonly channelKey: string;
|
|
13
|
-
readonly fingerprintHash: string;
|
|
14
|
-
};
|
|
15
|
-
//#endregion
|
|
16
|
-
export { ReleaseCatalogRequest };
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
const require_v1_0_0 = require("../../schema/v1_0_0.cjs");
|
|
2
|
-
const require_sql = require("./sql.cjs");
|
|
3
|
-
//#region src/db/schema/insightsCollation.ts
|
|
4
|
-
const getInsightsCollationSql = (provider) => [require_v1_0_0.bundleEventsV100, require_v1_0_0.bundleInstallationsV100].flatMap((table) => table.columns.flatMap((column) => {
|
|
5
|
-
const collation = column.providerCollations?.[provider];
|
|
6
|
-
if (collation === void 0) return [];
|
|
7
|
-
if (provider === "mysql") return [`alter table ${table.ormName} modify column ${require_sql.sqlColumnDefinition(table, {
|
|
8
|
-
...column,
|
|
9
|
-
primaryKey: void 0
|
|
10
|
-
}, provider)}`];
|
|
11
|
-
return [`alter table ${table.ormName} alter column ${column.ormName} type ${require_sql.getSqlType(column.type, provider)} collate ${collation}`];
|
|
12
|
-
}));
|
|
13
|
-
//#endregion
|
|
14
|
-
exports.getInsightsCollationSql = getInsightsCollationSql;
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { bundleEventsV100, bundleInstallationsV100 } from "../../schema/v1_0_0.mjs";
|
|
2
|
-
import { getSqlType, sqlColumnDefinition } from "./sql.mjs";
|
|
3
|
-
//#region src/db/schema/insightsCollation.ts
|
|
4
|
-
const getInsightsCollationSql = (provider) => [bundleEventsV100, bundleInstallationsV100].flatMap((table) => table.columns.flatMap((column) => {
|
|
5
|
-
const collation = column.providerCollations?.[provider];
|
|
6
|
-
if (collation === void 0) return [];
|
|
7
|
-
if (provider === "mysql") return [`alter table ${table.ormName} modify column ${sqlColumnDefinition(table, {
|
|
8
|
-
...column,
|
|
9
|
-
primaryKey: void 0
|
|
10
|
-
}, provider)}`];
|
|
11
|
-
return [`alter table ${table.ormName} alter column ${column.ormName} type ${getSqlType(column.type, provider)} collate ${collation}`];
|
|
12
|
-
}));
|
|
13
|
-
//#endregion
|
|
14
|
-
export { getInsightsCollationSql };
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
const require_registry = require("./registry.cjs");
|
|
2
|
-
const require_sql = require("./sql.cjs");
|
|
3
|
-
//#region src/db/schema/mongodb.ts
|
|
4
|
-
const createMongoMigrationOperations = (settingsOperation) => [
|
|
5
|
-
...require_sql.hotUpdaterCreateTableOperations,
|
|
6
|
-
...require_registry.hotUpdaterSchema.tables.filter((table) => !table.internal).map((table) => {
|
|
7
|
-
const primaryKey = table.columns.find((column) => column.primaryKey);
|
|
8
|
-
if (!primaryKey) throw new Error(`MongoDB table ${table.ormName} does not define a primary key.`);
|
|
9
|
-
return {
|
|
10
|
-
description: `Create unique MongoDB index: ${table.ormName}_${primaryKey.ormName}_idx on ${table.ormName}(${primaryKey.ormName})`,
|
|
11
|
-
type: "custom"
|
|
12
|
-
};
|
|
13
|
-
}),
|
|
14
|
-
...require_registry.hotUpdaterSchema.tables.flatMap((table) => (table.indexes ?? []).filter((index) => require_registry.schemaIndexAppliesToProvider(index, "mongodb")).map((index) => ({
|
|
15
|
-
description: `Create ${index.unique ? "unique " : ""}MongoDB index: ${index.name} on ${table.ormName}(${index.columns.join(", ")})`,
|
|
16
|
-
type: "custom"
|
|
17
|
-
}))),
|
|
18
|
-
{
|
|
19
|
-
description: "Enforce final MongoDB Bundle, Release, and catalog schemas",
|
|
20
|
-
type: "custom"
|
|
21
|
-
},
|
|
22
|
-
...settingsOperation ? [settingsOperation] : []
|
|
23
|
-
];
|
|
24
|
-
//#endregion
|
|
25
|
-
exports.createMongoMigrationOperations = createMongoMigrationOperations;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { hotUpdaterSchema, schemaIndexAppliesToProvider } from "./registry.mjs";
|
|
2
|
-
import { hotUpdaterCreateTableOperations } from "./sql.mjs";
|
|
3
|
-
//#region src/db/schema/mongodb.ts
|
|
4
|
-
const createMongoMigrationOperations = (settingsOperation) => [
|
|
5
|
-
...hotUpdaterCreateTableOperations,
|
|
6
|
-
...hotUpdaterSchema.tables.filter((table) => !table.internal).map((table) => {
|
|
7
|
-
const primaryKey = table.columns.find((column) => column.primaryKey);
|
|
8
|
-
if (!primaryKey) throw new Error(`MongoDB table ${table.ormName} does not define a primary key.`);
|
|
9
|
-
return {
|
|
10
|
-
description: `Create unique MongoDB index: ${table.ormName}_${primaryKey.ormName}_idx on ${table.ormName}(${primaryKey.ormName})`,
|
|
11
|
-
type: "custom"
|
|
12
|
-
};
|
|
13
|
-
}),
|
|
14
|
-
...hotUpdaterSchema.tables.flatMap((table) => (table.indexes ?? []).filter((index) => schemaIndexAppliesToProvider(index, "mongodb")).map((index) => ({
|
|
15
|
-
description: `Create ${index.unique ? "unique " : ""}MongoDB index: ${index.name} on ${table.ormName}(${index.columns.join(", ")})`,
|
|
16
|
-
type: "custom"
|
|
17
|
-
}))),
|
|
18
|
-
{
|
|
19
|
-
description: "Enforce final MongoDB Bundle, Release, and catalog schemas",
|
|
20
|
-
type: "custom"
|
|
21
|
-
},
|
|
22
|
-
...settingsOperation ? [settingsOperation] : []
|
|
23
|
-
];
|
|
24
|
-
//#endregion
|
|
25
|
-
export { createMongoMigrationOperations };
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
const require_index = require("../../schema/index.cjs");
|
|
2
|
-
//#region src/db/schema/registry.ts
|
|
3
|
-
const hotUpdaterSchema = require_index.hotUpdaterSchemaVersions[require_index.hotUpdaterSchemaVersions.length - 1];
|
|
4
|
-
const getHotUpdaterSchemaVersion = (version) => {
|
|
5
|
-
const schema = require_index.hotUpdaterSchemaVersions.find((item) => item.version === version);
|
|
6
|
-
if (!schema) throw new Error(`Unsupported Hot Updater schema version: ${version}`);
|
|
7
|
-
return schema;
|
|
8
|
-
};
|
|
9
|
-
const getSchemaColumn = (table, name) => {
|
|
10
|
-
const column = table.columns.find((item) => item.ormName === name);
|
|
11
|
-
if (!column) throw new Error(`Unknown Hot Updater schema column: ${table.ormName}.${name}`);
|
|
12
|
-
return column;
|
|
13
|
-
};
|
|
14
|
-
const hotUpdaterDataTables = hotUpdaterSchema.tables.filter((table) => !table.internal);
|
|
15
|
-
const schemaIndexAppliesToProvider = (index, provider) => !index.providers || index.providers.includes(provider);
|
|
16
|
-
//#endregion
|
|
17
|
-
exports.getHotUpdaterSchemaVersion = getHotUpdaterSchemaVersion;
|
|
18
|
-
exports.getSchemaColumn = getSchemaColumn;
|
|
19
|
-
exports.hotUpdaterDataTables = hotUpdaterDataTables;
|
|
20
|
-
exports.hotUpdaterSchema = hotUpdaterSchema;
|
|
21
|
-
exports.schemaIndexAppliesToProvider = schemaIndexAppliesToProvider;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { hotUpdaterSchemaVersions } from "../../schema/index.mjs";
|
|
2
|
-
//#region src/db/schema/registry.ts
|
|
3
|
-
const hotUpdaterSchema = hotUpdaterSchemaVersions[hotUpdaterSchemaVersions.length - 1];
|
|
4
|
-
const getHotUpdaterSchemaVersion = (version) => {
|
|
5
|
-
const schema = hotUpdaterSchemaVersions.find((item) => item.version === version);
|
|
6
|
-
if (!schema) throw new Error(`Unsupported Hot Updater schema version: ${version}`);
|
|
7
|
-
return schema;
|
|
8
|
-
};
|
|
9
|
-
const getSchemaColumn = (table, name) => {
|
|
10
|
-
const column = table.columns.find((item) => item.ormName === name);
|
|
11
|
-
if (!column) throw new Error(`Unknown Hot Updater schema column: ${table.ormName}.${name}`);
|
|
12
|
-
return column;
|
|
13
|
-
};
|
|
14
|
-
const hotUpdaterDataTables = hotUpdaterSchema.tables.filter((table) => !table.internal);
|
|
15
|
-
const schemaIndexAppliesToProvider = (index, provider) => !index.providers || index.providers.includes(provider);
|
|
16
|
-
//#endregion
|
|
17
|
-
export { getHotUpdaterSchemaVersion, getSchemaColumn, hotUpdaterDataTables, hotUpdaterSchema, schemaIndexAppliesToProvider };
|