@hot-updater/server 1.0.0-rc.18 → 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 +6 -8
- package/dist/adapters/drizzle.d.cts +2 -2
- package/dist/adapters/drizzle.d.mts +2 -2
- package/dist/adapters/drizzle.mjs +1 -3
- package/dist/adapters/drizzleExecutor.d.cts +1 -1
- package/dist/adapters/drizzleExecutor.d.mts +1 -1
- package/dist/adapters/kysely.cjs +4 -6
- package/dist/adapters/kysely.d.cts +3 -3
- package/dist/adapters/kysely.d.mts +3 -3
- package/dist/adapters/kysely.mjs +1 -3
- package/dist/adapters/kyselyExecutor.d.cts +1 -2
- package/dist/adapters/kyselyExecutor.d.mts +1 -2
- package/dist/adapters/mongodb.cjs +10 -21
- package/dist/adapters/mongodb.d.cts +1 -1
- package/dist/adapters/mongodb.d.mts +1 -1
- package/dist/adapters/mongodb.mjs +9 -20
- package/dist/adapters/mongodbAdapter.cjs +11 -11
- package/dist/adapters/mongodbAdapter.d.cts +1 -1
- package/dist/adapters/mongodbAdapter.d.mts +1 -1
- package/dist/adapters/mongodbAdapter.mjs +1 -1
- package/dist/adapters/prisma.cjs +7 -9
- package/dist/adapters/prisma.d.cts +1 -1
- package/dist/adapters/prisma.d.mts +1 -1
- package/dist/adapters/prisma.mjs +1 -3
- package/dist/adapters/prismaExecutor.cjs +2 -3
- package/dist/adapters/prismaExecutor.mjs +1 -2
- package/dist/adapters/sqlProviders.cjs +7 -2
- package/dist/adapters/sqlProviders.mjs +6 -1
- package/dist/assembly/assemblePlugins.cjs +26 -48
- package/dist/assembly/assemblePlugins.d.cts +2 -5
- package/dist/assembly/assemblePlugins.d.mts +2 -5
- package/dist/assembly/assemblePlugins.mjs +19 -45
- package/dist/assembly/clientPlugins.cjs +6 -4
- package/dist/assembly/clientPlugins.mjs +2 -0
- package/dist/assembly/configError.d.cts +1 -6
- package/dist/assembly/configError.d.mts +1 -6
- package/dist/assembly/configError.mjs +1 -6
- package/dist/core/api.cjs +0 -40
- package/dist/core/api.d.cts +5 -16
- package/dist/core/api.d.mts +5 -16
- package/dist/core/api.mjs +1 -37
- package/dist/core/baseCandidates.cjs +0 -43
- package/dist/core/baseCandidates.mjs +2 -43
- package/dist/core/operations.cjs +13 -12
- package/dist/core/operations.mjs +6 -5
- package/dist/core/reads.cjs +4 -4
- package/dist/core/reads.d.cts +2 -41
- package/dist/core/reads.d.mts +2 -41
- package/dist/core/reads.mjs +3 -3
- package/dist/core/releases.cjs +6 -6
- package/dist/core/releases.mjs +1 -1
- package/dist/core/writes.cjs +2 -2
- package/dist/core/writes.mjs +1 -1
- package/dist/createHotUpdaterCore.cjs +39 -39
- package/dist/createHotUpdaterCore.d.cts +61 -8
- package/dist/createHotUpdaterCore.d.mts +61 -8
- package/dist/createHotUpdaterCore.mjs +35 -32
- package/dist/db/engineDrizzleSchema.cjs +3 -4
- package/dist/db/engineDrizzleSchema.mjs +1 -2
- package/dist/db/enginePrismaSchema.cjs +4 -5
- package/dist/db/enginePrismaSchema.d.cts +1 -1
- package/dist/db/enginePrismaSchema.d.mts +1 -1
- package/dist/db/enginePrismaSchema.mjs +1 -2
- package/dist/db/releaseCatalog.cjs +6 -6
- package/dist/db/releaseCatalog.mjs +1 -1
- package/dist/db/updateArtifacts.cjs +6 -6
- package/dist/db/updateArtifacts.mjs +1 -1
- package/dist/handler.cjs +3 -4
- package/dist/handler.mjs +1 -1
- package/dist/handlerAdminRoutes.cjs +1 -2
- package/dist/handlerAdminRoutes.mjs +1 -2
- package/dist/handlerVersionRoutes.cjs +2 -2
- package/dist/handlerVersionRoutes.mjs +2 -2
- package/dist/index.cjs +9 -2
- package/dist/index.d.cts +4 -3
- package/dist/index.d.mts +4 -3
- package/dist/index.mjs +2 -1
- package/dist/node.cjs +3 -6
- package/dist/node.d.cts +3 -3
- package/dist/node.d.mts +3 -3
- 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 +8 -52
- package/dist/plugins/api-keys/index.d.cts +1 -84
- package/dist/plugins/api-keys/index.d.mts +1 -84
- package/dist/plugins/api-keys/index.mjs +2 -49
- package/dist/plugins/definePlugin.d.cts +2 -200
- package/dist/plugins/definePlugin.d.mts +2 -200
- package/dist/plugins/insights/index.cjs +7 -126
- package/dist/plugins/insights/index.d.cts +1 -398
- package/dist/plugins/insights/index.d.mts +1 -398
- package/dist/plugins/insights/index.mjs +2 -121
- 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 +1 -1
- package/dist/types/index.d.mts +1 -1
- package/package.json +15 -37
- package/dist/_virtual/_rolldown/runtime.cjs +0 -23
- package/dist/assembly/clientPlugins.d.cts +0 -16
- package/dist/assembly/clientPlugins.d.mts +0 -16
- package/dist/assembly/configError.cjs +0 -7
- package/dist/assembly/databasePlugins.cjs +0 -27
- package/dist/assembly/databasePlugins.d.cts +0 -43
- package/dist/assembly/databasePlugins.d.mts +0 -43
- package/dist/assembly/databasePlugins.mjs +0 -26
- package/dist/assembly/pluginCli.cjs +0 -125
- package/dist/assembly/pluginCli.d.cts +0 -59
- package/dist/assembly/pluginCli.d.mts +0 -59
- package/dist/assembly/pluginCli.mjs +0 -121
- package/dist/core/baseCandidates.d.cts +0 -17
- package/dist/core/baseCandidates.d.mts +0 -17
- package/dist/core/schema.cjs +0 -279
- package/dist/core/schema.d.cts +0 -307
- package/dist/core/schema.d.mts +0 -307
- package/dist/core/schema.mjs +0 -277
- package/dist/database/aggregateBatching.cjs +0 -626
- package/dist/database/aggregateBatching.d.cts +0 -10
- package/dist/database/aggregateBatching.d.mts +0 -10
- package/dist/database/aggregateBatching.mjs +0 -625
- package/dist/database/busy.cjs +0 -36
- package/dist/database/busy.d.cts +0 -12
- package/dist/database/busy.d.mts +0 -12
- package/dist/database/busy.mjs +0 -36
- package/dist/database/cursor.cjs +0 -44
- package/dist/database/cursor.d.cts +0 -7
- package/dist/database/cursor.d.mts +0 -7
- package/dist/database/cursor.mjs +0 -40
- package/dist/database/database.cjs +0 -63
- package/dist/database/database.d.cts +0 -136
- package/dist/database/database.d.mts +0 -136
- package/dist/database/database.mjs +0 -63
- package/dist/database/definitions.d.cts +0 -78
- package/dist/database/definitions.d.mts +0 -78
- package/dist/database/engine.cjs +0 -37
- package/dist/database/engine.d.cts +0 -41
- package/dist/database/engine.d.mts +0 -41
- package/dist/database/engine.mjs +0 -37
- package/dist/database/engineAggregates.cjs +0 -118
- package/dist/database/engineAggregates.mjs +0 -115
- package/dist/database/engineReads.cjs +0 -182
- package/dist/database/engineReads.d.cts +0 -35
- package/dist/database/engineReads.d.mts +0 -35
- package/dist/database/engineReads.mjs +0 -181
- package/dist/database/engineTransaction.cjs +0 -399
- package/dist/database/engineTransaction.d.cts +0 -26
- package/dist/database/engineTransaction.d.mts +0 -26
- package/dist/database/engineTransaction.mjs +0 -398
- package/dist/database/errors.cjs +0 -27
- package/dist/database/errors.d.cts +0 -21
- package/dist/database/errors.d.mts +0 -21
- package/dist/database/errors.mjs +0 -24
- package/dist/database/fence.cjs +0 -125
- package/dist/database/fence.d.cts +0 -42
- package/dist/database/fence.d.mts +0 -42
- package/dist/database/fence.mjs +0 -117
- package/dist/database/index.cjs +0 -136
- package/dist/database/index.d.cts +0 -18
- package/dist/database/index.d.mts +0 -18
- package/dist/database/index.mjs +0 -16
- package/dist/database/kv/kvAdapter.cjs +0 -285
- package/dist/database/kv/kvAdapter.d.cts +0 -109
- package/dist/database/kv/kvAdapter.d.mts +0 -109
- package/dist/database/kv/kvAdapter.mjs +0 -284
- package/dist/database/resolveSchema.cjs +0 -199
- package/dist/database/resolveSchema.d.cts +0 -42
- package/dist/database/resolveSchema.d.mts +0 -42
- package/dist/database/resolveSchema.mjs +0 -196
- package/dist/database/retention.cjs +0 -92
- package/dist/database/retention.mjs +0 -90
- package/dist/database/schema.cjs +0 -24
- package/dist/database/schema.d.cts +0 -90
- package/dist/database/schema.d.mts +0 -90
- package/dist/database/schema.mjs +0 -23
- package/dist/database/sql/sqlAdapter.cjs +0 -290
- package/dist/database/sql/sqlAdapter.d.cts +0 -46
- package/dist/database/sql/sqlAdapter.d.mts +0 -46
- package/dist/database/sql/sqlAdapter.mjs +0 -287
- package/dist/database/sql/sqlSchema.cjs +0 -171
- package/dist/database/sql/sqlSchema.d.cts +0 -8
- package/dist/database/sql/sqlSchema.d.mts +0 -8
- package/dist/database/sql/sqlSchema.mjs +0 -165
- package/dist/db/coreDatabase.cjs +0 -85
- package/dist/db/coreDatabase.d.cts +0 -57
- package/dist/db/coreDatabase.d.mts +0 -57
- package/dist/db/coreDatabase.mjs +0 -78
- package/dist/db/createBundleDiff.cjs +0 -144
- package/dist/db/createBundleDiff.d.cts +0 -17
- package/dist/db/createBundleDiff.d.mts +0 -17
- package/dist/db/createBundleDiff.mjs +0 -141
- package/dist/db/engineMigrator.cjs +0 -53
- package/dist/db/engineMigrator.mjs +0 -53
- package/dist/db/engineSql.cjs +0 -26
- package/dist/db/engineSql.d.cts +0 -17
- package/dist/db/engineSql.d.mts +0 -17
- package/dist/db/engineSql.mjs +0 -25
- package/dist/db/engineSqlMigrator.cjs +0 -66
- package/dist/db/engineSqlMigrator.mjs +0 -66
- package/dist/db/fixedMigratorShared.cjs +0 -12
- package/dist/db/fixedMigratorShared.mjs +0 -11
- package/dist/db/index.cjs +0 -50
- package/dist/db/index.d.cts +0 -23
- package/dist/db/index.d.mts +0 -23
- package/dist/db/index.mjs +0 -33
- package/dist/db/releaseCatalog.d.cts +0 -16
- package/dist/db/releaseCatalog.d.mts +0 -16
- package/dist/db/schemaSettings.cjs +0 -63
- package/dist/db/schemaSettings.d.cts +0 -12
- package/dist/db/schemaSettings.d.mts +0 -12
- package/dist/db/schemaSettings.mjs +0 -62
- package/dist/db/settingsMigrator.cjs +0 -92
- package/dist/db/settingsMigrator.mjs +0 -89
- package/dist/db/types.cjs +0 -11
- package/dist/db/types.d.cts +0 -78
- package/dist/db/types.d.mts +0 -78
- package/dist/db/types.mjs +0 -10
- package/dist/diff.cjs +0 -3
- package/dist/diff.d.cts +0 -2
- package/dist/diff.d.mts +0 -2
- package/dist/diff.mjs +0 -2
- package/dist/plugins/api-keys/apiKeys.cjs +0 -139
- package/dist/plugins/api-keys/apiKeys.d.cts +0 -27
- package/dist/plugins/api-keys/apiKeys.d.mts +0 -27
- package/dist/plugins/api-keys/apiKeys.mjs +0 -129
- package/dist/plugins/api-keys/cli.cjs +0 -115
- package/dist/plugins/api-keys/cli.mjs +0 -114
- package/dist/plugins/api-keys/model.cjs +0 -58
- package/dist/plugins/api-keys/model.d.cts +0 -26
- package/dist/plugins/api-keys/model.d.mts +0 -26
- package/dist/plugins/api-keys/model.mjs +0 -58
- package/dist/plugins/api-keys/schema.cjs +0 -38
- package/dist/plugins/api-keys/schema.d.cts +0 -44
- package/dist/plugins/api-keys/schema.d.mts +0 -44
- package/dist/plugins/api-keys/schema.mjs +0 -39
- package/dist/plugins/definePlugin.cjs +0 -5
- package/dist/plugins/definePlugin.mjs +0 -5
- package/dist/plugins/index.cjs +0 -38
- package/dist/plugins/index.d.cts +0 -12
- package/dist/plugins/index.d.mts +0 -12
- package/dist/plugins/index.mjs +0 -9
- package/dist/plugins/insights/contract.cjs +0 -193
- package/dist/plugins/insights/contract.mjs +0 -189
- package/dist/plugins/insights/domain.d.cts +0 -149
- package/dist/plugins/insights/domain.d.mts +0 -149
- package/dist/plugins/insights/errors.cjs +0 -15
- package/dist/plugins/insights/errors.mjs +0 -14
- package/dist/plugins/insights/eventInput.cjs +0 -284
- package/dist/plugins/insights/eventInput.mjs +0 -282
- package/dist/plugins/insights/eventRow.cjs +0 -49
- package/dist/plugins/insights/eventRow.d.cts +0 -64
- package/dist/plugins/insights/eventRow.d.mts +0 -64
- package/dist/plugins/insights/eventRow.mjs +0 -47
- package/dist/plugins/insights/model.cjs +0 -17
- package/dist/plugins/insights/model.d.cts +0 -10
- package/dist/plugins/insights/model.d.mts +0 -10
- package/dist/plugins/insights/model.mjs +0 -17
- package/dist/plugins/insights/modelTypes.d.cts +0 -176
- package/dist/plugins/insights/modelTypes.d.mts +0 -176
- package/dist/plugins/insights/overview.cjs +0 -109
- package/dist/plugins/insights/overview.d.cts +0 -15
- package/dist/plugins/insights/overview.d.mts +0 -15
- package/dist/plugins/insights/overview.mjs +0 -107
- package/dist/plugins/insights/provider.cjs +0 -375
- package/dist/plugins/insights/provider.d.cts +0 -6
- package/dist/plugins/insights/provider.d.mts +0 -6
- package/dist/plugins/insights/provider.mjs +0 -374
- package/dist/plugins/insights/queryInput.cjs +0 -93
- package/dist/plugins/insights/queryInput.mjs +0 -91
- package/dist/plugins/insights/reads.cjs +0 -681
- package/dist/plugins/insights/reads.d.cts +0 -61
- package/dist/plugins/insights/reads.d.mts +0 -61
- package/dist/plugins/insights/reads.mjs +0 -674
- package/dist/plugins/insights/recordEvent.cjs +0 -319
- package/dist/plugins/insights/recordEvent.d.cts +0 -18
- package/dist/plugins/insights/recordEvent.d.mts +0 -18
- package/dist/plugins/insights/recordEvent.mjs +0 -316
- package/dist/plugins/insights/routes.cjs +0 -96
- package/dist/plugins/insights/routes.mjs +0 -95
- package/dist/plugins/insights/schema.cjs +0 -489
- package/dist/plugins/insights/schema.d.cts +0 -698
- package/dist/plugins/insights/schema.d.mts +0 -698
- package/dist/plugins/insights/schema.mjs +0 -483
- package/dist/plugins/insights/testing/eventRow.d.mts +0 -64
- package/dist/plugins/insights/testing/expectInsightsIndex.mjs +0 -18
- package/dist/plugins/insights/testing/fixtures.d.mts +0 -8
- package/dist/plugins/insights/testing/fixtures.mjs +0 -25
- package/dist/plugins/insights/testing/index.d.mts +0 -24
- package/dist/plugins/insights/testing/index.mjs +0 -25
- package/dist/plugins/insights/testing/insightsModelTests.mjs +0 -714
- package/dist/plugins/insights/testing/modelTypes.d.mts +0 -176
- package/dist/plugins/insights/testing/setupInsightsHttpTestSuite.d.mts +0 -11
- package/dist/plugins/insights/testing/setupInsightsHttpTestSuite.mjs +0 -107
- package/dist/plugins/insights/testing/setupInsightsModelTestSuite.d.mts +0 -11
- package/dist/plugins/insights/testing/setupInsightsModelTestSuite.mjs +0 -31
- package/dist/plugins/insights/testing/types.d.mts +0 -26
- package/dist/plugins/insights/types.d.cts +0 -33
- package/dist/plugins/insights/types.d.mts +0 -33
- package/src/adapters/drizzle.conformance.integration.spec.ts +0 -34
- package/src/adapters/drizzle.readBudgets.integration.spec.ts +0 -43
- package/src/adapters/drizzle.spec.ts +0 -314
- package/src/adapters/drizzle.ts +0 -64
- package/src/adapters/drizzleExecutor.ts +0 -166
- package/src/adapters/kysely.conformance.integration.spec.ts +0 -36
- package/src/adapters/kysely.readBudgets.integration.spec.ts +0 -44
- package/src/adapters/kysely.spec.ts +0 -244
- package/src/adapters/kysely.ts +0 -46
- package/src/adapters/kyselyExecutor.ts +0 -53
- package/src/adapters/mongodb.integration.spec.ts +0 -271
- package/src/adapters/mongodb.readBudgets.integration.spec.ts +0 -61
- package/src/adapters/mongodb.ts +0 -45
- package/src/adapters/mongodbAdapter.ts +0 -307
- package/src/adapters/prisma.conformance.integration.spec.ts +0 -36
- package/src/adapters/prisma.integration.spec.ts +0 -146
- package/src/adapters/prisma.readBudgets.integration.spec.ts +0 -43
- package/src/adapters/prisma.spec.ts +0 -257
- package/src/adapters/prisma.ts +0 -74
- package/src/adapters/prismaExecutor.ts +0 -107
- package/src/adapters/prismaTestClients.ts +0 -182
- package/src/adapters/sqlProviders.ts +0 -14
- package/src/assembly/assemblePlugins.ts +0 -302
- package/src/assembly/assembly.spec.ts +0 -377
- package/src/assembly/assembly.types.spec.ts +0 -203
- package/src/assembly/clientPlugins.ts +0 -113
- package/src/assembly/configError.ts +0 -4
- package/src/assembly/databasePlugins.spec.ts +0 -71
- package/src/assembly/databasePlugins.ts +0 -102
- package/src/assembly/pluginCli.spec.ts +0 -254
- package/src/assembly/pluginCli.ts +0 -248
- package/src/assembly/pluginRoutes.spec.ts +0 -186
- package/src/core/api.ts +0 -139
- package/src/core/baseCandidates.spec.ts +0 -378
- package/src/core/baseCandidates.ts +0 -136
- package/src/core/index.ts +0 -44
- package/src/core/operations.spec.ts +0 -415
- package/src/core/operations.ts +0 -551
- package/src/core/reads.spec.ts +0 -300
- package/src/core/reads.ts +0 -417
- package/src/core/releases.spec.ts +0 -308
- package/src/core/releases.ts +0 -345
- package/src/core/schema.ts +0 -173
- package/src/core/writes.ts +0 -160
- package/src/createHotUpdaterCore.ts +0 -260
- package/src/database/aggregateBatching.spec.ts +0 -577
- package/src/database/aggregateBatching.ts +0 -803
- package/src/database/busy.spec.ts +0 -45
- package/src/database/busy.ts +0 -50
- package/src/database/cursor.ts +0 -65
- package/src/database/database.ts +0 -366
- package/src/database/database.types.spec.ts +0 -135
- package/src/database/definitions.ts +0 -76
- package/src/database/engine.ts +0 -62
- package/src/database/engineAggregates.spec.ts +0 -536
- package/src/database/engineAggregates.ts +0 -189
- package/src/database/engineReads.spec.ts +0 -219
- package/src/database/engineReads.ts +0 -304
- package/src/database/engineTransaction.spec.ts +0 -710
- package/src/database/engineTransaction.ts +0 -582
- package/src/database/errors.ts +0 -30
- package/src/database/fence.spec.ts +0 -223
- package/src/database/fence.ts +0 -175
- package/src/database/index.ts +0 -160
- package/src/database/kv/kvAdapter.batching.integration.spec.ts +0 -15
- package/src/database/kv/kvAdapter.conformance.integration.spec.ts +0 -19
- package/src/database/kv/kvAdapter.readBudgets.integration.spec.ts +0 -17
- package/src/database/kv/kvAdapter.spec.ts +0 -595
- package/src/database/kv/kvAdapter.ts +0 -479
- package/src/database/kv/kvTestStore.ts +0 -118
- package/src/database/memory.readBudgets.integration.spec.ts +0 -13
- package/src/database/resolveSchema.spec.ts +0 -230
- package/src/database/resolveSchema.ts +0 -375
- package/src/database/retention.spec.ts +0 -314
- package/src/database/retention.ts +0 -129
- package/src/database/schema.ts +0 -213
- package/src/database/schema.types.spec.ts +0 -94
- package/src/database/sql/docker-compose.yml +0 -36
- package/src/database/sql/sqlAdapter.integration.spec.ts +0 -145
- package/src/database/sql/sqlAdapter.readBudgets.integration.spec.ts +0 -123
- package/src/database/sql/sqlAdapter.spec.ts +0 -343
- package/src/database/sql/sqlAdapter.ts +0 -552
- package/src/database/sql/sqlSchema.ts +0 -286
- package/src/database/sql/sqlTestExecutors.ts +0 -183
- package/src/databaseTestSuite.spec.ts +0 -44
- package/src/db/bundleRows.spec.ts +0 -164
- package/src/db/bundleRows.ts +0 -10
- package/src/db/coreDatabase.ts +0 -153
- package/src/db/createBundleDiff.spec.ts +0 -464
- package/src/db/createBundleDiff.ts +0 -370
- package/src/db/engineDrizzleSchema.ts +0 -72
- package/src/db/engineMigrator.ts +0 -105
- package/src/db/enginePrismaSchema.ts +0 -147
- package/src/db/engineSql.spec.ts +0 -130
- package/src/db/engineSql.ts +0 -48
- package/src/db/engineSqlMigrator.ts +0 -116
- package/src/db/fixedMigratorShared.ts +0 -17
- package/src/db/index.spec.ts +0 -554
- package/src/db/index.ts +0 -93
- package/src/db/node-sqlite.d.ts +0 -25
- package/src/db/pluginTables.spec.ts +0 -248
- package/src/db/releaseCatalog.ts +0 -106
- package/src/db/schemaSettings.ts +0 -104
- package/src/db/settingsMigrator.spec.ts +0 -65
- package/src/db/settingsMigrator.ts +0 -152
- package/src/db/types.ts +0 -82
- package/src/db/updateArtifacts.spec.ts +0 -235
- package/src/db/updateArtifacts.ts +0 -473
- package/src/db/updateCheck.bench.ts +0 -47
- package/src/diff.ts +0 -6
- package/src/handler-standalone.integration.spec.ts +0 -321
- package/src/handler.spec.ts +0 -273
- package/src/handler.testFixtures.ts +0 -25
- package/src/handler.ts +0 -302
- package/src/handlerAdminRoutes.spec.ts +0 -183
- package/src/handlerAdminRoutes.ts +0 -536
- package/src/handlerAuth.integration.spec.ts +0 -33
- package/src/handlerErrors.ts +0 -7
- package/src/handlerManagement.spec.ts +0 -202
- package/src/handlerParameters.ts +0 -105
- package/src/handlerReleaseCatalogRoutes.ts +0 -176
- package/src/handlerTypes.ts +0 -19
- package/src/handlerVersionRoutes.ts +0 -25
- package/src/index.ts +0 -13
- package/src/internalRouter.ts +0 -104
- package/src/lintRules.spec.ts +0 -76
- package/src/node.spec.ts +0 -119
- package/src/node.ts +0 -111
- package/src/plugins/api-keys/apiKeys.integration.spec.ts +0 -92
- package/src/plugins/api-keys/apiKeys.spec.ts +0 -166
- package/src/plugins/api-keys/apiKeys.ts +0 -214
- package/src/plugins/api-keys/apiKeysPlugin.spec.ts +0 -168
- package/src/plugins/api-keys/cli.spec.ts +0 -187
- package/src/plugins/api-keys/cli.ts +0 -140
- package/src/plugins/api-keys/index.ts +0 -73
- package/src/plugins/api-keys/model.ts +0 -88
- package/src/plugins/api-keys/schema.ts +0 -22
- package/src/plugins/definePlugin.ts +0 -242
- package/src/plugins/index.ts +0 -73
- package/src/plugins/insights/contract.spec.ts +0 -285
- package/src/plugins/insights/contract.ts +0 -372
- package/src/plugins/insights/domain.ts +0 -176
- package/src/plugins/insights/errors.ts +0 -11
- package/src/plugins/insights/eventInput.ts +0 -381
- package/src/plugins/insights/eventRow.ts +0 -209
- package/src/plugins/insights/index.ts +0 -222
- package/src/plugins/insights/insights.integration.spec.ts +0 -921
- package/src/plugins/insights/insightsRollout.integration.spec.ts +0 -186
- package/src/plugins/insights/model.spec.ts +0 -64
- package/src/plugins/insights/model.ts +0 -18
- package/src/plugins/insights/modelTypes.ts +0 -197
- package/src/plugins/insights/overview.spec.ts +0 -64
- package/src/plugins/insights/overview.ts +0 -214
- package/src/plugins/insights/provider.spec.ts +0 -585
- package/src/plugins/insights/provider.ts +0 -704
- package/src/plugins/insights/queryInput.ts +0 -142
- package/src/plugins/insights/reads.spec.ts +0 -1013
- package/src/plugins/insights/reads.ts +0 -1037
- package/src/plugins/insights/recordEvent.spec.ts +0 -897
- package/src/plugins/insights/recordEvent.ts +0 -476
- package/src/plugins/insights/retention.spec.ts +0 -115
- package/src/plugins/insights/routes.ts +0 -149
- package/src/plugins/insights/schema.ts +0 -409
- package/src/plugins/insights/testing/expectInsightsIndex.spec.ts +0 -42
- package/src/plugins/insights/testing/expectInsightsIndex.ts +0 -20
- package/src/plugins/insights/testing/fixtures.ts +0 -30
- package/src/plugins/insights/testing/index.ts +0 -45
- package/src/plugins/insights/testing/insightsModelTests.ts +0 -860
- package/src/plugins/insights/testing/setupInsightsHttpTestSuite.ts +0 -152
- package/src/plugins/insights/testing/setupInsightsModelTestSuite.ts +0 -36
- package/src/plugins/insights/testing/types.ts +0 -30
- package/src/plugins/insights/types.ts +0 -55
- package/src/plugins/pluginTestHarness.spec.ts +0 -56
- package/src/readBudgets.testFixtures.ts +0 -15
- package/src/releaseCatalogRoutes.integration.spec.ts +0 -200
- package/src/retention.spec.ts +0 -73
- package/src/runtime.spec.ts +0 -207
- package/src/runtime.testFixtures.ts +0 -60
- package/src/runtimeBundles.integration.spec.ts +0 -112
- package/src/storageAccess.spec.ts +0 -152
- package/src/storageAccess.ts +0 -141
- package/src/testUtilsMutation.integration.spec.ts +0 -216
- package/src/testUtilsPackage.integration.spec.ts +0 -180
- package/src/types/index.ts +0 -2
- package/src/version.ts +0 -3
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
import { describe, expectTypeOf, it } from "vitest";
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
type ClientAccessPolicy,
|
|
5
|
-
type ClientAccessRule,
|
|
6
|
-
createHotUpdater,
|
|
7
|
-
type CreateHotUpdaterOptions,
|
|
8
|
-
type RemovedClientAccess,
|
|
9
|
-
} from "../createHotUpdaterCore";
|
|
10
|
-
import { defineTable } from "../database/schema";
|
|
11
|
-
import { definePlugin } from "../plugins/definePlugin";
|
|
12
|
-
|
|
13
|
-
const keys = definePlugin({
|
|
14
|
-
id: "keys",
|
|
15
|
-
provides: { clientAuth: true },
|
|
16
|
-
schemaVersion: "1",
|
|
17
|
-
schema: {},
|
|
18
|
-
init: () => ({
|
|
19
|
-
api: { ping: () => "pong" as const },
|
|
20
|
-
clientAuth: { varyHeaders: ["x-key"], authenticate: async () => true },
|
|
21
|
-
}),
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
const sso = definePlugin({
|
|
25
|
-
id: "sso",
|
|
26
|
-
provides: { clientAuth: true },
|
|
27
|
-
schemaVersion: "1",
|
|
28
|
-
schema: {},
|
|
29
|
-
init: () => ({
|
|
30
|
-
api: {},
|
|
31
|
-
clientAuth: { varyHeaders: [], authenticate: async () => true },
|
|
32
|
-
}),
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
const notes = definePlugin({
|
|
36
|
-
id: "notes",
|
|
37
|
-
schemaVersion: "1",
|
|
38
|
-
schema: {
|
|
39
|
-
notes: defineTable({ id: { type: "string" } }, { key: ["id"] }),
|
|
40
|
-
},
|
|
41
|
-
init: ({ db }) => ({
|
|
42
|
-
api: { read: (id: string) => db.findOne("notes", { id }) },
|
|
43
|
-
}),
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
type Database = CreateHotUpdaterOptions["database"];
|
|
47
|
-
|
|
48
|
-
/** The callback is type-checked and never runs. */
|
|
49
|
-
const typeOnly = (check: (database: Database) => void) => void check;
|
|
50
|
-
|
|
51
|
-
describe("createHotUpdater types", () => {
|
|
52
|
-
it("counts clientAuth plugins in a tuple and names the fix", () => {
|
|
53
|
-
expectTypeOf<ClientAccessRule<readonly []>>().toEqualTypeOf<{
|
|
54
|
-
readonly clientAccess: ClientAccessPolicy;
|
|
55
|
-
}>();
|
|
56
|
-
expectTypeOf<ClientAccessRule<readonly [typeof notes]>>().toEqualTypeOf<{
|
|
57
|
-
readonly clientAccess: ClientAccessPolicy;
|
|
58
|
-
}>();
|
|
59
|
-
expectTypeOf<ClientAccessRule<readonly [typeof keys]>>().toEqualTypeOf<{
|
|
60
|
-
readonly clientAccess?: 'Remove clientAccess: plugin "keys" provides clientAuth';
|
|
61
|
-
}>();
|
|
62
|
-
expectTypeOf<
|
|
63
|
-
ClientAccessRule<readonly [typeof keys, typeof notes, typeof sso]>
|
|
64
|
-
>().toEqualTypeOf<{
|
|
65
|
-
readonly clientAuth: 'Keep one clientAuth plugin: "keys", "sso" all provide it';
|
|
66
|
-
}>();
|
|
67
|
-
expectTypeOf<
|
|
68
|
-
ClientAccessRule<readonly (typeof keys | typeof notes)[]>
|
|
69
|
-
>().toEqualTypeOf<{
|
|
70
|
-
readonly clientAccess?: "Remove clientAccess: a plugin in this list may provide clientAuth";
|
|
71
|
-
}>();
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
it("accepts exactly one policy source", () => {
|
|
75
|
-
typeOnly((database) => {
|
|
76
|
-
createHotUpdater({ database, plugins: [notes, keys] });
|
|
77
|
-
createHotUpdater({ database, plugins: [notes], clientAccess: "public" });
|
|
78
|
-
createHotUpdater({ database, clientAccess: "public" });
|
|
79
|
-
// @ts-expect-error Neither a clientAuth plugin nor "public".
|
|
80
|
-
createHotUpdater({ database, plugins: [notes] });
|
|
81
|
-
createHotUpdater({
|
|
82
|
-
database,
|
|
83
|
-
plugins: [keys],
|
|
84
|
-
// @ts-expect-error clientAuth and "public" together.
|
|
85
|
-
clientAccess: "public",
|
|
86
|
-
});
|
|
87
|
-
// @ts-expect-error Two plugins provide clientAuth.
|
|
88
|
-
createHotUpdater({ database, plugins: [keys, sso] });
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
it("says what replaced a clientAccess object from before 1.0 where it is written", () => {
|
|
93
|
-
expectTypeOf<ClientAccessPolicy>().toEqualTypeOf<
|
|
94
|
-
"public" | RemovedClientAccess
|
|
95
|
-
>();
|
|
96
|
-
expectTypeOf<
|
|
97
|
-
RemovedClientAccess["type"]
|
|
98
|
-
>().toEqualTypeOf<'clientAccess objects were removed in 1.0: set clientAccess: "public", or add a plugin that provides clientAuth'>();
|
|
99
|
-
typeOnly((database) => {
|
|
100
|
-
// @ts-expect-error clientAccess objects were removed in 1.0.
|
|
101
|
-
createHotUpdater({ database, clientAccess: { type: "public" } });
|
|
102
|
-
createHotUpdater({
|
|
103
|
-
database,
|
|
104
|
-
// @ts-expect-error clientAccess objects were removed in 1.0.
|
|
105
|
-
clientAccess: { type: "api-key", headerName: "x-client-key" },
|
|
106
|
-
});
|
|
107
|
-
});
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
it("rejects core passed as a plugin and a clientAuth the plugin did not declare", () => {
|
|
111
|
-
const core = {
|
|
112
|
-
kind: "core",
|
|
113
|
-
id: "core",
|
|
114
|
-
schemaVersion: "1",
|
|
115
|
-
schema: {},
|
|
116
|
-
init: () => ({ api: {} }),
|
|
117
|
-
} as const;
|
|
118
|
-
typeOnly((database) => {
|
|
119
|
-
createHotUpdater({
|
|
120
|
-
database,
|
|
121
|
-
// @ts-expect-error Core is built in; it is not a plugin.
|
|
122
|
-
plugins: [core],
|
|
123
|
-
});
|
|
124
|
-
});
|
|
125
|
-
definePlugin({
|
|
126
|
-
id: "sneaky",
|
|
127
|
-
schemaVersion: "1",
|
|
128
|
-
schema: {},
|
|
129
|
-
init: () => ({
|
|
130
|
-
api: {},
|
|
131
|
-
// @ts-expect-error Declare provides: { clientAuth: true } to return clientAuth.
|
|
132
|
-
clientAuth: { varyHeaders: [], authenticate: async () => true },
|
|
133
|
-
}),
|
|
134
|
-
});
|
|
135
|
-
definePlugin({
|
|
136
|
-
id: "promised",
|
|
137
|
-
provides: { clientAuth: true },
|
|
138
|
-
schemaVersion: "1",
|
|
139
|
-
schema: {},
|
|
140
|
-
// @ts-expect-error A plugin that provides clientAuth must return it.
|
|
141
|
-
init: () => ({ api: {} }),
|
|
142
|
-
});
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
it("types CLI commands by the plugin's API and gates clientCredential on clientAuth", () => {
|
|
146
|
-
definePlugin({
|
|
147
|
-
id: "counter",
|
|
148
|
-
schemaVersion: "1",
|
|
149
|
-
schema: {},
|
|
150
|
-
init: () => ({ api: { count: () => 1 } }),
|
|
151
|
-
cli: {
|
|
152
|
-
commands: [
|
|
153
|
-
{
|
|
154
|
-
name: "count",
|
|
155
|
-
description: "Count",
|
|
156
|
-
async run({ api, ui }) {
|
|
157
|
-
expectTypeOf(api.count()).toEqualTypeOf<1>();
|
|
158
|
-
ui.print(String(api.count()));
|
|
159
|
-
},
|
|
160
|
-
},
|
|
161
|
-
],
|
|
162
|
-
// @ts-expect-error Declare provides: { clientAuth: true } to add clientCredential.
|
|
163
|
-
clientCredential: {
|
|
164
|
-
label: "Key",
|
|
165
|
-
header: "x-key",
|
|
166
|
-
env: "KEY",
|
|
167
|
-
generate: () => "key",
|
|
168
|
-
provision: async () => "key",
|
|
169
|
-
},
|
|
170
|
-
},
|
|
171
|
-
});
|
|
172
|
-
definePlugin({
|
|
173
|
-
id: "keyed",
|
|
174
|
-
provides: { clientAuth: true },
|
|
175
|
-
schemaVersion: "1",
|
|
176
|
-
schema: {},
|
|
177
|
-
init: () => ({
|
|
178
|
-
api: { issue: async () => "key" },
|
|
179
|
-
clientAuth: { varyHeaders: ["x-key"], authenticate: async () => true },
|
|
180
|
-
}),
|
|
181
|
-
cli: {
|
|
182
|
-
clientCredential: {
|
|
183
|
-
label: "Key",
|
|
184
|
-
header: "x-key",
|
|
185
|
-
env: "KEY",
|
|
186
|
-
generate: () => "key",
|
|
187
|
-
provision: (api) => api.issue(),
|
|
188
|
-
},
|
|
189
|
-
},
|
|
190
|
-
});
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
it("types each plugin's API by id", () => {
|
|
194
|
-
type Api = ReturnType<
|
|
195
|
-
typeof createHotUpdater<readonly [typeof keys, typeof notes]>
|
|
196
|
-
>["api"];
|
|
197
|
-
expectTypeOf<keyof Api>().toEqualTypeOf<"keys" | "notes">();
|
|
198
|
-
expectTypeOf<ReturnType<Api["keys"]["ping"]>>().toEqualTypeOf<"pong">();
|
|
199
|
-
expectTypeOf<Parameters<Api["notes"]["read"]>>().toEqualTypeOf<
|
|
200
|
-
[id: string]
|
|
201
|
-
>();
|
|
202
|
-
});
|
|
203
|
-
});
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import { HotUpdaterConfigError } from "./configError";
|
|
2
|
-
|
|
3
|
-
/** A client plugin an app adds to `HotUpdater.init`'s `plugins`. */
|
|
4
|
-
export interface ClientPluginSpec {
|
|
5
|
-
/** The module that exports it. */
|
|
6
|
-
readonly module: string;
|
|
7
|
-
/** The export, which the app calls with no arguments. */
|
|
8
|
-
readonly name: string;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
const EXPORT_NAME = /^[A-Za-z_$][\w$]*$/u;
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Names app code cannot import as they are: reserved words, and the names
|
|
15
|
-
* the printed app code declares itself.
|
|
16
|
-
*/
|
|
17
|
-
const UNAVAILABLE_NAMES = new Set([
|
|
18
|
-
"App",
|
|
19
|
-
"HotUpdater",
|
|
20
|
-
"arguments",
|
|
21
|
-
"await",
|
|
22
|
-
"break",
|
|
23
|
-
"case",
|
|
24
|
-
"catch",
|
|
25
|
-
"class",
|
|
26
|
-
"const",
|
|
27
|
-
"continue",
|
|
28
|
-
"debugger",
|
|
29
|
-
"default",
|
|
30
|
-
"delete",
|
|
31
|
-
"do",
|
|
32
|
-
"else",
|
|
33
|
-
"enum",
|
|
34
|
-
"eval",
|
|
35
|
-
"export",
|
|
36
|
-
"extends",
|
|
37
|
-
"false",
|
|
38
|
-
"finally",
|
|
39
|
-
"for",
|
|
40
|
-
"function",
|
|
41
|
-
"if",
|
|
42
|
-
"implements",
|
|
43
|
-
"import",
|
|
44
|
-
"in",
|
|
45
|
-
"instanceof",
|
|
46
|
-
"interface",
|
|
47
|
-
"let",
|
|
48
|
-
"new",
|
|
49
|
-
"null",
|
|
50
|
-
"package",
|
|
51
|
-
"private",
|
|
52
|
-
"protected",
|
|
53
|
-
"public",
|
|
54
|
-
"return",
|
|
55
|
-
"static",
|
|
56
|
-
"super",
|
|
57
|
-
"switch",
|
|
58
|
-
"this",
|
|
59
|
-
"throw",
|
|
60
|
-
"true",
|
|
61
|
-
"try",
|
|
62
|
-
"typeof",
|
|
63
|
-
"var",
|
|
64
|
-
"void",
|
|
65
|
-
"while",
|
|
66
|
-
"with",
|
|
67
|
-
"yield",
|
|
68
|
-
]);
|
|
69
|
-
|
|
70
|
-
const isRecord = (value: unknown): value is Record<string, unknown> =>
|
|
71
|
-
typeof value === "object" && value !== null && !Array.isArray(value);
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* The client plugins an app adds for the plugins, each once, in plugin
|
|
75
|
-
* order: what init prints in `HotUpdater.init`'s `plugins`. A malformed one,
|
|
76
|
-
* or one name from two modules, throws `HotUpdaterConfigError`.
|
|
77
|
-
*/
|
|
78
|
-
export const clientPluginsOf = (
|
|
79
|
-
plugins: readonly unknown[],
|
|
80
|
-
): readonly ClientPluginSpec[] => {
|
|
81
|
-
if (!Array.isArray(plugins)) {
|
|
82
|
-
throw new HotUpdaterConfigError("plugins must be an array of plugins.");
|
|
83
|
-
}
|
|
84
|
-
const found: ClientPluginSpec[] = [];
|
|
85
|
-
for (const plugin of plugins) {
|
|
86
|
-
if (!isRecord(plugin) || !isRecord(plugin.cli)) continue;
|
|
87
|
-
const value = plugin.cli.clientPlugin;
|
|
88
|
-
if (value === undefined) continue;
|
|
89
|
-
const id = String(plugin.id);
|
|
90
|
-
if (
|
|
91
|
-
!isRecord(value) ||
|
|
92
|
-
typeof value.module !== "string" ||
|
|
93
|
-
value.module === "" ||
|
|
94
|
-
typeof value.name !== "string" ||
|
|
95
|
-
!EXPORT_NAME.test(value.name) ||
|
|
96
|
-
UNAVAILABLE_NAMES.has(value.name)
|
|
97
|
-
) {
|
|
98
|
-
throw new HotUpdaterConfigError(
|
|
99
|
-
`Plugin "${id}" cli.clientPlugin needs a module and an export name the app can import: an identifier other than a reserved word, App, or HotUpdater.`,
|
|
100
|
-
);
|
|
101
|
-
}
|
|
102
|
-
const { module, name } = value as unknown as ClientPluginSpec;
|
|
103
|
-
const named = found.find((entry) => entry.name === name);
|
|
104
|
-
if (named === undefined) {
|
|
105
|
-
found.push({ module, name });
|
|
106
|
-
} else if (named.module !== module) {
|
|
107
|
-
throw new HotUpdaterConfigError(
|
|
108
|
-
`Plugin "${id}" names the client plugin "${name}" from ${module}, but another plugin names it from ${named.module}.`,
|
|
109
|
-
);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
return found;
|
|
113
|
-
};
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import { createMemoryAdapter } from "@hot-updater/plugin-core/internal";
|
|
2
|
-
import { describe, expect, it } from "vitest";
|
|
3
|
-
|
|
4
|
-
import { apiKeys } from "../plugins/api-keys";
|
|
5
|
-
import { insights } from "../plugins/insights";
|
|
6
|
-
import { HotUpdaterConfigError } from "./assemblePlugins";
|
|
7
|
-
import {
|
|
8
|
-
createDatabasePluginApis,
|
|
9
|
-
createMeasuredDatabase,
|
|
10
|
-
} from "./databasePlugins";
|
|
11
|
-
|
|
12
|
-
describe("createDatabasePluginApis", () => {
|
|
13
|
-
it("assembles the listed plugins over the database's engine, on the server's tables", async () => {
|
|
14
|
-
const database = { name: "memory", adapter: createMemoryAdapter() };
|
|
15
|
-
|
|
16
|
-
const api = createDatabasePluginApis(database, [insights(), apiKeys()]);
|
|
17
|
-
const created = await api.apiKeys.create({ name: "Console" });
|
|
18
|
-
|
|
19
|
-
expect(Object.keys(api).sort()).toEqual(["apiKeys", "insights"]);
|
|
20
|
-
// Another assembly over the same database reads the same table.
|
|
21
|
-
await expect(
|
|
22
|
-
createDatabasePluginApis(database, [apiKeys()]).apiKeys.list(),
|
|
23
|
-
).resolves.toEqual([expect.objectContaining({ id: created.record.id })]);
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
it("gives no APIs for an empty plugin list", () => {
|
|
27
|
-
const database = { name: "memory", adapter: createMemoryAdapter() };
|
|
28
|
-
|
|
29
|
-
expect(createDatabasePluginApis(database, [])).toEqual({});
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
it("refuses a database off the storage engine, and a malformed list", () => {
|
|
33
|
-
expect(() =>
|
|
34
|
-
createDatabasePluginApis({ name: "old", models: {} }, [insights()]),
|
|
35
|
-
).toThrow("Upgrade its provider package to 1.0.");
|
|
36
|
-
expect(() =>
|
|
37
|
-
createDatabasePluginApis(
|
|
38
|
-
{ name: "memory", adapter: createMemoryAdapter() },
|
|
39
|
-
[insights(), insights()],
|
|
40
|
-
),
|
|
41
|
-
).toThrow(HotUpdaterConfigError);
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
describe("createMeasuredDatabase", () => {
|
|
46
|
-
it("runs core and the plugins on one engine in verify mode, over the adapter as given", async () => {
|
|
47
|
-
// A bare adapter without settings rows, which the schema fence would refuse.
|
|
48
|
-
const { core, api, clientAuth, measureReads } = createMeasuredDatabase(
|
|
49
|
-
createMemoryAdapter(),
|
|
50
|
-
[insights(), apiKeys()],
|
|
51
|
-
);
|
|
52
|
-
const { apiKey } = await api.apiKeys.create({ name: "Console" });
|
|
53
|
-
await core.ensureChannel("production");
|
|
54
|
-
|
|
55
|
-
const measured = await measureReads(async () => ({
|
|
56
|
-
authenticated: await clientAuth!.authenticate(
|
|
57
|
-
new Headers({ "x-api-key": apiKey }),
|
|
58
|
-
),
|
|
59
|
-
channel: await core.findChannelByName("production"),
|
|
60
|
-
}));
|
|
61
|
-
|
|
62
|
-
expect(measured).toEqual({
|
|
63
|
-
result: {
|
|
64
|
-
authenticated: true,
|
|
65
|
-
channel: { id: expect.any(String), name: "production" },
|
|
66
|
-
},
|
|
67
|
-
adapter: { gets: 0, keys: 0, queries: 2, rows: 2 },
|
|
68
|
-
engine: { calls: 2, rows: 2 },
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
});
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import type { EngineDatabase } from "@hot-updater/plugin-core";
|
|
2
|
-
import type { DatabaseAdapter } from "@hot-updater/plugin-core/internal";
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
engineAdapterOf,
|
|
6
|
-
OFF_ENGINE_DATABASE,
|
|
7
|
-
type CoreApi,
|
|
8
|
-
} from "../core/api";
|
|
9
|
-
import type { CoreStorage } from "../core/reads";
|
|
10
|
-
import type { ReadMeasurement } from "../database/engine";
|
|
11
|
-
import type {
|
|
12
|
-
AnyHotUpdaterPlugin,
|
|
13
|
-
ClientAuth,
|
|
14
|
-
PluginApis,
|
|
15
|
-
} from "../plugins/definePlugin";
|
|
16
|
-
import { assemblePlugins } from "./assemblePlugins";
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* The plugins' APIs by plugin id over a configured database, assembled as
|
|
20
|
-
* `createHotUpdater` assembles them: how the console and the CLI run a
|
|
21
|
-
* plugin in process, on the tables the server uses. A database off the
|
|
22
|
-
* storage engine, `standaloneRepository` included, is refused: its server
|
|
23
|
-
* runs the plugins.
|
|
24
|
-
*/
|
|
25
|
-
export function createDatabasePluginApis<
|
|
26
|
-
const TPlugins extends readonly AnyHotUpdaterPlugin[],
|
|
27
|
-
>(
|
|
28
|
-
database: unknown,
|
|
29
|
-
plugins: TPlugins,
|
|
30
|
-
options?: { readonly now?: () => number },
|
|
31
|
-
): PluginApis<TPlugins>;
|
|
32
|
-
export function createDatabasePluginApis(
|
|
33
|
-
database: unknown,
|
|
34
|
-
plugins: readonly unknown[],
|
|
35
|
-
options?: { readonly now?: () => number },
|
|
36
|
-
): Readonly<Record<string, unknown>>;
|
|
37
|
-
export function createDatabasePluginApis(
|
|
38
|
-
database: unknown,
|
|
39
|
-
plugins: readonly unknown[],
|
|
40
|
-
options: { readonly now?: () => number } = {},
|
|
41
|
-
): Readonly<Record<string, unknown>> {
|
|
42
|
-
const adapter = engineAdapterOf(database);
|
|
43
|
-
if (adapter === undefined) throw new Error(OFF_ENGINE_DATABASE);
|
|
44
|
-
// Batched aggregates compact before they are read, as on the server.
|
|
45
|
-
const { aggregateBatching } = database as Partial<EngineDatabase>;
|
|
46
|
-
return assemblePlugins(plugins, adapter, {
|
|
47
|
-
...options,
|
|
48
|
-
...(aggregateBatching === undefined ? {} : { batching: aggregateBatching }),
|
|
49
|
-
}).api;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export interface MeasuredDatabaseOptions {
|
|
53
|
-
readonly now?: () => number;
|
|
54
|
-
/** How core reads bundle manifests and resolves file URLs, for artifact resolution. */
|
|
55
|
-
readonly storage?: CoreStorage;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/** Core and the plugins' APIs on one engine in verify mode, and its read meter. */
|
|
59
|
-
export interface MeasuredDatabase<TApi = Readonly<Record<string, unknown>>> {
|
|
60
|
-
readonly core: CoreApi;
|
|
61
|
-
readonly api: TApi;
|
|
62
|
-
/** The client-route policy, when a plugin provides one. */
|
|
63
|
-
readonly clientAuth?: ClientAuth;
|
|
64
|
-
/** Runs `read` and reports what it read at both boundaries. */
|
|
65
|
-
measureReads<T>(read: () => Promise<T>): Promise<ReadMeasurement<T>>;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Core and the plugins over a storage adapter, assembled as
|
|
70
|
-
* `createHotUpdater` assembles them but on an engine in verify mode, with
|
|
71
|
-
* that engine's `measureReads`: what read-budget suites measure. The adapter
|
|
72
|
-
* runs as given, without the schema fence.
|
|
73
|
-
*/
|
|
74
|
-
export function createMeasuredDatabase<
|
|
75
|
-
const TPlugins extends readonly AnyHotUpdaterPlugin[],
|
|
76
|
-
>(
|
|
77
|
-
adapter: DatabaseAdapter,
|
|
78
|
-
plugins: TPlugins,
|
|
79
|
-
options?: MeasuredDatabaseOptions,
|
|
80
|
-
): MeasuredDatabase<PluginApis<TPlugins>>;
|
|
81
|
-
export function createMeasuredDatabase(
|
|
82
|
-
adapter: DatabaseAdapter,
|
|
83
|
-
plugins: readonly unknown[],
|
|
84
|
-
options?: MeasuredDatabaseOptions,
|
|
85
|
-
): MeasuredDatabase;
|
|
86
|
-
export function createMeasuredDatabase(
|
|
87
|
-
adapter: DatabaseAdapter,
|
|
88
|
-
plugins: readonly unknown[],
|
|
89
|
-
options: MeasuredDatabaseOptions = {},
|
|
90
|
-
): MeasuredDatabase {
|
|
91
|
-
const { core, api, clientAuth, measureReads } = assemblePlugins(
|
|
92
|
-
plugins,
|
|
93
|
-
adapter,
|
|
94
|
-
{ ...options, verify: true },
|
|
95
|
-
);
|
|
96
|
-
return {
|
|
97
|
-
core,
|
|
98
|
-
api,
|
|
99
|
-
...(clientAuth === undefined ? {} : { clientAuth }),
|
|
100
|
-
measureReads: measureReads!,
|
|
101
|
-
};
|
|
102
|
-
}
|