@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,144 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The error a request earns when the tool will not carry it out. Shared
|
|
3
|
+
* because the row-scope and scope-catalog rules refuse requests as well as
|
|
4
|
+
* the adapters, and every caller tells a refusal from a failure by this one
|
|
5
|
+
* class.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* A request an adapter will not carry out.
|
|
9
|
+
*
|
|
10
|
+
* Distinct from a database failure, and the distinction is the whole point:
|
|
11
|
+
* "that is not the whole primary key" and "the database is down" are both
|
|
12
|
+
* exceptions, and a server that cannot tell them apart answers both with a
|
|
13
|
+
* 500. The first is something the caller can fix by asking differently.
|
|
14
|
+
*
|
|
15
|
+
* Ordinary adapter guards run before a statement. Private scoped transactions
|
|
16
|
+
* also use this for stored-image checks: those failures poison the transaction
|
|
17
|
+
* and require rollback. The error class alone never proves a write outcome.
|
|
18
|
+
*/
|
|
19
|
+
export class Refusal extends Error {
|
|
20
|
+
/** The column names the message quotes, so a surface that calls them something else (an App's captions) can say them its way. Never values. */
|
|
21
|
+
columns;
|
|
22
|
+
/** `cause`: a database failure that kept the check from being made. The
|
|
23
|
+
* request is still refused — the boundary does not move — but an owner that
|
|
24
|
+
* answers a caller can tell "refused" from "could not answer". */
|
|
25
|
+
constructor(message, options = {}) {
|
|
26
|
+
super(message, options.cause === undefined ? undefined : { cause: options.cause });
|
|
27
|
+
this.name = 'Refusal';
|
|
28
|
+
if (options.columns?.length)
|
|
29
|
+
this.columns = [...new Set(options.columns)];
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/* Why a refusal happened, kept for the trusted owner that has to diagnose it.
|
|
33
|
+
A caller hears one fixed sentence and must: a driver's error text names
|
|
34
|
+
columns, values and internal tables, and a clash on a hidden unique column
|
|
35
|
+
says a row exists. But the sentence alone, with the real error swallowed,
|
|
36
|
+
has cost App authors whole days — an UPDATE the database refused, a startup
|
|
37
|
+
that could not say which store, a row policy that "could not be loaded". So
|
|
38
|
+
the cause is recorded on the refusal and kept off `cause`, which would
|
|
39
|
+
travel with the error everywhere it is inspected or serialized:
|
|
40
|
+
symbol-keyed and non-enumerable, so `'cause' in error` stays false and JSON
|
|
41
|
+
ignores it. One mechanism for every refusal, tenant, command and row policy
|
|
42
|
+
alike; registered, so a second copy of this module in a mixed deployment
|
|
43
|
+
reads the same key. */
|
|
44
|
+
const CAUSE = Symbol.for('mistri.refusalCause');
|
|
45
|
+
/** Record why a refusal happened on the refusal itself, for the trusted reader
|
|
46
|
+
* only. Every opaque refusal takes its reason this way — a tenant denial, a
|
|
47
|
+
* row policy that did not load, a command the database would not take — so
|
|
48
|
+
* the one reader below can say it to the operator. A string is a sentence for
|
|
49
|
+
* that operator, written here and naming the rule, table or column. */
|
|
50
|
+
export function recordRefusalCause(error, cause) {
|
|
51
|
+
if (cause !== undefined && !Object.hasOwn(error, CAUSE)) {
|
|
52
|
+
Object.defineProperty(error, CAUSE, { value: typeof cause === 'string' ? new Error(cause) : cause, enumerable: false });
|
|
53
|
+
}
|
|
54
|
+
return error;
|
|
55
|
+
}
|
|
56
|
+
/** The recorded reason behind a refusal, for a trusted diagnostic only. */
|
|
57
|
+
export const refusalCause = (error) => error !== null && typeof error === 'object' && CAUSE in error ? error[CAUSE] : undefined;
|
|
58
|
+
/**
|
|
59
|
+
* What the operator is told about a refusal: each reason under it, outermost
|
|
60
|
+
* first — a recorded cause before `cause`, since the recorded one is the
|
|
61
|
+
* refusal's own — as messages, never objects, because a driver error's object
|
|
62
|
+
* can carry connection detail a console should not. Repeats are said once:
|
|
63
|
+
* a refusal rethrown as the same sentence is one reason, not two.
|
|
64
|
+
*/
|
|
65
|
+
export function refusalReasons(error) {
|
|
66
|
+
const reasons = [];
|
|
67
|
+
const seen = new Set([error]);
|
|
68
|
+
const outer = error instanceof Error ? error.message : undefined;
|
|
69
|
+
for (let because = refusalCause(error) ?? error?.cause, depth = 0; because instanceof Error && !seen.has(because) && depth < 8; depth++) {
|
|
70
|
+
seen.add(because);
|
|
71
|
+
if (because.message && because.message !== outer && !reasons.includes(because.message))
|
|
72
|
+
reasons.push(because.message);
|
|
73
|
+
because = refusalCause(because) ?? because.cause;
|
|
74
|
+
}
|
|
75
|
+
return reasons;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* The refusal's one line for a startup headline: the fixed sentence, then the
|
|
79
|
+
* reason behind it. The `because:` lines under it carry the whole chain, but a
|
|
80
|
+
* reader (or a log that keeps one line) stopped at "could not be loaded or is
|
|
81
|
+
* invalid" and went to bisect the module; the headline now says the cause.
|
|
82
|
+
*/
|
|
83
|
+
export function refusalHeadline(error) {
|
|
84
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
85
|
+
const [cause] = refusalReasons(error);
|
|
86
|
+
return cause ? `${message} Cause: ${cause}` : message;
|
|
87
|
+
}
|
|
88
|
+
/** The `because:` lines under a refusalHeadline: the chain past the cause the headline says already, which
|
|
89
|
+
printed again beneath it read as two reasons. */
|
|
90
|
+
export const refusalReasonsBelow = (error) => refusalReasons(error).slice(1);
|
|
91
|
+
/**
|
|
92
|
+
* A startup failure as the operator's terminal says it: the headline, then
|
|
93
|
+
* each further reason on a `because:` line. Every startup print goes through
|
|
94
|
+
* this, so a refusal that recorded why (a tenant denial's `"fonts" is not a
|
|
95
|
+
* key this takes`) is never said as its fixed sentence alone. The terminal of
|
|
96
|
+
* the person who started the server only: never an HTTP answer.
|
|
97
|
+
*/
|
|
98
|
+
export function startupReport(error) {
|
|
99
|
+
return [
|
|
100
|
+
refusalHeadline(error),
|
|
101
|
+
...refusalReasonsBelow(error).map((reason) => ` because: ${reason}`),
|
|
102
|
+
...faultFrames(error).map((frame) => ` ${frame}`),
|
|
103
|
+
].join('\n');
|
|
104
|
+
}
|
|
105
|
+
/* A TypeError, a ReferenceError or a RangeError is a fault in the code that read the App, not a refusal of what its
|
|
106
|
+
author wrote: its sentence ("Cannot read properties of undefined (reading 'realm')") names nothing to go and fix,
|
|
107
|
+
and was printed with its stack swallowed (a field report). Its first frames are said beneath it, the file and line
|
|
108
|
+
a fix starts from. A refusal, however deep, is said as its sentences alone. */
|
|
109
|
+
const FAULTS = new Set(['TypeError', 'ReferenceError', 'RangeError']);
|
|
110
|
+
/** Where an unexpected fault in `error` (or the chain under it) happened: its first stack frames, or none for a refusal.
|
|
111
|
+
Read by name, not `instanceof`: an App module's errors are another realm's. */
|
|
112
|
+
export function faultFrames(error, most = 6) {
|
|
113
|
+
const seen = new Set();
|
|
114
|
+
for (let at = error, depth = 0; at !== null && typeof at === 'object' && !seen.has(at) && depth < 8; depth++) {
|
|
115
|
+
seen.add(at);
|
|
116
|
+
const { name, stack } = at;
|
|
117
|
+
if (typeof name === 'string' && FAULTS.has(name) && typeof stack === 'string')
|
|
118
|
+
return stack
|
|
119
|
+
.split('\n')
|
|
120
|
+
.filter((line) => /^\s+at /.test(line))
|
|
121
|
+
.slice(0, most)
|
|
122
|
+
.map((line) => line.trim());
|
|
123
|
+
at = refusalCause(at) ?? at.cause;
|
|
124
|
+
}
|
|
125
|
+
return [];
|
|
126
|
+
}
|
|
127
|
+
/* What a refused request's own caller may be told about why: a sentence
|
|
128
|
+
naming only what the request itself named (the table, the column, the
|
|
129
|
+
command) and the kind of rule that refused it — the role's grant, the row
|
|
130
|
+
policy, the database computing a column. Never a row it cannot see, a
|
|
131
|
+
value, a physical name or a driver's words: those stay recorded for the
|
|
132
|
+
operator (recordRefusalCause). Set where the refusal is decided, by the code
|
|
133
|
+
that knows which rule it was, and said in place of the fixed sentence at
|
|
134
|
+
the one place a request's failure becomes its answer (field report TR7:
|
|
135
|
+
"not available to this account" with the cause only on the terminal). */
|
|
136
|
+
const SAID = Symbol.for('mistri.refusalSaid');
|
|
137
|
+
/** Record the sentence this refusal's caller is told: see above. The first one recorded stands. */
|
|
138
|
+
export function sayRefusal(error, sentence) {
|
|
139
|
+
if (sentence && !Object.hasOwn(error, SAID))
|
|
140
|
+
Object.defineProperty(error, SAID, { value: sentence, enumerable: false });
|
|
141
|
+
return error;
|
|
142
|
+
}
|
|
143
|
+
/** The sentence a refusal's caller may read about why, if the code that refused said one. */
|
|
144
|
+
export const refusalSaid = (error) => error !== null && typeof error === 'object' && SAID in error ? String(error[SAID]) : undefined;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type DatabaseSchema } from './schema.js';
|
|
2
|
+
import type { RelatedCreate } from '../../schema/model.js';
|
|
3
|
+
export declare function parseRelatedCreate(raw: unknown, at: string): RelatedCreate<string>;
|
|
4
|
+
/** Whether a create says more than its label, so it cannot be written as the label alone. */
|
|
5
|
+
export declare function createSaysMore(create: RelatedCreate<string>): boolean;
|
|
6
|
+
/** Bind only a direct FK to the whole parent PK, never inferred query equalities.
|
|
7
|
+
* `filter` is the related list's own query; the values it pins fill the new row
|
|
8
|
+
* as defaults do, never as bindings. */
|
|
9
|
+
export declare function relatedCreatePlan(schema: DatabaseSchema, baseId: string, fromId: string, path: string, create: RelatedCreate<string>, list?: {
|
|
10
|
+
filter?: string;
|
|
11
|
+
}): {
|
|
12
|
+
error: string;
|
|
13
|
+
show?: undefined;
|
|
14
|
+
bindings?: undefined;
|
|
15
|
+
otherParents?: undefined;
|
|
16
|
+
defaults?: undefined;
|
|
17
|
+
fill?: undefined;
|
|
18
|
+
} | {
|
|
19
|
+
error?: undefined;
|
|
20
|
+
show: string[];
|
|
21
|
+
bindings: {
|
|
22
|
+
column: string;
|
|
23
|
+
parent: string;
|
|
24
|
+
}[];
|
|
25
|
+
otherParents: string[];
|
|
26
|
+
defaults: {
|
|
27
|
+
[x: string]: string | number | boolean | import("@mistriwork/engine/schema/model.js").AutoValue<"me" | "now" | "today"> | null;
|
|
28
|
+
};
|
|
29
|
+
fill: Record<string, string>;
|
|
30
|
+
};
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { authoredValue } from './autoValues.js';
|
|
2
|
+
import { autoKey, isRequired } from './form.js';
|
|
3
|
+
import { findTable, primaryKey } from './schema.js';
|
|
4
|
+
import { hopName } from './view.js';
|
|
5
|
+
import { parseQuery } from './query.js';
|
|
6
|
+
const CREATE_KEYS = ['label', 'show', 'defaults', 'prefill'];
|
|
7
|
+
/** Columns filled from the page's record, at most. */
|
|
8
|
+
const MAX_FILL = 8;
|
|
9
|
+
const COLUMN = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
10
|
+
// A tenant host hands its pages over as captured, null-prototype copies (evidence.ts), and those are plain too.
|
|
11
|
+
const isPlain = (value) => !!value && typeof value === 'object' && !Array.isArray(value) && [null, Object.prototype].includes(Object.getPrototypeOf(value));
|
|
12
|
+
export function parseRelatedCreate(raw, at) {
|
|
13
|
+
if (typeof raw === 'string')
|
|
14
|
+
raw = { label: raw };
|
|
15
|
+
if (!isPlain(raw))
|
|
16
|
+
throw new Error(`${at}: create must be an object.`);
|
|
17
|
+
const value = raw;
|
|
18
|
+
if (Object.keys(value).some((key) => !CREATE_KEYS.includes(key)))
|
|
19
|
+
throw new Error(`${at}: create accepts label, show, defaults and prefill.`);
|
|
20
|
+
if (typeof value.label !== 'string' || !value.label.trim())
|
|
21
|
+
throw new Error(`${at}: create needs a label.`);
|
|
22
|
+
if (value.show !== undefined && (!Array.isArray(value.show) || value.show.some((c) => typeof c !== 'string' || !c.trim())))
|
|
23
|
+
throw new Error(`${at}: create.show must contain column names.`);
|
|
24
|
+
let defaults;
|
|
25
|
+
if (value.defaults !== undefined) {
|
|
26
|
+
if (!isPlain(value.defaults))
|
|
27
|
+
throw new Error(`${at}: create.defaults is an object of column → value.`);
|
|
28
|
+
defaults = {};
|
|
29
|
+
for (const [column, authored] of Object.entries(value.defaults)) {
|
|
30
|
+
if (!COLUMN.test(column))
|
|
31
|
+
throw new Error(`${at}: create.defaults "${column}" is not a column name.`);
|
|
32
|
+
const v = authoredValue(authored, `${at}: create.defaults "${column}"`);
|
|
33
|
+
if (!(v === null || typeof v === 'string' || typeof v === 'boolean' || (typeof v === 'number' && Number.isFinite(v)))) {
|
|
34
|
+
throw new Error(`${at}: create.defaults "${column}" is a text, number, true/false, null, today, now or me.`);
|
|
35
|
+
}
|
|
36
|
+
defaults[column] = v;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
let prefill;
|
|
40
|
+
if (value.prefill !== undefined) {
|
|
41
|
+
const pairs = isPlain(value.prefill) ? Object.entries(value.prefill) : [];
|
|
42
|
+
if (!pairs.length ||
|
|
43
|
+
pairs.length > MAX_FILL ||
|
|
44
|
+
pairs.some(([child, parent]) => !COLUMN.test(child) || typeof parent !== 'string' || !COLUMN.test(parent))) {
|
|
45
|
+
throw new Error(`${at}: create.prefill maps one to ${MAX_FILL} of the new row's columns to the record's: { patient_id: 'patient_id' }.`);
|
|
46
|
+
}
|
|
47
|
+
prefill = Object.fromEntries(pairs);
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
label: value.label.trim(),
|
|
51
|
+
...(value.show === undefined ? {} : { show: value.show.map((c) => c.trim()) }),
|
|
52
|
+
...(defaults ? { defaults } : {}),
|
|
53
|
+
...(prefill ? { prefill } : {}),
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/** Whether a create says more than its label, so it cannot be written as the label alone. */
|
|
57
|
+
export function createSaysMore(create) {
|
|
58
|
+
return create.show !== undefined || create.defaults !== undefined || create.prefill !== undefined;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* What a filtered related list's query pins: its equalities (`status = open`,
|
|
62
|
+
* `kind in (visit)`), read by the query language's own parser over the child
|
|
63
|
+
* table. A row added from the list starts with them, so it is listed where it
|
|
64
|
+
* was added. An `or`, a range or a path pins nothing.
|
|
65
|
+
*/
|
|
66
|
+
function filterEqualities(schema, from, filter) {
|
|
67
|
+
if (!filter?.trim())
|
|
68
|
+
return {};
|
|
69
|
+
const parsed = parseQuery(`${from.id} ${filter}`, { schema });
|
|
70
|
+
const groups = parsed.query?.filter.groups;
|
|
71
|
+
if (parsed.errors.length || !groups || groups.length !== 1)
|
|
72
|
+
return {};
|
|
73
|
+
const pinned = {};
|
|
74
|
+
for (const condition of groups[0]) {
|
|
75
|
+
if (condition.column.includes('.') || !from.columns.some((c) => c.name === condition.column))
|
|
76
|
+
continue;
|
|
77
|
+
const value = condition.op === '='
|
|
78
|
+
? condition.value
|
|
79
|
+
: condition.op === 'in' && Array.isArray(condition.value) && condition.value.length === 1
|
|
80
|
+
? condition.value[0]
|
|
81
|
+
: undefined;
|
|
82
|
+
if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean')
|
|
83
|
+
pinned[condition.column] = value;
|
|
84
|
+
}
|
|
85
|
+
return pinned;
|
|
86
|
+
}
|
|
87
|
+
/** Bind only a direct FK to the whole parent PK, never inferred query equalities.
|
|
88
|
+
* `filter` is the related list's own query; the values it pins fill the new row
|
|
89
|
+
* as defaults do, never as bindings. */
|
|
90
|
+
export function relatedCreatePlan(schema, baseId, fromId, path, create, list = {}) {
|
|
91
|
+
const base = findTable(schema, baseId);
|
|
92
|
+
const from = findTable(schema, fromId);
|
|
93
|
+
const candidates = schema.foreignKeys.filter((fk) => fk.from.table === fromId);
|
|
94
|
+
const fk = candidates.find((fk) => fk.name === path) ?? candidates.find((fk) => hopName(fk) === path);
|
|
95
|
+
/* A wrong `whose` is the usual mistake, so it is named for what it is —
|
|
96
|
+
not a column, or a column that points elsewhere — with the references
|
|
97
|
+
that would do, rather than as a rule about primary keys. */
|
|
98
|
+
if (base && from && !fk && !path.includes('.')) {
|
|
99
|
+
const toBase = candidates.filter((ref) => ref.to.table === baseId).map((ref) => `"${hopName(ref)}"`);
|
|
100
|
+
const could = toBase.length
|
|
101
|
+
? ` Its references to ${base.name}: ${toBase.join(', ')}.`
|
|
102
|
+
: ` ${from.name} has no reference to ${base.name}.`;
|
|
103
|
+
return {
|
|
104
|
+
error: from.columns.some((c) => c.name === path)
|
|
105
|
+
? `"${path}" is a column of ${from.name}, but not a reference to ${base.name}.${could}`
|
|
106
|
+
: `"${path}" is not a column of ${from.name}.${could}`,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
if (base && fk && fk.to.table !== baseId) {
|
|
110
|
+
return {
|
|
111
|
+
error: `"${path}" refers to ${findTable(schema, fk.to.table)?.name ?? fk.to.table}, not to ${base.name}, so a row added here would not belong to this record.`,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
if (!base ||
|
|
115
|
+
!from ||
|
|
116
|
+
from.isView ||
|
|
117
|
+
!fk ||
|
|
118
|
+
fk.to.columns.length !== primaryKey(base).length ||
|
|
119
|
+
!primaryKey(base).every((c) => fk.to.columns.includes(c))) {
|
|
120
|
+
return { error: 'Related creation needs a direct reference to the complete parent primary key.' };
|
|
121
|
+
}
|
|
122
|
+
const show = create.show ?? from.columns.map((c) => c.name);
|
|
123
|
+
if (show.some((name) => !from.columns.some((c) => c.name === name)))
|
|
124
|
+
return { error: 'Related creation names an unknown form column.' };
|
|
125
|
+
const unknownDefault = Object.keys(create.defaults ?? {}).find((name) => !from.columns.some((c) => c.name === name));
|
|
126
|
+
if (unknownDefault)
|
|
127
|
+
return { error: `Related creation defaults "${unknownDefault}", which is not a column of ${from.name}.` };
|
|
128
|
+
/* A filled column comes from the record: the child's column, the record's column. */
|
|
129
|
+
const fill = { ...(create.prefill ?? {}) };
|
|
130
|
+
for (const [child, parent] of Object.entries(fill)) {
|
|
131
|
+
if (!from.columns.some((c) => c.name === child))
|
|
132
|
+
return { error: `Related creation fills "${child}", which is not a column of ${from.name}.` };
|
|
133
|
+
if (!base.columns.some((c) => c.name === parent))
|
|
134
|
+
return { error: `Related creation fills "${child}" from "${parent}", which is not a column of ${base.name}.` };
|
|
135
|
+
if (fk.from.columns.includes(child))
|
|
136
|
+
return { error: `Related creation fills "${child}", the reference to ${base.name} it already binds.` };
|
|
137
|
+
}
|
|
138
|
+
const pinned = filterEqualities(schema, from, list.filter);
|
|
139
|
+
const given = new Set([...Object.keys(create.defaults ?? {}), ...Object.keys(fill), ...Object.keys(pinned)]);
|
|
140
|
+
const assigned = autoKey(from);
|
|
141
|
+
const hiddenRequired = from.columns.filter((c) => isRequired(c, assigned) && !show.includes(c.name) && !fk.from.columns.includes(c.name) && !given.has(c.name));
|
|
142
|
+
if (hiddenRequired.length)
|
|
143
|
+
return { error: `Related creation must show required columns: ${hiddenRequired.map((c) => c.name).join(', ')}.` };
|
|
144
|
+
/* A required reference to another record (a work order's bike, added from its mechanic): the record cannot say it,
|
|
145
|
+
so a New the list offers on its own would ask a whole other choice; one the author writes still may. */
|
|
146
|
+
const otherParents = schema.foreignKeys
|
|
147
|
+
.filter((ref) => ref !== fk && ref.from.table === fromId)
|
|
148
|
+
.flatMap((ref) => ref.from.columns)
|
|
149
|
+
.filter((name, index, all) => all.indexOf(name) === index && !fk.from.columns.includes(name) && !given.has(name))
|
|
150
|
+
.filter((name) => {
|
|
151
|
+
const column = from.columns.find((c) => c.name === name);
|
|
152
|
+
return column !== undefined && isRequired(column, assigned);
|
|
153
|
+
});
|
|
154
|
+
return {
|
|
155
|
+
show: show.filter((c) => !fk.from.columns.includes(c)),
|
|
156
|
+
bindings: fk.from.columns.map((column, i) => ({ column, parent: fk.to.columns[i] })),
|
|
157
|
+
otherParents,
|
|
158
|
+
// The list's own equalities win: a row added here is listed here.
|
|
159
|
+
defaults: { ...(create.defaults ?? {}), ...pinned },
|
|
160
|
+
fill,
|
|
161
|
+
};
|
|
162
|
+
}
|