@mistriwork/engine 0.0.0-stage → 1.0.0-rc.10
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 +21 -0
- package/README.md +17 -2
- package/dist/adapters/adapter.d.ts +693 -0
- package/dist/adapters/adapter.js +444 -0
- package/dist/adapters/cache/cacheStore.d.ts +75 -0
- package/dist/adapters/cache/cacheStore.js +160 -0
- package/dist/adapters/cache/resp.d.ts +52 -0
- package/dist/adapters/cache/resp.js +237 -0
- package/dist/adapters/commands/canonicalJson.d.ts +19 -0
- package/dist/adapters/commands/canonicalJson.js +154 -0
- package/dist/adapters/connect.d.ts +29 -0
- package/dist/adapters/connect.js +40 -0
- package/dist/adapters/connectionBudget.d.ts +101 -0
- package/dist/adapters/connectionBudget.js +128 -0
- package/dist/adapters/dbLatency.d.ts +35 -0
- package/dist/adapters/dbLatency.js +79 -0
- package/dist/adapters/epochCache.d.ts +50 -0
- package/dist/adapters/epochCache.js +85 -0
- package/dist/adapters/http/egress.d.ts +48 -0
- package/dist/adapters/http/egress.js +175 -0
- package/dist/adapters/http/httpAdapter.d.ts +71 -0
- package/dist/adapters/http/httpAdapter.js +512 -0
- package/dist/adapters/http/httpDescription.d.ts +32 -0
- package/dist/adapters/http/httpDescription.js +246 -0
- package/dist/adapters/http/openapi.d.ts +98 -0
- package/dist/adapters/http/openapi.js +487 -0
- package/dist/adapters/layoutRefusal.d.ts +24 -0
- package/dist/adapters/layoutRefusal.js +35 -0
- package/dist/adapters/net/networkPolicy.d.ts +44 -0
- package/dist/adapters/net/networkPolicy.js +123 -0
- package/dist/adapters/net/untrustedDatabase.d.ts +18 -0
- package/dist/adapters/net/untrustedDatabase.js +120 -0
- package/dist/adapters/poolAdmission.d.ts +43 -0
- package/dist/adapters/poolAdmission.js +184 -0
- package/dist/adapters/poolMetrics.d.ts +121 -0
- package/dist/adapters/poolMetrics.js +185 -0
- package/dist/adapters/postgres.d.ts +436 -0
- package/dist/adapters/postgres.js +1890 -0
- package/dist/adapters/postgresCatalog.d.ts +96 -0
- package/dist/adapters/postgresCatalog.js +387 -0
- package/dist/adapters/postgresCatalogDigest.d.ts +30 -0
- package/dist/adapters/postgresCatalogDigest.js +87 -0
- package/dist/adapters/postgresCatalogRows.d.ts +62 -0
- package/dist/adapters/postgresCatalogRows.js +37 -0
- package/dist/adapters/postgresDates.d.ts +1 -0
- package/dist/adapters/postgresDates.js +39 -0
- package/dist/adapters/postgresMaintenance.d.ts +33 -0
- package/dist/adapters/postgresMaintenance.js +179 -0
- package/dist/adapters/postgresPool.d.ts +255 -0
- package/dist/adapters/postgresPool.js +838 -0
- package/dist/adapters/postgresPooler.d.ts +28 -0
- package/dist/adapters/postgresPooler.js +267 -0
- package/dist/adapters/postgresReadCatalog.d.ts +31 -0
- package/dist/adapters/postgresReadCatalog.js +226 -0
- package/dist/adapters/postgresReadSnapshot.d.ts +46 -0
- package/dist/adapters/postgresReadSnapshot.js +133 -0
- package/dist/adapters/postgresSchemaEpoch.d.ts +24 -0
- package/dist/adapters/postgresSchemaEpoch.js +149 -0
- package/dist/adapters/postgresTransactionHandle.d.ts +173 -0
- package/dist/adapters/postgresTransactionHandle.js +524 -0
- package/dist/adapters/postgresValues.d.ts +30 -0
- package/dist/adapters/postgresValues.js +75 -0
- package/dist/adapters/replicas.d.ts +70 -0
- package/dist/adapters/replicas.js +208 -0
- package/dist/adapters/reservedSql.d.ts +38 -0
- package/dist/adapters/reservedSql.js +264 -0
- package/dist/adapters/rolePrivileges.d.ts +17 -0
- package/dist/adapters/rolePrivileges.js +22 -0
- package/dist/adapters/scoped/keyRows.d.ts +65 -0
- package/dist/adapters/scoped/keyRows.js +173 -0
- package/dist/adapters/scoped/postgresScopeCatalog.d.ts +16 -0
- package/dist/adapters/scoped/postgresScopeCatalog.js +117 -0
- package/dist/adapters/scoped/scopedCommandOperations.d.ts +5 -0
- package/dist/adapters/scoped/scopedCommandOperations.js +48 -0
- package/dist/adapters/scoped/scopedReads.d.ts +20 -0
- package/dist/adapters/scoped/scopedReads.js +174 -0
- package/dist/adapters/scoped/scopedTransaction.d.ts +89 -0
- package/dist/adapters/scoped/scopedTransaction.js +303 -0
- package/dist/adapters/scoped/sqliteScopeCatalog.d.ts +16 -0
- package/dist/adapters/scoped/sqliteScopeCatalog.js +241 -0
- package/dist/adapters/scoped/updateGuard.d.ts +3 -0
- package/dist/adapters/scoped/updateGuard.js +40 -0
- package/dist/adapters/serverSettings.d.ts +45 -0
- package/dist/adapters/serverSettings.js +46 -0
- package/dist/adapters/sqlite.d.ts +262 -0
- package/dist/adapters/sqlite.js +1434 -0
- package/dist/adapters/sqliteCostlyReads.d.ts +33 -0
- package/dist/adapters/sqliteCostlyReads.js +49 -0
- package/dist/adapters/sqliteDecimals.d.ts +22 -0
- package/dist/adapters/sqliteDecimals.js +57 -0
- package/dist/adapters/sqliteHandles.d.ts +43 -0
- package/dist/adapters/sqliteHandles.js +143 -0
- package/dist/adapters/sqliteStatementProcess.d.ts +29 -0
- package/dist/adapters/sqliteStatementProcess.js +131 -0
- package/dist/adapters/statementControl.d.ts +34 -0
- package/dist/adapters/statementControl.js +90 -0
- package/dist/adapters/storeHost.d.ts +130 -0
- package/dist/adapters/storeHost.js +13 -0
- package/dist/adapters/telemetry/drivers.d.ts +21 -0
- package/dist/adapters/telemetry/drivers.js +321 -0
- package/dist/adapters/telemetry/metrics.d.ts +63 -0
- package/dist/adapters/telemetry/metrics.js +122 -0
- package/dist/adapters/telemetry/otlp.d.ts +12 -0
- package/dist/adapters/telemetry/otlp.js +320 -0
- package/dist/adapters/telemetry/otlpEncode.d.ts +48 -0
- package/dist/adapters/telemetry/otlpEncode.js +366 -0
- package/dist/adapters/telemetry/otlpEnv.d.ts +1 -0
- package/dist/adapters/telemetry/otlpEnv.js +12 -0
- package/dist/adapters/telemetry/serverTiming.d.ts +83 -0
- package/dist/adapters/telemetry/serverTiming.js +503 -0
- package/dist/adapters/telemetry/start.d.ts +10 -0
- package/dist/adapters/telemetry/start.js +25 -0
- package/dist/adapters/telemetry/statement.d.ts +16 -0
- package/dist/adapters/telemetry/statement.js +134 -0
- package/dist/adapters/telemetry/trace.d.ts +127 -0
- package/dist/adapters/telemetry/trace.js +295 -0
- package/dist/adapters/writeAhead.d.ts +27 -0
- package/dist/adapters/writeAhead.js +46 -0
- package/dist/adapters/writeAttribution.d.ts +18 -0
- package/dist/adapters/writeAttribution.js +23 -0
- package/dist/adapters/writeCapture.d.ts +73 -0
- package/dist/adapters/writeCapture.js +20 -0
- package/dist/adapters/writeLanes.d.ts +94 -0
- package/dist/adapters/writeLanes.js +232 -0
- package/dist/engine.d.ts +15 -0
- package/dist/engine.js +13 -0
- package/dist/server/auth/credentials.d.ts +61 -0
- package/dist/server/auth/credentials.js +260 -0
- package/dist/server/cacheService.d.ts +50 -0
- package/dist/server/cacheService.js +110 -0
- package/dist/server/cli/args.d.ts +176 -0
- package/dist/server/cli/args.js +342 -0
- package/dist/server/cli/bin.d.ts +5 -0
- package/dist/server/cli/bin.js +66 -0
- package/dist/server/cli/browser.d.ts +15 -0
- package/dist/server/cli/browser.js +37 -0
- package/dist/server/cli/config.d.ts +50 -0
- package/dist/server/cli/config.js +206 -0
- package/dist/server/cli/startup.d.ts +36 -0
- package/dist/server/cli/startup.js +128 -0
- package/dist/server/cli/startupOptions.d.ts +63 -0
- package/dist/server/cli/startupOptions.js +143 -0
- package/dist/server/cli/subcommand.d.ts +28 -0
- package/dist/server/cli/subcommand.js +32 -0
- package/dist/server/cli/usage.d.ts +13 -0
- package/dist/server/cli/usage.js +31 -0
- package/dist/server/clientHttp.d.ts +184 -0
- package/dist/server/clientHttp.js +700 -0
- package/dist/server/clientSurface.d.ts +128 -0
- package/dist/server/clientSurface.js +182 -0
- package/dist/server/columnGrants.d.ts +103 -0
- package/dist/server/columnGrants.js +730 -0
- package/dist/server/compileCache.d.ts +1 -0
- package/dist/server/compileCache.js +30 -0
- package/dist/server/config/locations.d.ts +1 -0
- package/dist/server/config/locations.js +15 -0
- package/dist/server/configPaths.d.ts +7 -0
- package/dist/server/configPaths.js +34 -0
- package/dist/server/configSections.d.ts +64 -0
- package/dist/server/configSections.js +72 -0
- package/dist/server/connectionRedaction.d.ts +30 -0
- package/dist/server/connectionRedaction.js +77 -0
- package/dist/server/connections.d.ts +353 -0
- package/dist/server/connections.js +978 -0
- package/dist/server/constraints.d.ts +82 -0
- package/dist/server/constraints.js +169 -0
- package/dist/server/demo.d.ts +9 -0
- package/dist/server/demo.js +554 -0
- package/dist/server/devclient.d.ts +108 -0
- package/dist/server/devclient.js +361 -0
- package/dist/server/evidence.d.ts +55 -0
- package/dist/server/evidence.js +323 -0
- package/dist/server/hiddenColumns.d.ts +32 -0
- package/dist/server/hiddenColumns.js +238 -0
- package/dist/server/http/baselineHeaders.d.ts +24 -0
- package/dist/server/http/baselineHeaders.js +12 -0
- package/dist/server/http/captured.d.ts +35 -0
- package/dist/server/http/captured.js +73 -0
- package/dist/server/http/clock.d.ts +1 -0
- package/dist/server/http/clock.js +14 -0
- package/dist/server/http/connectionSource.d.ts +4 -0
- package/dist/server/http/connectionSource.js +48 -0
- package/dist/server/http/context.d.ts +189 -0
- package/dist/server/http/context.js +11 -0
- package/dist/server/http/crawlerText.d.ts +15 -0
- package/dist/server/http/crawlerText.js +32 -0
- package/dist/server/http/dataRoutes.d.ts +88 -0
- package/dist/server/http/dataRoutes.js +137 -0
- package/dist/server/http/door.d.ts +57 -0
- package/dist/server/http/door.js +39 -0
- package/dist/server/http/exportRoute.d.ts +15 -0
- package/dist/server/http/exportRoute.js +320 -0
- package/dist/server/http/firstPaint.d.ts +108 -0
- package/dist/server/http/firstPaint.js +262 -0
- package/dist/server/http/httpOperationRoutes.d.ts +11 -0
- package/dist/server/http/httpOperationRoutes.js +50 -0
- package/dist/server/http/pageReads.d.ts +20 -0
- package/dist/server/http/pageReads.js +205 -0
- package/dist/server/http/pageRoutes.d.ts +39 -0
- package/dist/server/http/pageRoutes.js +291 -0
- package/dist/server/http/probes.d.ts +22 -0
- package/dist/server/http/probes.js +27 -0
- package/dist/server/http/rateLimit.d.ts +131 -0
- package/dist/server/http/rateLimit.js +351 -0
- package/dist/server/http/readRoutes.d.ts +9 -0
- package/dist/server/http/readRoutes.js +131 -0
- package/dist/server/http/readRouting.d.ts +20 -0
- package/dist/server/http/readRouting.js +80 -0
- package/dist/server/http/recordCompose.d.ts +67 -0
- package/dist/server/http/recordCompose.js +167 -0
- package/dist/server/http/recordWrites.d.ts +89 -0
- package/dist/server/http/recordWrites.js +298 -0
- package/dist/server/http/refusalReport.d.ts +38 -0
- package/dist/server/http/refusalReport.js +63 -0
- package/dist/server/http/reply.d.ts +130 -0
- package/dist/server/http/reply.js +394 -0
- package/dist/server/http/requestOrigin.d.ts +11 -0
- package/dist/server/http/requestOrigin.js +8 -0
- package/dist/server/http/router.d.ts +45 -0
- package/dist/server/http/router.js +22 -0
- package/dist/server/http/serverCore.d.ts +68 -0
- package/dist/server/http/serverCore.js +177 -0
- package/dist/server/http/traceRequest.d.ts +30 -0
- package/dist/server/http/traceRequest.js +224 -0
- package/dist/server/http/trust.d.ts +261 -0
- package/dist/server/http/trust.js +472 -0
- package/dist/server/http/writeRefusal.d.ts +33 -0
- package/dist/server/http/writeRefusal.js +24 -0
- package/dist/server/httpConnection.d.ts +49 -0
- package/dist/server/httpConnection.js +170 -0
- package/dist/server/impact.d.ts +55 -0
- package/dist/server/impact.js +47 -0
- package/dist/server/journal.d.ts +134 -0
- package/dist/server/journal.js +398 -0
- package/dist/server/keysetReadHttp.d.ts +52 -0
- package/dist/server/keysetReadHttp.js +85 -0
- package/dist/server/layouts.d.ts +49 -0
- package/dist/server/layouts.js +192 -0
- package/dist/server/migrate/cli.d.ts +55 -0
- package/dist/server/migrate/cli.js +517 -0
- package/dist/server/migrate/database.d.ts +37 -0
- package/dist/server/migrate/database.js +247 -0
- package/dist/server/migrate/desired.d.ts +76 -0
- package/dist/server/migrate/desired.js +292 -0
- package/dist/server/migrate/files.d.ts +34 -0
- package/dist/server/migrate/files.js +141 -0
- package/dist/server/migrate/flyway.d.ts +7 -0
- package/dist/server/migrate/flyway.js +69 -0
- package/dist/server/migrate/history.d.ts +70 -0
- package/dist/server/migrate/history.js +211 -0
- package/dist/server/migrate/runner.d.ts +100 -0
- package/dist/server/migrate/runner.js +409 -0
- package/dist/server/migrate/snapshot.d.ts +30 -0
- package/dist/server/migrate/snapshot.js +239 -0
- package/dist/server/migrate/target.d.ts +33 -0
- package/dist/server/migrate/target.js +82 -0
- package/dist/server/openapiDraft.d.ts +25 -0
- package/dist/server/openapiDraft.js +171 -0
- package/dist/server/operations/diagnostics.d.ts +101 -0
- package/dist/server/operations/diagnostics.js +284 -0
- package/dist/server/operations/requestMetrics.d.ts +33 -0
- package/dist/server/operations/requestMetrics.js +94 -0
- package/dist/server/packageVersion.d.ts +1 -0
- package/dist/server/packageVersion.js +11 -0
- package/dist/server/poolConfig.d.ts +34 -0
- package/dist/server/poolConfig.js +114 -0
- package/dist/server/product.d.ts +20 -0
- package/dist/server/product.js +12 -0
- package/dist/server/recordHistoryOperations.d.ts +39 -0
- package/dist/server/recordHistoryOperations.js +43 -0
- package/dist/server/recordWriteOperations.d.ts +111 -0
- package/dist/server/recordWriteOperations.js +329 -0
- package/dist/server/resourceReadHttp.d.ts +81 -0
- package/dist/server/resourceReadHttp.js +606 -0
- package/dist/server/resourceReadOperations.d.ts +147 -0
- package/dist/server/resourceReadOperations.js +452 -0
- package/dist/server/scaffoldMachine.d.ts +54 -0
- package/dist/server/scaffoldMachine.js +184 -0
- package/dist/server/seed/cli.d.ts +20 -0
- package/dist/server/seed/cli.js +164 -0
- package/dist/server/seed/lexicon.d.ts +26 -0
- package/dist/server/seed/lexicon.js +585 -0
- package/dist/server/seed/seed.d.ts +70 -0
- package/dist/server/seed/seed.js +779 -0
- package/dist/server/seed/words.d.ts +21 -0
- package/dist/server/seed/words.js +164 -0
- package/dist/server/serverRequests.d.ts +6 -0
- package/dist/server/serverRequests.js +33 -0
- package/dist/server/serverTimeouts.d.ts +33 -0
- package/dist/server/serverTimeouts.js +32 -0
- package/dist/server/shapeonly.d.ts +32 -0
- package/dist/server/shapeonly.js +110 -0
- package/dist/server/startupWarnings.d.ts +32 -0
- package/dist/server/startupWarnings.js +92 -0
- package/dist/shared/addressParams.d.ts +28 -0
- package/dist/shared/addressParams.js +47 -0
- package/dist/shared/appCards.d.ts +123 -0
- package/dist/shared/appCards.js +385 -0
- package/dist/shared/appComponents.d.ts +177 -0
- package/dist/shared/appComponents.js +422 -0
- package/dist/shared/appDocuments.d.ts +43 -0
- package/dist/shared/appDocuments.js +131 -0
- package/dist/shared/appEmbeds.d.ts +21 -0
- package/dist/shared/appEmbeds.js +24 -0
- package/dist/shared/appIcons.d.ts +28 -0
- package/dist/shared/appIcons.js +223 -0
- package/dist/shared/appLinks.d.ts +17 -0
- package/dist/shared/appLinks.js +124 -0
- package/dist/shared/appListColumns.d.ts +3 -0
- package/dist/shared/appListColumns.js +66 -0
- package/dist/shared/appLocale.d.ts +36 -0
- package/dist/shared/appLocale.js +86 -0
- package/dist/shared/appMessages.d.ts +44 -0
- package/dist/shared/appMessages.js +78 -0
- package/dist/shared/appNoun.d.ts +21 -0
- package/dist/shared/appNoun.js +32 -0
- package/dist/shared/autoBucket.d.ts +98 -0
- package/dist/shared/autoBucket.js +305 -0
- package/dist/shared/autoValues.d.ts +25 -0
- package/dist/shared/autoValues.js +25 -0
- package/dist/shared/breakdown.d.ts +228 -0
- package/dist/shared/breakdown.js +557 -0
- package/dist/shared/breakdowntext.d.ts +41 -0
- package/dist/shared/breakdowntext.js +400 -0
- package/dist/shared/builtInThemes.d.ts +2 -0
- package/dist/shared/builtInThemes.js +771 -0
- package/dist/shared/chartSeparation.d.ts +11 -0
- package/dist/shared/chartSeparation.js +58 -0
- package/dist/shared/clauses.d.ts +22 -0
- package/dist/shared/clauses.js +97 -0
- package/dist/shared/columnCaption.d.ts +16 -0
- package/dist/shared/columnCaption.js +90 -0
- package/dist/shared/commandFieldPath.d.ts +2 -0
- package/dist/shared/commandFieldPath.js +7 -0
- package/dist/shared/commandWire.d.ts +26 -0
- package/dist/shared/commandWire.js +41 -0
- package/dist/shared/computed.d.ts +161 -0
- package/dist/shared/computed.js +378 -0
- package/dist/shared/computedParse.d.ts +13 -0
- package/dist/shared/computedParse.js +278 -0
- package/dist/shared/computedValue.d.ts +47 -0
- package/dist/shared/computedValue.js +191 -0
- package/dist/shared/connection.d.ts +30 -0
- package/dist/shared/connection.js +1 -0
- package/dist/shared/csv.d.ts +20 -0
- package/dist/shared/csv.js +63 -0
- package/dist/shared/dashLayout.d.ts +30 -0
- package/dist/shared/dashLayout.js +132 -0
- package/dist/shared/dashboardAsks.d.ts +93 -0
- package/dist/shared/dashboardAsks.js +129 -0
- package/dist/shared/dashboardTrend.d.ts +20 -0
- package/dist/shared/dashboardTrend.js +50 -0
- package/dist/shared/declaredReferences.d.ts +50 -0
- package/dist/shared/declaredReferences.js +202 -0
- package/dist/shared/definedFields.d.ts +63 -0
- package/dist/shared/definedFields.js +103 -0
- package/dist/shared/definedValues.d.ts +63 -0
- package/dist/shared/definedValues.js +184 -0
- package/dist/shared/displayDefaults.d.ts +135 -0
- package/dist/shared/displayDefaults.js +529 -0
- package/dist/shared/dueDate.d.ts +6 -0
- package/dist/shared/dueDate.js +6 -0
- package/dist/shared/duration.d.ts +4 -0
- package/dist/shared/duration.js +23 -0
- package/dist/shared/fileBounds.d.ts +9 -0
- package/dist/shared/fileBounds.js +9 -0
- package/dist/shared/filter.d.ts +217 -0
- package/dist/shared/filter.js +305 -0
- package/dist/shared/firstPaint.d.ts +24 -0
- package/dist/shared/firstPaint.js +33 -0
- package/dist/shared/form.d.ts +21 -0
- package/dist/shared/form.js +25 -0
- package/dist/shared/formValues.d.ts +104 -0
- package/dist/shared/formValues.js +352 -0
- package/dist/shared/funnel.d.ts +45 -0
- package/dist/shared/funnel.js +108 -0
- package/dist/shared/httpOperations.d.ts +48 -0
- package/dist/shared/httpOperations.js +9 -0
- package/dist/shared/iconGlyphs.d.ts +4 -0
- package/dist/shared/iconGlyphs.js +151 -0
- package/dist/shared/iconWeights.d.ts +3 -0
- package/dist/shared/iconWeights.js +162 -0
- package/dist/shared/imageWidths.d.ts +32 -0
- package/dist/shared/imageWidths.js +38 -0
- package/dist/shared/keysetPage.d.ts +64 -0
- package/dist/shared/keysetPage.js +161 -0
- package/dist/shared/like.d.ts +20 -0
- package/dist/shared/like.js +29 -0
- package/dist/shared/listEmpty.d.ts +12 -0
- package/dist/shared/listEmpty.js +36 -0
- package/dist/shared/listFilters.d.ts +28 -0
- package/dist/shared/listFilters.js +84 -0
- package/dist/shared/listPresentations.d.ts +199 -0
- package/dist/shared/listPresentations.js +7 -0
- package/dist/shared/listQuestion.d.ts +52 -0
- package/dist/shared/listQuestion.js +137 -0
- package/dist/shared/lookPalettes.d.ts +62 -0
- package/dist/shared/lookPalettes.js +306 -0
- package/dist/shared/maskQuoted.d.ts +24 -0
- package/dist/shared/maskQuoted.js +48 -0
- package/dist/shared/mentionLabel.d.ts +19 -0
- package/dist/shared/mentionLabel.js +38 -0
- package/dist/shared/mentionLookup.d.ts +17 -0
- package/dist/shared/mentionLookup.js +64 -0
- package/dist/shared/menuCounts.d.ts +16 -0
- package/dist/shared/menuCounts.js +74 -0
- package/dist/shared/model.d.ts +79 -0
- package/dist/shared/model.js +153 -0
- package/dist/shared/money.d.ts +44 -0
- package/dist/shared/money.js +81 -0
- package/dist/shared/moneyEntry.d.ts +7 -0
- package/dist/shared/moneyEntry.js +27 -0
- package/dist/shared/mount.d.ts +118 -0
- package/dist/shared/mount.js +248 -0
- package/dist/shared/niceTicks.d.ts +26 -0
- package/dist/shared/niceTicks.js +50 -0
- package/dist/shared/order.d.ts +59 -0
- package/dist/shared/order.js +133 -0
- package/dist/shared/page.d.ts +135 -0
- package/dist/shared/page.js +1187 -0
- package/dist/shared/pageAnatomy.d.ts +99 -0
- package/dist/shared/pageAnatomy.js +370 -0
- package/dist/shared/pageConfig.d.ts +25 -0
- package/dist/shared/pageConfig.js +1308 -0
- package/dist/shared/pageEmptyActions.d.ts +12 -0
- package/dist/shared/pageEmptyActions.js +20 -0
- package/dist/shared/pageLayouts.d.ts +72 -0
- package/dist/shared/pageLayouts.js +205 -0
- package/dist/shared/pageModel.d.ts +785 -0
- package/dist/shared/pageModel.js +121 -0
- package/dist/shared/pagePaths.d.ts +180 -0
- package/dist/shared/pagePaths.js +869 -0
- package/dist/shared/pagePlans.d.ts +52 -0
- package/dist/shared/pagePlans.js +108 -0
- package/dist/shared/pageRoutes.d.ts +9 -0
- package/dist/shared/pageRoutes.js +9 -0
- package/dist/shared/query.d.ts +166 -0
- package/dist/shared/query.js +1302 -0
- package/dist/shared/queryDates.d.ts +12 -0
- package/dist/shared/queryDates.js +101 -0
- package/dist/shared/queryOperands.d.ts +99 -0
- package/dist/shared/queryOperands.js +131 -0
- package/dist/shared/reads.d.ts +103 -0
- package/dist/shared/reads.js +154 -0
- package/dist/shared/recordLabel.d.ts +51 -0
- package/dist/shared/recordLabel.js +123 -0
- package/dist/shared/recordReadKeys.d.ts +30 -0
- package/dist/shared/recordReadKeys.js +51 -0
- package/dist/shared/recordReads.d.ts +268 -0
- package/dist/shared/recordReads.js +368 -0
- package/dist/shared/recordview.d.ts +198 -0
- package/dist/shared/recordview.js +356 -0
- package/dist/shared/referenceModel.d.ts +58 -0
- package/dist/shared/referenceModel.js +194 -0
- package/dist/shared/refusal.d.ts +64 -0
- package/dist/shared/refusal.js +144 -0
- package/dist/shared/relatedCreate.d.ts +30 -0
- package/dist/shared/relatedCreate.js +162 -0
- package/dist/shared/resourceHttp.d.ts +464 -0
- package/dist/shared/resourceHttp.js +1 -0
- package/dist/shared/richText.d.ts +85 -0
- package/dist/shared/richText.js +305 -0
- package/dist/shared/rollups.d.ts +143 -0
- package/dist/shared/rollups.js +64 -0
- package/dist/shared/rowScope.d.ts +72 -0
- package/dist/shared/rowScope.js +376 -0
- package/dist/shared/runtimeTables.d.ts +44 -0
- package/dist/shared/runtimeTables.js +79 -0
- package/dist/shared/schema.d.ts +523 -0
- package/dist/shared/schema.js +627 -0
- package/dist/shared/schematext.d.ts +38 -0
- package/dist/shared/schematext.js +101 -0
- package/dist/shared/scopeCatalog.d.ts +29 -0
- package/dist/shared/scopeCatalog.js +468 -0
- package/dist/shared/servedApp.d.ts +681 -0
- package/dist/shared/servedApp.js +45 -0
- package/dist/shared/sessionLease.d.ts +34 -0
- package/dist/shared/sessionLease.js +3 -0
- package/dist/shared/shape.d.ts +55 -0
- package/dist/shared/shape.js +168 -0
- package/dist/shared/slug.d.ts +1 -0
- package/dist/shared/slug.js +12 -0
- package/dist/shared/sortText.d.ts +14 -0
- package/dist/shared/sortText.js +26 -0
- package/dist/shared/sqlRelation.d.ts +4 -0
- package/dist/shared/sqlRelation.js +8 -0
- package/dist/shared/sqlsaved.d.ts +44 -0
- package/dist/shared/sqlsaved.js +63 -0
- package/dist/shared/stitchedPaths.d.ts +27 -0
- package/dist/shared/stitchedPaths.js +38 -0
- package/dist/shared/structuredFilter.d.ts +22 -0
- package/dist/shared/structuredFilter.js +1 -0
- package/dist/shared/subtitlePath.d.ts +20 -0
- package/dist/shared/subtitlePath.js +24 -0
- package/dist/shared/suggest.d.ts +18 -0
- package/dist/shared/suggest.js +59 -0
- package/dist/shared/tableSizing.d.ts +4 -0
- package/dist/shared/tableSizing.js +9 -0
- package/dist/shared/tagLists.d.ts +57 -0
- package/dist/shared/tagLists.js +34 -0
- package/dist/shared/textRules.d.ts +54 -0
- package/dist/shared/textRules.js +133 -0
- package/dist/shared/theme.d.ts +94 -0
- package/dist/shared/theme.js +800 -0
- package/dist/shared/themeColor.d.ts +34 -0
- package/dist/shared/themeColor.js +109 -0
- package/dist/shared/themeFaces.d.ts +30 -0
- package/dist/shared/themeFaces.js +42 -0
- package/dist/shared/themeInk.d.ts +20 -0
- package/dist/shared/themeInk.js +52 -0
- package/dist/shared/themeLooks.d.ts +9 -0
- package/dist/shared/themeLooks.js +572 -0
- package/dist/shared/themeParts.d.ts +26 -0
- package/dist/shared/themeParts.js +71 -0
- package/dist/shared/themePartsCheck.d.ts +21 -0
- package/dist/shared/themePartsCheck.js +91 -0
- package/dist/shared/themePresets.d.ts +85 -0
- package/dist/shared/themePresets.js +139 -0
- package/dist/shared/themeRecipeWords.d.ts +156 -0
- package/dist/shared/themeRecipeWords.js +156 -0
- package/dist/shared/themeRecipes.d.ts +213 -0
- package/dist/shared/themeRecipes.js +234 -0
- package/dist/shared/themeResolve.d.ts +55 -0
- package/dist/shared/themeResolve.js +52 -0
- package/dist/shared/themeTokens.d.ts +107 -0
- package/dist/shared/themeTokens.js +116 -0
- package/dist/shared/themeType.d.ts +38 -0
- package/dist/shared/themeType.js +205 -0
- package/dist/shared/unitWord.d.ts +4 -0
- package/dist/shared/unitWord.js +37 -0
- package/dist/shared/view.d.ts +195 -0
- package/dist/shared/view.js +987 -0
- package/dist/shared/viewLabels.d.ts +47 -0
- package/dist/shared/viewLabels.js +459 -0
- package/dist/shared/viewPaths.d.ts +248 -0
- package/dist/shared/viewPaths.js +294 -0
- package/dist/shared/viewtext.d.ts +57 -0
- package/dist/shared/viewtext.js +282 -0
- package/dist/shared/vocabulary.d.ts +71 -0
- package/dist/shared/vocabulary.js +249 -0
- package/dist/shared/weekStart.d.ts +7 -0
- package/dist/shared/weekStart.js +36 -0
- package/mark.svg +1 -0
- package/package.json +261 -4
- package/schema/model.d.ts +298 -0
- package/schema/theme.d.ts +587 -0
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a connection pool can say about itself: how long each checkout waited
|
|
3
|
+
* for a connection, how long it held one, and how full the pool is now.
|
|
4
|
+
*
|
|
5
|
+
* Engine-neutral and fixed-size: cumulative counters and bucket counts on the
|
|
6
|
+
* HTTP request metrics' bounds, so the operator surface carries them without
|
|
7
|
+
* learning a driver, and their size never grows with traffic. One meter per
|
|
8
|
+
* role of a pool — the readers, the writers, the background writer — and nothing in it names the
|
|
9
|
+
* database, because the operator surface must not.
|
|
10
|
+
*/
|
|
11
|
+
/** Inclusive upper bounds, the same as the HTTP request metrics', so one scale reads both. */
|
|
12
|
+
export const POOL_DURATION_BOUNDS_MS = Object.freeze([1, 5, 10, 25, 50, 100, 250, 500, 1_000, 2_500, 5_000, 10_000, 30_000]);
|
|
13
|
+
/** How long a checkout that timed out keeps its pool marked saturated. */
|
|
14
|
+
const SATURATION_MEMORY_MS = 60_000;
|
|
15
|
+
/**
|
|
16
|
+
* How long a checkout may queue behind a full pool before it is refused, and
|
|
17
|
+
* how many may queue (per connection the pool holds). Without them a
|
|
18
|
+
* saturated server held every request for the driver's ten-second timeout and
|
|
19
|
+
* then failed it as a 500: slow, and no better informed. Past either bound the
|
|
20
|
+
* request is refused at once, as busy, and its client is told to come back.
|
|
21
|
+
*
|
|
22
|
+
* The count is about as many checkouts as a connection works through in that
|
|
23
|
+
* wait (a few tens of milliseconds each): past it, the wait would run out
|
|
24
|
+
* anyway. At eight, a burst a server answers well inside the wait was refused
|
|
25
|
+
* at once — a page's boot has up to eight reads in flight, and a field report saw
|
|
26
|
+
* two thirds of the tabs opened at one moment by 25 people turned away busy
|
|
27
|
+
* on a server with its loop idle. The wait is what bounds a slow server.
|
|
28
|
+
* Who gets the places in the line, account by account, is poolAdmission.ts's.
|
|
29
|
+
*/
|
|
30
|
+
export const POOL_QUEUE_WAIT_MS = 2_000;
|
|
31
|
+
export const POOL_QUEUE_PER_CONNECTION = 64;
|
|
32
|
+
/** What a person is told when the server is busy, and how soon to try again. */
|
|
33
|
+
export const POOL_BUSY_MESSAGE = 'The server is busy; try again in a moment.';
|
|
34
|
+
const POOL_BUSY_RETRY_AFTER_SECONDS = 1;
|
|
35
|
+
/** How long a pool the server refused stays at the connections it holds before it asks for more: its idle timeout. */
|
|
36
|
+
export const POOL_LIMIT_HOLD_MS = 30_000;
|
|
37
|
+
/**
|
|
38
|
+
* A checkout refused because the pool is full and its queue is too long or
|
|
39
|
+
* has waited too long, or because the database refused this process another
|
|
40
|
+
* connection and the pool held none to wait for (`connection_limit`, the
|
|
41
|
+
* refusal as its cause). Thrown before anything was leased, so no statement
|
|
42
|
+
* ran: a read can be asked again and a write was never begun.
|
|
43
|
+
*/
|
|
44
|
+
export class PoolBusy extends Error {
|
|
45
|
+
role;
|
|
46
|
+
why;
|
|
47
|
+
constructor(role, why, cause) {
|
|
48
|
+
super(POOL_BUSY_MESSAGE, cause === undefined ? undefined : { cause });
|
|
49
|
+
this.role = role;
|
|
50
|
+
this.why = why;
|
|
51
|
+
this.name = 'PoolBusy';
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* When to come back after a refused checkout. A full queue clears in a moment; a pool the database refused another
|
|
56
|
+
* connection holds at what it has and asks for more only after POOL_LIMIT_HOLD_MS, so a retry in one second lands on
|
|
57
|
+
* the same refusal. A `connection_limit` refusal says the hold's length instead.
|
|
58
|
+
*/
|
|
59
|
+
export function poolBusyRetryAfterSeconds(error) {
|
|
60
|
+
let at = error;
|
|
61
|
+
for (let depth = 0; depth < 4 && at && typeof at === 'object'; depth++) {
|
|
62
|
+
if (at instanceof PoolBusy)
|
|
63
|
+
return at.why === 'connection_limit' ? POOL_LIMIT_HOLD_MS / 1000 : POOL_BUSY_RETRY_AFTER_SECONDS;
|
|
64
|
+
at = at.cause;
|
|
65
|
+
}
|
|
66
|
+
return POOL_BUSY_RETRY_AFTER_SECONDS;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Whether `error` is a refused checkout, anywhere in its causes, and not one
|
|
70
|
+
* that reports an unknown outcome (a transaction whose commit was never
|
|
71
|
+
* acknowledged is not "busy": it may have landed).
|
|
72
|
+
*/
|
|
73
|
+
export function isPoolBusy(error) {
|
|
74
|
+
let at = error;
|
|
75
|
+
for (let depth = 0; depth < 4 && at && typeof at === 'object'; depth++) {
|
|
76
|
+
if (at.name === 'TransactionOutcomeUnknown' || at.outcome === 'unknown')
|
|
77
|
+
return false;
|
|
78
|
+
if (at instanceof PoolBusy)
|
|
79
|
+
return true;
|
|
80
|
+
at = at.cause;
|
|
81
|
+
}
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
function record(buckets, ms) {
|
|
85
|
+
const at = Number.isFinite(ms) && ms > 0 ? ms : 0;
|
|
86
|
+
const index = POOL_DURATION_BOUNDS_MS.findIndex((bound) => at <= bound);
|
|
87
|
+
buckets[index < 0 ? POOL_DURATION_BOUNDS_MS.length : index] += 1;
|
|
88
|
+
}
|
|
89
|
+
export class PoolMeter {
|
|
90
|
+
role;
|
|
91
|
+
size;
|
|
92
|
+
now;
|
|
93
|
+
leased = 0;
|
|
94
|
+
pending = 0;
|
|
95
|
+
checkouts = 0;
|
|
96
|
+
queued = 0;
|
|
97
|
+
timeouts = 0;
|
|
98
|
+
failures = 0;
|
|
99
|
+
lastTimeoutAt = Number.NEGATIVE_INFINITY;
|
|
100
|
+
waits = Array(POOL_DURATION_BOUNDS_MS.length + 1).fill(0);
|
|
101
|
+
holds = Array(POOL_DURATION_BOUNDS_MS.length + 1).fill(0);
|
|
102
|
+
constructor(role, size, now = () => performance.now()) {
|
|
103
|
+
this.role = role;
|
|
104
|
+
this.size = size;
|
|
105
|
+
this.now = now;
|
|
106
|
+
}
|
|
107
|
+
/** Every connection is leased or being opened: a checkout begun now waits. */
|
|
108
|
+
full() {
|
|
109
|
+
return this.leased + this.pending >= this.size;
|
|
110
|
+
}
|
|
111
|
+
/** Checkouts queued now behind a pool whose every connection is in use. */
|
|
112
|
+
waiting() {
|
|
113
|
+
return Math.max(0, this.pending - Math.max(0, this.size - this.leased));
|
|
114
|
+
}
|
|
115
|
+
/** A checkout turned away before it began: counted as a timeout, so the pool reads saturated and readiness says so. */
|
|
116
|
+
refuse() {
|
|
117
|
+
this.checkouts += 1;
|
|
118
|
+
this.queued += 1;
|
|
119
|
+
this.timeouts += 1;
|
|
120
|
+
this.lastTimeoutAt = this.now();
|
|
121
|
+
record(this.waits, 0);
|
|
122
|
+
}
|
|
123
|
+
begin() {
|
|
124
|
+
const started = this.now();
|
|
125
|
+
/* Every connection is leased, or being opened for a checkout ahead of
|
|
126
|
+
this one: this one waits in the driver's queue, not for a dial. */
|
|
127
|
+
if (this.leased + this.pending >= this.size)
|
|
128
|
+
this.queued += 1;
|
|
129
|
+
this.checkouts += 1;
|
|
130
|
+
this.pending += 1;
|
|
131
|
+
let settled = false;
|
|
132
|
+
return {
|
|
133
|
+
acquired: () => {
|
|
134
|
+
if (settled)
|
|
135
|
+
return () => { };
|
|
136
|
+
settled = true;
|
|
137
|
+
this.pending -= 1;
|
|
138
|
+
this.leased += 1;
|
|
139
|
+
const at = this.now();
|
|
140
|
+
record(this.waits, at - started);
|
|
141
|
+
let returned = false;
|
|
142
|
+
return () => {
|
|
143
|
+
if (returned)
|
|
144
|
+
return;
|
|
145
|
+
returned = true;
|
|
146
|
+
this.leased -= 1;
|
|
147
|
+
record(this.holds, this.now() - at);
|
|
148
|
+
};
|
|
149
|
+
},
|
|
150
|
+
failed: (timedOut) => {
|
|
151
|
+
if (settled)
|
|
152
|
+
return;
|
|
153
|
+
settled = true;
|
|
154
|
+
this.pending -= 1;
|
|
155
|
+
const at = this.now();
|
|
156
|
+
// A checkout that timed out waited longest of all; it is the sample that matters most.
|
|
157
|
+
record(this.waits, at - started);
|
|
158
|
+
if (timedOut) {
|
|
159
|
+
this.timeouts += 1;
|
|
160
|
+
this.lastTimeoutAt = at;
|
|
161
|
+
}
|
|
162
|
+
else
|
|
163
|
+
this.failures += 1;
|
|
164
|
+
},
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
stats(pooler, open) {
|
|
168
|
+
const waiting = this.waiting();
|
|
169
|
+
return Object.freeze({
|
|
170
|
+
role: this.role,
|
|
171
|
+
pooler,
|
|
172
|
+
size: this.size,
|
|
173
|
+
open,
|
|
174
|
+
inUse: this.leased,
|
|
175
|
+
waiting,
|
|
176
|
+
saturated: waiting > 0 || this.now() - this.lastTimeoutAt < SATURATION_MEMORY_MS,
|
|
177
|
+
checkouts: this.checkouts,
|
|
178
|
+
queued: this.queued,
|
|
179
|
+
timedOut: this.timeouts,
|
|
180
|
+
failed: this.failures,
|
|
181
|
+
waitBuckets: Object.freeze([...this.waits]),
|
|
182
|
+
holdBuckets: Object.freeze([...this.holds]),
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
}
|
|
@@ -0,0 +1,436 @@
|
|
|
1
|
+
import { type Adapter, type Filter, type QueryRequest, type QueryResult, type ScopedReads, type SqlRequest, type SqlResult, type ViewResult, type BreakdownResult, type ExplainRequest, type ExplainResult, type ProfileResult, TransactionOperations, type WriteTransaction, type DeleteRequest, type DeleteResult, type InsertRequest, type InsertResult, type UpdateRequest, type UpdateResult, type CountItem, type RolePrivileges, type SqlStyle } from './adapter.js';
|
|
2
|
+
import { type PostgresScopeCatalog } from './scoped/postgresScopeCatalog.js';
|
|
3
|
+
import { type PinnedPostgresReadOwner, type PostgresReadDependency } from './postgresReadCatalog.js';
|
|
4
|
+
import type { DatabaseSchema } from '../shared/schema.js';
|
|
5
|
+
import { type ViewDef } from '../shared/view.js';
|
|
6
|
+
import { type BreakdownDef } from '../shared/breakdown.js';
|
|
7
|
+
import { PgConnectionManager, type PgConnectionOptions, type PgQuery, type SharedPoolShape } from './postgresPool.js';
|
|
8
|
+
import { type PipelinedStatement } from './postgresTransactionHandle.js';
|
|
9
|
+
import type { PoolRoleStats } from './poolMetrics.js';
|
|
10
|
+
import { type RowScope } from '../shared/rowScope.js';
|
|
11
|
+
import { type PostgresReadSnapshot } from './postgresReadSnapshot.js';
|
|
12
|
+
/** Constructor-issued source identity, checked without reading receiver data. */
|
|
13
|
+
export declare const isPostgresVerifiedCommandSource: (value: unknown) => value is PostgresAdapter;
|
|
14
|
+
export type { PostgresReadSnapshot } from './postgresReadSnapshot.js';
|
|
15
|
+
/** For the budget tests: how many times this process described a PostgreSQL catalog, and how many were found kept. */
|
|
16
|
+
export declare function postgresDescriptionCounts(): Readonly<{
|
|
17
|
+
described: number;
|
|
18
|
+
kept: number;
|
|
19
|
+
}>;
|
|
20
|
+
/**
|
|
21
|
+
* An adapter on the manager every adapter of `url` with this `shape` shares (sharedPgConnections): its own catalog,
|
|
22
|
+
* lanes and stores, the pools of its neighbors. Closing it lets its share go; the pools close with the last one.
|
|
23
|
+
*/
|
|
24
|
+
export declare function sharedPostgresAdapter(url: string, label: string, shape?: SharedPoolShape): PostgresAdapter;
|
|
25
|
+
export declare class PostgresAdapter implements Adapter {
|
|
26
|
+
private label;
|
|
27
|
+
/** Restrict to these schemas. Empty means every non-system schema. */
|
|
28
|
+
private schemas;
|
|
29
|
+
readonly dialect: 'postgres';
|
|
30
|
+
private connections;
|
|
31
|
+
private writes;
|
|
32
|
+
private readonly describes;
|
|
33
|
+
private readonly database;
|
|
34
|
+
private readonly catalogCache;
|
|
35
|
+
/** The epoch each open write transaction read, by the handle it runs on. */
|
|
36
|
+
private readonly txEpochs;
|
|
37
|
+
private epochStore;
|
|
38
|
+
/** `work`, forgetting the kept catalog if it dies on a table or column that is gone: what was kept is wrong. */
|
|
39
|
+
private watched;
|
|
40
|
+
constructor(connectionString: string, label?: string,
|
|
41
|
+
/** Restrict to these schemas. Empty means every non-system schema. */
|
|
42
|
+
schemas?: string[], connections?: PgConnectionManager,
|
|
43
|
+
/** The reader count the connection's config names; the process defaults fill the rest. */
|
|
44
|
+
pool?: PgConnectionOptions);
|
|
45
|
+
private verifiedSource;
|
|
46
|
+
/** The pools' meters, for the operator surface. */
|
|
47
|
+
poolStats(): readonly PoolRoleStats[];
|
|
48
|
+
/** Each replica's state, when the connection names any (replicas.ts). */
|
|
49
|
+
replicaHealth(): ReturnType<PgConnectionManager['replicaHealth']>;
|
|
50
|
+
private conn;
|
|
51
|
+
/**
|
|
52
|
+
* Run a statement the user wrote.
|
|
53
|
+
*
|
|
54
|
+
* The session already carries `default_transaction_read_only = on`, and for
|
|
55
|
+
* everything else in this adapter that is enough, because every statement is
|
|
56
|
+
* one this file built. It is **not** enough here: `SET
|
|
57
|
+
* default_transaction_read_only = off` is itself a statement, and a user who
|
|
58
|
+
* typed it followed by a `DELETE` would get both.
|
|
59
|
+
*
|
|
60
|
+
* `BEGIN READ ONLY` is the version that holds, for one statement. Postgres
|
|
61
|
+
* refuses `SET TRANSACTION READ WRITE` once the transaction has taken its
|
|
62
|
+
* first snapshot, and one statement takes it before it runs. It does not hold
|
|
63
|
+
* against several: `COMMIT; BEGIN READ WRITE; DELETE …` ends the read-only
|
|
64
|
+
* transaction and opens a writable one. So the text goes on the extended
|
|
65
|
+
* protocol (`queryMode: 'extended'`), where Postgres itself refuses a second
|
|
66
|
+
* statement; refuseStacked is the earlier, clearer refusal, not the guard.
|
|
67
|
+
* (node-postgres sends a query with an empty `values` on the simple protocol,
|
|
68
|
+
* which runs every statement in the string.) The `ROLLBACK` afterwards also
|
|
69
|
+
* discards any session state the statement set, so one run cannot change what
|
|
70
|
+
* the next one means.
|
|
71
|
+
*
|
|
72
|
+
* The rollback runs in a `finally`: a statement that errors has still opened
|
|
73
|
+
* a transaction, and leaving it open would leave the connection in an aborted
|
|
74
|
+
* state where every later query fails with "current transaction is aborted".
|
|
75
|
+
*
|
|
76
|
+
* `write: true` is the other half, and it is a different request rather than
|
|
77
|
+
* a relaxation of this one: a separate handle, no READ ONLY transaction, and
|
|
78
|
+
* a decision made further up about whether this connection may write at all.
|
|
79
|
+
* The two paths share the statement text and nothing else.
|
|
80
|
+
*/
|
|
81
|
+
runSql(request: SqlRequest): Promise<SqlResult>;
|
|
82
|
+
/**
|
|
83
|
+
* EXPLAIN, plain — never the analysing variant that executes to time.
|
|
84
|
+
*
|
|
85
|
+
* `runSql`'s bounding wrap is precisely wrong here: a statement made a
|
|
86
|
+
* derived table is a different statement, with a different plan. The text
|
|
87
|
+
* goes to the planner as written, inside the same READ ONLY transaction
|
|
88
|
+
* every user statement gets — so even a smuggled write is only ever
|
|
89
|
+
* planned, and an execution attempt is the transaction's to refuse, not a
|
|
90
|
+
* string check's.
|
|
91
|
+
*/
|
|
92
|
+
explainSql(request: ExplainRequest): Promise<ExplainResult>;
|
|
93
|
+
/**
|
|
94
|
+
* The planner's own statistics, read rather than computed.
|
|
95
|
+
*
|
|
96
|
+
* `pg_stats` already holds the null share, the distinct estimate, the most
|
|
97
|
+
* common values with their frequencies, and the histogram — ANALYZE paid
|
|
98
|
+
* for them, reading them touches no user table. The numbers are
|
|
99
|
+
* sample-based and stale until the next ANALYZE, which is what
|
|
100
|
+
* `source: 'statistics'` tells the caller; a column ANALYZE has never
|
|
101
|
+
* visited simply has no numbers, which beats invented ones.
|
|
102
|
+
*/
|
|
103
|
+
profile(table: string): Promise<ProfileResult>;
|
|
104
|
+
introspect(): Promise<DatabaseSchema>;
|
|
105
|
+
private introspectNow;
|
|
106
|
+
private scopeStyleRead?;
|
|
107
|
+
/**
|
|
108
|
+
* The style a row-scoped read compiles with on this server: its CTEs
|
|
109
|
+
* inlined from Postgres 12 on (POSTGRES_INLINE_STYLE). Asked once per
|
|
110
|
+
* adapter; a failed ask is not remembered, and that read compiles as
|
|
111
|
+
* before — the hint is a plan, never a rule about rows.
|
|
112
|
+
*/
|
|
113
|
+
scopeStyle(): Promise<SqlStyle>;
|
|
114
|
+
/** The role's reach, asked of the catalog on the reader (rolePrivileges.ts). */
|
|
115
|
+
privileges(): Promise<RolePrivileges>;
|
|
116
|
+
/** The catalog as one handle sees it, read by postgresCatalog.ts: the
|
|
117
|
+
* reader on connect, or the leased writer inside a scoped transaction,
|
|
118
|
+
* where the same description is the evidence the deployed permissions are
|
|
119
|
+
* attested against. */
|
|
120
|
+
private describe;
|
|
121
|
+
/** The catalog as `db` sees it at `version`, read there before: a copy of the one kept under it (sharedDescriptions),
|
|
122
|
+
* or described now and kept. Another adapter's copy carries this one's label. */
|
|
123
|
+
private describedAt;
|
|
124
|
+
/** A snapshot's description: the digest first, in the same snapshot, then the description kept under it or a new one. */
|
|
125
|
+
private describeSnapshot;
|
|
126
|
+
/** `version`, the exact one `db`'s transaction just read, said for what it attests next (noteCatalogVersion); a time-filed one is not said. */
|
|
127
|
+
private versionRead;
|
|
128
|
+
/** How a write (READ COMMITTED) reads `version` again, the digest or the epoch as it read it; a time-filed one is not read. */
|
|
129
|
+
private rereadOf;
|
|
130
|
+
/**
|
|
131
|
+
* The catalog as a scoped transaction's writer sees it, described again
|
|
132
|
+
* only when it has moved. Every transaction reads the catalog digest
|
|
133
|
+
* (postgresCatalogDigest.ts) — one statement where a description is six —
|
|
134
|
+
* and reuses a description read just after the same digest was, by this
|
|
135
|
+
* adapter or another of the same database (sharedDescriptions). Read
|
|
136
|
+
* before, never after: DDL committing
|
|
137
|
+
* between the two then leaves a digest no later read can match, so the
|
|
138
|
+
* description is taken again rather than trusted on a digest it postdates.
|
|
139
|
+
* The digest covers every schema but the system's, a superset of what
|
|
140
|
+
* this adapter describes, and moves with privileges and roles too. What it
|
|
141
|
+
* does not see, comments and the planner's row estimates, is display and
|
|
142
|
+
* never authority.
|
|
143
|
+
*/
|
|
144
|
+
private describeScoped;
|
|
145
|
+
/**
|
|
146
|
+
* Begin a write transaction and read the schema epoch in the same message:
|
|
147
|
+
* `BEGIN`, the LOCK a scope pinned last time under the epoch it expects,
|
|
148
|
+
* and the epoch statement, in one round trip (the simple protocol carries
|
|
149
|
+
* several statements when none has parameters). The LOCK comes first, so
|
|
150
|
+
* DDL on a pinned table after the epoch was read has to wait for this
|
|
151
|
+
* transaction; whether the lock was the right one is then decided by the
|
|
152
|
+
* epoch alone. A message that fails — the store gone, a pinned table
|
|
153
|
+
* dropped, a privilege revoked — is only a miss: rolled back, begun again
|
|
154
|
+
* plainly, and the transaction describes what it needs as before.
|
|
155
|
+
*/
|
|
156
|
+
private openWrite;
|
|
157
|
+
/**
|
|
158
|
+
* Without the epoch store, a scoped transaction reads the catalog digest
|
|
159
|
+
* (postgresCatalogDigest.ts) — it always did, to describe the scope — and
|
|
160
|
+
* the digest is then its epoch: one statement that moves with every catalog
|
|
161
|
+
* row the scope, a relation's kind and columns, and the journal's layout
|
|
162
|
+
* depend on, role membership, and (for a command) the journal's meta row.
|
|
163
|
+
* Read in the message that begins the transaction, after the LOCK the scope
|
|
164
|
+
* pinned last time, as the epoch is. Slower than the epoch store's one row,
|
|
165
|
+
* never less exact; a message that fails begins again the long way.
|
|
166
|
+
*/
|
|
167
|
+
private openWithDigest;
|
|
168
|
+
/**
|
|
169
|
+
* A reserved store's layout, attested the first time this adapter reads it
|
|
170
|
+
* and not again (attestOnce, postgresTransactionHandle.ts): told whether it
|
|
171
|
+
* stands attested. A read that fails the way a moved catalog fails one
|
|
172
|
+
* forgets it, and the next read attests in full.
|
|
173
|
+
*/
|
|
174
|
+
private attestedStore;
|
|
175
|
+
/** A journal's layout and meta row, attested the first time this adapter opens a transaction with it (a journal
|
|
176
|
+
that names no meta row, in every transaction). */
|
|
177
|
+
private attestJournal;
|
|
178
|
+
query(request: QueryRequest): Promise<QueryResult>;
|
|
179
|
+
scopeReads(input: RowScope): Promise<ScopedReads>;
|
|
180
|
+
private queryOn;
|
|
181
|
+
/**
|
|
182
|
+
* Run a compiled view.
|
|
183
|
+
*
|
|
184
|
+
* Note what is *not* here: any check that the tables named in the view
|
|
185
|
+
* exist. `compileView` resolves the base table and every hop against the
|
|
186
|
+
* introspected catalog and refuses anything it cannot find, so the only
|
|
187
|
+
* identifiers that reach the quoting step are ones the catalog produced.
|
|
188
|
+
* The user's contribution — the values — never leaves the parameter array.
|
|
189
|
+
*
|
|
190
|
+
* The dialect difference this exercises is placeholder numbering:
|
|
191
|
+
* `POSTGRES_STYLE` counts $1..$n across the whole statement, and the joins
|
|
192
|
+
* sitting between the SELECT list and the WHERE clause are exactly what
|
|
193
|
+
* makes an off-by-one here easy and invisible.
|
|
194
|
+
*/
|
|
195
|
+
runView(view: ViewDef, offset?: number): Promise<ViewResult>;
|
|
196
|
+
runBreakdown(breakdown: BreakdownDef, offset?: number): Promise<BreakdownResult>;
|
|
197
|
+
countBreakdown(breakdown: BreakdownDef, limit?: number): Promise<number>;
|
|
198
|
+
countView(view: ViewDef, limit?: number): Promise<number>;
|
|
199
|
+
private cachedSchema;
|
|
200
|
+
private schema;
|
|
201
|
+
/**
|
|
202
|
+
* The planner's row estimate, straight from `pg_class`.
|
|
203
|
+
*
|
|
204
|
+
* `reltuples` is what the planner itself uses to decide how to run a query,
|
|
205
|
+
* so it is the number Postgres is already trusting. It is -1 on a table that
|
|
206
|
+
* has never been analysed, which is a "do not know" rather than a zero —
|
|
207
|
+
* returning undefined there gets an exact count instead of confidently
|
|
208
|
+
* reporting an empty table that is not empty.
|
|
209
|
+
*/
|
|
210
|
+
estimateCount(table: string): Promise<number | undefined>;
|
|
211
|
+
count(table: string, filter?: Filter, limit?: number): Promise<number>;
|
|
212
|
+
countEach(items: readonly CountItem[], limit?: number): Promise<number[]>;
|
|
213
|
+
private countOn;
|
|
214
|
+
private columnsOf;
|
|
215
|
+
/**
|
|
216
|
+
* Update one row, having proved it is one row.
|
|
217
|
+
*
|
|
218
|
+
* The pre-flight count runs on the *read* handle, so the check that decides
|
|
219
|
+
* whether to write cannot itself write. A key that matches anything other
|
|
220
|
+
* than exactly one row stops here rather than at the UPDATE — the danger in
|
|
221
|
+
* a cell editor was never injection, it is a WHERE broader than its author
|
|
222
|
+
* believed.
|
|
223
|
+
*/
|
|
224
|
+
update(request: UpdateRequest): Promise<UpdateResult>;
|
|
225
|
+
private updateNow;
|
|
226
|
+
/**
|
|
227
|
+
* Add one row.
|
|
228
|
+
*
|
|
229
|
+
* `update`'s guards where they apply, with the key rules inverted: a primary
|
|
230
|
+
* key may be supplied (a country code somebody types) or left for the
|
|
231
|
+
* database to assign. What is deliberately *not* pre-checked is
|
|
232
|
+
* completeness — a missing NOT NULL column with no default is the database's
|
|
233
|
+
* refusal to make, and its message names the column better than a paraphrase
|
|
234
|
+
* would.
|
|
235
|
+
*
|
|
236
|
+
* `RETURNING *` rather than a re-read by key: one statement gives back the
|
|
237
|
+
* row as stored, defaults filled and the assigned key included, with no
|
|
238
|
+
* window for another write to land in between.
|
|
239
|
+
*/
|
|
240
|
+
insert(request: InsertRequest): Promise<InsertResult>;
|
|
241
|
+
private insertNow;
|
|
242
|
+
/**
|
|
243
|
+
* Remove one row, having proved it is one row.
|
|
244
|
+
*
|
|
245
|
+
* What is *not* checked here is whether the row should go: what references
|
|
246
|
+
* it, and what the database will do to those references, is answered above
|
|
247
|
+
* this layer where the schema is in hand. A `RESTRICT` that fires is the
|
|
248
|
+
* correct outcome in the engine's own words.
|
|
249
|
+
*/
|
|
250
|
+
remove(request: DeleteRequest): Promise<DeleteResult>;
|
|
251
|
+
private recordsHistory;
|
|
252
|
+
private historyWrites;
|
|
253
|
+
private removeNow;
|
|
254
|
+
/**
|
|
255
|
+
* Several writes as one, or none of them.
|
|
256
|
+
*
|
|
257
|
+
* Plain `BEGIN` / `COMMIT` on the write connection. The callback is handed
|
|
258
|
+
* the same write bodies the public methods call, so every guard — the whole
|
|
259
|
+
* key, the pre-flight count, the type coercion — applies inside a
|
|
260
|
+
* transaction exactly as it does outside one.
|
|
261
|
+
*
|
|
262
|
+
* Reads, metadata checks, and preflight counts use the same leased client.
|
|
263
|
+
* This preserves read-after-write visibility; it does not promise serializable
|
|
264
|
+
* isolation. Call lockRecord explicitly before capturing protected originals:
|
|
265
|
+
* where an App writes, other transactions of this process run beside this
|
|
266
|
+
* one (writeLanes.ts), and a row read without its lock may change before
|
|
267
|
+
* the write that depends on it, as a row read in another pod always could.
|
|
268
|
+
*/
|
|
269
|
+
transaction<T>(run: (tx: WriteTransaction) => Promise<T>): Promise<T>;
|
|
270
|
+
private transact;
|
|
271
|
+
/**
|
|
272
|
+
* Begin an unscoped write transaction with what it was told it opens with
|
|
273
|
+
* (writeAhead.ts) behind its BEGIN, as a scoped one does (sendWriteAhead):
|
|
274
|
+
* the journal's receipt lookup, and for each target its lock and its whole
|
|
275
|
+
* row, kept to answer the transaction's reads of it by key (keyRows.ts) —
|
|
276
|
+
* the command's own read of its target, its handler's, the history
|
|
277
|
+
* capture's before image. The lock goes first, so the row is read under it
|
|
278
|
+
* and cannot move until this transaction ends; its own writes move the
|
|
279
|
+
* statement generation and are read again. One that fails aborts the
|
|
280
|
+
* opening, which begins again without them. Answers the transaction's
|
|
281
|
+
* reader: by key from the kept rows where they answer, else in its turn.
|
|
282
|
+
*/
|
|
283
|
+
private openPlain;
|
|
284
|
+
/** The statements openPlain sends behind the BEGIN; each exactly what the transaction sends in its turn (lockRecordNow, queryOn). */
|
|
285
|
+
private sendPlainAhead;
|
|
286
|
+
/**
|
|
287
|
+
* Same-source records and a durable journal in one transaction, the
|
|
288
|
+
* journal lent by the App framework (storeHost.ts TransactionJournal): the
|
|
289
|
+
* command journal, or a public placement's. Lent through the store host,
|
|
290
|
+
* never on the class, so the database browser has no journal path at all.
|
|
291
|
+
*
|
|
292
|
+
* The SQLite version opens `BEGIN IMMEDIATE`, which serialises every writer
|
|
293
|
+
* in the file; here the transaction is plain `BEGIN` at the server's
|
|
294
|
+
* default READ COMMITTED, and the journal's per-scope advisory lock does
|
|
295
|
+
* the one piece of that serialisation a command needs — two deliveries of
|
|
296
|
+
* the same command cannot both execute. SERIALIZABLE was the alternative
|
|
297
|
+
* and was refused: it would turn unrelated concurrent commands into 40001
|
|
298
|
+
* retries the SQLite path never has, and a conditional `expected` update
|
|
299
|
+
* already refuses a stale row in the write itself.
|
|
300
|
+
*
|
|
301
|
+
* The journal is attested inside the transaction and before the callback,
|
|
302
|
+
* so an unmigrated or altered layout refuses without a write. The outcome
|
|
303
|
+
* contract is SQLite's: a failure after COMMIT was sent, or a rollback that
|
|
304
|
+
* was not acknowledged, is `unknown`; everything else is `not_applied`.
|
|
305
|
+
* `withWriteClient` destroys the client on any failure, so a connection in
|
|
306
|
+
* an uncertain state is never handed to the next write.
|
|
307
|
+
*/
|
|
308
|
+
private journalTransaction;
|
|
309
|
+
private ordinaryJournalTransaction;
|
|
310
|
+
/**
|
|
311
|
+
* Private same-source row enforcement, with the SQLite guarantees.
|
|
312
|
+
*
|
|
313
|
+
* SQLite gets "the row the scope checked is the row the write changes"
|
|
314
|
+
* from `BEGIN IMMEDIATE`, which excludes every other writer for the whole
|
|
315
|
+
* transaction. Here the transaction is plain `BEGIN` at the server's
|
|
316
|
+
* default READ COMMITTED, and the guarantee is made per row instead: before
|
|
317
|
+
* a target is scope-checked its row is taken `FOR UPDATE`, and before a
|
|
318
|
+
* parent is checked its row is taken `FOR SHARE`. A lock waits for any
|
|
319
|
+
* in-flight writer of that row to finish, and the guard read that follows
|
|
320
|
+
* takes a fresh snapshot — READ COMMITTED gives one per statement — so it
|
|
321
|
+
* sees the version that writer committed and nobody can commit another
|
|
322
|
+
* until this transaction ends. A row a concurrent writer moved out of scope
|
|
323
|
+
* is therefore refused, whether it moved before the check or while the
|
|
324
|
+
* check waited. SERIALIZABLE would prove the same thing by aborting one of
|
|
325
|
+
* the two with 40001, which the SQLite path never does and every handler
|
|
326
|
+
* would have to learn to retry; the explicit locks make the refusal an
|
|
327
|
+
* ordinary one.
|
|
328
|
+
*
|
|
329
|
+
* The catalog is read on the writer inside the transaction after the
|
|
330
|
+
* scope's tables are pinned against DDL (`postgresScopeCatalog.ts`), and
|
|
331
|
+
* handed out as detached evidence for the caller to attest. Outcomes are
|
|
332
|
+
* the transaction contract's: a failure after COMMIT was sent, or a
|
|
333
|
+
* rollback that was not acknowledged, is unknown, and the client is
|
|
334
|
+
* discarded rather than reused. Everything else did not commit.
|
|
335
|
+
*/
|
|
336
|
+
scopeTransaction<T>(input: RowScope, run: (tx: WriteTransaction, catalog: DatabaseSchema) => Promise<T>): Promise<T>;
|
|
337
|
+
/**
|
|
338
|
+
* Private source-owner boundary, deliberately absent from Adapter: the
|
|
339
|
+
* PostgreSQL counterpart of `SqliteAdapter.scopeVerifiedTransaction`. The
|
|
340
|
+
* verifier is trusted host code — the tenant write source's attestation and
|
|
341
|
+
* the store's membership fence (`assertPostgresTenantMembershipFence`) —
|
|
342
|
+
* never a business callback or a wire value, and must not retain the
|
|
343
|
+
* client. It runs on the leased writer inside the transaction twice: after
|
|
344
|
+
* the scope's tables are pinned and the catalog read, before the callback;
|
|
345
|
+
* and after the callback's operations drain, before COMMIT. It is handed the
|
|
346
|
+
* catalog evidence and the adapter's own introspection on the writer, for
|
|
347
|
+
* anything it pins itself. SQLite also re-verifies around every operation,
|
|
348
|
+
* because its fence is a snapshot check; here the fence is row locks held
|
|
349
|
+
* to the end of the transaction, so the two checks bound its lifetime.
|
|
350
|
+
*/
|
|
351
|
+
scopeVerifiedTransaction<T>(input: RowScope, verify: PostgresTransactionVerifier, run: (tx: WriteTransaction, catalog: DatabaseSchema) => Promise<T>): Promise<T>;
|
|
352
|
+
/**
|
|
353
|
+
* Private source-owner boundary, deliberately absent from Adapter: one
|
|
354
|
+
* `REPEATABLE READ, READ ONLY` transaction on a leased reader, for trusted
|
|
355
|
+
* host code that pins, attests and reads inside a single snapshot (the
|
|
356
|
+
* PostgreSQL tenant read source). It is what a deferred `BEGIN` on its
|
|
357
|
+
* read-only handle gives the SQLite tenant reader: every statement sees one
|
|
358
|
+
* committed state. PostgreSQL takes that snapshot at the first query, not at
|
|
359
|
+
* BEGIN, so an owner that takes its locks before its first query attests
|
|
360
|
+
* what committed before them, and DDL after them waits. A ROLLBACK that
|
|
361
|
+
* fails surfaces as TransactionOutcomeUnknown; any failure discards the
|
|
362
|
+
* client rather than returning it to the pool.
|
|
363
|
+
*/
|
|
364
|
+
readSnapshot<T>(run: (snapshot: PostgresReadSnapshot) => Promise<T>, observeCheckout?: boolean, prologue?: string, ahead?: boolean, whole?: boolean): Promise<T>;
|
|
365
|
+
/** Private source-shape owner, not an authorization proof or generic Adapter
|
|
366
|
+
* capability. Only this actual adapter's native snapshot runner is used. */
|
|
367
|
+
capturePinnedReadSnapshot(dependencies: readonly PostgresReadDependency[], assertCurrent: () => void): Promise<PinnedPostgresReadOwner>;
|
|
368
|
+
private scopedTransact;
|
|
369
|
+
/**
|
|
370
|
+
* The statements a scoped transaction opens with, sent behind its BEGIN
|
|
371
|
+
* (openWrite's `sent`), from what it was told (writeAhead.ts) and the scope
|
|
372
|
+
* catalog read last time: the verifier's own (its fence), the journal's
|
|
373
|
+
* receipt lookup, and for each target its row lock, its row read in full
|
|
374
|
+
* through the scope (kept to answer its reads by key, keyRows.ts), and,
|
|
375
|
+
* where the write is captured for history, the capture's own lock and read
|
|
376
|
+
* (historyWrites). Each is exactly the statement the transaction sends in
|
|
377
|
+
* its turn, built by the same rules; one it never sends is left, counted,
|
|
378
|
+
* and changes nothing. None where the client does not pipeline.
|
|
379
|
+
*/
|
|
380
|
+
private sendWriteAhead;
|
|
381
|
+
/**
|
|
382
|
+
* Internal runtime-owner composition, deliberately absent from Adapter: the
|
|
383
|
+
* PostgreSQL counterpart of `SqliteAdapter.runtimeMaintenanceTransaction`,
|
|
384
|
+
* for trusted runtime code (tenant administration) that composes its own
|
|
385
|
+
* bounded maintenance facades on the leased writer and the ordinary write
|
|
386
|
+
* queue. `verify` runs after BEGIN and again after the work's operations
|
|
387
|
+
* drain, before COMMIT; the synchronous `assertCurrent` handed to the work
|
|
388
|
+
* refuses once the transaction has ended. Raw handles must never reach
|
|
389
|
+
* business handlers, policies or request callbacks. Outcomes are the
|
|
390
|
+
* transaction contract's: unknown after COMMIT was sent or an unacknowledged
|
|
391
|
+
* ROLLBACK, and the client is discarded rather than reused.
|
|
392
|
+
*/
|
|
393
|
+
runtimeMaintenanceTransaction<T>(verify: (client: PgQuery) => Promise<void>, run: (client: PgQuery, operations: TransactionOperations, assertCurrent: () => void) => Promise<T>): Promise<T>;
|
|
394
|
+
close(): Promise<void>;
|
|
395
|
+
private lockRecordNow;
|
|
396
|
+
/**
|
|
397
|
+
* Identifiers cannot be bound, so a table name is checked against the
|
|
398
|
+
* catalog before it is quoted into a statement. The check is a parameterised
|
|
399
|
+
* query, which means the untrusted string never reaches SQL as syntax.
|
|
400
|
+
*/
|
|
401
|
+
/**
|
|
402
|
+
* The same check for a read, answered from the catalog read on connect when
|
|
403
|
+
* it holds the name. That probe was a round trip before every list and
|
|
404
|
+
* every count — two per page of rows, one per reference counted — to learn
|
|
405
|
+
* what the catalog already said. A name the catalog does not hold (made
|
|
406
|
+
* since) is still asked of the server; writes always are (assertTable),
|
|
407
|
+
* because a view created since connecting must still refuse one.
|
|
408
|
+
*/
|
|
409
|
+
private readTable;
|
|
410
|
+
private epochOf;
|
|
411
|
+
private assertTable;
|
|
412
|
+
}
|
|
413
|
+
/** Trusted host verification on the writer of a verified scoped transaction:
|
|
414
|
+
* the scope catalog it was pinned and read with, and the adapter's own
|
|
415
|
+
* introspection on the same writer. */
|
|
416
|
+
export type PostgresTransactionVerifier = {
|
|
417
|
+
(client: PgQuery, catalog: PostgresScopeCatalog, describe: () => Promise<DatabaseSchema>, epoch?: string): Promise<void>;
|
|
418
|
+
/**
|
|
419
|
+
* The verifier's own LOCK, without parameters, taken in the message that
|
|
420
|
+
* begins the transaction, after the scope's pin and before the schema epoch
|
|
421
|
+
* (or catalog digest) is read. The epoch then covers everything it pinned:
|
|
422
|
+
* DDL committed before it is in the epoch, DDL after it waits for this
|
|
423
|
+
* transaction. The verifier is handed that epoch as `epoch`, so a full
|
|
424
|
+
* attestation it made under the same epoch stands without being read again
|
|
425
|
+
* (tenantWriteSource.ts). A message that fails begins again plainly, and
|
|
426
|
+
* the verifier is handed no epoch.
|
|
427
|
+
*/
|
|
428
|
+
readonly pin?: string;
|
|
429
|
+
/**
|
|
430
|
+
* The statements the verifier's first pass sends, exactly, sent behind the
|
|
431
|
+
* BEGIN with what else the transaction opens with (sendWriteAhead): each
|
|
432
|
+
* answers the identical statement once when the verifier sends it. A
|
|
433
|
+
* statement it does not send is left unread.
|
|
434
|
+
*/
|
|
435
|
+
readonly ahead?: () => readonly PipelinedStatement[];
|
|
436
|
+
};
|