@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,94 @@
|
|
|
1
|
+
import { type WriteOrder } from './serverSettings.js';
|
|
2
|
+
/** The keys a write names, or `all`: see the file comment. */
|
|
3
|
+
type LaneKeys = readonly string[] | 'all';
|
|
4
|
+
/** The shortest and longest lock waits a deployment may ask for. */
|
|
5
|
+
export declare const MIN_LOCK_TIMEOUT_MS = 100;
|
|
6
|
+
export declare const MAX_LOCK_TIMEOUT_MS = 30000;
|
|
7
|
+
export declare const MAX_WRITERS = 64;
|
|
8
|
+
/**
|
|
9
|
+
* The reader and the writer pool an App's database gets unless told: twice
|
|
10
|
+
* the cores, from four to sixteen. A node process is one core of JavaScript,
|
|
11
|
+
* and with fewer connections than requests in flight the pool, not the
|
|
12
|
+
* database, is what a write waits for (a 500-user soak: Postgres idle, 98%
|
|
13
|
+
* of writer checkouts queued behind four writers). Sixteen caps the sum
|
|
14
|
+
* (readers + writers, per pod per database; docs/postgresql.md does it)
|
|
15
|
+
* well inside a stock server's 100 connections.
|
|
16
|
+
*/
|
|
17
|
+
export declare function balancedPoolSize(cores?: number): number;
|
|
18
|
+
/** Whether `value` is a writer pool size: a whole number from 1 to 64. */
|
|
19
|
+
export declare function isWriterCount(value: unknown): value is number;
|
|
20
|
+
/**
|
|
21
|
+
* The order every adapter this process opens from now on writes in: `keyed`
|
|
22
|
+
* where the process serves Apps, `serial` (the default) for the database
|
|
23
|
+
* browser. Called once, at startup, before a connection opens; an adapter
|
|
24
|
+
* reads it when it is made. A handler mounted in a host's process carries its
|
|
25
|
+
* own (serverSettings.ts), and this is the process's, outside any.
|
|
26
|
+
*/
|
|
27
|
+
export declare function configureWriteOrder(order: WriteOrder): void;
|
|
28
|
+
export declare function writeOrder(): WriteOrder;
|
|
29
|
+
/** `--write-pool`: the writers an App's PostgreSQL source holds, unless its connection names a number. */
|
|
30
|
+
export declare function configureWriterPool(writers?: number): void;
|
|
31
|
+
export declare function writerPoolSize(): number;
|
|
32
|
+
/** Whether `ms` is a lock wait a deployment may set: whole milliseconds from 100 to 30,000. */
|
|
33
|
+
export declare function isLockTimeout(ms: unknown): ms is number;
|
|
34
|
+
/** `--lock-timeout`: how long any writer of this process waits for a lock. At most the statement cap, which would stop it anyway. */
|
|
35
|
+
export declare function configureLockTimeout(ms?: number): void;
|
|
36
|
+
export declare function lockTimeoutMs(): number;
|
|
37
|
+
/**
|
|
38
|
+
* Run `work` as background work — a job's command, an effect's delivery —
|
|
39
|
+
* so every writer lease beneath it comes from the background connection
|
|
40
|
+
* (postgresPool.ts), never from the pool a person's save is waiting on.
|
|
41
|
+
*/
|
|
42
|
+
export declare function asBackgroundWork<T>(work: () => T): T;
|
|
43
|
+
export declare function inBackgroundWork(): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* One record's lane: its table and its key, the values as text, so the key
|
|
46
|
+
* an address spells `'7'` and the one a row holds as `7` are one lane. The
|
|
47
|
+
* table as the caller named it; two spellings of one table are two lanes,
|
|
48
|
+
* which the row lock still orders.
|
|
49
|
+
*/
|
|
50
|
+
export declare function recordLane(table: string, key: Readonly<Record<string, unknown>>): string;
|
|
51
|
+
/** The lane of a request that names one record by its key, or none when it names none the adapter would accept (it refuses it). */
|
|
52
|
+
export declare function keyedLane(request: {
|
|
53
|
+
table?: unknown;
|
|
54
|
+
key?: unknown;
|
|
55
|
+
}): readonly string[];
|
|
56
|
+
/**
|
|
57
|
+
* Run `work` in one record's lane: every write it starts that names no lane
|
|
58
|
+
* of its own — a transaction, through whatever wrappers an App puts round
|
|
59
|
+
* its adapter — takes this one. How an App's save of a record, which runs
|
|
60
|
+
* as a transaction that locks the row, keeps its place behind the earlier
|
|
61
|
+
* saves of that record without every wrapper learning a new argument. Only
|
|
62
|
+
* the first write beneath it takes the lane: the work a lane runs sees none.
|
|
63
|
+
*/
|
|
64
|
+
export declare function inRecordLane<T>(table: string, key: Readonly<Record<string, unknown>>, work: () => Promise<T>): Promise<T>;
|
|
65
|
+
/** All known targets and the receipt scope enter together, before any lease is taken. */
|
|
66
|
+
export declare function inWriteLanes<T>(keys: readonly string[], work: () => Promise<T>): Promise<T>;
|
|
67
|
+
/**
|
|
68
|
+
* The per-adapter queue. `run(keys, work)` starts `work` once every earlier
|
|
69
|
+
* write it must follow has settled, and settles as `work` does.
|
|
70
|
+
*/
|
|
71
|
+
export declare class WriteLanes {
|
|
72
|
+
readonly order: WriteOrder;
|
|
73
|
+
/** The last `all` write: every later write waits for it. */
|
|
74
|
+
private barrier;
|
|
75
|
+
private barrierPending;
|
|
76
|
+
/** The last write naming each key, while it runs. */
|
|
77
|
+
private readonly tails;
|
|
78
|
+
/** Every write not yet settled: what an `all` write waits for. */
|
|
79
|
+
private readonly running;
|
|
80
|
+
constructor(order?: WriteOrder);
|
|
81
|
+
run<T>(keys: LaneKeys, work: () => Promise<T>): Promise<T>;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* A lock wait that ran out: PostgreSQL's `lock_timeout` (55P03), anywhere in the error's causes. The
|
|
85
|
+
* statement that waited failed and its transaction was rolled back, so
|
|
86
|
+
* nothing it wrote landed — unless the rollback itself was never
|
|
87
|
+
* acknowledged, which the caller has already said as an unknown outcome
|
|
88
|
+
* and which this does not look inside.
|
|
89
|
+
*/
|
|
90
|
+
export declare function lockTimedOut(error: unknown): boolean;
|
|
91
|
+
/** What a person is told when their write waited out a lock, and how soon to try again. */
|
|
92
|
+
export declare const ROW_LOCKED_MESSAGE = "The record is locked by another transaction. Nothing was saved; try again in a moment.";
|
|
93
|
+
export declare const ROW_LOCKED_RETRY_AFTER_SECONDS = 1;
|
|
94
|
+
export {};
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The order an adapter's writes run in, and how long one may wait on a lock.
|
|
3
|
+
*
|
|
4
|
+
* Two orders, chosen once per server (cli/browserMain.ts, cli/mistriMain.ts, embed/handler.ts; serverSettings.ts):
|
|
5
|
+
*
|
|
6
|
+
* - `serial`, the database browser's. Every write — an edit, a raw SQL
|
|
7
|
+
* statement, a transaction — waits for the one before it, on the one
|
|
8
|
+
* writer connection. The Workbench's Undo reverts the last write, and "the
|
|
9
|
+
* last" is a meaningful word only while writes commit one at a time; a raw
|
|
10
|
+
* statement lands after the edit queued before it. docs/postgresql.md
|
|
11
|
+
* states this contract, and it stays.
|
|
12
|
+
* - `keyed`, an App's. A write waits only for earlier writes that name one
|
|
13
|
+
* of its keys — the same record of the same table — and runs beside
|
|
14
|
+
* everything else, each on a writer connection of its own from the pool.
|
|
15
|
+
* Two saves of one record still commit in the order they arrived; saves
|
|
16
|
+
* of two records no longer queue behind each other. What makes that safe
|
|
17
|
+
* without the queue is the database's own locking, which already held
|
|
18
|
+
* across pods (docs/postgresql.md "Several writers").
|
|
19
|
+
*
|
|
20
|
+
* A write that names no key (a transaction whose rows are known only inside
|
|
21
|
+
* it, an insert) waits for nothing in `keyed` order; one that names `all`
|
|
22
|
+
* (a raw SQL write, shutdown) waits for everything before it and holds back
|
|
23
|
+
* everything after it, in either order.
|
|
24
|
+
*
|
|
25
|
+
* In-process deadlock is impossible by construction: a write's waits are
|
|
26
|
+
* taken, all at once, when it is queued, and only on writes queued before
|
|
27
|
+
* it, so the waits form no cycle. Rows locked *inside* a transaction are the
|
|
28
|
+
* database's to order, and its deadlock detector and `lock_timeout` bound
|
|
29
|
+
* them; nothing here takes a key lazily.
|
|
30
|
+
*/
|
|
31
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
32
|
+
import { availableParallelism } from 'node:os';
|
|
33
|
+
import { startSpan } from './telemetry/trace.js';
|
|
34
|
+
import { configureServerSettings, serverSettings } from './serverSettings.js';
|
|
35
|
+
/** How long a writer waits for a row or table lock before it gives up, unless told otherwise. */
|
|
36
|
+
const DEFAULT_LOCK_TIMEOUT_MS = 5_000;
|
|
37
|
+
/** The shortest and longest lock waits a deployment may ask for. */
|
|
38
|
+
export const MIN_LOCK_TIMEOUT_MS = 100;
|
|
39
|
+
export const MAX_LOCK_TIMEOUT_MS = 30_000;
|
|
40
|
+
export const MAX_WRITERS = 64;
|
|
41
|
+
/**
|
|
42
|
+
* The reader and the writer pool an App's database gets unless told: twice
|
|
43
|
+
* the cores, from four to sixteen. A node process is one core of JavaScript,
|
|
44
|
+
* and with fewer connections than requests in flight the pool, not the
|
|
45
|
+
* database, is what a write waits for (a 500-user soak: Postgres idle, 98%
|
|
46
|
+
* of writer checkouts queued behind four writers). Sixteen caps the sum
|
|
47
|
+
* (readers + writers, per pod per database; docs/postgresql.md does it)
|
|
48
|
+
* well inside a stock server's 100 connections.
|
|
49
|
+
*/
|
|
50
|
+
export function balancedPoolSize(cores = availableParallelism()) {
|
|
51
|
+
return Math.min(16, Math.max(4, 2 * cores));
|
|
52
|
+
}
|
|
53
|
+
/** The writer pool's size where an App writes, unless a connection or the command line says otherwise. */
|
|
54
|
+
const DEFAULT_WRITERS = balancedPoolSize();
|
|
55
|
+
/** Whether `value` is a writer pool size: a whole number from 1 to 64. */
|
|
56
|
+
export function isWriterCount(value) {
|
|
57
|
+
return typeof value === 'number' && Number.isInteger(value) && value >= 1 && value <= MAX_WRITERS;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The order every adapter this process opens from now on writes in: `keyed`
|
|
61
|
+
* where the process serves Apps, `serial` (the default) for the database
|
|
62
|
+
* browser. Called once, at startup, before a connection opens; an adapter
|
|
63
|
+
* reads it when it is made. A handler mounted in a host's process carries its
|
|
64
|
+
* own (serverSettings.ts), and this is the process's, outside any.
|
|
65
|
+
*/
|
|
66
|
+
export function configureWriteOrder(order) {
|
|
67
|
+
if (order !== 'serial' && order !== 'keyed')
|
|
68
|
+
throw new RangeError('The write order is "serial" or "keyed".');
|
|
69
|
+
configureServerSettings({ writeOrder: order });
|
|
70
|
+
}
|
|
71
|
+
export function writeOrder() {
|
|
72
|
+
return serverSettings().writeOrder;
|
|
73
|
+
}
|
|
74
|
+
/** `--write-pool`: the writers an App's PostgreSQL source holds, unless its connection names a number. */
|
|
75
|
+
export function configureWriterPool(writers = balancedPoolSize()) {
|
|
76
|
+
if (!isWriterCount(writers))
|
|
77
|
+
throw new RangeError(`A write pool holds 1 to ${MAX_WRITERS} connections; ${String(writers)} is not one of them.`);
|
|
78
|
+
configureServerSettings({ writers });
|
|
79
|
+
}
|
|
80
|
+
export function writerPoolSize() {
|
|
81
|
+
return serverSettings().writers ?? DEFAULT_WRITERS;
|
|
82
|
+
}
|
|
83
|
+
/** Whether `ms` is a lock wait a deployment may set: whole milliseconds from 100 to 30,000. */
|
|
84
|
+
export function isLockTimeout(ms) {
|
|
85
|
+
return typeof ms === 'number' && Number.isInteger(ms) && ms >= MIN_LOCK_TIMEOUT_MS && ms <= MAX_LOCK_TIMEOUT_MS;
|
|
86
|
+
}
|
|
87
|
+
/** `--lock-timeout`: how long any writer of this process waits for a lock. At most the statement cap, which would stop it anyway. */
|
|
88
|
+
export function configureLockTimeout(ms = DEFAULT_LOCK_TIMEOUT_MS) {
|
|
89
|
+
if (!isLockTimeout(ms))
|
|
90
|
+
throw new RangeError(`A lock timeout is ${MIN_LOCK_TIMEOUT_MS} to ${MAX_LOCK_TIMEOUT_MS} milliseconds.`);
|
|
91
|
+
configureServerSettings({ lockTimeoutMs: ms });
|
|
92
|
+
}
|
|
93
|
+
export function lockTimeoutMs() {
|
|
94
|
+
return serverSettings().lockTimeoutMs ?? DEFAULT_LOCK_TIMEOUT_MS;
|
|
95
|
+
}
|
|
96
|
+
const background = new AsyncLocalStorage();
|
|
97
|
+
/**
|
|
98
|
+
* Run `work` as background work — a job's command, an effect's delivery —
|
|
99
|
+
* so every writer lease beneath it comes from the background connection
|
|
100
|
+
* (postgresPool.ts), never from the pool a person's save is waiting on.
|
|
101
|
+
*/
|
|
102
|
+
export function asBackgroundWork(work) {
|
|
103
|
+
return background.run(true, work);
|
|
104
|
+
}
|
|
105
|
+
export function inBackgroundWork() {
|
|
106
|
+
return background.getStore() === true;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* One record's lane: its table and its key, the values as text, so the key
|
|
110
|
+
* an address spells `'7'` and the one a row holds as `7` are one lane. The
|
|
111
|
+
* table as the caller named it; two spellings of one table are two lanes,
|
|
112
|
+
* which the row lock still orders.
|
|
113
|
+
*/
|
|
114
|
+
export function recordLane(table, key) {
|
|
115
|
+
const pairs = Object.keys(key)
|
|
116
|
+
.sort()
|
|
117
|
+
.map((column) => [column, String(key[column])]);
|
|
118
|
+
return JSON.stringify([table, pairs]);
|
|
119
|
+
}
|
|
120
|
+
/** The lane of a request that names one record by its key, or none when it names none the adapter would accept (it refuses it). */
|
|
121
|
+
export function keyedLane(request) {
|
|
122
|
+
const { table, key } = request ?? {};
|
|
123
|
+
if (typeof table !== 'string' || !key || typeof key !== 'object' || Array.isArray(key))
|
|
124
|
+
return [];
|
|
125
|
+
return [recordLane(table, key)];
|
|
126
|
+
}
|
|
127
|
+
const hinted = new AsyncLocalStorage();
|
|
128
|
+
/**
|
|
129
|
+
* Run `work` in one record's lane: every write it starts that names no lane
|
|
130
|
+
* of its own — a transaction, through whatever wrappers an App puts round
|
|
131
|
+
* its adapter — takes this one. How an App's save of a record, which runs
|
|
132
|
+
* as a transaction that locks the row, keeps its place behind the earlier
|
|
133
|
+
* saves of that record without every wrapper learning a new argument. Only
|
|
134
|
+
* the first write beneath it takes the lane: the work a lane runs sees none.
|
|
135
|
+
*/
|
|
136
|
+
export function inRecordLane(table, key, work) {
|
|
137
|
+
return hinted.run(keyedLane({ table, key }), work);
|
|
138
|
+
}
|
|
139
|
+
/** All known targets and the receipt scope enter together, before any lease is taken. */
|
|
140
|
+
export function inWriteLanes(keys, work) {
|
|
141
|
+
return hinted.run([...new Set(keys)].sort(), work);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* The per-adapter queue. `run(keys, work)` starts `work` once every earlier
|
|
145
|
+
* write it must follow has settled, and settles as `work` does.
|
|
146
|
+
*/
|
|
147
|
+
export class WriteLanes {
|
|
148
|
+
order;
|
|
149
|
+
/** The last `all` write: every later write waits for it. */
|
|
150
|
+
barrier = Promise.resolve();
|
|
151
|
+
barrierPending = false;
|
|
152
|
+
/** The last write naming each key, while it runs. */
|
|
153
|
+
tails = new Map();
|
|
154
|
+
/** Every write not yet settled: what an `all` write waits for. */
|
|
155
|
+
running = new Set();
|
|
156
|
+
constructor(order = writeOrder()) {
|
|
157
|
+
this.order = order;
|
|
158
|
+
}
|
|
159
|
+
run(keys, work) {
|
|
160
|
+
// The browser's order: everything is `all`, which is the queue it always was.
|
|
161
|
+
const hint = hinted.getStore();
|
|
162
|
+
const named = this.order === 'serial' ? 'all' : keys === 'all' || !hint?.length ? keys : [...keys, ...hint];
|
|
163
|
+
const waits = [];
|
|
164
|
+
if (this.barrierPending)
|
|
165
|
+
waits.push(this.barrier);
|
|
166
|
+
if (named === 'all')
|
|
167
|
+
waits.push(...this.running);
|
|
168
|
+
else
|
|
169
|
+
for (const key of new Set(named)) {
|
|
170
|
+
const tail = this.tails.get(key);
|
|
171
|
+
if (tail)
|
|
172
|
+
waits.push(tail);
|
|
173
|
+
}
|
|
174
|
+
/* Only a write that really waits is said to: a span per write would
|
|
175
|
+
bury the request's own statements under empty ones. */
|
|
176
|
+
const queued = waits.length
|
|
177
|
+
? startSpan('write queue', {
|
|
178
|
+
childOnly: true,
|
|
179
|
+
attributes: { 'mistri.write.order': this.order, 'mistri.write.behind': waits.length },
|
|
180
|
+
})
|
|
181
|
+
: undefined;
|
|
182
|
+
const ready = waits.length
|
|
183
|
+
? Promise.all(waits).then(() => {
|
|
184
|
+
queued?.end();
|
|
185
|
+
})
|
|
186
|
+
: Promise.resolve();
|
|
187
|
+
// The lane is this write's; what the write starts is not in it.
|
|
188
|
+
const next = ready.then(() => (hint ? hinted.exit(work) : work()));
|
|
189
|
+
const settled = next.then(() => { }, () => { });
|
|
190
|
+
this.running.add(settled);
|
|
191
|
+
void settled.then(() => this.running.delete(settled));
|
|
192
|
+
if (named === 'all') {
|
|
193
|
+
this.barrier = settled;
|
|
194
|
+
this.barrierPending = true;
|
|
195
|
+
void settled.then(() => {
|
|
196
|
+
if (this.barrier === settled)
|
|
197
|
+
this.barrierPending = false;
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
else
|
|
201
|
+
for (const key of new Set(named)) {
|
|
202
|
+
this.tails.set(key, settled);
|
|
203
|
+
void settled.then(() => {
|
|
204
|
+
if (this.tails.get(key) === settled)
|
|
205
|
+
this.tails.delete(key);
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
return next;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* A lock wait that ran out: PostgreSQL's `lock_timeout` (55P03), anywhere in the error's causes. The
|
|
213
|
+
* statement that waited failed and its transaction was rolled back, so
|
|
214
|
+
* nothing it wrote landed — unless the rollback itself was never
|
|
215
|
+
* acknowledged, which the caller has already said as an unknown outcome
|
|
216
|
+
* and which this does not look inside.
|
|
217
|
+
*/
|
|
218
|
+
export function lockTimedOut(error) {
|
|
219
|
+
let at = error;
|
|
220
|
+
for (let depth = 0; depth < 4 && at && typeof at === 'object'; depth++) {
|
|
221
|
+
if (at.name === 'TransactionOutcomeUnknown' || at.outcome === 'unknown')
|
|
222
|
+
return false;
|
|
223
|
+
const { code } = at;
|
|
224
|
+
if (code === '55P03')
|
|
225
|
+
return true;
|
|
226
|
+
at = at.cause;
|
|
227
|
+
}
|
|
228
|
+
return false;
|
|
229
|
+
}
|
|
230
|
+
/** What a person is told when their write waited out a lock, and how soon to try again. */
|
|
231
|
+
export const ROW_LOCKED_MESSAGE = 'The record is locked by another transaction. Nothing was saved; try again in a moment.';
|
|
232
|
+
export const ROW_LOCKED_RETRY_AFTER_SECONDS = 1;
|
package/dist/engine.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@mistriwork/engine`, as the tree has it (scripts/boundary/entries.json): the part of the engine the database
|
|
3
|
+
* browser reads a database through, and the smallest surface a second product can stand on. A connection string
|
|
4
|
+
* becomes an adapter (`connect`); the adapter reads the catalog into a schema, and runs a query-language read or a
|
|
5
|
+
* keyset page of one. Anything else the engine owns is reached through these, or is not the package's yet.
|
|
6
|
+
*
|
|
7
|
+
* Kept small on purpose: a name added here is a name the engine package will have to keep, so it is added when a
|
|
8
|
+
* product outside the tree needs it, not because it is exported somewhere below.
|
|
9
|
+
*/
|
|
10
|
+
export { connect } from './adapters/connect.js';
|
|
11
|
+
export type { Adapter, QueryRequest, SqlRequest, SqlResult } from './adapters/adapter.js';
|
|
12
|
+
export type { QueryResult } from './shared/reads.js';
|
|
13
|
+
export { defaultOrder, findTable, labelColumn, primaryKey, referencesFrom, referencesTo, tableNamed, type ColumnMeta, type DatabaseSchema, type Dialect, type ForeignKey, type Order, type TableMeta, } from './shared/schema.js';
|
|
14
|
+
export { explain, parseQuery, quoteValue, type QueryError } from './shared/query.js';
|
|
15
|
+
export { keysetAfter, keysetOrder, pageBounds, readPageStep, reversedOrder, type Boundary, type PageBounds, type PageStep, } from './shared/keysetPage.js';
|
package/dist/engine.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@mistriwork/engine`, as the tree has it (scripts/boundary/entries.json): the part of the engine the database
|
|
3
|
+
* browser reads a database through, and the smallest surface a second product can stand on. A connection string
|
|
4
|
+
* becomes an adapter (`connect`); the adapter reads the catalog into a schema, and runs a query-language read or a
|
|
5
|
+
* keyset page of one. Anything else the engine owns is reached through these, or is not the package's yet.
|
|
6
|
+
*
|
|
7
|
+
* Kept small on purpose: a name added here is a name the engine package will have to keep, so it is added when a
|
|
8
|
+
* product outside the tree needs it, not because it is exported somewhere below.
|
|
9
|
+
*/
|
|
10
|
+
export { connect } from './adapters/connect.js';
|
|
11
|
+
export { defaultOrder, findTable, labelColumn, primaryKey, referencesFrom, referencesTo, tableNamed, } from './shared/schema.js';
|
|
12
|
+
export { explain, parseQuery, quoteValue } from './shared/query.js';
|
|
13
|
+
export { keysetAfter, keysetOrder, pageBounds, readPageStep, reversedOrder, } from './shared/keysetPage.js';
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/** Where the credentials file lives when one is used at all. */
|
|
2
|
+
export declare function credentialsPath(): string;
|
|
3
|
+
/**
|
|
4
|
+
* Expand `${VAR}` and `$VAR` in a connection string.
|
|
5
|
+
*
|
|
6
|
+
* This is the recommended option, and the only one where the secret is never
|
|
7
|
+
* written anywhere tablewalk controls:
|
|
8
|
+
*
|
|
9
|
+
* { "name": "prod", "url": "postgres://app:${PROD_DB_PASSWORD}@db/app" }
|
|
10
|
+
*
|
|
11
|
+
* An unset variable is an error rather than an empty expansion. Silently
|
|
12
|
+
* producing `postgres://app:@db/app` would send an empty password and fail
|
|
13
|
+
* with an authentication error that says nothing about the real cause.
|
|
14
|
+
*/
|
|
15
|
+
export declare function expandEnv(url: string, env?: NodeJS.ProcessEnv): string;
|
|
16
|
+
/**
|
|
17
|
+
* Expand only the `${NAME}` form. An authentication store URL is read this
|
|
18
|
+
* way, and it is the only form its documentation names: there a bare `$` is
|
|
19
|
+
* literal, so a password containing `$abc` is not mistaken for a reference
|
|
20
|
+
* to an unset variable (and refused) or, worse, to a set one.
|
|
21
|
+
*/
|
|
22
|
+
export declare function expandEnvReferences(url: string, env?: NodeJS.ProcessEnv): string;
|
|
23
|
+
/** True when a URL carries a literal password rather than a reference. */
|
|
24
|
+
export declare function hasInlinePassword(url: string): boolean;
|
|
25
|
+
export declare function keychainSet(account: string, secret: string): Promise<boolean>;
|
|
26
|
+
export declare function keychainDelete(account: string): Promise<void>;
|
|
27
|
+
export declare const keychainAvailable: () => boolean;
|
|
28
|
+
interface CredentialsFile {
|
|
29
|
+
[connectionName: string]: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Read the credentials file, refusing it if anyone but the owner can read it.
|
|
33
|
+
*
|
|
34
|
+
* The permission check is the whole point. It is what `ssh` does to private
|
|
35
|
+
* keys and what `psql` does to `.pgpass`, and it catches the realistic
|
|
36
|
+
* mistake: a file created correctly, then committed, copied or synced with
|
|
37
|
+
* permissions that no longer match the intent. Refusing loudly is better than
|
|
38
|
+
* reading it and leaving the user believing it was safe.
|
|
39
|
+
*/
|
|
40
|
+
export declare function readCredentials(path?: string): Promise<CredentialsFile>;
|
|
41
|
+
export declare function writeCredential(name: string, secret: string, path?: string): Promise<void>;
|
|
42
|
+
interface ResolvedConnection {
|
|
43
|
+
url: string;
|
|
44
|
+
/** Where the password came from, for the UI to report honestly. */
|
|
45
|
+
source: 'none' | 'inline' | 'environment' | 'keychain' | 'file';
|
|
46
|
+
warning?: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Turn a stored connection into a usable URL.
|
|
50
|
+
*
|
|
51
|
+
* Order matters and is deliberate: the environment wins because it is the
|
|
52
|
+
* most explicit, then the keychain because it is the best-protected, then the
|
|
53
|
+
* file. An inline password is used as-is but reported, so the UI can say what
|
|
54
|
+
* it is doing rather than leaving the user to guess.
|
|
55
|
+
*/
|
|
56
|
+
export declare function resolveConnection(name: string, storedUrl: string, options?: {
|
|
57
|
+
credentialsFile?: string;
|
|
58
|
+
secrets?: boolean;
|
|
59
|
+
environment?: NodeJS.ProcessEnv;
|
|
60
|
+
}): Promise<ResolvedConnection>;
|
|
61
|
+
export {};
|