@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
package/src/schema/dsl.ts
DELETED
|
@@ -1,187 +0,0 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
HotUpdaterColumnSchema,
|
|
3
|
-
HotUpdaterColumnType,
|
|
4
|
-
HotUpdaterCheckSchema,
|
|
5
|
-
HotUpdaterDefault,
|
|
6
|
-
HotUpdaterForeignKeySchema,
|
|
7
|
-
HotUpdaterIndexSchema,
|
|
8
|
-
HotUpdaterRelationSchema,
|
|
9
|
-
HotUpdaterTableSchema,
|
|
10
|
-
HotUpdaterVersionedSchema,
|
|
11
|
-
} from "./types";
|
|
12
|
-
|
|
13
|
-
type DefaultValue =
|
|
14
|
-
| boolean
|
|
15
|
-
| number
|
|
16
|
-
| string
|
|
17
|
-
| Record<string, unknown>
|
|
18
|
-
| readonly unknown[];
|
|
19
|
-
|
|
20
|
-
export type HotUpdaterColumnDsl = {
|
|
21
|
-
readonly dsl: "column";
|
|
22
|
-
readonly ormName: string;
|
|
23
|
-
readonly type: HotUpdaterColumnType;
|
|
24
|
-
readonly default?: HotUpdaterDefault;
|
|
25
|
-
readonly nullableValue?: true;
|
|
26
|
-
readonly primaryKeyValue?: true;
|
|
27
|
-
readonly providerCollations?: HotUpdaterColumnSchema["providerCollations"];
|
|
28
|
-
readonly nullable: () => HotUpdaterColumnDsl;
|
|
29
|
-
readonly primaryKey: () => HotUpdaterColumnDsl;
|
|
30
|
-
readonly collate: (
|
|
31
|
-
providerCollations: NonNullable<
|
|
32
|
-
HotUpdaterColumnSchema["providerCollations"]
|
|
33
|
-
>,
|
|
34
|
-
) => HotUpdaterColumnDsl;
|
|
35
|
-
readonly defaultTo: (value: DefaultValue) => HotUpdaterColumnDsl;
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
export type HotUpdaterTableDsl = HotUpdaterTableSchema & {
|
|
39
|
-
readonly dsl: "table";
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
const withDsl = <Value extends object, Dsl extends string>(
|
|
43
|
-
value: Value,
|
|
44
|
-
dsl: Dsl,
|
|
45
|
-
): Value & { readonly dsl: Dsl } =>
|
|
46
|
-
Object.defineProperty(value, "dsl", {
|
|
47
|
-
enumerable: false,
|
|
48
|
-
value: dsl,
|
|
49
|
-
}) as Value & { readonly dsl: Dsl };
|
|
50
|
-
|
|
51
|
-
const defaultValue = (value: DefaultValue): HotUpdaterDefault =>
|
|
52
|
-
typeof value === "object"
|
|
53
|
-
? { type: "json", value }
|
|
54
|
-
: { type: "literal", value };
|
|
55
|
-
|
|
56
|
-
const columnSchema = (column: HotUpdaterColumnDsl): HotUpdaterColumnSchema => ({
|
|
57
|
-
ormName: column.ormName,
|
|
58
|
-
type: column.type,
|
|
59
|
-
...(column.providerCollations
|
|
60
|
-
? { providerCollations: column.providerCollations }
|
|
61
|
-
: {}),
|
|
62
|
-
...(column.nullableValue ? { nullable: true } : {}),
|
|
63
|
-
...(column.primaryKeyValue ? { primaryKey: true } : {}),
|
|
64
|
-
...(column.default ? { default: column.default } : {}),
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
type ColumnState = HotUpdaterColumnSchema & {
|
|
68
|
-
readonly nullableValue?: boolean;
|
|
69
|
-
readonly primaryKeyValue?: boolean;
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
const createColumn = (state: ColumnState): HotUpdaterColumnDsl => ({
|
|
73
|
-
dsl: "column",
|
|
74
|
-
ormName: state.ormName,
|
|
75
|
-
type: state.type,
|
|
76
|
-
...(state.providerCollations
|
|
77
|
-
? { providerCollations: state.providerCollations }
|
|
78
|
-
: {}),
|
|
79
|
-
...(state.nullableValue ? { nullableValue: true } : {}),
|
|
80
|
-
...(state.primaryKeyValue ? { primaryKeyValue: true } : {}),
|
|
81
|
-
...(state.default ? { default: state.default } : {}),
|
|
82
|
-
nullable: () => createColumn({ ...state, nullableValue: true }),
|
|
83
|
-
primaryKey: () => createColumn({ ...state, primaryKeyValue: true }),
|
|
84
|
-
collate: (providerCollations) =>
|
|
85
|
-
createColumn({ ...state, providerCollations }),
|
|
86
|
-
defaultTo: (value) =>
|
|
87
|
-
createColumn({ ...state, default: defaultValue(value) }),
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
export const varchar = <Length extends number>(
|
|
91
|
-
length: Length,
|
|
92
|
-
): `varchar(${Length})` => `varchar(${length})` as `varchar(${Length})`;
|
|
93
|
-
|
|
94
|
-
export const column = (
|
|
95
|
-
ormName: string,
|
|
96
|
-
type: HotUpdaterColumnType,
|
|
97
|
-
): HotUpdaterColumnDsl => createColumn({ ormName, type });
|
|
98
|
-
|
|
99
|
-
export const idColumn = (
|
|
100
|
-
ormName: string,
|
|
101
|
-
type: HotUpdaterColumnType,
|
|
102
|
-
): HotUpdaterColumnDsl => column(ormName, type).primaryKey();
|
|
103
|
-
|
|
104
|
-
export const uuid = (ormName: string): HotUpdaterColumnDsl =>
|
|
105
|
-
column(ormName, "uuid");
|
|
106
|
-
|
|
107
|
-
export const integer = (ormName: string): HotUpdaterColumnDsl =>
|
|
108
|
-
column(ormName, "integer");
|
|
109
|
-
|
|
110
|
-
export const float = (ormName: string): HotUpdaterColumnDsl =>
|
|
111
|
-
column(ormName, "float");
|
|
112
|
-
|
|
113
|
-
export const bool = (ormName: string): HotUpdaterColumnDsl =>
|
|
114
|
-
column(ormName, "bool");
|
|
115
|
-
|
|
116
|
-
export const json = (ormName: string): HotUpdaterColumnDsl =>
|
|
117
|
-
column(ormName, "json");
|
|
118
|
-
|
|
119
|
-
export const stringColumn = (ormName: string): HotUpdaterColumnDsl =>
|
|
120
|
-
column(ormName, "string");
|
|
121
|
-
|
|
122
|
-
export const largeString = (ormName: string): HotUpdaterColumnDsl =>
|
|
123
|
-
column(ormName, "large-string");
|
|
124
|
-
|
|
125
|
-
export const index = (
|
|
126
|
-
name: string,
|
|
127
|
-
columns: readonly string[],
|
|
128
|
-
providers?: HotUpdaterIndexSchema["providers"],
|
|
129
|
-
): HotUpdaterIndexSchema => ({
|
|
130
|
-
name,
|
|
131
|
-
columns,
|
|
132
|
-
...(providers ? { providers } : {}),
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
export const uniqueIndex = (
|
|
136
|
-
name: string,
|
|
137
|
-
columns: readonly string[],
|
|
138
|
-
providers?: HotUpdaterIndexSchema["providers"],
|
|
139
|
-
): HotUpdaterIndexSchema => ({
|
|
140
|
-
name,
|
|
141
|
-
columns,
|
|
142
|
-
...(providers ? { providers } : {}),
|
|
143
|
-
unique: true,
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
export const foreignKey = (
|
|
147
|
-
name: string,
|
|
148
|
-
columns: readonly string[],
|
|
149
|
-
referencedTable: string,
|
|
150
|
-
referencedColumns: readonly string[],
|
|
151
|
-
options: {
|
|
152
|
-
readonly onDelete?: HotUpdaterForeignKeySchema["onDelete"];
|
|
153
|
-
} = {},
|
|
154
|
-
): HotUpdaterForeignKeySchema => ({
|
|
155
|
-
name,
|
|
156
|
-
columns,
|
|
157
|
-
referencedTable,
|
|
158
|
-
referencedColumns,
|
|
159
|
-
onUpdate: "restrict",
|
|
160
|
-
onDelete: options.onDelete ?? "cascade",
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
export const check = (config: HotUpdaterCheckSchema): HotUpdaterCheckSchema =>
|
|
164
|
-
config;
|
|
165
|
-
|
|
166
|
-
export const relation = (
|
|
167
|
-
config: HotUpdaterRelationSchema,
|
|
168
|
-
): HotUpdaterRelationSchema => config;
|
|
169
|
-
|
|
170
|
-
export const table = (
|
|
171
|
-
ormName: string,
|
|
172
|
-
columns: Record<string, HotUpdaterColumnDsl>,
|
|
173
|
-
extras: Omit<HotUpdaterTableSchema, "columns" | "ormName"> = {},
|
|
174
|
-
): HotUpdaterTableDsl =>
|
|
175
|
-
withDsl(
|
|
176
|
-
{
|
|
177
|
-
ormName,
|
|
178
|
-
columns: Object.values(columns).map(columnSchema),
|
|
179
|
-
...extras,
|
|
180
|
-
},
|
|
181
|
-
"table",
|
|
182
|
-
);
|
|
183
|
-
|
|
184
|
-
export const schema = (
|
|
185
|
-
value: HotUpdaterVersionedSchema,
|
|
186
|
-
): HotUpdaterVersionedSchema & { readonly dsl: "schema" } =>
|
|
187
|
-
withDsl({ ...value }, "schema");
|
package/src/schema/index.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { HotUpdaterVersionedSchema } from "./types";
|
|
2
|
-
import { v1_0_0 } from "./v1_0_0";
|
|
3
|
-
|
|
4
|
-
export * from "./settings";
|
|
5
|
-
export * from "./types";
|
|
6
|
-
export * from "./v1_0_0";
|
|
7
|
-
|
|
8
|
-
export const hotUpdaterSchemaVersions: readonly HotUpdaterVersionedSchema[] = [
|
|
9
|
-
v1_0_0,
|
|
10
|
-
];
|
package/src/schema/settings.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { idColumn, stringColumn, table, varchar } from "./dsl";
|
|
2
|
-
import {
|
|
3
|
-
HOT_UPDATER_SETTINGS_TABLE,
|
|
4
|
-
type HotUpdaterSchemaVersion,
|
|
5
|
-
} from "./types";
|
|
6
|
-
|
|
7
|
-
export const createSettingsTable = (version: HotUpdaterSchemaVersion) =>
|
|
8
|
-
table(
|
|
9
|
-
HOT_UPDATER_SETTINGS_TABLE,
|
|
10
|
-
{
|
|
11
|
-
key: idColumn("key", varchar(255)),
|
|
12
|
-
value: stringColumn("value").defaultTo(version),
|
|
13
|
-
},
|
|
14
|
-
{ internal: true },
|
|
15
|
-
);
|
package/src/schema/types.ts
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import type { ORMProvider } from "../db/types";
|
|
2
|
-
|
|
3
|
-
export const HOT_UPDATER_SCHEMA_VERSION = "1.0.0";
|
|
4
|
-
export const HOT_UPDATER_CORE_SCHEMA_KEY = "schema.core";
|
|
5
|
-
export const HOT_UPDATER_SETTINGS_TABLE = "private_hot_updater_settings";
|
|
6
|
-
|
|
7
|
-
export type HotUpdaterColumnType =
|
|
8
|
-
| "bool"
|
|
9
|
-
| "float"
|
|
10
|
-
| "integer"
|
|
11
|
-
| "json"
|
|
12
|
-
| "large-string"
|
|
13
|
-
| "string"
|
|
14
|
-
| "uuid"
|
|
15
|
-
| `varchar(${number})`;
|
|
16
|
-
|
|
17
|
-
export type HotUpdaterDefault =
|
|
18
|
-
| { readonly type: "literal"; readonly value: boolean | number | string }
|
|
19
|
-
| { readonly type: "json"; readonly value: unknown };
|
|
20
|
-
|
|
21
|
-
export interface HotUpdaterColumnSchema {
|
|
22
|
-
readonly ormName: string;
|
|
23
|
-
readonly type: HotUpdaterColumnType;
|
|
24
|
-
readonly providerCollations?: Partial<Record<ORMProvider, string>>;
|
|
25
|
-
readonly nullable?: boolean;
|
|
26
|
-
readonly primaryKey?: boolean;
|
|
27
|
-
readonly default?: HotUpdaterDefault;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export interface HotUpdaterIndexSchema {
|
|
31
|
-
readonly name: string;
|
|
32
|
-
readonly columns: readonly string[];
|
|
33
|
-
readonly providers?: readonly ORMProvider[];
|
|
34
|
-
readonly unique?: true;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export interface HotUpdaterCheckSchema {
|
|
38
|
-
readonly name: string;
|
|
39
|
-
readonly expression: string;
|
|
40
|
-
readonly providerExpressions?: Partial<Record<ORMProvider, string>>;
|
|
41
|
-
readonly sqliteInline?: boolean;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export interface HotUpdaterForeignKeySchema {
|
|
45
|
-
readonly name: string;
|
|
46
|
-
readonly columns: readonly string[];
|
|
47
|
-
readonly referencedTable: string;
|
|
48
|
-
readonly referencedColumns: readonly string[];
|
|
49
|
-
readonly onUpdate: "restrict";
|
|
50
|
-
readonly onDelete: "cascade" | "restrict" | "set null";
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
export interface HotUpdaterRelationSchema {
|
|
54
|
-
readonly name: string;
|
|
55
|
-
readonly fieldName: string;
|
|
56
|
-
readonly targetFieldName: string;
|
|
57
|
-
readonly relationName: string;
|
|
58
|
-
readonly columns: readonly string[];
|
|
59
|
-
readonly referencedTable: string;
|
|
60
|
-
readonly referencedColumns: readonly string[];
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
export interface HotUpdaterTableSchema {
|
|
64
|
-
readonly ormName: string;
|
|
65
|
-
readonly columns: readonly HotUpdaterColumnSchema[];
|
|
66
|
-
readonly indexes?: readonly HotUpdaterIndexSchema[];
|
|
67
|
-
readonly checks?: readonly HotUpdaterCheckSchema[];
|
|
68
|
-
readonly foreignKeys?: readonly HotUpdaterForeignKeySchema[];
|
|
69
|
-
readonly relations?: readonly HotUpdaterRelationSchema[];
|
|
70
|
-
readonly internal?: boolean;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
export interface HotUpdaterVersionedSchema {
|
|
74
|
-
readonly version: HotUpdaterSchemaVersion;
|
|
75
|
-
readonly settingsTable: string;
|
|
76
|
-
readonly tables: readonly HotUpdaterTableSchema[];
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
export type HotUpdaterSchemaVersion = "1.0.0";
|
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
|
|
3
|
-
import { createTableSql } from "../db/schema/sql";
|
|
4
|
-
import {
|
|
5
|
-
generateDrizzleSchema,
|
|
6
|
-
generatePrismaSchema,
|
|
7
|
-
} from "../db/schemaGenerators";
|
|
8
|
-
import {
|
|
9
|
-
bundleEventsV100,
|
|
10
|
-
bundleInstallationsV100,
|
|
11
|
-
bundlePatchesV100,
|
|
12
|
-
bundlesV100,
|
|
13
|
-
releaseCatalogsV100,
|
|
14
|
-
releasesV100,
|
|
15
|
-
v1_0_0,
|
|
16
|
-
} from "./v1_0_0";
|
|
17
|
-
|
|
18
|
-
describe("v1.0.0 Release Catalog schema", () => {
|
|
19
|
-
it("adds the canonical Release and catalog access paths", () => {
|
|
20
|
-
expect(v1_0_0.tables.map(({ ormName }) => ormName)).toContain("releases");
|
|
21
|
-
expect(v1_0_0.tables.map(({ ormName }) => ormName)).toContain(
|
|
22
|
-
"release_catalogs",
|
|
23
|
-
);
|
|
24
|
-
expect(releasesV100.indexes).toContainEqual({
|
|
25
|
-
columns: ["scope_key", "id"],
|
|
26
|
-
name: "releases_scope_order_idx",
|
|
27
|
-
});
|
|
28
|
-
expect(
|
|
29
|
-
releaseCatalogsV100.columns.find(({ ormName }) => ormName === "scope_key")
|
|
30
|
-
?.primaryKey,
|
|
31
|
-
).toBe(true);
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
it("keeps only immutable artifact fields on Bundle rows", () => {
|
|
35
|
-
const fields = bundlesV100.columns.map(({ ormName }) => ormName);
|
|
36
|
-
|
|
37
|
-
expect(fields).toEqual([
|
|
38
|
-
"id",
|
|
39
|
-
"platform",
|
|
40
|
-
"file_hash",
|
|
41
|
-
"git_commit_hash",
|
|
42
|
-
"storage_uri",
|
|
43
|
-
"archive_byte_size",
|
|
44
|
-
"metadata",
|
|
45
|
-
"manifest_storage_uri",
|
|
46
|
-
"manifest_file_hash",
|
|
47
|
-
"asset_base_storage_uri",
|
|
48
|
-
]);
|
|
49
|
-
expect(fields).not.toContain("channel_id");
|
|
50
|
-
expect(fields).not.toContain("enabled");
|
|
51
|
-
expect(fields).not.toContain("target_app_version");
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
it("stores required archive and patch sizes as bounded floating columns", () => {
|
|
55
|
-
const archiveSize = bundlesV100.columns.find(
|
|
56
|
-
({ ormName }) => ormName === "archive_byte_size",
|
|
57
|
-
);
|
|
58
|
-
const patchSize = bundlePatchesV100.columns.find(
|
|
59
|
-
({ ormName }) => ormName === "byte_size",
|
|
60
|
-
);
|
|
61
|
-
const sql = createTableSql("postgresql", "foreign-keys", v1_0_0).join("\n");
|
|
62
|
-
const prisma = generatePrismaSchema("postgresql", v1_0_0);
|
|
63
|
-
const drizzle = generateDrizzleSchema("postgresql", v1_0_0);
|
|
64
|
-
|
|
65
|
-
expect(archiveSize?.type).toBe("float");
|
|
66
|
-
expect(archiveSize?.nullable).toBeUndefined();
|
|
67
|
-
expect(patchSize?.type).toBe("float");
|
|
68
|
-
expect(patchSize?.nullable).toBeUndefined();
|
|
69
|
-
expect(sql).toContain("archive_byte_size double precision not null");
|
|
70
|
-
expect(sql).toContain("byte_size double precision not null");
|
|
71
|
-
expect(sql).toContain("archive_byte_size <= 9007199254740991");
|
|
72
|
-
expect(sql).toContain("byte_size <= 9007199254740991");
|
|
73
|
-
expect(prisma).toContain("archive_byte_size Float");
|
|
74
|
-
expect(prisma).toContain("byte_size Float");
|
|
75
|
-
expect(drizzle).toContain(
|
|
76
|
-
'archive_byte_size: doublePrecision("archive_byte_size").notNull()',
|
|
77
|
-
);
|
|
78
|
-
expect(drizzle).toContain(
|
|
79
|
-
'byte_size: doublePrecision("byte_size").notNull()',
|
|
80
|
-
);
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
it("keeps nullable sources while requiring the reported target Bundle", () => {
|
|
84
|
-
for (const field of [
|
|
85
|
-
"from_release_id",
|
|
86
|
-
"to_release_id",
|
|
87
|
-
"from_bundle_id",
|
|
88
|
-
]) {
|
|
89
|
-
expect(
|
|
90
|
-
bundleEventsV100.columns.find(({ ormName }) => ormName === field)
|
|
91
|
-
?.nullable,
|
|
92
|
-
).toBe(true);
|
|
93
|
-
}
|
|
94
|
-
expect(
|
|
95
|
-
bundleEventsV100.columns.find(({ ormName }) => ormName === "to_bundle_id")
|
|
96
|
-
?.nullable,
|
|
97
|
-
).toBeUndefined();
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
it("stores one current row per installation with the required lookup indexes", () => {
|
|
101
|
-
expect(
|
|
102
|
-
bundleInstallationsV100.columns.find(
|
|
103
|
-
({ ormName }) => ormName === "install_id",
|
|
104
|
-
)?.primaryKey,
|
|
105
|
-
).toBe(true);
|
|
106
|
-
expect(bundleInstallationsV100.indexes).toEqual(
|
|
107
|
-
expect.arrayContaining([
|
|
108
|
-
{
|
|
109
|
-
columns: ["user_id", "install_id"],
|
|
110
|
-
name: "bundle_installations_user_id_idx",
|
|
111
|
-
},
|
|
112
|
-
{
|
|
113
|
-
columns: ["received_at_ms"],
|
|
114
|
-
name: "bundle_installations_received_at_idx",
|
|
115
|
-
},
|
|
116
|
-
]),
|
|
117
|
-
);
|
|
118
|
-
|
|
119
|
-
const sql = createTableSql("postgresql", "foreign-keys", v1_0_0).join("\n");
|
|
120
|
-
const prisma = generatePrismaSchema("postgresql", v1_0_0);
|
|
121
|
-
const drizzle = generateDrizzleSchema("postgresql", v1_0_0);
|
|
122
|
-
expect(sql).toContain("create table bundle_installations");
|
|
123
|
-
expect(sql).toContain(
|
|
124
|
-
'install_id varchar(255) collate "C" primary key not null',
|
|
125
|
-
);
|
|
126
|
-
expect(sql).toContain(
|
|
127
|
-
"create index bundle_installations_user_id_idx on bundle_installations(user_id, install_id)",
|
|
128
|
-
);
|
|
129
|
-
expect(sql).toContain(
|
|
130
|
-
"create index bundle_installations_received_at_idx on bundle_installations(received_at_ms)",
|
|
131
|
-
);
|
|
132
|
-
expect(sql).toContain(
|
|
133
|
-
"create index bundle_installations_bundle_idx on bundle_installations(platform, channel, to_bundle_id, received_at_ms)",
|
|
134
|
-
);
|
|
135
|
-
expect(sql).toContain(
|
|
136
|
-
"create index bundle_events_from_bundle_idx on bundle_events(type, platform, channel, from_bundle_id, received_at_ms, id)",
|
|
137
|
-
);
|
|
138
|
-
expect(prisma).toContain("initial Prisma SQL migration");
|
|
139
|
-
expect(prisma).toContain(
|
|
140
|
-
'alter table bundle_installations alter column install_id type varchar(255) collate "C"',
|
|
141
|
-
);
|
|
142
|
-
expect(prisma).toContain("model bundle_installations {");
|
|
143
|
-
expect(prisma).toContain("install_id String @db.VarChar(255) @id");
|
|
144
|
-
expect(drizzle).toContain("export const bundle_installations = pgTable(");
|
|
145
|
-
expect(drizzle).toContain(
|
|
146
|
-
'index("bundle_installations_user_id_idx").on(table.user_id, table.install_id)',
|
|
147
|
-
);
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
it("keeps identity indexes valid on MySQL and MSSQL", () => {
|
|
151
|
-
const mysql = createTableSql("mysql", "foreign-keys", v1_0_0).join("\n");
|
|
152
|
-
const mssql = createTableSql("mssql", "foreign-keys", v1_0_0).join("\n");
|
|
153
|
-
|
|
154
|
-
expect(mysql).toContain(
|
|
155
|
-
"install_id varchar(255) character set utf8mb4 collate utf8mb4_0900_bin not null",
|
|
156
|
-
);
|
|
157
|
-
expect(mysql).toContain("user_id varchar(255)");
|
|
158
|
-
expect(mssql).toContain("install_id nvarchar(255) not null");
|
|
159
|
-
expect(mssql).toContain("user_id nvarchar(255)");
|
|
160
|
-
|
|
161
|
-
for (const sql of [mysql, mssql]) {
|
|
162
|
-
expect(sql).toContain(
|
|
163
|
-
"create index bundle_events_install_idx on bundle_events(install_id, type, received_at_ms, id)",
|
|
164
|
-
);
|
|
165
|
-
expect(sql).toContain(
|
|
166
|
-
"create index bundle_installations_user_id_idx on bundle_installations(user_id, install_id)",
|
|
167
|
-
);
|
|
168
|
-
}
|
|
169
|
-
expect(mssql).not.toContain("install_id nvarchar(max)");
|
|
170
|
-
expect(mssql).not.toContain("user_id nvarchar(max)");
|
|
171
|
-
});
|
|
172
|
-
|
|
173
|
-
it("generates nullable source and artifact relations with the intended deletion rules", () => {
|
|
174
|
-
const prisma = generatePrismaSchema("postgresql", v1_0_0);
|
|
175
|
-
const drizzle = generateDrizzleSchema("postgresql", v1_0_0);
|
|
176
|
-
|
|
177
|
-
expect(prisma).toContain("model releases {");
|
|
178
|
-
expect(prisma).toContain("sourceRelease releases? @relation(");
|
|
179
|
-
expect(prisma).toContain("onDelete: SetNull");
|
|
180
|
-
expect(prisma).toContain("bundle bundles? @relation(");
|
|
181
|
-
expect(drizzle).toContain("export const release_catalogs = pgTable(");
|
|
182
|
-
expect(drizzle).toContain('index("releases_scope_order_idx")');
|
|
183
|
-
expect(drizzle).toContain("foreignColumns: [table.id]");
|
|
184
|
-
expect(drizzle).not.toContain("foreignColumns: [releases.id]");
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
it("creates both projection tables and their constraints from empty", () => {
|
|
188
|
-
const sql = createTableSql("postgresql", "foreign-keys", v1_0_0).join("\n");
|
|
189
|
-
|
|
190
|
-
expect(sql).toContain("create table releases");
|
|
191
|
-
expect(sql).toContain("create table release_catalogs");
|
|
192
|
-
expect(sql).toContain("releases_scope_order_idx");
|
|
193
|
-
expect(sql).toContain("release_catalogs_generation_check");
|
|
194
|
-
expect(sql).toContain("to_bundle_id uuid not null");
|
|
195
|
-
expect(sql).toContain("from_bundle_id is not null");
|
|
196
|
-
expect(sql).toContain("type = 'UNCHANGED' and from_bundle_id is null");
|
|
197
|
-
expect(sql).toContain("on delete set null");
|
|
198
|
-
});
|
|
199
|
-
|
|
200
|
-
it("uses byte-bounded MySQL catalog keys", () => {
|
|
201
|
-
const sql = createTableSql("mysql", "foreign-keys", v1_0_0).join("\n");
|
|
202
|
-
|
|
203
|
-
expect(sql).toContain(
|
|
204
|
-
"scope_key varchar(2048) character set ascii collate ascii_bin",
|
|
205
|
-
);
|
|
206
|
-
expect(sql).toContain(
|
|
207
|
-
"channel_key varchar(1400) character set ascii collate ascii_bin",
|
|
208
|
-
);
|
|
209
|
-
expect(sql).toContain(
|
|
210
|
-
"create index releases_scope_order_idx on releases(scope_key, id)",
|
|
211
|
-
);
|
|
212
|
-
expect(sql).toContain("payload mediumtext not null");
|
|
213
|
-
expect(generatePrismaSchema("mysql", v1_0_0)).toContain(
|
|
214
|
-
"payload String @db.MediumText",
|
|
215
|
-
);
|
|
216
|
-
expect(generateDrizzleSchema("mysql", v1_0_0)).toContain(
|
|
217
|
-
'payload: mediumtext("payload").notNull()',
|
|
218
|
-
);
|
|
219
|
-
});
|
|
220
|
-
});
|