@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,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A page's ways on, kept only where they lead somewhere: an App's pages are
|
|
3
|
+
* served with its final rooms (appPayload.ts), and the database browser's
|
|
4
|
+
* with none, so a configured page there offers no way on to a room.
|
|
5
|
+
*/
|
|
6
|
+
import type { PageDef } from './page.js';
|
|
7
|
+
/** Strip a related-list action whose destination is absent from final rooms. */
|
|
8
|
+
export declare function withAvailablePageEmptyActions(pages: readonly PageDef[], app: {
|
|
9
|
+
readonly views: Readonly<Record<string, {
|
|
10
|
+
readonly error?: unknown;
|
|
11
|
+
}>>;
|
|
12
|
+
}): PageDef[];
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** Strip a related-list action whose destination is absent from final rooms. */
|
|
2
|
+
export function withAvailablePageEmptyActions(pages, app) {
|
|
3
|
+
const available = new Set(Object.entries(app.views)
|
|
4
|
+
.filter(([, view]) => !view.error)
|
|
5
|
+
.map(([key]) => key));
|
|
6
|
+
return pages.map((page) => ({
|
|
7
|
+
...page,
|
|
8
|
+
sections: page.sections.map((section) => {
|
|
9
|
+
// A page note's one way on goes where the reader has the room, or nowhere.
|
|
10
|
+
if (section.kind === 'note' && section.action && 'view' in section.action && !available.has(section.action.view)) {
|
|
11
|
+
const { action: _action, ...note } = section;
|
|
12
|
+
return note;
|
|
13
|
+
}
|
|
14
|
+
if (section.kind !== 'list' || !section.empty?.action || available.has(section.empty.action.view))
|
|
15
|
+
return section;
|
|
16
|
+
const { action: _action, ...empty } = section.empty;
|
|
17
|
+
return { ...section, empty };
|
|
18
|
+
}),
|
|
19
|
+
}));
|
|
20
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A page's archetype: `page(…, { layout })`, the arrangement of its regions.
|
|
3
|
+
*
|
|
4
|
+
* Every record page used to be one skeleton, a main column with an aside a
|
|
5
|
+
* third of its width beside it, and a look could recolour that skeleton but
|
|
6
|
+
* never move it. Three kinds of record read badly in it: one worked by
|
|
7
|
+
* talking (the thread was pushed down by the lists above it), one chosen from
|
|
8
|
+
* photos (on a phone the asking rent and its call to action fell to the
|
|
9
|
+
* bottom, after every list) and one that is mostly words (a full-width column
|
|
10
|
+
* with no measure). Each is a word here. A layout decides which regions a
|
|
11
|
+
* page has, what each may hold and the DOM order; it never sets a colour, a
|
|
12
|
+
* rule or a type size, which stay the looks' recipes.
|
|
13
|
+
*
|
|
14
|
+
* The words are refused where they cannot hold: what a layout cannot place is
|
|
15
|
+
* said by the section and with the fix, so a page never draws an arrangement
|
|
16
|
+
* nobody asked for.
|
|
17
|
+
*
|
|
18
|
+
* A page that names none is given the one its sections already make
|
|
19
|
+
* (chooseLayout): a gallery first is a showcase, a timeline the main column
|
|
20
|
+
* ends with a conversation, a page of the record's own words an article, and
|
|
21
|
+
* anything else the record's skeleton, `'record'`. Chosen when the App is
|
|
22
|
+
* read, from what the page declares, never from a row: a page keeps one shape
|
|
23
|
+
* for every record and from its first frame. Writing a word is still worth
|
|
24
|
+
* it: a written layout refuses a section it cannot place, where a chosen one
|
|
25
|
+
* falls back to the record; `'record'` is how a page that would be chosen as
|
|
26
|
+
* something else keeps the skeleton.
|
|
27
|
+
*/
|
|
28
|
+
import type { PageDef } from './pageModel.js';
|
|
29
|
+
/** The archetypes a page is drawn in. The record's own skeleton draws no `data-layout`. */
|
|
30
|
+
export type PageLayoutName = 'conversation' | 'showcase' | 'article';
|
|
31
|
+
/** What a page may say: an archetype, or `'record'`, the skeleton, kept where another would be chosen. */
|
|
32
|
+
export type PageLayoutWord = 'record' | PageLayoutName;
|
|
33
|
+
export declare const PAGE_LAYOUT_WORDS: readonly PageLayoutWord[];
|
|
34
|
+
/** `layout`, read: one of the words, else refused with all four. */
|
|
35
|
+
export declare function parsePageLayout(raw: unknown, at: string): PageLayoutWord;
|
|
36
|
+
/** The layout a renderer draws: an archetype, or none for the record's own. */
|
|
37
|
+
export declare function drawnLayout(page: {
|
|
38
|
+
layout?: string;
|
|
39
|
+
}): PageLayoutName | undefined;
|
|
40
|
+
type Placed = {
|
|
41
|
+
kind: string;
|
|
42
|
+
region?: string;
|
|
43
|
+
presentation?: unknown;
|
|
44
|
+
hidden?: boolean;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* A showcase's lead: the index of its first main section, the photos, which stand beside the panel. The head
|
|
48
|
+
* is drawn above it, so a header() is not the first.
|
|
49
|
+
*/
|
|
50
|
+
export declare function showcaseIndex(page: {
|
|
51
|
+
layout?: string;
|
|
52
|
+
sections: readonly Placed[];
|
|
53
|
+
}): number | undefined;
|
|
54
|
+
/**
|
|
55
|
+
* Judge a parsed App page against its layout, and place what the layout places unasked. `at` names the page as
|
|
56
|
+
* the App's other page refusals do. Mutates `page`: under `conversation` a headline that names no region stands
|
|
57
|
+
* in the aside, as a card and the history already do; under `showcase` and `article` no default rail is drawn.
|
|
58
|
+
*/
|
|
59
|
+
export declare function applyPageLayout(page: PageDef, at: string): void;
|
|
60
|
+
/**
|
|
61
|
+
* The layout a page's sections already make, where it names none. Each archetype is chosen by the section it is
|
|
62
|
+
* named for — a showcase by the photos it opens with, a conversation by the timeline it ends with, an article by
|
|
63
|
+
* the record's long text with nothing but its facts and notes around it — and only where applyPageLayout takes the
|
|
64
|
+
* page as written, so a chosen layout is never a refusal. The first that holds wins: photos lead the page they open,
|
|
65
|
+
* a thread ends one. Read from the declarations alone, never a row, so every record of a page has one shape from the
|
|
66
|
+
* first frame. Anything else is the record's own skeleton. The why is what `mistri check --defaults` says.
|
|
67
|
+
*/
|
|
68
|
+
export declare function chooseLayout(page: PageDef): {
|
|
69
|
+
layout: PageLayoutWord;
|
|
70
|
+
why: string;
|
|
71
|
+
};
|
|
72
|
+
export {};
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import { isLongText, MAX_PROPERTIES } from './pageAnatomy.js';
|
|
2
|
+
const PAGE_LAYOUTS = ['conversation', 'showcase', 'article'];
|
|
3
|
+
export const PAGE_LAYOUT_WORDS = ['record', ...PAGE_LAYOUTS];
|
|
4
|
+
/* A showcase's panel stands beside the photos and ends with them: more than three sections there grew the band
|
|
5
|
+
past the gallery's height at a desk, and the body under it stood a screen down. */
|
|
6
|
+
const PANEL_MOST = 3;
|
|
7
|
+
const WORDS = "'record' (the record's own: its lists beside a rail), 'conversation' (a thread with its facts beside it), 'showcase' (photos with the price beside them) or 'article' (one column at a reading measure)";
|
|
8
|
+
/** `layout`, read: one of the words, else refused with all four. */
|
|
9
|
+
export function parsePageLayout(raw, at) {
|
|
10
|
+
if (PAGE_LAYOUT_WORDS.includes(raw))
|
|
11
|
+
return raw;
|
|
12
|
+
/* Renamed before 1.0: "listing" is what a list view is called everywhere else in an App. */
|
|
13
|
+
if (raw === 'listing')
|
|
14
|
+
throw new Error(`[page-layout] ${at} has "layout": "listing", which is now "showcase": photos with the price beside them.`);
|
|
15
|
+
throw new Error(`[page-layout] ${at} has "layout": ${JSON.stringify(raw)}. A page's layout is ${WORDS}; leave it out for the one its sections make.`);
|
|
16
|
+
}
|
|
17
|
+
/** The layout a renderer draws: an archetype, or none for the record's own. */
|
|
18
|
+
export function drawnLayout(page) {
|
|
19
|
+
return PAGE_LAYOUTS.find((word) => word === page.layout);
|
|
20
|
+
}
|
|
21
|
+
const isHeader = (section) => section.kind === 'fields' && section.presentation === 'header';
|
|
22
|
+
const inMain = (section) => (section.region ?? 'main') === 'main' && !isHeader(section) && !section.hidden;
|
|
23
|
+
const inAside = (section) => section.region === 'aside' && !section.hidden;
|
|
24
|
+
/**
|
|
25
|
+
* A showcase's lead: the index of its first main section, the photos, which stand beside the panel. The head
|
|
26
|
+
* is drawn above it, so a header() is not the first.
|
|
27
|
+
*/
|
|
28
|
+
export function showcaseIndex(page) {
|
|
29
|
+
if (page.layout !== 'showcase')
|
|
30
|
+
return undefined;
|
|
31
|
+
const index = page.sections.findIndex(inMain);
|
|
32
|
+
return index < 0 ? undefined : index;
|
|
33
|
+
}
|
|
34
|
+
/** A section as a refusal names it: its kind and, where it has one, its title. */
|
|
35
|
+
function named(section) {
|
|
36
|
+
const title = 'title' in section && typeof section.title === 'string' ? ` "${section.title}"` : '';
|
|
37
|
+
if (section.kind === 'fields') {
|
|
38
|
+
const kind = section.presentation === 'card' || section.presentation === 'headline' ? section.presentation : 'fields';
|
|
39
|
+
return `a ${kind}${title}`;
|
|
40
|
+
}
|
|
41
|
+
if (section.kind === 'list')
|
|
42
|
+
return `${section.view !== undefined ? 'an embed' : 'a related list'}${title}`;
|
|
43
|
+
return `a ${section.kind}${title}`;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Judge a parsed App page against its layout, and place what the layout places unasked. `at` names the page as
|
|
47
|
+
* the App's other page refusals do. Mutates `page`: under `conversation` a headline that names no region stands
|
|
48
|
+
* in the aside, as a card and the history already do; under `showcase` and `article` no default rail is drawn.
|
|
49
|
+
*/
|
|
50
|
+
export function applyPageLayout(page, at) {
|
|
51
|
+
const layout = drawnLayout(page);
|
|
52
|
+
if (!layout)
|
|
53
|
+
return;
|
|
54
|
+
const each = page.sections.map((section, index) => ({
|
|
55
|
+
section,
|
|
56
|
+
index,
|
|
57
|
+
where: `${at}, section ${index + 1}`,
|
|
58
|
+
}));
|
|
59
|
+
if (layout === 'conversation') {
|
|
60
|
+
const say = (text) => new Error(`[layout-conversation] ${text}`);
|
|
61
|
+
const fix = "A conversation is its one timeline, last in main: put the rest in region: 'aside'";
|
|
62
|
+
for (const { section } of each) {
|
|
63
|
+
if (section.kind === 'fields' && section.presentation === 'headline' && section.region === undefined)
|
|
64
|
+
section.region = 'aside';
|
|
65
|
+
}
|
|
66
|
+
const timelines = each.filter(({ section }) => section.kind === 'timeline' && !section.hidden);
|
|
67
|
+
if (!timelines.length)
|
|
68
|
+
throw say(`${at} is a conversation with no timeline. ${fix}, and add timeline('Conversation', [stream(…)]) to the main column, or leave out "layout".`);
|
|
69
|
+
if (timelines.length > 1)
|
|
70
|
+
throw say(`${at} is a conversation with ${timelines.length} timelines. A conversation is its one timeline: say every stream in one timeline('…', [stream(…), stream(…)]).`);
|
|
71
|
+
const thread = timelines[0];
|
|
72
|
+
if (thread.section.region === 'aside')
|
|
73
|
+
throw say(`${thread.where} puts the conversation's timeline in the aside. ${fix}; leave its region out.`);
|
|
74
|
+
for (const { section, where } of each) {
|
|
75
|
+
if (!inMain(section))
|
|
76
|
+
continue;
|
|
77
|
+
if (section.tab !== undefined) {
|
|
78
|
+
throw say(`${where} names the tab "${section.tab}" in the main column. A thread is not one tab among others: leave out "tab", or give it to a section in region: 'aside'.`);
|
|
79
|
+
}
|
|
80
|
+
if (section.kind === 'list' || section.kind === 'metric' || section.kind === 'chart' || section.kind === 'breakdown') {
|
|
81
|
+
throw say(`${where} is ${named(section)} in the main column. ${fix}: ${section.kind === 'list' ? `related(${typeof section.title === 'string' ? `'${section.title}'` : '…'}, …, { region: 'aside' })` : "{ region: 'aside' }"}.`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const after = each.find(({ section, index }) => index > thread.index && inMain(section));
|
|
85
|
+
if (after) {
|
|
86
|
+
throw say(`${after.where} (${named(after.section)}) stands after the timeline in the main column. ${fix}, or above the timeline, so the composer ends the thread.`);
|
|
87
|
+
}
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (layout === 'showcase') {
|
|
91
|
+
const say = (text) => new Error(`[layout-showcase] ${text}`);
|
|
92
|
+
const fix = "A showcase opens with its photos: related('Photos', …, { presentation: 'gallery' }) first, its price headline in the aside";
|
|
93
|
+
if (page.aside === false)
|
|
94
|
+
throw say(`${at} is a showcase that says aside: false. A showcase is its panel beside the photos: leave out "layout" instead.`);
|
|
95
|
+
const first = each.find(({ section }) => inMain(section));
|
|
96
|
+
if (!first || first.section.kind !== 'list' || first.section.presentation !== 'gallery') {
|
|
97
|
+
throw say(`${first ? `${first.where} is ${named(first.section)}, first in the main column` : `${at} has nothing in its main column`}. ${fix}.`);
|
|
98
|
+
}
|
|
99
|
+
const panel = each.filter(({ section }) => inAside(section));
|
|
100
|
+
if (!panel.length)
|
|
101
|
+
throw say(`${at} is a showcase with nothing in the aside. ${fix}: headline('…', { region: 'aside' }).`);
|
|
102
|
+
if (panel.length > PANEL_MOST) {
|
|
103
|
+
throw say(`${at} has ${panel.length} sections in the aside, and a showcase's panel holds 1 to ${PANEL_MOST} beside the photos: move the rest into the main column, where they stand under the photos at full width.`);
|
|
104
|
+
}
|
|
105
|
+
const tabbed = panel.find(({ section }) => section.tab !== undefined);
|
|
106
|
+
if (tabbed)
|
|
107
|
+
throw say(`${tabbed.where} names the tab "${tabbed.section.tab}" in the aside. A showcase's panel stands beside the photos whole: leave out "tab".`);
|
|
108
|
+
// The panel is a price, not a property rail: the author's own fields say what a buyer reads.
|
|
109
|
+
delete page.defaultAside;
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
// article
|
|
113
|
+
const say = (text) => new Error(`[layout-article] ${text}`);
|
|
114
|
+
if (page.aside === false)
|
|
115
|
+
throw say(`${at} is an article that says aside: false. An article has no aside already: remove "aside".`);
|
|
116
|
+
for (const { section, where } of each) {
|
|
117
|
+
if (section.region === 'aside') {
|
|
118
|
+
const call = section.kind === 'fields' && section.presentation === 'card' && typeof section.title === 'string'
|
|
119
|
+
? `card('${section.title}', …)`
|
|
120
|
+
: named(section);
|
|
121
|
+
throw say(`${where} (${named(section)}) stands in the aside. An article has no aside: move ${call} into the column with region: 'main', or leave out "layout".`);
|
|
122
|
+
}
|
|
123
|
+
if (section.width === 'third' || section.width === 'two-thirds') {
|
|
124
|
+
throw say(`${where} has width: '${section.width}'. An article is one column at a reading measure, where a third is too narrow for a value: use 'half' or leave "width" out.`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
delete page.defaultAside;
|
|
128
|
+
}
|
|
129
|
+
/** A refusal as a reason: its text without the code, which names a word the author did not write. */
|
|
130
|
+
function refusal(page, layout) {
|
|
131
|
+
// The rule's own mutations (a headline beside the thread, no default rail) land on the copy.
|
|
132
|
+
const trial = {
|
|
133
|
+
...page,
|
|
134
|
+
layout,
|
|
135
|
+
sections: page.sections.map((section) => ({ ...section })),
|
|
136
|
+
};
|
|
137
|
+
try {
|
|
138
|
+
applyPageLayout(trial, 'the page');
|
|
139
|
+
return undefined;
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
return error.message.replace(/^\[[a-z-]+\]\s*/, '');
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
const quoted = (section) => ('title' in section && typeof section.title === 'string' ? ` "${section.title}"` : '');
|
|
146
|
+
/**
|
|
147
|
+
* The layout a page's sections already make, where it names none. Each archetype is chosen by the section it is
|
|
148
|
+
* named for — a showcase by the photos it opens with, a conversation by the timeline it ends with, an article by
|
|
149
|
+
* the record's long text with nothing but its facts and notes around it — and only where applyPageLayout takes the
|
|
150
|
+
* page as written, so a chosen layout is never a refusal. The first that holds wins: photos lead the page they open,
|
|
151
|
+
* a thread ends one. Read from the declarations alone, never a row, so every record of a page has one shape from the
|
|
152
|
+
* first frame. Anything else is the record's own skeleton. The why is what `mistri check --defaults` says.
|
|
153
|
+
*/
|
|
154
|
+
export function chooseLayout(page) {
|
|
155
|
+
const main = page.sections.filter(inMain);
|
|
156
|
+
const missed = [];
|
|
157
|
+
const first = main[0];
|
|
158
|
+
if (first?.kind === 'list' && first.presentation === 'gallery') {
|
|
159
|
+
const no = refusal(page, 'showcase');
|
|
160
|
+
if (!no)
|
|
161
|
+
return {
|
|
162
|
+
layout: 'showcase',
|
|
163
|
+
why: `it opens with the gallery${quoted(first)}, with a panel beside it`,
|
|
164
|
+
};
|
|
165
|
+
missed.push(`it opens with a gallery, but a showcase would refuse it: ${no}`);
|
|
166
|
+
}
|
|
167
|
+
else
|
|
168
|
+
missed.push('it opens with no gallery');
|
|
169
|
+
const thread = main.find((section) => section.kind === 'timeline');
|
|
170
|
+
if (thread) {
|
|
171
|
+
const no = refusal(page, 'conversation');
|
|
172
|
+
if (!no)
|
|
173
|
+
return {
|
|
174
|
+
layout: 'conversation',
|
|
175
|
+
why: `its main column ends with the timeline${quoted(thread)}, and no list stands in it`,
|
|
176
|
+
};
|
|
177
|
+
missed.push(`it has a timeline, but a conversation would refuse it: ${no}`);
|
|
178
|
+
}
|
|
179
|
+
else
|
|
180
|
+
missed.push('it has no timeline');
|
|
181
|
+
const shown = page.sections.filter((section) => !section.hidden);
|
|
182
|
+
const words = shown.every((section) => section.kind === 'note' || (section.kind === 'fields' && section.presentation !== 'card' && section.presentation !== 'headline'));
|
|
183
|
+
// The record's own long text, read in the column; a header's facts are a line under its name, never the words.
|
|
184
|
+
const long = shown.flatMap((section) => section.kind === 'fields' && section.presentation !== 'header'
|
|
185
|
+
? (section.paths ?? []).filter((path) => !path.includes('.') && isLongText(path))
|
|
186
|
+
: []);
|
|
187
|
+
const facts = [...new Set(shown.flatMap((section) => (section.kind === 'fields' ? (section.paths ?? []) : [])))].filter((path) => !long.includes(path)).length;
|
|
188
|
+
if (!words)
|
|
189
|
+
missed.push('it holds more than fields and notes');
|
|
190
|
+
else if (!long.length)
|
|
191
|
+
missed.push('it names no long text, a description or a body');
|
|
192
|
+
// As many facts as a rail holds: more is a record with a note on it, which keeps its rail.
|
|
193
|
+
else if (facts > MAX_PROPERTIES)
|
|
194
|
+
missed.push(`it has ${facts} facts beside its words, more than a rail's ${MAX_PROPERTIES}`);
|
|
195
|
+
else {
|
|
196
|
+
const no = refusal(page, 'article');
|
|
197
|
+
if (!no)
|
|
198
|
+
return {
|
|
199
|
+
layout: 'article',
|
|
200
|
+
why: `it is the record's words, ${long.map((path) => `"${path}"`).join(' and ')}, with ${facts} fact${facts === 1 ? '' : 's'} and nothing else`,
|
|
201
|
+
};
|
|
202
|
+
missed.push(`it is the record's words, but an article would refuse it: ${no}`);
|
|
203
|
+
}
|
|
204
|
+
return { layout: 'record', why: missed.join('; ') };
|
|
205
|
+
}
|