@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,273 +0,0 @@
|
|
|
1
|
-
import "../schema/types.mjs";
|
|
2
|
-
import { getSQLProvider } from "./types.mjs";
|
|
3
|
-
import { getHotUpdaterSchemaVersion, hotUpdaterSchema, schemaIndexAppliesToProvider } from "./schema/registry.mjs";
|
|
4
|
-
import { getSqlType } from "./schema/sql.mjs";
|
|
5
|
-
import { getInsightsCollationSql } from "./schema/insightsCollation.mjs";
|
|
6
|
-
//#region src/db/schemaGenerators.ts
|
|
7
|
-
const literal = (value) => JSON.stringify(value);
|
|
8
|
-
const varcharLength = (type) => Number(type.slice(8, -1));
|
|
9
|
-
const toPascalCase = (value) => value.split("_").filter(Boolean).map((part) => `${part.charAt(0).toUpperCase()}${part.slice(1)}`).join("");
|
|
10
|
-
const prismaDb = (type, provider) => {
|
|
11
|
-
if (provider === "postgresql") {
|
|
12
|
-
if (type === "uuid") return " @db.Uuid";
|
|
13
|
-
if (type.startsWith("varchar")) return ` @db.VarChar(${varcharLength(type)})`;
|
|
14
|
-
}
|
|
15
|
-
if (provider === "mysql") {
|
|
16
|
-
if (type === "uuid") return " @db.Char(36)";
|
|
17
|
-
if (type === "large-string") return " @db.MediumText";
|
|
18
|
-
if (type.startsWith("varchar")) return ` @db.VarChar(${varcharLength(type)})`;
|
|
19
|
-
}
|
|
20
|
-
return "";
|
|
21
|
-
};
|
|
22
|
-
const prismaType = (column, provider) => {
|
|
23
|
-
return `${(() => {
|
|
24
|
-
if (column.type === "bool") return "Boolean";
|
|
25
|
-
if (column.type === "float") return "Float";
|
|
26
|
-
if (column.type === "integer") return "Int";
|
|
27
|
-
if (column.type === "json") return "Json";
|
|
28
|
-
return "String";
|
|
29
|
-
})()}${column.nullable ? "?" : ""}${prismaDb(column.type, provider)}`;
|
|
30
|
-
};
|
|
31
|
-
const prismaDefault = (column, provider) => {
|
|
32
|
-
if (!column.default) return "";
|
|
33
|
-
if (provider === "sqlite" && column.type === "json") return "";
|
|
34
|
-
if (column.default.type === "json") return ` @default(${literal(JSON.stringify(column.default.value))})`;
|
|
35
|
-
return ` @default(${JSON.stringify(column.default.value)})`;
|
|
36
|
-
};
|
|
37
|
-
const prismaField = (column, provider) => [
|
|
38
|
-
column.ormName,
|
|
39
|
-
prismaType(column, provider),
|
|
40
|
-
column.primaryKey ? "@id" : void 0,
|
|
41
|
-
prismaDefault(column, provider).trim() || void 0
|
|
42
|
-
].filter(Boolean).join(" ");
|
|
43
|
-
const relationTargetFields = (table, schema) => schema.tables.flatMap((sourceTable) => (sourceTable.relations ?? []).filter((relation) => relation.referencedTable === table.ormName).map((relation) => ({
|
|
44
|
-
relation,
|
|
45
|
-
sourceTable
|
|
46
|
-
})));
|
|
47
|
-
const prismaRelationFields = (table, schema) => {
|
|
48
|
-
const lines = relationTargetFields(table, schema).map(({ relation, sourceTable }) => `${relation.fieldName} ${sourceTable.ormName}[] @relation(${literal(relation.relationName)})`);
|
|
49
|
-
for (const relation of table.relations ?? []) {
|
|
50
|
-
const targetType = toPascalCase(relation.referencedTable);
|
|
51
|
-
const foreignKey = table.foreignKeys?.find((item) => item.referencedTable === relation.referencedTable && item.columns.join("\0") === relation.columns.join("\0") && item.referencedColumns.join("\0") === relation.referencedColumns.join("\0"));
|
|
52
|
-
if (!foreignKey) throw new Error(`Missing foreign key metadata for relation ${table.ormName}.${relation.name}`);
|
|
53
|
-
const optional = relation.columns.some((columnName) => table.columns.find(({ ormName }) => ormName === columnName)?.nullable);
|
|
54
|
-
const onDelete = foreignKey.onDelete === "cascade" ? "Cascade" : foreignKey.onDelete === "set null" ? "SetNull" : "Restrict";
|
|
55
|
-
lines.push(`${relation.targetFieldName} ${targetType === "Bundles" ? "bundles" : relation.referencedTable}${optional ? "?" : ""} @relation(${literal(relation.relationName)}, fields: [${relation.columns.join(", ")}], references: [${relation.referencedColumns.join(", ")}], onUpdate: Restrict, onDelete: ${onDelete})`);
|
|
56
|
-
}
|
|
57
|
-
return lines;
|
|
58
|
-
};
|
|
59
|
-
const prismaIndexes = (table, provider) => (table.indexes ?? []).filter((index) => schemaIndexAppliesToProvider(index, provider)).map((index) => `@@${index.unique ? "unique" : "index"}([${index.columns.join(", ")}], map: ${literal(index.name)})`);
|
|
60
|
-
const generatePrismaSchema = (provider, schema = hotUpdaterSchema) => {
|
|
61
|
-
const sqlProvider = getSQLProvider(provider);
|
|
62
|
-
const collationSql = sqlProvider ? getInsightsCollationSql(sqlProvider) : [];
|
|
63
|
-
return (collationSql.length === 0 ? "" : [
|
|
64
|
-
"// Apply these statements in the initial Prisma SQL migration to preserve exact Insights identities and cursors:",
|
|
65
|
-
...collationSql.map((statement) => `// ${statement};`),
|
|
66
|
-
""
|
|
67
|
-
].join("\n")) + schema.tables.map((table) => {
|
|
68
|
-
const lines = [
|
|
69
|
-
...table.columns.map((column) => prismaField(column, provider)),
|
|
70
|
-
...prismaRelationFields(table, schema),
|
|
71
|
-
...prismaIndexes(table, provider)
|
|
72
|
-
];
|
|
73
|
-
return `model ${table.ormName} {\n${lines.map((line) => ` ${line}`).join("\n")}\n}`;
|
|
74
|
-
}).join("\n\n");
|
|
75
|
-
};
|
|
76
|
-
const drizzleImportSource = (provider) => provider === "sqlite" ? "drizzle-orm/sqlite-core" : provider === "mysql" ? "drizzle-orm/mysql-core" : "drizzle-orm/pg-core";
|
|
77
|
-
const drizzleTableFn = (provider) => provider === "sqlite" ? "sqliteTable" : provider === "mysql" ? "mysqlTable" : "pgTable";
|
|
78
|
-
const drizzleColumnFn = (column, provider) => {
|
|
79
|
-
const collation = column.providerCollations?.[provider];
|
|
80
|
-
if (collation !== void 0) {
|
|
81
|
-
const charset = provider === "mysql" ? ` character set ${collation === "ascii_bin" ? "ascii" : "utf8mb4"}` : "";
|
|
82
|
-
const dataType = `${getSqlType(column.type, provider)}${charset} collate ${collation}`;
|
|
83
|
-
return {
|
|
84
|
-
code: `customType<{ data: string }>({ dataType: () => ${literal(dataType)} })(${literal(column.ormName)})`,
|
|
85
|
-
imports: ["customType"]
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
if (provider === "sqlite") {
|
|
89
|
-
if (column.type === "bool") return {
|
|
90
|
-
code: `integer(${literal(column.ormName)}, { mode: "boolean" })`,
|
|
91
|
-
imports: ["integer"]
|
|
92
|
-
};
|
|
93
|
-
if (column.type === "integer") return {
|
|
94
|
-
code: `integer(${literal(column.ormName)})`,
|
|
95
|
-
imports: ["integer"]
|
|
96
|
-
};
|
|
97
|
-
if (column.type === "float") return {
|
|
98
|
-
code: `real(${literal(column.ormName)})`,
|
|
99
|
-
imports: ["real"]
|
|
100
|
-
};
|
|
101
|
-
if (column.type === "json") return {
|
|
102
|
-
code: `blob(${literal(column.ormName)}, { mode: "json" })`,
|
|
103
|
-
imports: ["blob"]
|
|
104
|
-
};
|
|
105
|
-
if (column.type.startsWith("varchar")) return {
|
|
106
|
-
code: `text(${literal(column.ormName)}, { length: ${varcharLength(column.type)} })`,
|
|
107
|
-
imports: ["text"]
|
|
108
|
-
};
|
|
109
|
-
return {
|
|
110
|
-
code: `text(${literal(column.ormName)})`,
|
|
111
|
-
imports: ["text"]
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
if (provider === "mysql") {
|
|
115
|
-
if (column.type === "uuid") return {
|
|
116
|
-
code: `char(${literal(column.ormName)}, { length: 36 })`,
|
|
117
|
-
imports: ["char"]
|
|
118
|
-
};
|
|
119
|
-
if (column.type === "bool") return {
|
|
120
|
-
code: `boolean(${literal(column.ormName)})`,
|
|
121
|
-
imports: ["boolean"]
|
|
122
|
-
};
|
|
123
|
-
if (column.type === "integer") return {
|
|
124
|
-
code: `int(${literal(column.ormName)})`,
|
|
125
|
-
imports: ["int"]
|
|
126
|
-
};
|
|
127
|
-
if (column.type === "float") return {
|
|
128
|
-
code: `double(${literal(column.ormName)})`,
|
|
129
|
-
imports: ["double"]
|
|
130
|
-
};
|
|
131
|
-
if (column.type === "json") return {
|
|
132
|
-
code: `json(${literal(column.ormName)})`,
|
|
133
|
-
imports: ["json"]
|
|
134
|
-
};
|
|
135
|
-
if (column.type === "large-string") return {
|
|
136
|
-
code: `mediumtext(${literal(column.ormName)})`,
|
|
137
|
-
imports: ["mediumtext"]
|
|
138
|
-
};
|
|
139
|
-
if (column.type.startsWith("varchar")) return {
|
|
140
|
-
code: `varchar(${literal(column.ormName)}, { length: ${varcharLength(column.type)} })`,
|
|
141
|
-
imports: ["varchar"]
|
|
142
|
-
};
|
|
143
|
-
return {
|
|
144
|
-
code: `text(${literal(column.ormName)})`,
|
|
145
|
-
imports: ["text"]
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
|
-
if (column.type === "uuid") return {
|
|
149
|
-
code: `uuid(${literal(column.ormName)})`,
|
|
150
|
-
imports: ["uuid"]
|
|
151
|
-
};
|
|
152
|
-
if (column.type === "bool") return {
|
|
153
|
-
code: `boolean(${literal(column.ormName)})`,
|
|
154
|
-
imports: ["boolean"]
|
|
155
|
-
};
|
|
156
|
-
if (column.type === "integer") return {
|
|
157
|
-
code: `integer(${literal(column.ormName)})`,
|
|
158
|
-
imports: ["integer"]
|
|
159
|
-
};
|
|
160
|
-
if (column.type === "float") return {
|
|
161
|
-
code: `doublePrecision(${literal(column.ormName)})`,
|
|
162
|
-
imports: ["doublePrecision"]
|
|
163
|
-
};
|
|
164
|
-
if (column.type === "json") return {
|
|
165
|
-
code: `json(${literal(column.ormName)})`,
|
|
166
|
-
imports: ["json"]
|
|
167
|
-
};
|
|
168
|
-
if (column.type.startsWith("varchar")) return {
|
|
169
|
-
code: `varchar(${literal(column.ormName)}, { length: ${varcharLength(column.type)} })`,
|
|
170
|
-
imports: ["varchar"]
|
|
171
|
-
};
|
|
172
|
-
return {
|
|
173
|
-
code: `text(${literal(column.ormName)})`,
|
|
174
|
-
imports: ["text"]
|
|
175
|
-
};
|
|
176
|
-
};
|
|
177
|
-
const drizzleDefault = (value) => {
|
|
178
|
-
if (!value) return "";
|
|
179
|
-
if (value.type === "json") return `.default(${JSON.stringify(value.value)})`;
|
|
180
|
-
return `.default(${JSON.stringify(value.value)})`;
|
|
181
|
-
};
|
|
182
|
-
const drizzleColumn = (table, column) => {
|
|
183
|
-
if (table.ormName !== "private_hot_updater_settings") return column;
|
|
184
|
-
if (column.ormName === "key") return {
|
|
185
|
-
...column,
|
|
186
|
-
ormName: "id",
|
|
187
|
-
type: "varchar(255)"
|
|
188
|
-
};
|
|
189
|
-
if (column.ormName === "value") return {
|
|
190
|
-
...column,
|
|
191
|
-
ormName: "version",
|
|
192
|
-
type: "varchar(255)"
|
|
193
|
-
};
|
|
194
|
-
return column;
|
|
195
|
-
};
|
|
196
|
-
const drizzleTable = (table, provider, imports) => {
|
|
197
|
-
const columns = table.columns.map((sourceColumn) => {
|
|
198
|
-
const column = drizzleColumn(table, sourceColumn);
|
|
199
|
-
const type = drizzleColumnFn(column, provider);
|
|
200
|
-
for (const item of type.imports) imports.add(item);
|
|
201
|
-
const chain = [
|
|
202
|
-
type.code,
|
|
203
|
-
column.primaryKey ? "primaryKey()" : void 0,
|
|
204
|
-
column.nullable ? void 0 : "notNull()",
|
|
205
|
-
drizzleDefault(column.default).slice(1) || void 0
|
|
206
|
-
].filter(Boolean);
|
|
207
|
-
return ` ${column.ormName}: ${chain.join(".")}`;
|
|
208
|
-
});
|
|
209
|
-
const callbacks = [];
|
|
210
|
-
for (const foreignKey of table.foreignKeys ?? []) {
|
|
211
|
-
imports.add("foreignKey");
|
|
212
|
-
const referencedTable = foreignKey.referencedTable === table.ormName ? "table" : foreignKey.referencedTable;
|
|
213
|
-
callbacks.push(`foreignKey({
|
|
214
|
-
columns: [table.${foreignKey.columns.join(", table.")}],
|
|
215
|
-
foreignColumns: [${referencedTable}.${foreignKey.referencedColumns.join(`, ${referencedTable}.`)}],
|
|
216
|
-
name: ${literal(foreignKey.name)}
|
|
217
|
-
}).onUpdate(${literal(foreignKey.onUpdate)}).onDelete(${literal(foreignKey.onDelete)})`);
|
|
218
|
-
}
|
|
219
|
-
for (const index of (table.indexes ?? []).filter((item) => schemaIndexAppliesToProvider(item, provider))) {
|
|
220
|
-
const indexFunction = index.unique ? "uniqueIndex" : "index";
|
|
221
|
-
imports.add(indexFunction);
|
|
222
|
-
callbacks.push(`${indexFunction}(${literal(index.name)}).on(${index.columns.map((column) => `table.${column}`).join(", ")})`);
|
|
223
|
-
}
|
|
224
|
-
const args = [
|
|
225
|
-
literal(table.ormName),
|
|
226
|
-
`{\n${columns.join(",\n")}\n}`,
|
|
227
|
-
callbacks.length > 0 ? `(table) => [\n${callbacks.map((line) => ` ${line}`).join(",\n")}\n]` : void 0
|
|
228
|
-
].filter(Boolean);
|
|
229
|
-
return `export const ${table.ormName} = ${drizzleTableFn(provider)}(${args.join(", ")})`;
|
|
230
|
-
};
|
|
231
|
-
const drizzleRelations = (table, schema) => {
|
|
232
|
-
const sourceRelations = table.relations ?? [];
|
|
233
|
-
const targetRelations = relationTargetFields(table, schema);
|
|
234
|
-
if (sourceRelations.length === 0 && targetRelations.length === 0) return;
|
|
235
|
-
const lines = sourceRelations.map((relation) => ` ${relation.targetFieldName}: one(${relation.referencedTable}, {
|
|
236
|
-
relationName: ${literal(relation.relationName)},
|
|
237
|
-
fields: [${relation.columns.map((column) => `${table.ormName}.${column}`).join(", ")}],
|
|
238
|
-
references: [${relation.referencedColumns.map((column) => `${relation.referencedTable}.${column}`).join(", ")}]
|
|
239
|
-
})`);
|
|
240
|
-
lines.push(...targetRelations.map(({ relation, sourceTable }) => ` ${relation.fieldName}: many(${sourceTable.ormName}, {
|
|
241
|
-
relationName: ${literal(relation.relationName)}
|
|
242
|
-
})`));
|
|
243
|
-
const callbacks = [...sourceRelations.length > 0 ? ["one"] : [], ...targetRelations.length > 0 ? ["many"] : []];
|
|
244
|
-
return `export const ${table.ormName}Relations = relations(${table.ormName}, ({ ${callbacks.join(", ")} }) => ({
|
|
245
|
-
${lines.join(",\n")}
|
|
246
|
-
}))`;
|
|
247
|
-
};
|
|
248
|
-
const generateDrizzleSchema = (provider, schema = hotUpdaterSchema) => {
|
|
249
|
-
const imports = /* @__PURE__ */ new Set([drizzleTableFn(provider)]);
|
|
250
|
-
const body = [];
|
|
251
|
-
for (const table of schema.tables) {
|
|
252
|
-
body.push(drizzleTable(table, provider, imports));
|
|
253
|
-
const relations = drizzleRelations(table, schema);
|
|
254
|
-
if (relations) body.push(relations);
|
|
255
|
-
}
|
|
256
|
-
if (body.some((block) => block.includes("relations("))) body.unshift("import { relations } from \"drizzle-orm\"");
|
|
257
|
-
return [`import { ${Array.from(imports).sort().join(", ")} } from "${drizzleImportSource(provider)}"`, ...body].join("\n\n");
|
|
258
|
-
};
|
|
259
|
-
const generateSchemaFromHotUpdaterSchema = (adapterName, provider, version, fallback) => {
|
|
260
|
-
const schema = version === "latest" ? hotUpdaterSchema : getHotUpdaterSchemaVersion(version);
|
|
261
|
-
if (adapterName === "prisma" && provider) return {
|
|
262
|
-
...fallback,
|
|
263
|
-
code: generatePrismaSchema(provider, schema)
|
|
264
|
-
};
|
|
265
|
-
const sqlProvider = getSQLProvider(provider);
|
|
266
|
-
if (adapterName === "drizzle" && sqlProvider) return {
|
|
267
|
-
...fallback,
|
|
268
|
-
code: generateDrizzleSchema(sqlProvider, schema)
|
|
269
|
-
};
|
|
270
|
-
return fallback;
|
|
271
|
-
};
|
|
272
|
-
//#endregion
|
|
273
|
-
export { generateDrizzleSchema, generatePrismaSchema, generateSchemaFromHotUpdaterSchema };
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
require("../schema/types.cjs");
|
|
2
|
-
const require_fixedMigratorShared = require("./fixedMigratorShared.cjs");
|
|
3
|
-
//#region src/db/schemaReadiness.ts
|
|
4
|
-
var HotUpdaterSchemaMigrationRequiredError = class extends Error {
|
|
5
|
-
adapterName;
|
|
6
|
-
currentVersion;
|
|
7
|
-
constructor(adapterName, currentVersion) {
|
|
8
|
-
super(currentVersion === void 0 ? `Hot Updater database schema is not initialized for ${adapterName}. Run \`hot-updater db migrate\` before using this adapter.` : require_fixedMigratorShared.unsupportedSchemaUpgradeMessage(currentVersion));
|
|
9
|
-
this.adapterName = adapterName;
|
|
10
|
-
this.currentVersion = currentVersion;
|
|
11
|
-
this.name = "HotUpdaterSchemaMigrationRequiredError";
|
|
12
|
-
}
|
|
13
|
-
};
|
|
14
|
-
const createSchemaReadinessChecker = (adapterName, createMigrator) => {
|
|
15
|
-
if (!createMigrator) return async () => {};
|
|
16
|
-
let ready = false;
|
|
17
|
-
return async () => {
|
|
18
|
-
if (ready) return;
|
|
19
|
-
const version = await createMigrator().getVersion();
|
|
20
|
-
if (version !== "1.0.0") throw new HotUpdaterSchemaMigrationRequiredError(adapterName, version);
|
|
21
|
-
ready = true;
|
|
22
|
-
};
|
|
23
|
-
};
|
|
24
|
-
//#endregion
|
|
25
|
-
exports.HotUpdaterSchemaMigrationRequiredError = HotUpdaterSchemaMigrationRequiredError;
|
|
26
|
-
exports.createSchemaReadinessChecker = createSchemaReadinessChecker;
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import "./types.cjs";
|
|
2
|
-
//#region src/db/schemaReadiness.d.ts
|
|
3
|
-
declare class HotUpdaterSchemaMigrationRequiredError extends Error {
|
|
4
|
-
readonly adapterName: string;
|
|
5
|
-
readonly currentVersion: string | undefined;
|
|
6
|
-
constructor(adapterName: string, currentVersion: string | undefined);
|
|
7
|
-
}
|
|
8
|
-
//#endregion
|
|
9
|
-
export { HotUpdaterSchemaMigrationRequiredError };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import "./types.mjs";
|
|
2
|
-
//#region src/db/schemaReadiness.d.ts
|
|
3
|
-
declare class HotUpdaterSchemaMigrationRequiredError extends Error {
|
|
4
|
-
readonly adapterName: string;
|
|
5
|
-
readonly currentVersion: string | undefined;
|
|
6
|
-
constructor(adapterName: string, currentVersion: string | undefined);
|
|
7
|
-
}
|
|
8
|
-
//#endregion
|
|
9
|
-
export { HotUpdaterSchemaMigrationRequiredError };
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import "../schema/types.mjs";
|
|
2
|
-
import { unsupportedSchemaUpgradeMessage } from "./fixedMigratorShared.mjs";
|
|
3
|
-
//#region src/db/schemaReadiness.ts
|
|
4
|
-
var HotUpdaterSchemaMigrationRequiredError = class extends Error {
|
|
5
|
-
adapterName;
|
|
6
|
-
currentVersion;
|
|
7
|
-
constructor(adapterName, currentVersion) {
|
|
8
|
-
super(currentVersion === void 0 ? `Hot Updater database schema is not initialized for ${adapterName}. Run \`hot-updater db migrate\` before using this adapter.` : unsupportedSchemaUpgradeMessage(currentVersion));
|
|
9
|
-
this.adapterName = adapterName;
|
|
10
|
-
this.currentVersion = currentVersion;
|
|
11
|
-
this.name = "HotUpdaterSchemaMigrationRequiredError";
|
|
12
|
-
}
|
|
13
|
-
};
|
|
14
|
-
const createSchemaReadinessChecker = (adapterName, createMigrator) => {
|
|
15
|
-
if (!createMigrator) return async () => {};
|
|
16
|
-
let ready = false;
|
|
17
|
-
return async () => {
|
|
18
|
-
if (ready) return;
|
|
19
|
-
const version = await createMigrator().getVersion();
|
|
20
|
-
if (version !== "1.0.0") throw new HotUpdaterSchemaMigrationRequiredError(adapterName, version);
|
|
21
|
-
ready = true;
|
|
22
|
-
};
|
|
23
|
-
};
|
|
24
|
-
//#endregion
|
|
25
|
-
export { HotUpdaterSchemaMigrationRequiredError, createSchemaReadinessChecker };
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
let kysely = require("kysely");
|
|
2
|
-
//#region src/db/sqlMigrationExecution.ts
|
|
3
|
-
var SqliteMigrationForeignKeyError = class extends Error {
|
|
4
|
-
violations;
|
|
5
|
-
name = "SqliteMigrationForeignKeyError";
|
|
6
|
-
constructor(violations) {
|
|
7
|
-
super(`SQLite migration produced ${violations} foreign key violation(s).`);
|
|
8
|
-
this.violations = violations;
|
|
9
|
-
}
|
|
10
|
-
};
|
|
11
|
-
const executeTransactionalStatements = async (db, statements) => {
|
|
12
|
-
await db.getExecutor().provideConnection(async (connection) => {
|
|
13
|
-
const execute = (statement) => connection.executeQuery(kysely.sql.raw(statement).compile(db));
|
|
14
|
-
await execute("begin");
|
|
15
|
-
try {
|
|
16
|
-
for (const statement of statements) await execute(statement);
|
|
17
|
-
await execute("commit");
|
|
18
|
-
} catch (error) {
|
|
19
|
-
await execute("rollback");
|
|
20
|
-
throw error;
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
};
|
|
24
|
-
const executeSqliteStatements = async (db, statements) => {
|
|
25
|
-
await db.getExecutor().provideConnection(async (connection) => {
|
|
26
|
-
const execute = (statement) => connection.executeQuery(kysely.sql.raw(statement).compile(db));
|
|
27
|
-
const state = (await execute("pragma foreign_keys")).rows[0];
|
|
28
|
-
const foreignKeysWereEnabled = typeof state === "object" && state !== null && "foreign_keys" in state && state.foreign_keys === 1;
|
|
29
|
-
await execute("pragma foreign_keys = off");
|
|
30
|
-
try {
|
|
31
|
-
await execute("begin");
|
|
32
|
-
try {
|
|
33
|
-
for (const statement of statements) {
|
|
34
|
-
if (statement === "pragma foreign_keys = off" || statement === "pragma foreign_keys = on") continue;
|
|
35
|
-
if (statement === "pragma foreign_key_check") {
|
|
36
|
-
const result = await execute(statement);
|
|
37
|
-
if (result.rows.length > 0) throw new SqliteMigrationForeignKeyError(result.rows.length);
|
|
38
|
-
continue;
|
|
39
|
-
}
|
|
40
|
-
await execute(statement);
|
|
41
|
-
}
|
|
42
|
-
await execute("commit");
|
|
43
|
-
} catch (error) {
|
|
44
|
-
await execute("rollback");
|
|
45
|
-
throw error;
|
|
46
|
-
}
|
|
47
|
-
} finally {
|
|
48
|
-
await execute(foreignKeysWereEnabled ? "pragma foreign_keys = on" : "pragma foreign_keys = off");
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
};
|
|
52
|
-
const executeMysqlStatements = async (db, statements) => {
|
|
53
|
-
for (const statement of statements) await kysely.sql.raw(statement).execute(db);
|
|
54
|
-
};
|
|
55
|
-
const executeMigrationStatements = async ({ db, provider, statements }) => {
|
|
56
|
-
if (provider === "mysql") {
|
|
57
|
-
await executeMysqlStatements(db, statements);
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
if (provider === "sqlite") {
|
|
61
|
-
await executeSqliteStatements(db, statements);
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
await executeTransactionalStatements(db, statements);
|
|
65
|
-
};
|
|
66
|
-
//#endregion
|
|
67
|
-
exports.executeMigrationStatements = executeMigrationStatements;
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { sql } from "kysely";
|
|
2
|
-
//#region src/db/sqlMigrationExecution.ts
|
|
3
|
-
var SqliteMigrationForeignKeyError = class extends Error {
|
|
4
|
-
violations;
|
|
5
|
-
name = "SqliteMigrationForeignKeyError";
|
|
6
|
-
constructor(violations) {
|
|
7
|
-
super(`SQLite migration produced ${violations} foreign key violation(s).`);
|
|
8
|
-
this.violations = violations;
|
|
9
|
-
}
|
|
10
|
-
};
|
|
11
|
-
const executeTransactionalStatements = async (db, statements) => {
|
|
12
|
-
await db.getExecutor().provideConnection(async (connection) => {
|
|
13
|
-
const execute = (statement) => connection.executeQuery(sql.raw(statement).compile(db));
|
|
14
|
-
await execute("begin");
|
|
15
|
-
try {
|
|
16
|
-
for (const statement of statements) await execute(statement);
|
|
17
|
-
await execute("commit");
|
|
18
|
-
} catch (error) {
|
|
19
|
-
await execute("rollback");
|
|
20
|
-
throw error;
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
};
|
|
24
|
-
const executeSqliteStatements = async (db, statements) => {
|
|
25
|
-
await db.getExecutor().provideConnection(async (connection) => {
|
|
26
|
-
const execute = (statement) => connection.executeQuery(sql.raw(statement).compile(db));
|
|
27
|
-
const state = (await execute("pragma foreign_keys")).rows[0];
|
|
28
|
-
const foreignKeysWereEnabled = typeof state === "object" && state !== null && "foreign_keys" in state && state.foreign_keys === 1;
|
|
29
|
-
await execute("pragma foreign_keys = off");
|
|
30
|
-
try {
|
|
31
|
-
await execute("begin");
|
|
32
|
-
try {
|
|
33
|
-
for (const statement of statements) {
|
|
34
|
-
if (statement === "pragma foreign_keys = off" || statement === "pragma foreign_keys = on") continue;
|
|
35
|
-
if (statement === "pragma foreign_key_check") {
|
|
36
|
-
const result = await execute(statement);
|
|
37
|
-
if (result.rows.length > 0) throw new SqliteMigrationForeignKeyError(result.rows.length);
|
|
38
|
-
continue;
|
|
39
|
-
}
|
|
40
|
-
await execute(statement);
|
|
41
|
-
}
|
|
42
|
-
await execute("commit");
|
|
43
|
-
} catch (error) {
|
|
44
|
-
await execute("rollback");
|
|
45
|
-
throw error;
|
|
46
|
-
}
|
|
47
|
-
} finally {
|
|
48
|
-
await execute(foreignKeysWereEnabled ? "pragma foreign_keys = on" : "pragma foreign_keys = off");
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
};
|
|
52
|
-
const executeMysqlStatements = async (db, statements) => {
|
|
53
|
-
for (const statement of statements) await sql.raw(statement).execute(db);
|
|
54
|
-
};
|
|
55
|
-
const executeMigrationStatements = async ({ db, provider, statements }) => {
|
|
56
|
-
if (provider === "mysql") {
|
|
57
|
-
await executeMysqlStatements(db, statements);
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
if (provider === "sqlite") {
|
|
61
|
-
await executeSqliteStatements(db, statements);
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
await executeTransactionalStatements(db, statements);
|
|
65
|
-
};
|
|
66
|
-
//#endregion
|
|
67
|
-
export { executeMigrationStatements };
|
package/dist/db/types.cjs
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
//#region src/db/types.ts
|
|
2
|
-
const sqlProviders = [
|
|
3
|
-
"sqlite",
|
|
4
|
-
"cockroachdb",
|
|
5
|
-
"mysql",
|
|
6
|
-
"postgresql",
|
|
7
|
-
"mssql"
|
|
8
|
-
];
|
|
9
|
-
const noSqlProviders = ["mongodb"];
|
|
10
|
-
[...sqlProviders, ...noSqlProviders];
|
|
11
|
-
function isDatabasePlugin(plugin) {
|
|
12
|
-
return typeof plugin === "object" && plugin !== null && "name" in plugin && typeof plugin.name === "string" && "models" in plugin && typeof plugin.models === "object" && plugin.models !== null && "bundles" in plugin.models && typeof plugin.models.bundles === "object" && plugin.models.bundles !== null && "findById" in plugin.models.bundles && typeof plugin.models.bundles.findById === "function" && "findMany" in plugin.models.bundles && typeof plugin.models.bundles.findMany === "function" && "count" in plugin.models.bundles && typeof plugin.models.bundles.count === "function" && "bundlePatches" in plugin.models && typeof plugin.models.bundlePatches === "object" && plugin.models.bundlePatches !== null && "findByBundleIds" in plugin.models.bundlePatches && typeof plugin.models.bundlePatches.findByBundleIds === "function" && "channels" in plugin.models && typeof plugin.models.channels === "object" && plugin.models.channels !== null && "insert" in plugin.models.channels && typeof plugin.models.channels.insert === "function" && "list" in plugin.models.channels && typeof plugin.models.channels.list === "function" && "delete" in plugin.models.channels && typeof plugin.models.channels.delete === "function" && "insights" in plugin.models && typeof plugin.models.insights === "object" && plugin.models.insights !== null && "record" in plugin.models.insights && typeof plugin.models.insights.record === "function" && "listEvents" in plugin.models.insights && typeof plugin.models.insights.listEvents === "function" && "findInstallations" in plugin.models.insights && typeof plugin.models.insights.findInstallations === "function" && "countEvents" in plugin.models.insights && typeof plugin.models.insights.countEvents === "function" && "countInstallations" in plugin.models.insights && typeof plugin.models.insights.countInstallations === "function" && "apiKeys" in plugin.models && typeof plugin.models.apiKeys === "object" && plugin.models.apiKeys !== null && "create" in plugin.models.apiKeys && typeof plugin.models.apiKeys.create === "function" && "findByHash" in plugin.models.apiKeys && typeof plugin.models.apiKeys.findByHash === "function" && "list" in plugin.models.apiKeys && typeof plugin.models.apiKeys.list === "function" && "revoke" in plugin.models.apiKeys && typeof plugin.models.apiKeys.revoke === "function" && "commit" in plugin && typeof plugin.commit === "function" && (!("dispose" in plugin) || plugin.dispose === void 0 || typeof plugin.dispose === "function");
|
|
13
|
-
}
|
|
14
|
-
function getSQLProvider(provider) {
|
|
15
|
-
if (!provider) return;
|
|
16
|
-
return sqlProviders.includes(provider) ? provider : void 0;
|
|
17
|
-
}
|
|
18
|
-
//#endregion
|
|
19
|
-
exports.getSQLProvider = getSQLProvider;
|
|
20
|
-
exports.isDatabasePlugin = isDatabasePlugin;
|
|
21
|
-
exports.noSqlProviders = noSqlProviders;
|
|
22
|
-
exports.sqlProviders = sqlProviders;
|
package/dist/db/types.d.cts
DELETED
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { ReleaseCatalogRequest } from "./releaseCatalog.cjs";
|
|
2
|
-
import { PaginatedResult } from "../types/index.cjs";
|
|
3
|
-
import { ArtifactInfo, Bundle } from "@hot-updater/core";
|
|
4
|
-
import { ChannelDeleteInput, ChannelDeleteResult, ChannelInsertInput, ChannelInsertResult, ChannelRow, DatabaseCommit, DatabaseCommitResult, DatabasePlugin, ReleaseCatalogMutationPreflight, ReleaseCatalogMutationResult, ReleaseCatalogRebuildResult, ReleaseCatalogRow, ReleasePolicyPatch, ReleaseRow } from "@hot-updater/plugin-core";
|
|
5
|
-
//#region src/db/types.d.ts
|
|
6
|
-
declare const sqlProviders: readonly ["sqlite", "cockroachdb", "mysql", "postgresql", "mssql"];
|
|
7
|
-
declare const providers: readonly ["sqlite", "cockroachdb", "mysql", "postgresql", "mssql", "mongodb"];
|
|
8
|
-
type ORMProvider = (typeof providers)[number];
|
|
9
|
-
type ORMSQLProvider = (typeof sqlProviders)[number];
|
|
10
|
-
type RelationMode = "foreign-keys" | "fumadb";
|
|
11
|
-
interface MigrateOptions {
|
|
12
|
-
mode?: "from-schema" | "from-database";
|
|
13
|
-
updateSettings?: boolean;
|
|
14
|
-
unsafe?: boolean;
|
|
15
|
-
}
|
|
16
|
-
type MigrationOperation = {
|
|
17
|
-
type: "create-table";
|
|
18
|
-
value: {
|
|
19
|
-
ormName: string;
|
|
20
|
-
columns: Record<string, {
|
|
21
|
-
ormName: string;
|
|
22
|
-
type: string;
|
|
23
|
-
}>;
|
|
24
|
-
};
|
|
25
|
-
} | {
|
|
26
|
-
type: "custom";
|
|
27
|
-
description: string;
|
|
28
|
-
} | {
|
|
29
|
-
type: "custom";
|
|
30
|
-
sql: string;
|
|
31
|
-
} | {
|
|
32
|
-
type: "custom";
|
|
33
|
-
key: string;
|
|
34
|
-
value: unknown;
|
|
35
|
-
};
|
|
36
|
-
interface MigrationResult {
|
|
37
|
-
operations: MigrationOperation[];
|
|
38
|
-
execute: () => Promise<void>;
|
|
39
|
-
getSQL?: () => string;
|
|
40
|
-
}
|
|
41
|
-
interface Migrator {
|
|
42
|
-
getVersion: () => Promise<string | undefined>;
|
|
43
|
-
getNameVariants: () => Promise<unknown>;
|
|
44
|
-
next: () => Promise<{
|
|
45
|
-
version: string;
|
|
46
|
-
} | undefined>;
|
|
47
|
-
previous: () => Promise<{
|
|
48
|
-
version: string;
|
|
49
|
-
} | undefined>;
|
|
50
|
-
up: (options?: MigrateOptions) => Promise<MigrationResult>;
|
|
51
|
-
down: (options?: MigrateOptions) => Promise<MigrationResult>;
|
|
52
|
-
migrateTo: (version: string, options?: MigrateOptions) => Promise<MigrationResult>;
|
|
53
|
-
migrateToLatest: (options?: MigrateOptions) => Promise<MigrationResult>;
|
|
54
|
-
}
|
|
55
|
-
type SchemaGenerator = (version: string | "latest", name?: string) => {
|
|
56
|
-
code: string;
|
|
57
|
-
path: string;
|
|
58
|
-
};
|
|
59
|
-
interface DatabaseAdapterCapabilities {
|
|
60
|
-
adapterName?: string;
|
|
61
|
-
provider?: ORMProvider;
|
|
62
|
-
createMigrator?: () => Migrator;
|
|
63
|
-
generateSchema?: SchemaGenerator;
|
|
64
|
-
}
|
|
65
|
-
type DatabaseAdapterWithCapabilities = DatabasePlugin & DatabaseAdapterCapabilities;
|
|
66
|
-
type DatabasePlugin$1 = DatabaseAdapterWithCapabilities;
|
|
67
|
-
interface DatabaseAPI {
|
|
68
|
-
getBundleById(id: string): Promise<Bundle | null>;
|
|
69
|
-
getReleaseCatalog(input: ReleaseCatalogRequest): Promise<import("@hot-updater/core").ReleaseCatalog | null>;
|
|
70
|
-
getArtifactInfo(targetBundleId: string, currentBundleId: string): Promise<ArtifactInfo | null>;
|
|
71
|
-
getReleaseById(id: string): Promise<ReleaseRow | null>;
|
|
72
|
-
getReleasesByScope(input: {
|
|
73
|
-
readonly scopeKey: string;
|
|
74
|
-
readonly afterReleaseId?: string;
|
|
75
|
-
readonly limit: number;
|
|
76
|
-
}): Promise<readonly ReleaseRow[]>;
|
|
77
|
-
getReleases(input: {
|
|
78
|
-
readonly afterReleaseId?: string;
|
|
79
|
-
readonly beforeReleaseId?: string;
|
|
80
|
-
readonly bundleId?: string;
|
|
81
|
-
readonly channelId?: string;
|
|
82
|
-
readonly enabled?: boolean;
|
|
83
|
-
readonly platform?: "ios" | "android";
|
|
84
|
-
readonly targetAppVersion?: string;
|
|
85
|
-
readonly limit: number;
|
|
86
|
-
}): Promise<readonly ReleaseRow[]>;
|
|
87
|
-
getReleaseCatalogByScopeKey(scopeKey: string): Promise<ReleaseCatalogRow | null>;
|
|
88
|
-
getReleaseCatalogs(input: {
|
|
89
|
-
readonly afterScopeKey?: string;
|
|
90
|
-
readonly limit: number;
|
|
91
|
-
}): Promise<readonly ReleaseCatalogRow[]>;
|
|
92
|
-
updateReleasePolicy(input: {
|
|
93
|
-
readonly expectedRevision?: number;
|
|
94
|
-
readonly patch: ReleasePolicyPatch;
|
|
95
|
-
readonly releaseId: string;
|
|
96
|
-
}): Promise<ReleaseCatalogMutationResult>;
|
|
97
|
-
preflightReleasePolicy(input: {
|
|
98
|
-
readonly expectedRevision?: number;
|
|
99
|
-
readonly patch: ReleasePolicyPatch;
|
|
100
|
-
readonly releaseId: string;
|
|
101
|
-
}): Promise<ReleaseCatalogMutationPreflight>;
|
|
102
|
-
deleteRelease(input: {
|
|
103
|
-
readonly expectedRevision?: number;
|
|
104
|
-
readonly releaseId: string;
|
|
105
|
-
}): Promise<ReleaseCatalogMutationResult>;
|
|
106
|
-
rebuildReleaseCatalog(scopeKey: string): Promise<ReleaseCatalogRebuildResult>;
|
|
107
|
-
commitDatabase(input: DatabaseCommit): Promise<DatabaseCommitResult>;
|
|
108
|
-
getChannels(): Promise<readonly ChannelRow[]>;
|
|
109
|
-
insertChannel(input: ChannelInsertInput): Promise<ChannelInsertResult>;
|
|
110
|
-
deleteChannel(input: ChannelDeleteInput): Promise<ChannelDeleteResult>;
|
|
111
|
-
getBundles(options: import("@hot-updater/plugin-core").DatabaseBundleQueryOptions): Promise<PaginatedResult>;
|
|
112
|
-
insertBundle(bundle: Bundle): Promise<void>;
|
|
113
|
-
insertBundles(bundles: readonly Bundle[]): Promise<void>;
|
|
114
|
-
updateBundleById(bundleId: string, newBundle: Partial<Bundle>): Promise<void>;
|
|
115
|
-
deleteBundleById(bundleId: string): Promise<void>;
|
|
116
|
-
}
|
|
117
|
-
//#endregion
|
|
118
|
-
export { DatabaseAPI, DatabaseAdapterCapabilities, DatabaseAdapterWithCapabilities, DatabasePlugin$1 as DatabasePlugin, MigrateOptions, MigrationOperation, MigrationResult, Migrator, ORMProvider, ORMSQLProvider, RelationMode, SchemaGenerator, providers, sqlProviders };
|