@hot-updater/server 0.36.6 → 1.0.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/databaseConstraintErrors.cjs +23 -0
- package/dist/adapters/databaseConstraintErrors.mjs +21 -0
- package/dist/adapters/databasePluginUtils.cjs +117 -0
- package/dist/adapters/databasePluginUtils.mjs +106 -0
- package/dist/adapters/drizzle.cjs +53 -176
- package/dist/adapters/drizzle.d.cts +6 -4
- package/dist/adapters/drizzle.d.mts +6 -4
- package/dist/adapters/drizzle.mjs +54 -177
- package/dist/adapters/drizzleCrud.cjs +250 -0
- package/dist/adapters/drizzleCrud.mjs +249 -0
- package/dist/adapters/drizzleLazyDB.cjs +84 -36
- package/dist/adapters/drizzleLazyDB.mjs +84 -36
- package/dist/adapters/drizzleQuery.cjs +68 -0
- package/dist/adapters/drizzleQuery.mjs +67 -0
- package/dist/adapters/kysely.cjs +18 -138
- package/dist/adapters/kysely.d.cts +3 -12
- package/dist/adapters/kysely.d.mts +3 -12
- package/dist/adapters/kysely.mjs +19 -139
- package/dist/adapters/kyselyCrud.cjs +254 -0
- package/dist/adapters/kyselyCrud.mjs +253 -0
- package/dist/adapters/kyselyQuery.cjs +56 -0
- package/dist/adapters/kyselyQuery.mjs +55 -0
- package/dist/adapters/mongodb.cjs +21 -174
- package/dist/adapters/mongodb.d.cts +3 -2
- package/dist/adapters/mongodb.d.mts +3 -2
- package/dist/adapters/mongodb.mjs +21 -174
- package/dist/adapters/mongodbCollections.cjs +36 -0
- package/dist/adapters/mongodbCollections.mjs +30 -0
- package/dist/adapters/mongodbQuery.cjs +77 -0
- package/dist/adapters/mongodbQuery.mjs +70 -0
- package/dist/adapters/mongodbReads.cjs +148 -0
- package/dist/adapters/mongodbReads.mjs +147 -0
- package/dist/adapters/mongodbWrites.cjs +134 -0
- package/dist/adapters/mongodbWrites.mjs +133 -0
- package/dist/adapters/prisma.cjs +205 -180
- package/dist/adapters/prisma.d.cts +3 -3
- package/dist/adapters/prisma.d.mts +3 -3
- package/dist/adapters/prisma.mjs +206 -181
- package/dist/adapters/prismaQuery.cjs +58 -0
- package/dist/adapters/prismaQuery.mjs +56 -0
- package/dist/adapters/prismaRows.cjs +198 -0
- package/dist/adapters/prismaRows.mjs +188 -0
- package/dist/analytics/bounded/activeOverview.cjs +87 -0
- package/dist/analytics/bounded/activeOverview.mjs +85 -0
- package/dist/analytics/bounded/installationSearch.cjs +42 -0
- package/dist/analytics/bounded/installationSearch.mjs +42 -0
- package/dist/analytics/bounded/persistence.cjs +39 -0
- package/dist/analytics/bounded/persistence.mjs +38 -0
- package/dist/analytics/bounded/provider.cjs +170 -0
- package/dist/analytics/bounded/provider.d.cts +7 -0
- package/dist/analytics/bounded/provider.d.mts +7 -0
- package/dist/analytics/bounded/provider.mjs +170 -0
- package/dist/analytics/bounded/scan.cjs +144 -0
- package/dist/analytics/bounded/scan.mjs +138 -0
- package/dist/analytics/domain.d.cts +121 -0
- package/dist/analytics/domain.d.mts +121 -0
- package/dist/analytics/errors.cjs +22 -0
- package/dist/analytics/errors.mjs +20 -0
- package/dist/analytics/eventInput.cjs +111 -0
- package/dist/analytics/eventInput.mjs +111 -0
- package/dist/analytics/persistence.d.cts +6 -0
- package/dist/analytics/persistence.d.mts +6 -0
- package/dist/analytics/queryInput.cjs +58 -0
- package/dist/analytics/queryInput.mjs +55 -0
- package/dist/analytics/routes.cjs +63 -0
- package/dist/analytics/routes.mjs +61 -0
- package/dist/analytics/types.d.cts +17 -0
- package/dist/analytics/types.d.mts +17 -0
- package/dist/apiKeys.cjs +139 -0
- package/dist/apiKeys.d.cts +50 -0
- package/dist/apiKeys.d.mts +50 -0
- package/dist/apiKeys.mjs +133 -0
- package/dist/createHotUpdaterCore.cjs +48 -26
- package/dist/createHotUpdaterCore.d.cts +49 -17
- package/dist/createHotUpdaterCore.d.mts +49 -17
- package/dist/createHotUpdaterCore.mjs +51 -29
- package/dist/db/createBundleDiff.cjs +45 -68
- package/dist/db/createBundleDiff.d.cts +3 -3
- package/dist/db/createBundleDiff.d.mts +3 -3
- package/dist/db/createBundleDiff.mjs +47 -68
- package/dist/db/databasePluginCore.cjs +138 -0
- package/dist/db/databasePluginCore.mjs +137 -0
- package/dist/db/fixedMigrator.cjs +36 -93
- package/dist/db/fixedMigrator.mjs +36 -93
- package/dist/db/fixedMigratorMongo.cjs +319 -0
- package/dist/db/fixedMigratorMongo.mjs +319 -0
- package/dist/db/fixedMigratorShared.cjs +23 -0
- package/dist/db/fixedMigratorShared.mjs +18 -0
- package/dist/db/mongoMigrationExecution.cjs +11 -0
- package/dist/db/mongoMigrationExecution.mjs +11 -0
- package/dist/db/releaseCatalog.cjs +66 -0
- package/dist/db/releaseCatalog.d.cts +17 -0
- package/dist/db/releaseCatalog.d.mts +17 -0
- package/dist/db/releaseCatalog.mjs +64 -0
- package/dist/db/schema/mongodb.cjs +14 -6
- package/dist/db/schema/mongodb.mjs +14 -6
- package/dist/db/schema/registry.cjs +0 -2
- package/dist/db/schema/registry.mjs +1 -2
- package/dist/db/schema/sql.cjs +31 -14
- package/dist/db/schema/sql.mjs +32 -13
- package/dist/db/schema/sqlOperations.cjs +4 -4
- package/dist/db/schema/sqlOperations.mjs +5 -5
- package/dist/db/schemaGenerators.cjs +52 -18
- package/dist/db/schemaGenerators.mjs +52 -18
- package/dist/db/schemaReadiness.cjs +4 -3
- package/dist/db/schemaReadiness.mjs +4 -3
- package/dist/db/sqlMigrationExecution.cjs +67 -0
- package/dist/db/sqlMigrationExecution.mjs +66 -0
- package/dist/db/types.cjs +2 -6
- package/dist/db/types.d.cts +60 -16
- package/dist/db/types.d.mts +60 -16
- package/dist/db/types.mjs +3 -6
- package/dist/db/updateArtifacts.cjs +114 -60
- package/dist/db/updateArtifacts.mjs +117 -62
- package/dist/handler.cjs +108 -282
- package/dist/handler.d.cts +3 -46
- package/dist/handler.d.mts +3 -46
- package/dist/handler.mjs +107 -281
- package/dist/handlerBundleRoutes.cjs +155 -0
- package/dist/handlerBundleRoutes.mjs +155 -0
- package/dist/handlerErrors.cjs +9 -0
- package/dist/handlerErrors.mjs +9 -0
- package/dist/handlerParameters.cjs +39 -0
- package/dist/handlerParameters.mjs +34 -0
- package/dist/handlerReleaseCatalogRoutes.cjs +111 -0
- package/dist/handlerReleaseCatalogRoutes.mjs +110 -0
- package/dist/handlerReleaseManagementRoutes.cjs +125 -0
- package/dist/handlerReleaseManagementRoutes.mjs +124 -0
- package/dist/handlerTypes.d.cts +63 -0
- package/dist/handlerTypes.d.mts +63 -0
- package/dist/handlerVersionRoutes.cjs +10 -0
- package/dist/handlerVersionRoutes.d.cts +4 -0
- package/dist/handlerVersionRoutes.d.mts +4 -0
- package/dist/handlerVersionRoutes.mjs +9 -0
- package/dist/index.cjs +10 -1
- package/dist/index.d.cts +9 -3
- package/dist/index.d.mts +9 -3
- package/dist/index.mjs +5 -2
- package/dist/node.cjs +19 -12
- package/dist/node.d.cts +15 -10
- package/dist/node.d.mts +15 -10
- package/dist/node.mjs +19 -13
- package/dist/package.cjs +1 -1
- package/dist/package.mjs +1 -1
- package/dist/schema/dsl.cjs +19 -2
- package/dist/schema/dsl.mjs +17 -3
- package/dist/schema/index.cjs +1 -8
- package/dist/schema/index.mjs +2 -8
- package/dist/schema/types.cjs +3 -1
- package/dist/schema/types.mjs +3 -2
- package/dist/schema/v1_0_0.cjs +364 -0
- package/dist/schema/v1_0_0.mjs +357 -0
- package/dist/storageAccess.cjs +69 -25
- package/dist/storageAccess.mjs +68 -25
- package/dist/types/index.d.cts +4 -3
- package/dist/types/index.d.mts +5 -4
- package/package.json +8 -7
- package/src/adapters/databaseConstraintErrors.ts +25 -0
- package/src/adapters/databasePluginTestDatabase.ts +106 -0
- package/src/adapters/databasePluginUtils.spec.ts +29 -0
- package/src/adapters/databasePluginUtils.ts +214 -0
- package/src/adapters/drizzle.spec.ts +208 -47
- package/src/adapters/drizzle.ts +106 -293
- package/src/adapters/drizzleCrud.ts +419 -0
- package/src/adapters/drizzleLazyDB.ts +206 -100
- package/src/adapters/drizzleQuery.ts +164 -0
- package/src/adapters/kysely.spec.ts +126 -88
- package/src/adapters/kysely.ts +76 -334
- package/src/adapters/kyselyCrud.ts +588 -0
- package/src/adapters/kyselyQuery.ts +128 -0
- package/src/adapters/mongodb.spec.ts +141 -0
- package/src/adapters/mongodb.ts +60 -288
- package/src/adapters/mongodbCollections.ts +62 -0
- package/src/adapters/mongodbQuery.ts +226 -0
- package/src/adapters/mongodbReads.ts +311 -0
- package/src/adapters/mongodbRows.spec.ts +64 -0
- package/src/adapters/mongodbRows.ts +118 -0
- package/src/adapters/mongodbTestClient.ts +342 -0
- package/src/adapters/mongodbTestFilter.ts +166 -0
- package/src/adapters/mongodbWrites.ts +260 -0
- package/src/adapters/prisma.spec.ts +196 -0
- package/src/adapters/prisma.ts +417 -292
- package/src/adapters/prismaQuery.ts +129 -0
- package/src/adapters/prismaRows.spec.ts +98 -0
- package/src/adapters/prismaRows.ts +301 -0
- package/src/adapters/prismaTestClient.ts +396 -0
- package/src/analytics/analytics.integration.spec.ts +144 -0
- package/src/analytics/bounded/activeOverview.spec.ts +189 -0
- package/src/analytics/bounded/activeOverview.ts +148 -0
- package/src/analytics/bounded/installationSearch.spec.ts +130 -0
- package/src/analytics/bounded/installationSearch.ts +69 -0
- package/src/analytics/bounded/persistence.ts +43 -0
- package/src/analytics/bounded/provider.spec.ts +219 -0
- package/src/analytics/bounded/provider.ts +229 -0
- package/src/analytics/bounded/scan.ts +235 -0
- package/src/analytics/domain.ts +139 -0
- package/src/analytics/errors.ts +18 -0
- package/src/analytics/eventInput.ts +168 -0
- package/src/analytics/persistence.ts +10 -0
- package/src/analytics/queryInput.ts +102 -0
- package/src/analytics/routes.ts +123 -0
- package/src/analytics/types.ts +44 -0
- package/src/apiKeys.integration.spec.ts +192 -0
- package/src/apiKeys.spec.ts +162 -0
- package/src/apiKeys.ts +220 -0
- package/src/createHotUpdaterCore.ts +164 -100
- package/src/db/bundleRows.spec.ts +164 -0
- package/src/db/bundleRows.ts +10 -140
- package/src/db/createBundleDiff.spec.ts +172 -127
- package/src/db/createBundleDiff.ts +91 -110
- package/src/db/databasePluginCore.spec.ts +62 -0
- package/src/db/databasePluginCore.testFixtures.ts +76 -0
- package/src/db/databasePluginCore.ts +185 -0
- package/src/db/databasePluginUpdateCheck.bench.ts +107 -0
- package/src/db/fixedMigrator.spec.ts +184 -42
- package/src/db/fixedMigrator.ts +64 -205
- package/src/db/fixedMigratorMongo.spec.ts +192 -0
- package/src/db/fixedMigratorMongo.ts +425 -0
- package/src/db/fixedMigratorShared.ts +36 -0
- package/src/db/hotUpdaterSchema.ts +0 -1
- package/src/db/index.spec.ts +333 -1025
- package/src/db/mongoMigrationExecution.ts +23 -0
- package/src/db/node-sqlite.d.ts +25 -0
- package/src/db/releaseCatalog.ts +148 -0
- package/src/db/schema/mongodb.ts +20 -6
- package/src/db/schema/sql.ts +52 -11
- package/src/db/schema/sqlOperations.ts +5 -4
- package/src/db/schemaGenerators.ts +107 -23
- package/src/db/schemaReadiness.ts +2 -1
- package/src/db/sqlMigrationExecution.spec.ts +65 -0
- package/src/db/sqlMigrationExecution.ts +108 -0
- package/src/db/types.spec.ts +55 -0
- package/src/db/types.ts +129 -65
- package/src/db/updateArtifacts.spec.ts +359 -0
- package/src/db/updateArtifacts.ts +290 -126
- package/src/handler-standalone.integration.spec.ts +401 -364
- package/src/handler.spec.ts +137 -582
- package/src/handler.testFixtures.ts +30 -0
- package/src/handler.ts +218 -616
- package/src/handlerAuth.integration.spec.ts +33 -0
- package/src/handlerBundleRoutes.ts +259 -0
- package/src/handlerErrors.ts +7 -0
- package/src/handlerManagement.spec.ts +262 -0
- package/src/handlerParameters.ts +105 -0
- package/src/handlerReleaseCatalogRoutes.ts +154 -0
- package/src/handlerReleaseManagementRoutes.ts +213 -0
- package/src/handlerTypes.ts +96 -0
- package/src/handlerVersionRoutes.ts +12 -0
- package/src/index.ts +22 -2
- package/src/node.spec.ts +79 -10
- package/src/node.ts +20 -17
- package/src/releaseCatalogRoutes.integration.spec.ts +238 -0
- package/src/runtime.spec.ts +126 -959
- package/src/runtime.testFixtures.ts +71 -0
- package/src/schema/dsl-all-versions.spec.ts +26 -17
- package/src/schema/dsl.ts +41 -2
- package/src/schema/index.ts +3 -9
- package/src/schema/types.ts +9 -3
- package/src/schema/v1_0_0.spec.ts +146 -0
- package/src/schema/v1_0_0.ts +465 -0
- package/src/storageAccess.spec.ts +127 -32
- package/src/storageAccess.ts +106 -55
- package/src/types/index.ts +2 -1
- package/dist/db/bundleRows.cjs +0 -82
- package/dist/db/bundleRows.d.cts +0 -33
- package/dist/db/bundleRows.d.mts +0 -33
- package/dist/db/bundleRows.mjs +0 -79
- package/dist/db/pluginCore.cjs +0 -242
- package/dist/db/pluginCore.mjs +0 -241
- package/dist/db/schema/sqlMigrations.cjs +0 -74
- package/dist/db/schema/sqlMigrations.mjs +0 -73
- package/dist/db/schemaEnhancements.cjs +0 -20
- package/dist/db/schemaEnhancements.mjs +0 -19
- package/dist/route.cjs +0 -7
- package/dist/route.mjs +0 -7
- package/dist/schema/v0_21_0.cjs +0 -38
- package/dist/schema/v0_21_0.mjs +0 -37
- package/dist/schema/v0_29_0.cjs +0 -45
- package/dist/schema/v0_29_0.mjs +0 -44
- package/dist/schema/v0_31_0.cjs +0 -82
- package/dist/schema/v0_31_0.mjs +0 -80
- package/src/db/pluginCore.spec.ts +0 -1095
- package/src/db/pluginCore.ts +0 -475
- package/src/db/pluginUpdateCheck.bench.ts +0 -254
- package/src/db/schema/sqlMigrations.ts +0 -219
- package/src/db/schemaEnhancements.ts +0 -55
- package/src/route.ts +0 -7
- package/src/schema/v0_21_0.ts +0 -52
- package/src/schema/v0_29_0.ts +0 -62
- package/src/schema/v0_31_0.spec.ts +0 -73
- package/src/schema/v0_31_0.ts +0 -120
package/dist/db/pluginCore.mjs
DELETED
|
@@ -1,241 +0,0 @@
|
|
|
1
|
-
import { assertBundlePersistenceConstraints } from "./schemaEnhancements.mjs";
|
|
2
|
-
import { resolveManifestArtifacts } from "./updateArtifacts.mjs";
|
|
3
|
-
import { createRequestUpdateBundleResolver, semverSatisfies } from "@hot-updater/plugin-core";
|
|
4
|
-
import { NIL_UUID, isCohortEligibleForUpdate } from "@hot-updater/core";
|
|
5
|
-
//#region src/db/pluginCore.ts
|
|
6
|
-
const PAGE_SIZE = 100;
|
|
7
|
-
const DESC_ORDER = {
|
|
8
|
-
field: "id",
|
|
9
|
-
direction: "desc"
|
|
10
|
-
};
|
|
11
|
-
const bundleMatchesQueryWhere = (bundle, where) => {
|
|
12
|
-
if (!where) return true;
|
|
13
|
-
if (where.channel !== void 0 && bundle.channel !== where.channel) return false;
|
|
14
|
-
if (where.platform !== void 0 && bundle.platform !== where.platform) return false;
|
|
15
|
-
if (where.enabled !== void 0 && bundle.enabled !== where.enabled) return false;
|
|
16
|
-
if (where.id?.eq !== void 0 && bundle.id !== where.id.eq) return false;
|
|
17
|
-
if (where.id?.gt !== void 0 && bundle.id.localeCompare(where.id.gt) <= 0) return false;
|
|
18
|
-
if (where.id?.gte !== void 0 && bundle.id.localeCompare(where.id.gte) < 0) return false;
|
|
19
|
-
if (where.id?.lt !== void 0 && bundle.id.localeCompare(where.id.lt) >= 0) return false;
|
|
20
|
-
if (where.id?.lte !== void 0 && bundle.id.localeCompare(where.id.lte) > 0) return false;
|
|
21
|
-
if (where.id?.in && !where.id.in.includes(bundle.id)) return false;
|
|
22
|
-
if (where.targetAppVersionNotNull && bundle.targetAppVersion === null) return false;
|
|
23
|
-
if (where.targetAppVersion !== void 0 && bundle.targetAppVersion !== where.targetAppVersion) return false;
|
|
24
|
-
if (where.targetAppVersionIn && !where.targetAppVersionIn.includes(bundle.targetAppVersion ?? "")) return false;
|
|
25
|
-
if (where.fingerprintHash !== void 0 && bundle.fingerprintHash !== where.fingerprintHash) return false;
|
|
26
|
-
return true;
|
|
27
|
-
};
|
|
28
|
-
const sortBundles = (bundles, orderBy) => {
|
|
29
|
-
const direction = orderBy?.direction ?? "desc";
|
|
30
|
-
return bundles.slice().sort((a, b) => {
|
|
31
|
-
const result = a.id.localeCompare(b.id);
|
|
32
|
-
return direction === "asc" ? result : -result;
|
|
33
|
-
});
|
|
34
|
-
};
|
|
35
|
-
const makeResponse = (bundle, status) => ({
|
|
36
|
-
id: bundle.id,
|
|
37
|
-
message: bundle.message,
|
|
38
|
-
shouldForceUpdate: status === "ROLLBACK" ? true : bundle.shouldForceUpdate,
|
|
39
|
-
status,
|
|
40
|
-
storageUri: bundle.storageUri,
|
|
41
|
-
fileHash: bundle.fileHash
|
|
42
|
-
});
|
|
43
|
-
const INIT_BUNDLE_ROLLBACK_UPDATE_INFO = {
|
|
44
|
-
message: null,
|
|
45
|
-
id: NIL_UUID,
|
|
46
|
-
shouldForceUpdate: true,
|
|
47
|
-
status: "ROLLBACK",
|
|
48
|
-
storageUri: null,
|
|
49
|
-
fileHash: null
|
|
50
|
-
};
|
|
51
|
-
function createPluginDatabaseCore(getPlugin, resolveFileUrl, options) {
|
|
52
|
-
const coreOptions = options;
|
|
53
|
-
const runWithMutationPlugin = async (operation) => {
|
|
54
|
-
const plugin = coreOptions?.createMutationPlugin?.() ?? getPlugin();
|
|
55
|
-
try {
|
|
56
|
-
return await operation(plugin);
|
|
57
|
-
} finally {
|
|
58
|
-
if (coreOptions?.createMutationPlugin) await coreOptions.cleanupMutationPlugin?.(plugin);
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
|
-
const getSortedBundlePage = async (options, context) => {
|
|
62
|
-
const result = await getPlugin().getBundles({
|
|
63
|
-
...options,
|
|
64
|
-
orderBy: options.orderBy ?? DESC_ORDER
|
|
65
|
-
}, context);
|
|
66
|
-
return {
|
|
67
|
-
...result,
|
|
68
|
-
data: sortBundles(result.data, options.orderBy ?? DESC_ORDER)
|
|
69
|
-
};
|
|
70
|
-
};
|
|
71
|
-
const isEligibleForUpdate = (bundle, cohort) => {
|
|
72
|
-
return isCohortEligibleForUpdate(bundle.id, cohort, bundle.rolloutCohortCount, bundle.targetCohorts);
|
|
73
|
-
};
|
|
74
|
-
const findUpdateInfoByScanning = async ({ args, queryWhere, isCandidate, context }) => {
|
|
75
|
-
let after;
|
|
76
|
-
while (true) {
|
|
77
|
-
const { data, pagination } = await getSortedBundlePage({
|
|
78
|
-
where: queryWhere,
|
|
79
|
-
limit: PAGE_SIZE,
|
|
80
|
-
orderBy: DESC_ORDER,
|
|
81
|
-
...after ? { cursor: { after } } : {}
|
|
82
|
-
}, context);
|
|
83
|
-
for (const bundle of data) {
|
|
84
|
-
if (!bundleMatchesQueryWhere(bundle, queryWhere) || !isCandidate(bundle)) continue;
|
|
85
|
-
if (args.bundleId === NIL_UUID) {
|
|
86
|
-
if (isEligibleForUpdate(bundle, args.cohort)) return makeResponse(bundle, "UPDATE");
|
|
87
|
-
continue;
|
|
88
|
-
}
|
|
89
|
-
const compareResult = bundle.id.localeCompare(args.bundleId);
|
|
90
|
-
if (compareResult > 0) {
|
|
91
|
-
if (isEligibleForUpdate(bundle, args.cohort)) return makeResponse(bundle, "UPDATE");
|
|
92
|
-
continue;
|
|
93
|
-
}
|
|
94
|
-
if (compareResult === 0) {
|
|
95
|
-
if (isEligibleForUpdate(bundle, args.cohort)) return null;
|
|
96
|
-
continue;
|
|
97
|
-
}
|
|
98
|
-
return makeResponse(bundle, "ROLLBACK");
|
|
99
|
-
}
|
|
100
|
-
if (!pagination.hasNextPage) break;
|
|
101
|
-
after = data.at(-1)?.id;
|
|
102
|
-
if (!after) break;
|
|
103
|
-
}
|
|
104
|
-
if (args.bundleId === NIL_UUID) return null;
|
|
105
|
-
if (args.minBundleId && args.bundleId.localeCompare(args.minBundleId) <= 0) return null;
|
|
106
|
-
return INIT_BUNDLE_ROLLBACK_UPDATE_INFO;
|
|
107
|
-
};
|
|
108
|
-
const getBaseWhere = ({ platform, channel, minBundleId }) => ({
|
|
109
|
-
platform,
|
|
110
|
-
channel,
|
|
111
|
-
enabled: true,
|
|
112
|
-
id: { gte: minBundleId }
|
|
113
|
-
});
|
|
114
|
-
return {
|
|
115
|
-
api: {
|
|
116
|
-
async getBundleById(id, context) {
|
|
117
|
-
await coreOptions?.beforeOperation?.();
|
|
118
|
-
return getPlugin().getBundleById(id, context);
|
|
119
|
-
},
|
|
120
|
-
async getUpdateInfo(args, context) {
|
|
121
|
-
await coreOptions?.beforeOperation?.();
|
|
122
|
-
const directGetUpdateInfo = getPlugin().getUpdateInfo;
|
|
123
|
-
if (directGetUpdateInfo) return context === void 0 ? await directGetUpdateInfo(args) : await directGetUpdateInfo(args, context);
|
|
124
|
-
const channel = args.channel ?? "production";
|
|
125
|
-
const minBundleId = args.minBundleId ?? NIL_UUID;
|
|
126
|
-
const baseWhere = getBaseWhere({
|
|
127
|
-
platform: args.platform,
|
|
128
|
-
channel,
|
|
129
|
-
minBundleId
|
|
130
|
-
});
|
|
131
|
-
if (args._updateStrategy === "fingerprint") return findUpdateInfoByScanning({
|
|
132
|
-
args,
|
|
133
|
-
queryWhere: {
|
|
134
|
-
...baseWhere,
|
|
135
|
-
fingerprintHash: args.fingerprintHash
|
|
136
|
-
},
|
|
137
|
-
context,
|
|
138
|
-
isCandidate: (bundle) => {
|
|
139
|
-
return bundle.enabled && bundle.platform === args.platform && bundle.channel === channel && bundle.id.localeCompare(minBundleId) >= 0 && bundle.fingerprintHash === args.fingerprintHash;
|
|
140
|
-
}
|
|
141
|
-
});
|
|
142
|
-
return findUpdateInfoByScanning({
|
|
143
|
-
args,
|
|
144
|
-
queryWhere: { ...baseWhere },
|
|
145
|
-
context,
|
|
146
|
-
isCandidate: (bundle) => {
|
|
147
|
-
return bundle.enabled && bundle.platform === args.platform && bundle.channel === channel && bundle.id.localeCompare(minBundleId) >= 0 && !!bundle.targetAppVersion && semverSatisfies(bundle.targetAppVersion, args.appVersion);
|
|
148
|
-
}
|
|
149
|
-
});
|
|
150
|
-
},
|
|
151
|
-
async getAppUpdateInfo(args, context) {
|
|
152
|
-
const info = await this.getUpdateInfo(args, context);
|
|
153
|
-
if (!info) return null;
|
|
154
|
-
const { storageUri, ...rest } = info;
|
|
155
|
-
const readStorageText = coreOptions?.readStorageText;
|
|
156
|
-
if (info.id === NIL_UUID || !readStorageText) {
|
|
157
|
-
const fileUrl = await resolveFileUrl(storageUri ?? null, context);
|
|
158
|
-
return {
|
|
159
|
-
...rest,
|
|
160
|
-
fileUrl
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
const requestBundles = createRequestUpdateBundleResolver(context);
|
|
164
|
-
const getCurrentBundle = () => {
|
|
165
|
-
if (args.bundleId === NIL_UUID) return null;
|
|
166
|
-
const seededCurrentBundle = requestBundles.peek(args.bundleId);
|
|
167
|
-
if (seededCurrentBundle || requestBundles.hasSeededBundles()) return seededCurrentBundle;
|
|
168
|
-
return requestBundles.getById(args.bundleId, () => getPlugin().getBundleById(args.bundleId, context));
|
|
169
|
-
};
|
|
170
|
-
const [fileUrl, targetBundle, currentBundle] = await Promise.all([
|
|
171
|
-
resolveFileUrl(storageUri ?? null, context),
|
|
172
|
-
requestBundles.getById(info.id, () => getPlugin().getBundleById(info.id, context)),
|
|
173
|
-
getCurrentBundle()
|
|
174
|
-
]);
|
|
175
|
-
const baseResponse = {
|
|
176
|
-
...rest,
|
|
177
|
-
fileUrl
|
|
178
|
-
};
|
|
179
|
-
const manifestArtifacts = await resolveManifestArtifacts({
|
|
180
|
-
currentBundle,
|
|
181
|
-
resolveFileUrl,
|
|
182
|
-
readStorageText,
|
|
183
|
-
targetBundle,
|
|
184
|
-
context
|
|
185
|
-
});
|
|
186
|
-
if (!manifestArtifacts) return baseResponse;
|
|
187
|
-
return {
|
|
188
|
-
...baseResponse,
|
|
189
|
-
...manifestArtifacts
|
|
190
|
-
};
|
|
191
|
-
},
|
|
192
|
-
async getChannels(context) {
|
|
193
|
-
await coreOptions?.beforeOperation?.();
|
|
194
|
-
return getPlugin().getChannels(context);
|
|
195
|
-
},
|
|
196
|
-
async getBundles(options, context) {
|
|
197
|
-
await coreOptions?.beforeOperation?.();
|
|
198
|
-
return getPlugin().getBundles(options, context);
|
|
199
|
-
},
|
|
200
|
-
async insertBundle(bundle, context) {
|
|
201
|
-
await coreOptions?.beforeOperation?.();
|
|
202
|
-
assertBundlePersistenceConstraints(bundle);
|
|
203
|
-
await runWithMutationPlugin(async (plugin) => {
|
|
204
|
-
await plugin.appendBundle(bundle, context);
|
|
205
|
-
await plugin.commitBundle(context);
|
|
206
|
-
});
|
|
207
|
-
},
|
|
208
|
-
async updateBundleById(bundleId, newBundle, context) {
|
|
209
|
-
await coreOptions?.beforeOperation?.();
|
|
210
|
-
await runWithMutationPlugin(async (plugin) => {
|
|
211
|
-
const current = await plugin.getBundleById(bundleId, context);
|
|
212
|
-
if (!current) throw new Error("targetBundleId not found");
|
|
213
|
-
assertBundlePersistenceConstraints({
|
|
214
|
-
...current,
|
|
215
|
-
...newBundle
|
|
216
|
-
});
|
|
217
|
-
await plugin.updateBundle(bundleId, newBundle, context);
|
|
218
|
-
await plugin.commitBundle(context);
|
|
219
|
-
});
|
|
220
|
-
},
|
|
221
|
-
async deleteBundleById(bundleId, context) {
|
|
222
|
-
await coreOptions?.beforeOperation?.();
|
|
223
|
-
await runWithMutationPlugin(async (plugin) => {
|
|
224
|
-
const bundle = await plugin.getBundleById(bundleId, context);
|
|
225
|
-
if (!bundle) return;
|
|
226
|
-
await plugin.deleteBundle(bundle, context);
|
|
227
|
-
await plugin.commitBundle(context);
|
|
228
|
-
});
|
|
229
|
-
}
|
|
230
|
-
},
|
|
231
|
-
adapterName: getPlugin().name,
|
|
232
|
-
createMigrator: () => {
|
|
233
|
-
throw new Error("createMigrator is only available for Kysely/MongoDB database adapters.");
|
|
234
|
-
},
|
|
235
|
-
generateSchema: () => {
|
|
236
|
-
throw new Error("generateSchema is only available for Drizzle/Prisma database adapters.");
|
|
237
|
-
}
|
|
238
|
-
};
|
|
239
|
-
}
|
|
240
|
-
//#endregion
|
|
241
|
-
export { createPluginDatabaseCore };
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
const require_index = require("../../schema/index.cjs");
|
|
2
|
-
const require_registry = require("./registry.cjs");
|
|
3
|
-
const require_sql = require("./sql.cjs");
|
|
4
|
-
//#region src/db/schema/sqlMigrations.ts
|
|
5
|
-
const nameMap = (items) => new Map((items ?? []).map((item) => [item.name, item]));
|
|
6
|
-
const columnMap = (table) => new Map(table.columns.map((column) => [column.ormName, column]));
|
|
7
|
-
const stableStringify = (value) => JSON.stringify(value);
|
|
8
|
-
const assertSameSchemaValue = (location, left, right) => {
|
|
9
|
-
if (stableStringify(left) !== stableStringify(right)) throw new Error(`Unsupported Hot Updater schema change at ${location}. Add an explicit migration step before changing existing schema metadata.`);
|
|
10
|
-
};
|
|
11
|
-
const compareNamedItems = (location, previousItems, nextItems) => {
|
|
12
|
-
const nextItemsByName = nameMap(nextItems);
|
|
13
|
-
for (const previousItem of previousItems ?? []) {
|
|
14
|
-
const nextItem = nextItemsByName.get(previousItem.name);
|
|
15
|
-
if (!nextItem) throw new Error(`Unsupported Hot Updater schema change at ${location}.${previousItem.name}. Removing schema metadata requires an explicit migration step.`);
|
|
16
|
-
assertSameSchemaValue(`${location}.${previousItem.name}`, previousItem, nextItem);
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
const assertNoUnsupportedTableChanges = (previous, next, provider) => {
|
|
20
|
-
const nextColumns = columnMap(next);
|
|
21
|
-
for (const previousColumn of previous.columns) {
|
|
22
|
-
const nextColumn = nextColumns.get(previousColumn.ormName);
|
|
23
|
-
if (!nextColumn) throw new Error(`Unsupported Hot Updater schema change at ${previous.ormName}.${previousColumn.ormName}. Dropping columns requires an explicit migration step.`);
|
|
24
|
-
assertSameSchemaValue(`${previous.ormName}.${previousColumn.ormName}`, previousColumn, nextColumn);
|
|
25
|
-
}
|
|
26
|
-
compareNamedItems(`${previous.ormName}.indexes`, previous.indexes?.filter((index) => require_registry.schemaIndexAppliesToProvider(index, provider)), next.indexes?.filter((index) => require_registry.schemaIndexAppliesToProvider(index, provider)));
|
|
27
|
-
compareNamedItems(`${previous.ormName}.checks`, previous.checks, next.checks);
|
|
28
|
-
compareNamedItems(`${previous.ormName}.foreignKeys`, previous.foreignKeys, next.foreignKeys);
|
|
29
|
-
};
|
|
30
|
-
const createForeignKeySql = (table, foreignKey) => `alter table ${table.ormName} add constraint ${foreignKey.name} foreign key (${foreignKey.columns.join(", ")}) references ${foreignKey.referencedTable}(${foreignKey.referencedColumns.join(", ")}) on update ${foreignKey.onUpdate} on delete ${foreignKey.onDelete}`;
|
|
31
|
-
const createCheckSql = (table, check) => `alter table ${table.ormName} add constraint ${check.name} check (${check.expression})`;
|
|
32
|
-
const createAddedTableSql = (table, provider, relationMode) => [
|
|
33
|
-
require_sql.createTableStatement(table, provider),
|
|
34
|
-
...(table.indexes ?? []).filter((index) => require_registry.schemaIndexAppliesToProvider(index, provider)).map((index) => require_sql.createIndexSql(table, index, provider)),
|
|
35
|
-
...provider === "sqlite" ? [] : (table.checks ?? []).map((check) => createCheckSql(table, check)),
|
|
36
|
-
...relationMode === "foreign-keys" && provider !== "sqlite" ? (table.foreignKeys ?? []).map((foreignKey) => createForeignKeySql(table, foreignKey)) : []
|
|
37
|
-
];
|
|
38
|
-
const createChangedTableSql = (previous, next, provider, relationMode) => {
|
|
39
|
-
assertNoUnsupportedTableChanges(previous, next, provider);
|
|
40
|
-
const previousColumns = columnMap(previous);
|
|
41
|
-
const previousIndexes = nameMap(previous.indexes?.filter((index) => require_registry.schemaIndexAppliesToProvider(index, provider)));
|
|
42
|
-
const previousChecks = nameMap(previous.checks);
|
|
43
|
-
const previousForeignKeys = nameMap(previous.foreignKeys);
|
|
44
|
-
return [
|
|
45
|
-
...next.columns.filter((column) => !previousColumns.has(column.ormName)).map((column) => `alter table ${next.ormName} add column ${require_sql.sqlColumnDefinition(next, column, provider)}`),
|
|
46
|
-
...(next.indexes ?? []).filter((index) => require_registry.schemaIndexAppliesToProvider(index, provider)).filter((index) => !previousIndexes.has(index.name)).map((index) => require_sql.createIndexSql(next, index, provider)),
|
|
47
|
-
...provider === "sqlite" ? [] : (next.checks ?? []).filter((check) => !previousChecks.has(check.name)).map((check) => createCheckSql(next, check)),
|
|
48
|
-
...relationMode === "foreign-keys" && provider !== "sqlite" ? (next.foreignKeys ?? []).filter((foreignKey) => !previousForeignKeys.has(foreignKey.name)).map((foreignKey) => createForeignKeySql(next, foreignKey)) : []
|
|
49
|
-
];
|
|
50
|
-
};
|
|
51
|
-
const createSchemaMigrationSql = (fromVersion, toVersion, provider, relationMode = "foreign-keys") => {
|
|
52
|
-
const fromIndex = require_registry.getSchemaVersionIndex(fromVersion);
|
|
53
|
-
const toIndex = require_registry.getSchemaVersionIndex(toVersion);
|
|
54
|
-
if (fromIndex === -1) throw new Error(`Unsupported Hot Updater schema version: ${fromVersion}`);
|
|
55
|
-
if (toIndex === -1) throw new Error(`Unsupported Hot Updater schema version: ${toVersion}`);
|
|
56
|
-
if (fromIndex > toIndex) throw new Error(`Cannot migrate Hot Updater schema down to ${toVersion}.`);
|
|
57
|
-
const statements = [];
|
|
58
|
-
for (let index = fromIndex + 1; index <= toIndex; index += 1) {
|
|
59
|
-
const previous = require_index.hotUpdaterSchemaVersions[index - 1];
|
|
60
|
-
const next = require_index.hotUpdaterSchemaVersions[index];
|
|
61
|
-
const previousTables = new Map(previous.tables.map((table) => [table.ormName, table]));
|
|
62
|
-
for (const table of next.tables) {
|
|
63
|
-
if (table.internal) continue;
|
|
64
|
-
const previousTable = previousTables.get(table.ormName);
|
|
65
|
-
statements.push(...previousTable ? createChangedTableSql(previousTable, table, provider, relationMode) : createAddedTableSql(table, provider, relationMode));
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
return statements;
|
|
69
|
-
};
|
|
70
|
-
const createV029AlterSql = (provider) => createSchemaMigrationSql("0.21.0", "0.29.0", provider);
|
|
71
|
-
const createV031AlterSql = (provider, relationMode = "foreign-keys") => createSchemaMigrationSql("0.29.0", "0.31.0", provider, relationMode);
|
|
72
|
-
//#endregion
|
|
73
|
-
exports.createV029AlterSql = createV029AlterSql;
|
|
74
|
-
exports.createV031AlterSql = createV031AlterSql;
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { hotUpdaterSchemaVersions } from "../../schema/index.mjs";
|
|
2
|
-
import { getSchemaVersionIndex, schemaIndexAppliesToProvider } from "./registry.mjs";
|
|
3
|
-
import { createIndexSql, createTableStatement, sqlColumnDefinition } from "./sql.mjs";
|
|
4
|
-
//#region src/db/schema/sqlMigrations.ts
|
|
5
|
-
const nameMap = (items) => new Map((items ?? []).map((item) => [item.name, item]));
|
|
6
|
-
const columnMap = (table) => new Map(table.columns.map((column) => [column.ormName, column]));
|
|
7
|
-
const stableStringify = (value) => JSON.stringify(value);
|
|
8
|
-
const assertSameSchemaValue = (location, left, right) => {
|
|
9
|
-
if (stableStringify(left) !== stableStringify(right)) throw new Error(`Unsupported Hot Updater schema change at ${location}. Add an explicit migration step before changing existing schema metadata.`);
|
|
10
|
-
};
|
|
11
|
-
const compareNamedItems = (location, previousItems, nextItems) => {
|
|
12
|
-
const nextItemsByName = nameMap(nextItems);
|
|
13
|
-
for (const previousItem of previousItems ?? []) {
|
|
14
|
-
const nextItem = nextItemsByName.get(previousItem.name);
|
|
15
|
-
if (!nextItem) throw new Error(`Unsupported Hot Updater schema change at ${location}.${previousItem.name}. Removing schema metadata requires an explicit migration step.`);
|
|
16
|
-
assertSameSchemaValue(`${location}.${previousItem.name}`, previousItem, nextItem);
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
const assertNoUnsupportedTableChanges = (previous, next, provider) => {
|
|
20
|
-
const nextColumns = columnMap(next);
|
|
21
|
-
for (const previousColumn of previous.columns) {
|
|
22
|
-
const nextColumn = nextColumns.get(previousColumn.ormName);
|
|
23
|
-
if (!nextColumn) throw new Error(`Unsupported Hot Updater schema change at ${previous.ormName}.${previousColumn.ormName}. Dropping columns requires an explicit migration step.`);
|
|
24
|
-
assertSameSchemaValue(`${previous.ormName}.${previousColumn.ormName}`, previousColumn, nextColumn);
|
|
25
|
-
}
|
|
26
|
-
compareNamedItems(`${previous.ormName}.indexes`, previous.indexes?.filter((index) => schemaIndexAppliesToProvider(index, provider)), next.indexes?.filter((index) => schemaIndexAppliesToProvider(index, provider)));
|
|
27
|
-
compareNamedItems(`${previous.ormName}.checks`, previous.checks, next.checks);
|
|
28
|
-
compareNamedItems(`${previous.ormName}.foreignKeys`, previous.foreignKeys, next.foreignKeys);
|
|
29
|
-
};
|
|
30
|
-
const createForeignKeySql = (table, foreignKey) => `alter table ${table.ormName} add constraint ${foreignKey.name} foreign key (${foreignKey.columns.join(", ")}) references ${foreignKey.referencedTable}(${foreignKey.referencedColumns.join(", ")}) on update ${foreignKey.onUpdate} on delete ${foreignKey.onDelete}`;
|
|
31
|
-
const createCheckSql = (table, check) => `alter table ${table.ormName} add constraint ${check.name} check (${check.expression})`;
|
|
32
|
-
const createAddedTableSql = (table, provider, relationMode) => [
|
|
33
|
-
createTableStatement(table, provider),
|
|
34
|
-
...(table.indexes ?? []).filter((index) => schemaIndexAppliesToProvider(index, provider)).map((index) => createIndexSql(table, index, provider)),
|
|
35
|
-
...provider === "sqlite" ? [] : (table.checks ?? []).map((check) => createCheckSql(table, check)),
|
|
36
|
-
...relationMode === "foreign-keys" && provider !== "sqlite" ? (table.foreignKeys ?? []).map((foreignKey) => createForeignKeySql(table, foreignKey)) : []
|
|
37
|
-
];
|
|
38
|
-
const createChangedTableSql = (previous, next, provider, relationMode) => {
|
|
39
|
-
assertNoUnsupportedTableChanges(previous, next, provider);
|
|
40
|
-
const previousColumns = columnMap(previous);
|
|
41
|
-
const previousIndexes = nameMap(previous.indexes?.filter((index) => schemaIndexAppliesToProvider(index, provider)));
|
|
42
|
-
const previousChecks = nameMap(previous.checks);
|
|
43
|
-
const previousForeignKeys = nameMap(previous.foreignKeys);
|
|
44
|
-
return [
|
|
45
|
-
...next.columns.filter((column) => !previousColumns.has(column.ormName)).map((column) => `alter table ${next.ormName} add column ${sqlColumnDefinition(next, column, provider)}`),
|
|
46
|
-
...(next.indexes ?? []).filter((index) => schemaIndexAppliesToProvider(index, provider)).filter((index) => !previousIndexes.has(index.name)).map((index) => createIndexSql(next, index, provider)),
|
|
47
|
-
...provider === "sqlite" ? [] : (next.checks ?? []).filter((check) => !previousChecks.has(check.name)).map((check) => createCheckSql(next, check)),
|
|
48
|
-
...relationMode === "foreign-keys" && provider !== "sqlite" ? (next.foreignKeys ?? []).filter((foreignKey) => !previousForeignKeys.has(foreignKey.name)).map((foreignKey) => createForeignKeySql(next, foreignKey)) : []
|
|
49
|
-
];
|
|
50
|
-
};
|
|
51
|
-
const createSchemaMigrationSql = (fromVersion, toVersion, provider, relationMode = "foreign-keys") => {
|
|
52
|
-
const fromIndex = getSchemaVersionIndex(fromVersion);
|
|
53
|
-
const toIndex = getSchemaVersionIndex(toVersion);
|
|
54
|
-
if (fromIndex === -1) throw new Error(`Unsupported Hot Updater schema version: ${fromVersion}`);
|
|
55
|
-
if (toIndex === -1) throw new Error(`Unsupported Hot Updater schema version: ${toVersion}`);
|
|
56
|
-
if (fromIndex > toIndex) throw new Error(`Cannot migrate Hot Updater schema down to ${toVersion}.`);
|
|
57
|
-
const statements = [];
|
|
58
|
-
for (let index = fromIndex + 1; index <= toIndex; index += 1) {
|
|
59
|
-
const previous = hotUpdaterSchemaVersions[index - 1];
|
|
60
|
-
const next = hotUpdaterSchemaVersions[index];
|
|
61
|
-
const previousTables = new Map(previous.tables.map((table) => [table.ormName, table]));
|
|
62
|
-
for (const table of next.tables) {
|
|
63
|
-
if (table.internal) continue;
|
|
64
|
-
const previousTable = previousTables.get(table.ormName);
|
|
65
|
-
statements.push(...previousTable ? createChangedTableSql(previousTable, table, provider, relationMode) : createAddedTableSql(table, provider, relationMode));
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
return statements;
|
|
69
|
-
};
|
|
70
|
-
const createV029AlterSql = (provider) => createSchemaMigrationSql("0.21.0", "0.29.0", provider);
|
|
71
|
-
const createV031AlterSql = (provider, relationMode = "foreign-keys") => createSchemaMigrationSql("0.29.0", "0.31.0", provider, relationMode);
|
|
72
|
-
//#endregion
|
|
73
|
-
export { createV029AlterSql, createV031AlterSql };
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
require("../_virtual/_rolldown/runtime.cjs");
|
|
2
|
-
let _hot_updater_core = require("@hot-updater/core");
|
|
3
|
-
//#region src/db/schemaEnhancements.ts
|
|
4
|
-
const normalizeNullableString = (value) => {
|
|
5
|
-
if (value === null || value === void 0) return null;
|
|
6
|
-
const normalized = value.trim();
|
|
7
|
-
return normalized.length > 0 ? normalized : null;
|
|
8
|
-
};
|
|
9
|
-
const assertBundlePersistenceConstraints = (bundle) => {
|
|
10
|
-
const targetAppVersion = normalizeNullableString(bundle.targetAppVersion);
|
|
11
|
-
const fingerprintHash = normalizeNullableString(bundle.fingerprintHash);
|
|
12
|
-
if (!targetAppVersion && !fingerprintHash) throw new Error("Bundle must define either targetAppVersion or fingerprintHash.");
|
|
13
|
-
const rolloutCohortCount = bundle.rolloutCohortCount;
|
|
14
|
-
if (rolloutCohortCount !== null && rolloutCohortCount !== void 0) {
|
|
15
|
-
if (!Number.isInteger(rolloutCohortCount) || rolloutCohortCount < 0 || rolloutCohortCount > _hot_updater_core.DEFAULT_ROLLOUT_COHORT_COUNT) throw new Error(`rolloutCohortCount must be an integer between 0 and ${_hot_updater_core.DEFAULT_ROLLOUT_COHORT_COUNT}.`);
|
|
16
|
-
}
|
|
17
|
-
for (const cohort of bundle.targetCohorts ?? []) if (!(0, _hot_updater_core.isValidCohort)(cohort)) throw new Error(`Invalid target cohort "${cohort}". ${_hot_updater_core.INVALID_COHORT_ERROR_MESSAGE}`);
|
|
18
|
-
};
|
|
19
|
-
//#endregion
|
|
20
|
-
exports.assertBundlePersistenceConstraints = assertBundlePersistenceConstraints;
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { DEFAULT_ROLLOUT_COHORT_COUNT, INVALID_COHORT_ERROR_MESSAGE, isValidCohort } from "@hot-updater/core";
|
|
2
|
-
//#region src/db/schemaEnhancements.ts
|
|
3
|
-
const normalizeNullableString = (value) => {
|
|
4
|
-
if (value === null || value === void 0) return null;
|
|
5
|
-
const normalized = value.trim();
|
|
6
|
-
return normalized.length > 0 ? normalized : null;
|
|
7
|
-
};
|
|
8
|
-
const assertBundlePersistenceConstraints = (bundle) => {
|
|
9
|
-
const targetAppVersion = normalizeNullableString(bundle.targetAppVersion);
|
|
10
|
-
const fingerprintHash = normalizeNullableString(bundle.fingerprintHash);
|
|
11
|
-
if (!targetAppVersion && !fingerprintHash) throw new Error("Bundle must define either targetAppVersion or fingerprintHash.");
|
|
12
|
-
const rolloutCohortCount = bundle.rolloutCohortCount;
|
|
13
|
-
if (rolloutCohortCount !== null && rolloutCohortCount !== void 0) {
|
|
14
|
-
if (!Number.isInteger(rolloutCohortCount) || rolloutCohortCount < 0 || rolloutCohortCount > DEFAULT_ROLLOUT_COHORT_COUNT) throw new Error(`rolloutCohortCount must be an integer between 0 and ${DEFAULT_ROLLOUT_COHORT_COUNT}.`);
|
|
15
|
-
}
|
|
16
|
-
for (const cohort of bundle.targetCohorts ?? []) if (!isValidCohort(cohort)) throw new Error(`Invalid target cohort "${cohort}". ${INVALID_COHORT_ERROR_MESSAGE}`);
|
|
17
|
-
};
|
|
18
|
-
//#endregion
|
|
19
|
-
export { assertBundlePersistenceConstraints };
|
package/dist/route.cjs
DELETED
package/dist/route.mjs
DELETED
package/dist/schema/v0_21_0.cjs
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
const require_types = require("./types.cjs");
|
|
2
|
-
const require_dsl = require("./dsl.cjs");
|
|
3
|
-
const require_settings = require("./settings.cjs");
|
|
4
|
-
//#region src/schema/v0_21_0.ts
|
|
5
|
-
const bundlesV021 = require_dsl.table("bundles", {
|
|
6
|
-
id: require_dsl.idColumn("id", "uuid"),
|
|
7
|
-
platform: require_dsl.stringColumn("platform"),
|
|
8
|
-
should_force_update: require_dsl.bool("should_force_update"),
|
|
9
|
-
enabled: require_dsl.bool("enabled"),
|
|
10
|
-
file_hash: require_dsl.stringColumn("file_hash"),
|
|
11
|
-
git_commit_hash: require_dsl.stringColumn("git_commit_hash").nullable(),
|
|
12
|
-
message: require_dsl.stringColumn("message").nullable(),
|
|
13
|
-
channel: require_dsl.stringColumn("channel").defaultTo("production"),
|
|
14
|
-
storage_uri: require_dsl.stringColumn("storage_uri"),
|
|
15
|
-
target_app_version: require_dsl.stringColumn("target_app_version").nullable(),
|
|
16
|
-
fingerprint_hash: require_dsl.stringColumn("fingerprint_hash").nullable(),
|
|
17
|
-
metadata: require_dsl.json("metadata").defaultTo({})
|
|
18
|
-
}, {
|
|
19
|
-
indexes: [
|
|
20
|
-
require_dsl.index("bundles_target_app_version_idx", ["target_app_version"]),
|
|
21
|
-
require_dsl.index("bundles_fingerprint_hash_idx", ["fingerprint_hash"]),
|
|
22
|
-
require_dsl.index("bundles_channel_idx", ["channel"]),
|
|
23
|
-
require_dsl.index("bundles_platform_idx", ["platform"], ["mongodb"])
|
|
24
|
-
],
|
|
25
|
-
checks: [require_dsl.check({
|
|
26
|
-
name: "check_version_or_fingerprint",
|
|
27
|
-
expression: "(target_app_version is not null) or (fingerprint_hash is not null)",
|
|
28
|
-
sqliteInline: true
|
|
29
|
-
})]
|
|
30
|
-
});
|
|
31
|
-
const v0_21_0 = require_dsl.schema({
|
|
32
|
-
version: "0.21.0",
|
|
33
|
-
settingsTable: require_types.HOT_UPDATER_SETTINGS_TABLE,
|
|
34
|
-
tables: [bundlesV021, require_settings.createSettingsTable("0.21.0")]
|
|
35
|
-
});
|
|
36
|
-
//#endregion
|
|
37
|
-
exports.bundlesV021 = bundlesV021;
|
|
38
|
-
exports.v0_21_0 = v0_21_0;
|
package/dist/schema/v0_21_0.mjs
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { HOT_UPDATER_SETTINGS_TABLE } from "./types.mjs";
|
|
2
|
-
import { bool, check, idColumn, index, json, schema, stringColumn, table } from "./dsl.mjs";
|
|
3
|
-
import { createSettingsTable } from "./settings.mjs";
|
|
4
|
-
//#region src/schema/v0_21_0.ts
|
|
5
|
-
const bundlesV021 = table("bundles", {
|
|
6
|
-
id: idColumn("id", "uuid"),
|
|
7
|
-
platform: stringColumn("platform"),
|
|
8
|
-
should_force_update: bool("should_force_update"),
|
|
9
|
-
enabled: bool("enabled"),
|
|
10
|
-
file_hash: stringColumn("file_hash"),
|
|
11
|
-
git_commit_hash: stringColumn("git_commit_hash").nullable(),
|
|
12
|
-
message: stringColumn("message").nullable(),
|
|
13
|
-
channel: stringColumn("channel").defaultTo("production"),
|
|
14
|
-
storage_uri: stringColumn("storage_uri"),
|
|
15
|
-
target_app_version: stringColumn("target_app_version").nullable(),
|
|
16
|
-
fingerprint_hash: stringColumn("fingerprint_hash").nullable(),
|
|
17
|
-
metadata: json("metadata").defaultTo({})
|
|
18
|
-
}, {
|
|
19
|
-
indexes: [
|
|
20
|
-
index("bundles_target_app_version_idx", ["target_app_version"]),
|
|
21
|
-
index("bundles_fingerprint_hash_idx", ["fingerprint_hash"]),
|
|
22
|
-
index("bundles_channel_idx", ["channel"]),
|
|
23
|
-
index("bundles_platform_idx", ["platform"], ["mongodb"])
|
|
24
|
-
],
|
|
25
|
-
checks: [check({
|
|
26
|
-
name: "check_version_or_fingerprint",
|
|
27
|
-
expression: "(target_app_version is not null) or (fingerprint_hash is not null)",
|
|
28
|
-
sqliteInline: true
|
|
29
|
-
})]
|
|
30
|
-
});
|
|
31
|
-
const v0_21_0 = schema({
|
|
32
|
-
version: "0.21.0",
|
|
33
|
-
settingsTable: HOT_UPDATER_SETTINGS_TABLE,
|
|
34
|
-
tables: [bundlesV021, createSettingsTable("0.21.0")]
|
|
35
|
-
});
|
|
36
|
-
//#endregion
|
|
37
|
-
export { bundlesV021, v0_21_0 };
|
package/dist/schema/v0_29_0.cjs
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
const require_types = require("./types.cjs");
|
|
2
|
-
const require_dsl = require("./dsl.cjs");
|
|
3
|
-
const require_settings = require("./settings.cjs");
|
|
4
|
-
//#region src/schema/v0_29_0.ts
|
|
5
|
-
const bundlesV029 = require_dsl.table("bundles", {
|
|
6
|
-
id: require_dsl.idColumn("id", "uuid"),
|
|
7
|
-
platform: require_dsl.stringColumn("platform"),
|
|
8
|
-
should_force_update: require_dsl.bool("should_force_update"),
|
|
9
|
-
enabled: require_dsl.bool("enabled"),
|
|
10
|
-
file_hash: require_dsl.stringColumn("file_hash"),
|
|
11
|
-
git_commit_hash: require_dsl.stringColumn("git_commit_hash").nullable(),
|
|
12
|
-
message: require_dsl.stringColumn("message").nullable(),
|
|
13
|
-
channel: require_dsl.stringColumn("channel").defaultTo("production"),
|
|
14
|
-
storage_uri: require_dsl.stringColumn("storage_uri"),
|
|
15
|
-
target_app_version: require_dsl.stringColumn("target_app_version").nullable(),
|
|
16
|
-
fingerprint_hash: require_dsl.stringColumn("fingerprint_hash").nullable(),
|
|
17
|
-
metadata: require_dsl.json("metadata").defaultTo({}),
|
|
18
|
-
rollout_cohort_count: require_dsl.integer("rollout_cohort_count").defaultTo(1e3),
|
|
19
|
-
target_cohorts: require_dsl.json("target_cohorts").nullable()
|
|
20
|
-
}, {
|
|
21
|
-
indexes: [
|
|
22
|
-
require_dsl.index("bundles_target_app_version_idx", ["target_app_version"]),
|
|
23
|
-
require_dsl.index("bundles_fingerprint_hash_idx", ["fingerprint_hash"]),
|
|
24
|
-
require_dsl.index("bundles_channel_idx", ["channel"]),
|
|
25
|
-
require_dsl.index("bundles_platform_idx", ["platform"], ["mongodb"]),
|
|
26
|
-
require_dsl.index("bundles_rollout_idx", ["rollout_cohort_count"])
|
|
27
|
-
],
|
|
28
|
-
checks: [require_dsl.check({
|
|
29
|
-
name: "check_version_or_fingerprint",
|
|
30
|
-
expression: "(target_app_version is not null) or (fingerprint_hash is not null)",
|
|
31
|
-
sqliteInline: true
|
|
32
|
-
}), require_dsl.check({
|
|
33
|
-
name: "bundles_rollout_cohort_count_check",
|
|
34
|
-
expression: "rollout_cohort_count >= 0 and rollout_cohort_count <= 1000",
|
|
35
|
-
sqliteInline: true
|
|
36
|
-
})]
|
|
37
|
-
});
|
|
38
|
-
const v0_29_0 = require_dsl.schema({
|
|
39
|
-
version: "0.29.0",
|
|
40
|
-
settingsTable: require_types.HOT_UPDATER_SETTINGS_TABLE,
|
|
41
|
-
tables: [bundlesV029, require_settings.createSettingsTable("0.29.0")]
|
|
42
|
-
});
|
|
43
|
-
//#endregion
|
|
44
|
-
exports.bundlesV029 = bundlesV029;
|
|
45
|
-
exports.v0_29_0 = v0_29_0;
|
package/dist/schema/v0_29_0.mjs
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { HOT_UPDATER_SETTINGS_TABLE } from "./types.mjs";
|
|
2
|
-
import { bool, check, idColumn, index, integer, json, schema, stringColumn, table } from "./dsl.mjs";
|
|
3
|
-
import { createSettingsTable } from "./settings.mjs";
|
|
4
|
-
//#region src/schema/v0_29_0.ts
|
|
5
|
-
const bundlesV029 = table("bundles", {
|
|
6
|
-
id: idColumn("id", "uuid"),
|
|
7
|
-
platform: stringColumn("platform"),
|
|
8
|
-
should_force_update: bool("should_force_update"),
|
|
9
|
-
enabled: bool("enabled"),
|
|
10
|
-
file_hash: stringColumn("file_hash"),
|
|
11
|
-
git_commit_hash: stringColumn("git_commit_hash").nullable(),
|
|
12
|
-
message: stringColumn("message").nullable(),
|
|
13
|
-
channel: stringColumn("channel").defaultTo("production"),
|
|
14
|
-
storage_uri: stringColumn("storage_uri"),
|
|
15
|
-
target_app_version: stringColumn("target_app_version").nullable(),
|
|
16
|
-
fingerprint_hash: stringColumn("fingerprint_hash").nullable(),
|
|
17
|
-
metadata: json("metadata").defaultTo({}),
|
|
18
|
-
rollout_cohort_count: integer("rollout_cohort_count").defaultTo(1e3),
|
|
19
|
-
target_cohorts: json("target_cohorts").nullable()
|
|
20
|
-
}, {
|
|
21
|
-
indexes: [
|
|
22
|
-
index("bundles_target_app_version_idx", ["target_app_version"]),
|
|
23
|
-
index("bundles_fingerprint_hash_idx", ["fingerprint_hash"]),
|
|
24
|
-
index("bundles_channel_idx", ["channel"]),
|
|
25
|
-
index("bundles_platform_idx", ["platform"], ["mongodb"]),
|
|
26
|
-
index("bundles_rollout_idx", ["rollout_cohort_count"])
|
|
27
|
-
],
|
|
28
|
-
checks: [check({
|
|
29
|
-
name: "check_version_or_fingerprint",
|
|
30
|
-
expression: "(target_app_version is not null) or (fingerprint_hash is not null)",
|
|
31
|
-
sqliteInline: true
|
|
32
|
-
}), check({
|
|
33
|
-
name: "bundles_rollout_cohort_count_check",
|
|
34
|
-
expression: "rollout_cohort_count >= 0 and rollout_cohort_count <= 1000",
|
|
35
|
-
sqliteInline: true
|
|
36
|
-
})]
|
|
37
|
-
});
|
|
38
|
-
const v0_29_0 = schema({
|
|
39
|
-
version: "0.29.0",
|
|
40
|
-
settingsTable: HOT_UPDATER_SETTINGS_TABLE,
|
|
41
|
-
tables: [bundlesV029, createSettingsTable("0.29.0")]
|
|
42
|
-
});
|
|
43
|
-
//#endregion
|
|
44
|
-
export { bundlesV029, v0_29_0 };
|