@mistriwork/engine 0.0.0 → 1.0.0-rc.9

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.
Files changed (546) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +16 -1
  3. package/dist/adapters/adapter.d.ts +693 -0
  4. package/dist/adapters/adapter.js +444 -0
  5. package/dist/adapters/cache/cacheStore.d.ts +75 -0
  6. package/dist/adapters/cache/cacheStore.js +160 -0
  7. package/dist/adapters/cache/resp.d.ts +52 -0
  8. package/dist/adapters/cache/resp.js +237 -0
  9. package/dist/adapters/commands/canonicalJson.d.ts +19 -0
  10. package/dist/adapters/commands/canonicalJson.js +154 -0
  11. package/dist/adapters/connect.d.ts +29 -0
  12. package/dist/adapters/connect.js +40 -0
  13. package/dist/adapters/connectionBudget.d.ts +101 -0
  14. package/dist/adapters/connectionBudget.js +128 -0
  15. package/dist/adapters/dbLatency.d.ts +35 -0
  16. package/dist/adapters/dbLatency.js +79 -0
  17. package/dist/adapters/epochCache.d.ts +50 -0
  18. package/dist/adapters/epochCache.js +85 -0
  19. package/dist/adapters/http/egress.d.ts +48 -0
  20. package/dist/adapters/http/egress.js +175 -0
  21. package/dist/adapters/http/httpAdapter.d.ts +71 -0
  22. package/dist/adapters/http/httpAdapter.js +512 -0
  23. package/dist/adapters/http/httpDescription.d.ts +32 -0
  24. package/dist/adapters/http/httpDescription.js +246 -0
  25. package/dist/adapters/http/openapi.d.ts +98 -0
  26. package/dist/adapters/http/openapi.js +487 -0
  27. package/dist/adapters/layoutRefusal.d.ts +24 -0
  28. package/dist/adapters/layoutRefusal.js +35 -0
  29. package/dist/adapters/net/networkPolicy.d.ts +44 -0
  30. package/dist/adapters/net/networkPolicy.js +123 -0
  31. package/dist/adapters/net/untrustedDatabase.d.ts +18 -0
  32. package/dist/adapters/net/untrustedDatabase.js +120 -0
  33. package/dist/adapters/poolAdmission.d.ts +43 -0
  34. package/dist/adapters/poolAdmission.js +184 -0
  35. package/dist/adapters/poolMetrics.d.ts +121 -0
  36. package/dist/adapters/poolMetrics.js +185 -0
  37. package/dist/adapters/postgres.d.ts +436 -0
  38. package/dist/adapters/postgres.js +1890 -0
  39. package/dist/adapters/postgresCatalog.d.ts +96 -0
  40. package/dist/adapters/postgresCatalog.js +387 -0
  41. package/dist/adapters/postgresCatalogDigest.d.ts +30 -0
  42. package/dist/adapters/postgresCatalogDigest.js +87 -0
  43. package/dist/adapters/postgresCatalogRows.d.ts +62 -0
  44. package/dist/adapters/postgresCatalogRows.js +37 -0
  45. package/dist/adapters/postgresDates.d.ts +1 -0
  46. package/dist/adapters/postgresDates.js +39 -0
  47. package/dist/adapters/postgresMaintenance.d.ts +33 -0
  48. package/dist/adapters/postgresMaintenance.js +179 -0
  49. package/dist/adapters/postgresPool.d.ts +255 -0
  50. package/dist/adapters/postgresPool.js +838 -0
  51. package/dist/adapters/postgresPooler.d.ts +28 -0
  52. package/dist/adapters/postgresPooler.js +267 -0
  53. package/dist/adapters/postgresReadCatalog.d.ts +31 -0
  54. package/dist/adapters/postgresReadCatalog.js +226 -0
  55. package/dist/adapters/postgresReadSnapshot.d.ts +46 -0
  56. package/dist/adapters/postgresReadSnapshot.js +133 -0
  57. package/dist/adapters/postgresSchemaEpoch.d.ts +24 -0
  58. package/dist/adapters/postgresSchemaEpoch.js +149 -0
  59. package/dist/adapters/postgresTransactionHandle.d.ts +173 -0
  60. package/dist/adapters/postgresTransactionHandle.js +524 -0
  61. package/dist/adapters/postgresValues.d.ts +30 -0
  62. package/dist/adapters/postgresValues.js +75 -0
  63. package/dist/adapters/replicas.d.ts +70 -0
  64. package/dist/adapters/replicas.js +208 -0
  65. package/dist/adapters/reservedSql.d.ts +38 -0
  66. package/dist/adapters/reservedSql.js +264 -0
  67. package/dist/adapters/rolePrivileges.d.ts +17 -0
  68. package/dist/adapters/rolePrivileges.js +22 -0
  69. package/dist/adapters/scoped/keyRows.d.ts +65 -0
  70. package/dist/adapters/scoped/keyRows.js +173 -0
  71. package/dist/adapters/scoped/postgresScopeCatalog.d.ts +16 -0
  72. package/dist/adapters/scoped/postgresScopeCatalog.js +117 -0
  73. package/dist/adapters/scoped/scopedCommandOperations.d.ts +5 -0
  74. package/dist/adapters/scoped/scopedCommandOperations.js +48 -0
  75. package/dist/adapters/scoped/scopedReads.d.ts +20 -0
  76. package/dist/adapters/scoped/scopedReads.js +174 -0
  77. package/dist/adapters/scoped/scopedTransaction.d.ts +89 -0
  78. package/dist/adapters/scoped/scopedTransaction.js +303 -0
  79. package/dist/adapters/scoped/sqliteScopeCatalog.d.ts +16 -0
  80. package/dist/adapters/scoped/sqliteScopeCatalog.js +241 -0
  81. package/dist/adapters/scoped/updateGuard.d.ts +3 -0
  82. package/dist/adapters/scoped/updateGuard.js +40 -0
  83. package/dist/adapters/serverSettings.d.ts +45 -0
  84. package/dist/adapters/serverSettings.js +46 -0
  85. package/dist/adapters/sqlite.d.ts +262 -0
  86. package/dist/adapters/sqlite.js +1434 -0
  87. package/dist/adapters/sqliteCostlyReads.d.ts +33 -0
  88. package/dist/adapters/sqliteCostlyReads.js +49 -0
  89. package/dist/adapters/sqliteDecimals.d.ts +22 -0
  90. package/dist/adapters/sqliteDecimals.js +57 -0
  91. package/dist/adapters/sqliteHandles.d.ts +43 -0
  92. package/dist/adapters/sqliteHandles.js +143 -0
  93. package/dist/adapters/sqliteStatementProcess.d.ts +29 -0
  94. package/dist/adapters/sqliteStatementProcess.js +131 -0
  95. package/dist/adapters/statementControl.d.ts +34 -0
  96. package/dist/adapters/statementControl.js +90 -0
  97. package/dist/adapters/storeHost.d.ts +130 -0
  98. package/dist/adapters/storeHost.js +13 -0
  99. package/dist/adapters/telemetry/drivers.d.ts +21 -0
  100. package/dist/adapters/telemetry/drivers.js +321 -0
  101. package/dist/adapters/telemetry/metrics.d.ts +63 -0
  102. package/dist/adapters/telemetry/metrics.js +122 -0
  103. package/dist/adapters/telemetry/otlp.d.ts +12 -0
  104. package/dist/adapters/telemetry/otlp.js +320 -0
  105. package/dist/adapters/telemetry/otlpEncode.d.ts +48 -0
  106. package/dist/adapters/telemetry/otlpEncode.js +366 -0
  107. package/dist/adapters/telemetry/otlpEnv.d.ts +1 -0
  108. package/dist/adapters/telemetry/otlpEnv.js +12 -0
  109. package/dist/adapters/telemetry/serverTiming.d.ts +83 -0
  110. package/dist/adapters/telemetry/serverTiming.js +503 -0
  111. package/dist/adapters/telemetry/start.d.ts +10 -0
  112. package/dist/adapters/telemetry/start.js +25 -0
  113. package/dist/adapters/telemetry/statement.d.ts +16 -0
  114. package/dist/adapters/telemetry/statement.js +134 -0
  115. package/dist/adapters/telemetry/trace.d.ts +127 -0
  116. package/dist/adapters/telemetry/trace.js +295 -0
  117. package/dist/adapters/writeAhead.d.ts +27 -0
  118. package/dist/adapters/writeAhead.js +46 -0
  119. package/dist/adapters/writeAttribution.d.ts +18 -0
  120. package/dist/adapters/writeAttribution.js +23 -0
  121. package/dist/adapters/writeCapture.d.ts +73 -0
  122. package/dist/adapters/writeCapture.js +20 -0
  123. package/dist/adapters/writeLanes.d.ts +94 -0
  124. package/dist/adapters/writeLanes.js +232 -0
  125. package/dist/engine.d.ts +15 -0
  126. package/dist/engine.js +13 -0
  127. package/dist/server/auth/credentials.d.ts +61 -0
  128. package/dist/server/auth/credentials.js +260 -0
  129. package/dist/server/cacheService.d.ts +50 -0
  130. package/dist/server/cacheService.js +110 -0
  131. package/dist/server/cli/args.d.ts +176 -0
  132. package/dist/server/cli/args.js +342 -0
  133. package/dist/server/cli/bin.d.ts +5 -0
  134. package/dist/server/cli/bin.js +66 -0
  135. package/dist/server/cli/browser.d.ts +15 -0
  136. package/dist/server/cli/browser.js +37 -0
  137. package/dist/server/cli/config.d.ts +50 -0
  138. package/dist/server/cli/config.js +206 -0
  139. package/dist/server/cli/startup.d.ts +36 -0
  140. package/dist/server/cli/startup.js +128 -0
  141. package/dist/server/cli/startupOptions.d.ts +63 -0
  142. package/dist/server/cli/startupOptions.js +143 -0
  143. package/dist/server/cli/subcommand.d.ts +28 -0
  144. package/dist/server/cli/subcommand.js +32 -0
  145. package/dist/server/cli/usage.d.ts +13 -0
  146. package/dist/server/cli/usage.js +31 -0
  147. package/dist/server/clientHttp.d.ts +184 -0
  148. package/dist/server/clientHttp.js +700 -0
  149. package/dist/server/clientSurface.d.ts +128 -0
  150. package/dist/server/clientSurface.js +182 -0
  151. package/dist/server/columnGrants.d.ts +103 -0
  152. package/dist/server/columnGrants.js +730 -0
  153. package/dist/server/compileCache.d.ts +1 -0
  154. package/dist/server/compileCache.js +30 -0
  155. package/dist/server/config/locations.d.ts +1 -0
  156. package/dist/server/config/locations.js +15 -0
  157. package/dist/server/configPaths.d.ts +7 -0
  158. package/dist/server/configPaths.js +34 -0
  159. package/dist/server/configSections.d.ts +64 -0
  160. package/dist/server/configSections.js +72 -0
  161. package/dist/server/connectionRedaction.d.ts +30 -0
  162. package/dist/server/connectionRedaction.js +77 -0
  163. package/dist/server/connections.d.ts +353 -0
  164. package/dist/server/connections.js +978 -0
  165. package/dist/server/constraints.d.ts +82 -0
  166. package/dist/server/constraints.js +169 -0
  167. package/dist/server/demo.d.ts +9 -0
  168. package/dist/server/demo.js +554 -0
  169. package/dist/server/devclient.d.ts +108 -0
  170. package/dist/server/devclient.js +361 -0
  171. package/dist/server/evidence.d.ts +55 -0
  172. package/dist/server/evidence.js +323 -0
  173. package/dist/server/hiddenColumns.d.ts +32 -0
  174. package/dist/server/hiddenColumns.js +238 -0
  175. package/dist/server/http/baselineHeaders.d.ts +24 -0
  176. package/dist/server/http/baselineHeaders.js +12 -0
  177. package/dist/server/http/captured.d.ts +35 -0
  178. package/dist/server/http/captured.js +73 -0
  179. package/dist/server/http/clock.d.ts +1 -0
  180. package/dist/server/http/clock.js +14 -0
  181. package/dist/server/http/connectionSource.d.ts +4 -0
  182. package/dist/server/http/connectionSource.js +48 -0
  183. package/dist/server/http/context.d.ts +189 -0
  184. package/dist/server/http/context.js +11 -0
  185. package/dist/server/http/crawlerText.d.ts +15 -0
  186. package/dist/server/http/crawlerText.js +32 -0
  187. package/dist/server/http/dataRoutes.d.ts +88 -0
  188. package/dist/server/http/dataRoutes.js +137 -0
  189. package/dist/server/http/door.d.ts +57 -0
  190. package/dist/server/http/door.js +39 -0
  191. package/dist/server/http/exportRoute.d.ts +15 -0
  192. package/dist/server/http/exportRoute.js +320 -0
  193. package/dist/server/http/firstPaint.d.ts +108 -0
  194. package/dist/server/http/firstPaint.js +262 -0
  195. package/dist/server/http/httpOperationRoutes.d.ts +11 -0
  196. package/dist/server/http/httpOperationRoutes.js +50 -0
  197. package/dist/server/http/pageReads.d.ts +20 -0
  198. package/dist/server/http/pageReads.js +205 -0
  199. package/dist/server/http/pageRoutes.d.ts +39 -0
  200. package/dist/server/http/pageRoutes.js +291 -0
  201. package/dist/server/http/probes.d.ts +22 -0
  202. package/dist/server/http/probes.js +27 -0
  203. package/dist/server/http/rateLimit.d.ts +131 -0
  204. package/dist/server/http/rateLimit.js +351 -0
  205. package/dist/server/http/readRoutes.d.ts +9 -0
  206. package/dist/server/http/readRoutes.js +131 -0
  207. package/dist/server/http/readRouting.d.ts +20 -0
  208. package/dist/server/http/readRouting.js +80 -0
  209. package/dist/server/http/recordCompose.d.ts +67 -0
  210. package/dist/server/http/recordCompose.js +167 -0
  211. package/dist/server/http/recordWrites.d.ts +89 -0
  212. package/dist/server/http/recordWrites.js +298 -0
  213. package/dist/server/http/refusalReport.d.ts +38 -0
  214. package/dist/server/http/refusalReport.js +63 -0
  215. package/dist/server/http/reply.d.ts +130 -0
  216. package/dist/server/http/reply.js +394 -0
  217. package/dist/server/http/requestOrigin.d.ts +11 -0
  218. package/dist/server/http/requestOrigin.js +8 -0
  219. package/dist/server/http/router.d.ts +45 -0
  220. package/dist/server/http/router.js +22 -0
  221. package/dist/server/http/serverCore.d.ts +68 -0
  222. package/dist/server/http/serverCore.js +177 -0
  223. package/dist/server/http/traceRequest.d.ts +30 -0
  224. package/dist/server/http/traceRequest.js +224 -0
  225. package/dist/server/http/trust.d.ts +261 -0
  226. package/dist/server/http/trust.js +472 -0
  227. package/dist/server/http/writeRefusal.d.ts +33 -0
  228. package/dist/server/http/writeRefusal.js +24 -0
  229. package/dist/server/httpConnection.d.ts +49 -0
  230. package/dist/server/httpConnection.js +170 -0
  231. package/dist/server/impact.d.ts +55 -0
  232. package/dist/server/impact.js +47 -0
  233. package/dist/server/journal.d.ts +134 -0
  234. package/dist/server/journal.js +398 -0
  235. package/dist/server/keysetReadHttp.d.ts +52 -0
  236. package/dist/server/keysetReadHttp.js +85 -0
  237. package/dist/server/layouts.d.ts +49 -0
  238. package/dist/server/layouts.js +192 -0
  239. package/dist/server/migrate/cli.d.ts +55 -0
  240. package/dist/server/migrate/cli.js +517 -0
  241. package/dist/server/migrate/database.d.ts +37 -0
  242. package/dist/server/migrate/database.js +247 -0
  243. package/dist/server/migrate/desired.d.ts +76 -0
  244. package/dist/server/migrate/desired.js +292 -0
  245. package/dist/server/migrate/files.d.ts +34 -0
  246. package/dist/server/migrate/files.js +141 -0
  247. package/dist/server/migrate/flyway.d.ts +7 -0
  248. package/dist/server/migrate/flyway.js +69 -0
  249. package/dist/server/migrate/history.d.ts +70 -0
  250. package/dist/server/migrate/history.js +211 -0
  251. package/dist/server/migrate/runner.d.ts +100 -0
  252. package/dist/server/migrate/runner.js +409 -0
  253. package/dist/server/migrate/snapshot.d.ts +30 -0
  254. package/dist/server/migrate/snapshot.js +239 -0
  255. package/dist/server/migrate/target.d.ts +33 -0
  256. package/dist/server/migrate/target.js +82 -0
  257. package/dist/server/openapiDraft.d.ts +25 -0
  258. package/dist/server/openapiDraft.js +171 -0
  259. package/dist/server/operations/diagnostics.d.ts +101 -0
  260. package/dist/server/operations/diagnostics.js +284 -0
  261. package/dist/server/operations/requestMetrics.d.ts +33 -0
  262. package/dist/server/operations/requestMetrics.js +94 -0
  263. package/dist/server/packageVersion.d.ts +1 -0
  264. package/dist/server/packageVersion.js +11 -0
  265. package/dist/server/poolConfig.d.ts +34 -0
  266. package/dist/server/poolConfig.js +114 -0
  267. package/dist/server/product.d.ts +20 -0
  268. package/dist/server/product.js +12 -0
  269. package/dist/server/recordHistoryOperations.d.ts +39 -0
  270. package/dist/server/recordHistoryOperations.js +43 -0
  271. package/dist/server/recordWriteOperations.d.ts +111 -0
  272. package/dist/server/recordWriteOperations.js +329 -0
  273. package/dist/server/resourceReadHttp.d.ts +81 -0
  274. package/dist/server/resourceReadHttp.js +606 -0
  275. package/dist/server/resourceReadOperations.d.ts +147 -0
  276. package/dist/server/resourceReadOperations.js +452 -0
  277. package/dist/server/scaffoldMachine.d.ts +54 -0
  278. package/dist/server/scaffoldMachine.js +184 -0
  279. package/dist/server/seed/cli.d.ts +20 -0
  280. package/dist/server/seed/cli.js +164 -0
  281. package/dist/server/seed/lexicon.d.ts +26 -0
  282. package/dist/server/seed/lexicon.js +585 -0
  283. package/dist/server/seed/seed.d.ts +70 -0
  284. package/dist/server/seed/seed.js +779 -0
  285. package/dist/server/seed/words.d.ts +21 -0
  286. package/dist/server/seed/words.js +164 -0
  287. package/dist/server/serverRequests.d.ts +6 -0
  288. package/dist/server/serverRequests.js +33 -0
  289. package/dist/server/serverTimeouts.d.ts +33 -0
  290. package/dist/server/serverTimeouts.js +32 -0
  291. package/dist/server/shapeonly.d.ts +32 -0
  292. package/dist/server/shapeonly.js +110 -0
  293. package/dist/server/startupWarnings.d.ts +32 -0
  294. package/dist/server/startupWarnings.js +92 -0
  295. package/dist/shared/addressParams.d.ts +28 -0
  296. package/dist/shared/addressParams.js +47 -0
  297. package/dist/shared/appCards.d.ts +123 -0
  298. package/dist/shared/appCards.js +385 -0
  299. package/dist/shared/appComponents.d.ts +177 -0
  300. package/dist/shared/appComponents.js +422 -0
  301. package/dist/shared/appDocuments.d.ts +43 -0
  302. package/dist/shared/appDocuments.js +131 -0
  303. package/dist/shared/appEmbeds.d.ts +21 -0
  304. package/dist/shared/appEmbeds.js +24 -0
  305. package/dist/shared/appIcons.d.ts +28 -0
  306. package/dist/shared/appIcons.js +223 -0
  307. package/dist/shared/appLinks.d.ts +17 -0
  308. package/dist/shared/appLinks.js +124 -0
  309. package/dist/shared/appListColumns.d.ts +3 -0
  310. package/dist/shared/appListColumns.js +66 -0
  311. package/dist/shared/appLocale.d.ts +36 -0
  312. package/dist/shared/appLocale.js +86 -0
  313. package/dist/shared/appMessages.d.ts +44 -0
  314. package/dist/shared/appMessages.js +78 -0
  315. package/dist/shared/appNoun.d.ts +21 -0
  316. package/dist/shared/appNoun.js +32 -0
  317. package/dist/shared/autoBucket.d.ts +98 -0
  318. package/dist/shared/autoBucket.js +305 -0
  319. package/dist/shared/autoValues.d.ts +25 -0
  320. package/dist/shared/autoValues.js +25 -0
  321. package/dist/shared/breakdown.d.ts +228 -0
  322. package/dist/shared/breakdown.js +557 -0
  323. package/dist/shared/breakdowntext.d.ts +41 -0
  324. package/dist/shared/breakdowntext.js +400 -0
  325. package/dist/shared/builtInThemes.d.ts +2 -0
  326. package/dist/shared/builtInThemes.js +771 -0
  327. package/dist/shared/chartSeparation.d.ts +11 -0
  328. package/dist/shared/chartSeparation.js +58 -0
  329. package/dist/shared/clauses.d.ts +22 -0
  330. package/dist/shared/clauses.js +97 -0
  331. package/dist/shared/columnCaption.d.ts +16 -0
  332. package/dist/shared/columnCaption.js +90 -0
  333. package/dist/shared/commandFieldPath.d.ts +2 -0
  334. package/dist/shared/commandFieldPath.js +7 -0
  335. package/dist/shared/commandWire.d.ts +26 -0
  336. package/dist/shared/commandWire.js +41 -0
  337. package/dist/shared/computed.d.ts +161 -0
  338. package/dist/shared/computed.js +378 -0
  339. package/dist/shared/computedParse.d.ts +13 -0
  340. package/dist/shared/computedParse.js +278 -0
  341. package/dist/shared/computedValue.d.ts +47 -0
  342. package/dist/shared/computedValue.js +191 -0
  343. package/dist/shared/connection.d.ts +30 -0
  344. package/dist/shared/connection.js +1 -0
  345. package/dist/shared/csv.d.ts +20 -0
  346. package/dist/shared/csv.js +63 -0
  347. package/dist/shared/dashLayout.d.ts +30 -0
  348. package/dist/shared/dashLayout.js +132 -0
  349. package/dist/shared/dashboardAsks.d.ts +93 -0
  350. package/dist/shared/dashboardAsks.js +129 -0
  351. package/dist/shared/dashboardTrend.d.ts +20 -0
  352. package/dist/shared/dashboardTrend.js +50 -0
  353. package/dist/shared/declaredReferences.d.ts +50 -0
  354. package/dist/shared/declaredReferences.js +202 -0
  355. package/dist/shared/definedFields.d.ts +63 -0
  356. package/dist/shared/definedFields.js +103 -0
  357. package/dist/shared/definedValues.d.ts +63 -0
  358. package/dist/shared/definedValues.js +184 -0
  359. package/dist/shared/displayDefaults.d.ts +135 -0
  360. package/dist/shared/displayDefaults.js +529 -0
  361. package/dist/shared/dueDate.d.ts +6 -0
  362. package/dist/shared/dueDate.js +6 -0
  363. package/dist/shared/duration.d.ts +4 -0
  364. package/dist/shared/duration.js +23 -0
  365. package/dist/shared/fileBounds.d.ts +9 -0
  366. package/dist/shared/fileBounds.js +9 -0
  367. package/dist/shared/filter.d.ts +217 -0
  368. package/dist/shared/filter.js +305 -0
  369. package/dist/shared/firstPaint.d.ts +24 -0
  370. package/dist/shared/firstPaint.js +33 -0
  371. package/dist/shared/form.d.ts +21 -0
  372. package/dist/shared/form.js +25 -0
  373. package/dist/shared/formValues.d.ts +104 -0
  374. package/dist/shared/formValues.js +352 -0
  375. package/dist/shared/funnel.d.ts +45 -0
  376. package/dist/shared/funnel.js +108 -0
  377. package/dist/shared/httpOperations.d.ts +48 -0
  378. package/dist/shared/httpOperations.js +9 -0
  379. package/dist/shared/iconGlyphs.d.ts +4 -0
  380. package/dist/shared/iconGlyphs.js +151 -0
  381. package/dist/shared/iconWeights.d.ts +3 -0
  382. package/dist/shared/iconWeights.js +162 -0
  383. package/dist/shared/imageWidths.d.ts +32 -0
  384. package/dist/shared/imageWidths.js +38 -0
  385. package/dist/shared/keysetPage.d.ts +62 -0
  386. package/dist/shared/keysetPage.js +159 -0
  387. package/dist/shared/like.d.ts +20 -0
  388. package/dist/shared/like.js +29 -0
  389. package/dist/shared/listEmpty.d.ts +12 -0
  390. package/dist/shared/listEmpty.js +36 -0
  391. package/dist/shared/listFilters.d.ts +28 -0
  392. package/dist/shared/listFilters.js +84 -0
  393. package/dist/shared/listPresentations.d.ts +199 -0
  394. package/dist/shared/listPresentations.js +7 -0
  395. package/dist/shared/listQuestion.d.ts +52 -0
  396. package/dist/shared/listQuestion.js +137 -0
  397. package/dist/shared/lookPalettes.d.ts +62 -0
  398. package/dist/shared/lookPalettes.js +306 -0
  399. package/dist/shared/maskQuoted.d.ts +24 -0
  400. package/dist/shared/maskQuoted.js +48 -0
  401. package/dist/shared/mentionLabel.d.ts +19 -0
  402. package/dist/shared/mentionLabel.js +38 -0
  403. package/dist/shared/mentionLookup.d.ts +17 -0
  404. package/dist/shared/mentionLookup.js +64 -0
  405. package/dist/shared/menuCounts.d.ts +16 -0
  406. package/dist/shared/menuCounts.js +74 -0
  407. package/dist/shared/model.d.ts +79 -0
  408. package/dist/shared/model.js +153 -0
  409. package/dist/shared/money.d.ts +44 -0
  410. package/dist/shared/money.js +81 -0
  411. package/dist/shared/moneyEntry.d.ts +7 -0
  412. package/dist/shared/moneyEntry.js +27 -0
  413. package/dist/shared/mount.d.ts +118 -0
  414. package/dist/shared/mount.js +248 -0
  415. package/dist/shared/niceTicks.d.ts +26 -0
  416. package/dist/shared/niceTicks.js +50 -0
  417. package/dist/shared/order.d.ts +59 -0
  418. package/dist/shared/order.js +133 -0
  419. package/dist/shared/page.d.ts +135 -0
  420. package/dist/shared/page.js +1187 -0
  421. package/dist/shared/pageAnatomy.d.ts +99 -0
  422. package/dist/shared/pageAnatomy.js +370 -0
  423. package/dist/shared/pageConfig.d.ts +25 -0
  424. package/dist/shared/pageConfig.js +1308 -0
  425. package/dist/shared/pageEmptyActions.d.ts +12 -0
  426. package/dist/shared/pageEmptyActions.js +20 -0
  427. package/dist/shared/pageLayouts.d.ts +72 -0
  428. package/dist/shared/pageLayouts.js +205 -0
  429. package/dist/shared/pageModel.d.ts +785 -0
  430. package/dist/shared/pageModel.js +121 -0
  431. package/dist/shared/pagePaths.d.ts +180 -0
  432. package/dist/shared/pagePaths.js +869 -0
  433. package/dist/shared/pagePlans.d.ts +52 -0
  434. package/dist/shared/pagePlans.js +108 -0
  435. package/dist/shared/pageRoutes.d.ts +9 -0
  436. package/dist/shared/pageRoutes.js +9 -0
  437. package/dist/shared/query.d.ts +166 -0
  438. package/dist/shared/query.js +1302 -0
  439. package/dist/shared/queryDates.d.ts +12 -0
  440. package/dist/shared/queryDates.js +101 -0
  441. package/dist/shared/queryOperands.d.ts +99 -0
  442. package/dist/shared/queryOperands.js +131 -0
  443. package/dist/shared/reads.d.ts +103 -0
  444. package/dist/shared/reads.js +154 -0
  445. package/dist/shared/recordLabel.d.ts +51 -0
  446. package/dist/shared/recordLabel.js +123 -0
  447. package/dist/shared/recordReadKeys.d.ts +30 -0
  448. package/dist/shared/recordReadKeys.js +51 -0
  449. package/dist/shared/recordReads.d.ts +268 -0
  450. package/dist/shared/recordReads.js +368 -0
  451. package/dist/shared/recordview.d.ts +198 -0
  452. package/dist/shared/recordview.js +356 -0
  453. package/dist/shared/referenceModel.d.ts +58 -0
  454. package/dist/shared/referenceModel.js +194 -0
  455. package/dist/shared/refusal.d.ts +64 -0
  456. package/dist/shared/refusal.js +144 -0
  457. package/dist/shared/relatedCreate.d.ts +30 -0
  458. package/dist/shared/relatedCreate.js +162 -0
  459. package/dist/shared/resourceHttp.d.ts +464 -0
  460. package/dist/shared/resourceHttp.js +1 -0
  461. package/dist/shared/richText.d.ts +85 -0
  462. package/dist/shared/richText.js +305 -0
  463. package/dist/shared/rollups.d.ts +143 -0
  464. package/dist/shared/rollups.js +64 -0
  465. package/dist/shared/rowScope.d.ts +72 -0
  466. package/dist/shared/rowScope.js +376 -0
  467. package/dist/shared/runtimeTables.d.ts +44 -0
  468. package/dist/shared/runtimeTables.js +79 -0
  469. package/dist/shared/schema.d.ts +523 -0
  470. package/dist/shared/schema.js +627 -0
  471. package/dist/shared/schematext.d.ts +38 -0
  472. package/dist/shared/schematext.js +101 -0
  473. package/dist/shared/scopeCatalog.d.ts +29 -0
  474. package/dist/shared/scopeCatalog.js +468 -0
  475. package/dist/shared/servedApp.d.ts +681 -0
  476. package/dist/shared/servedApp.js +45 -0
  477. package/dist/shared/sessionLease.d.ts +34 -0
  478. package/dist/shared/sessionLease.js +3 -0
  479. package/dist/shared/shape.d.ts +55 -0
  480. package/dist/shared/shape.js +168 -0
  481. package/dist/shared/slug.d.ts +1 -0
  482. package/dist/shared/slug.js +12 -0
  483. package/dist/shared/sortText.d.ts +14 -0
  484. package/dist/shared/sortText.js +26 -0
  485. package/dist/shared/sqlRelation.d.ts +4 -0
  486. package/dist/shared/sqlRelation.js +8 -0
  487. package/dist/shared/sqlsaved.d.ts +44 -0
  488. package/dist/shared/sqlsaved.js +63 -0
  489. package/dist/shared/stitchedPaths.d.ts +27 -0
  490. package/dist/shared/stitchedPaths.js +38 -0
  491. package/dist/shared/structuredFilter.d.ts +22 -0
  492. package/dist/shared/structuredFilter.js +1 -0
  493. package/dist/shared/subtitlePath.d.ts +20 -0
  494. package/dist/shared/subtitlePath.js +24 -0
  495. package/dist/shared/suggest.d.ts +18 -0
  496. package/dist/shared/suggest.js +59 -0
  497. package/dist/shared/tableSizing.d.ts +4 -0
  498. package/dist/shared/tableSizing.js +9 -0
  499. package/dist/shared/tagLists.d.ts +57 -0
  500. package/dist/shared/tagLists.js +34 -0
  501. package/dist/shared/textRules.d.ts +54 -0
  502. package/dist/shared/textRules.js +133 -0
  503. package/dist/shared/theme.d.ts +94 -0
  504. package/dist/shared/theme.js +800 -0
  505. package/dist/shared/themeColor.d.ts +34 -0
  506. package/dist/shared/themeColor.js +109 -0
  507. package/dist/shared/themeFaces.d.ts +30 -0
  508. package/dist/shared/themeFaces.js +42 -0
  509. package/dist/shared/themeInk.d.ts +20 -0
  510. package/dist/shared/themeInk.js +52 -0
  511. package/dist/shared/themeLooks.d.ts +9 -0
  512. package/dist/shared/themeLooks.js +572 -0
  513. package/dist/shared/themeParts.d.ts +26 -0
  514. package/dist/shared/themeParts.js +71 -0
  515. package/dist/shared/themePartsCheck.d.ts +21 -0
  516. package/dist/shared/themePartsCheck.js +91 -0
  517. package/dist/shared/themePresets.d.ts +85 -0
  518. package/dist/shared/themePresets.js +139 -0
  519. package/dist/shared/themeRecipeWords.d.ts +156 -0
  520. package/dist/shared/themeRecipeWords.js +156 -0
  521. package/dist/shared/themeRecipes.d.ts +213 -0
  522. package/dist/shared/themeRecipes.js +234 -0
  523. package/dist/shared/themeResolve.d.ts +55 -0
  524. package/dist/shared/themeResolve.js +52 -0
  525. package/dist/shared/themeTokens.d.ts +107 -0
  526. package/dist/shared/themeTokens.js +116 -0
  527. package/dist/shared/themeType.d.ts +38 -0
  528. package/dist/shared/themeType.js +205 -0
  529. package/dist/shared/unitWord.d.ts +4 -0
  530. package/dist/shared/unitWord.js +37 -0
  531. package/dist/shared/view.d.ts +195 -0
  532. package/dist/shared/view.js +987 -0
  533. package/dist/shared/viewLabels.d.ts +47 -0
  534. package/dist/shared/viewLabels.js +459 -0
  535. package/dist/shared/viewPaths.d.ts +248 -0
  536. package/dist/shared/viewPaths.js +294 -0
  537. package/dist/shared/viewtext.d.ts +57 -0
  538. package/dist/shared/viewtext.js +282 -0
  539. package/dist/shared/vocabulary.d.ts +71 -0
  540. package/dist/shared/vocabulary.js +249 -0
  541. package/dist/shared/weekStart.d.ts +7 -0
  542. package/dist/shared/weekStart.js +36 -0
  543. package/mark.svg +1 -0
  544. package/package.json +262 -3
  545. package/schema/model.d.ts +298 -0
  546. package/schema/theme.d.ts +587 -0
@@ -0,0 +1,45 @@
1
+ export const PLACEMENTS = ['side', 'top'];
2
+ /**
3
+ * The entries this reader may use, in the App's order. Its words are the
4
+ * entry's own, else a list's noun ("Ticket", its resource's singular) or the
5
+ * form's heading.
6
+ */
7
+ export function newMenuEntries(served, views, reader, noun) {
8
+ return (served ?? []).flatMap((entry) => {
9
+ const view = views[entry.view];
10
+ if (!view || view.error)
11
+ return [];
12
+ /* Its mark and its group's heading, where it has them. */
13
+ const dress = {
14
+ ...(entry.icon === undefined ? {} : { icon: entry.icon }),
15
+ ...(entry.group === undefined ? {} : { group: entry.group }),
16
+ };
17
+ if (isServedForm(view)) {
18
+ if (!reader.grantedCommands?.includes(view.command.id))
19
+ return [];
20
+ return [{ view: entry.view, label: entry.label ?? view.label, ...dress }];
21
+ }
22
+ if (typeof view.table !== 'string' || !reader.canAdd(view.table))
23
+ return [];
24
+ return [{ view: entry.view, label: entry.label ?? noun(entry.view, view.table), table: view.table, ...dress }];
25
+ });
26
+ }
27
+ /** Whether a view is a command form: the one kind of view that runs a command. */
28
+ export const isServedForm = (view) => Object.hasOwn(view, 'command');
29
+ /** The view keys nav references, depth first: the menu's order. */
30
+ export function navViewKeys(nav) {
31
+ return nav.flatMap((node) => ('group' in node ? navViewKeys(node.children) : 'view' in node ? [node.view] : []));
32
+ }
33
+ /**
34
+ * Every view key in the order rooms are listed: the menu's, then the views
35
+ * nav does not reference (a home nav does not list, and a list view only a
36
+ * dashboard embeds). Never the keys'
37
+ * own order — an object puts a key like "2024" before every other.
38
+ */
39
+ export function viewOrder(app) {
40
+ const keys = navViewKeys(app.nav).filter((key) => Object.hasOwn(app.views, key));
41
+ return [...keys, ...Object.keys(app.views).filter((key) => !keys.includes(key))];
42
+ }
43
+ /** The assistant's own room, where its App gives it a page (`placement: 'page'`, appAssistant.ts): its word in
44
+ * nav, and its address, `/{app}/assistant` and `/{app}/assistant/{conversation}` for one conversation. */
45
+ export const ASSISTANT_ROOM = 'assistant';
@@ -0,0 +1,34 @@
1
+ /**
2
+ * The lease a session's requests carry once a tenant is chosen, as the
3
+ * client's session identity holds it (client sessionIdentity.ts): who it is
4
+ * for, and the platform realm's reserved id that its shape is checked
5
+ * against when it is adopted. Below the kit because the kit's session
6
+ * identity checks it; the tenancy that issues one, and the headers a
7
+ * request asserts it by, are the App framework's (tenantContext.ts, which
8
+ * says these again for its own readers).
9
+ */
10
+ export interface TenantContextOwner {
11
+ readonly tabId: string;
12
+ readonly context: string;
13
+ readonly appId: string;
14
+ readonly accountId: string;
15
+ /** The selected tenant. In the platform realm it is the reserved
16
+ `@platform`, which no `?tenant=` selector can name. */
17
+ readonly tenantId: string;
18
+ /** Present only for a lease in the platform realm, which reads across
19
+ tenants, or for a support session's lease inside one dealer (its
20
+ `tenantId`), which may read that dealer's rows — every read ledgered —
21
+ and writes nothing; a tenant's lease carries no realm. */
22
+ readonly realm?: 'platform' | 'support';
23
+ /** The support session this lease is inside. Present only under
24
+ `realm: 'support'`, and only the id the caller opened the session with:
25
+ it names the row each ledgered read is recorded against. */
26
+ readonly supportId?: string;
27
+ }
28
+ export interface TenantContextReply extends TenantContextOwner {
29
+ readonly revision: number;
30
+ readonly expiresAt: number;
31
+ }
32
+ /** The platform realm's reserved context id. It fails every tenant selector,
33
+ * so only `?realm=platform` reaches it. */
34
+ export declare const PLATFORM_TENANT_ID = "@platform";
@@ -0,0 +1,3 @@
1
+ /** The platform realm's reserved context id. It fails every tenant selector,
2
+ * so only `?realm=platform` reaches it. */
3
+ export const PLATFORM_TENANT_ID = '@platform';
@@ -0,0 +1,55 @@
1
+ /**
2
+ * What is in this database, answered from the catalog alone.
3
+ *
4
+ * The first minute with an unfamiliar schema is spent on questions the
5
+ * structure already answers: where does this thing centre, what are the tables
6
+ * I will actually query, how deep does it go, and what is that lump over there
7
+ * connected to nothing. The diagram shows all of it at once, which is a
8
+ * different thing from saying it — a picture of sixty-six tables answers "what
9
+ * is in here" only for someone who already knows.
10
+ *
11
+ * This is the non-model version of the feature the backlog files under LLM
12
+ * assistance, and it is the honest first version: everything below is derived
13
+ * from foreign keys that were introspected on connect, so it costs no network,
14
+ * no key, and cannot be wrong about a table it hallucinated.
15
+ *
16
+ * Pure on purpose — no DOM, no state, no imports. It takes a schema and returns
17
+ * a description, which is what makes it testable without a browser.
18
+ */
19
+ /**
20
+ * Describe a schema's shape.
21
+ *
22
+ * @param {{tables: Array, foreignKeys: Array}} schema
23
+ * @returns {{
24
+ * counts: {tables: number, views: number, keys: number},
25
+ * hubs: Array<{table: object, incoming: number, from: string[]}>,
26
+ * leaves: object[],
27
+ * joins: Array<{table: object, connects: string[]}>,
28
+ * chain: object[],
29
+ * islands: object[],
30
+ * start: object | null,
31
+ * }}
32
+ */
33
+ export declare function describeSchema(schema: {
34
+ tables: any[];
35
+ foreignKeys: any[];
36
+ }): {
37
+ counts: {
38
+ tables: number;
39
+ views: number;
40
+ keys: number;
41
+ };
42
+ hubs: Array<{
43
+ table: object;
44
+ incoming: number;
45
+ from: string[];
46
+ }>;
47
+ leaves: object[];
48
+ joins: Array<{
49
+ table: object;
50
+ connects: string[];
51
+ }>;
52
+ chain: object[];
53
+ islands: object[];
54
+ start: object | null;
55
+ };
@@ -0,0 +1,168 @@
1
+ /**
2
+ * What is in this database, answered from the catalog alone.
3
+ *
4
+ * The first minute with an unfamiliar schema is spent on questions the
5
+ * structure already answers: where does this thing centre, what are the tables
6
+ * I will actually query, how deep does it go, and what is that lump over there
7
+ * connected to nothing. The diagram shows all of it at once, which is a
8
+ * different thing from saying it — a picture of sixty-six tables answers "what
9
+ * is in here" only for someone who already knows.
10
+ *
11
+ * This is the non-model version of the feature the backlog files under LLM
12
+ * assistance, and it is the honest first version: everything below is derived
13
+ * from foreign keys that were introspected on connect, so it costs no network,
14
+ * no key, and cannot be wrong about a table it hallucinated.
15
+ *
16
+ * Pure on purpose — no DOM, no state, no imports. It takes a schema and returns
17
+ * a description, which is what makes it testable without a browser.
18
+ */
19
+ /** A table has to be pointed at by this many others before it is a hub. */
20
+ const HUB_MINIMUM = 2;
21
+ /** How much of a table has to be foreign keys before it is a join table. */
22
+ const JOIN_RATIO = 0.6;
23
+ /**
24
+ * Describe a schema's shape.
25
+ *
26
+ * @param {{tables: Array, foreignKeys: Array}} schema
27
+ * @returns {{
28
+ * counts: {tables: number, views: number, keys: number},
29
+ * hubs: Array<{table: object, incoming: number, from: string[]}>,
30
+ * leaves: object[],
31
+ * joins: Array<{table: object, connects: string[]}>,
32
+ * chain: object[],
33
+ * islands: object[],
34
+ * start: object | null,
35
+ * }}
36
+ */
37
+ export function describeSchema(schema) {
38
+ const tables = schema?.tables ?? [];
39
+ const keys = (schema?.foreignKeys ?? []).filter((fk) => fk.from.table !== fk.to.table);
40
+ const byId = new Map(tables.map((t) => [t.id, t]));
41
+ /* Counted as *distinct tables*, not constraints. `work_order` pointing at
42
+ `employee` three times — raised_by, assigned_to, approved_by — says one
43
+ thing about the shape, not three, and counting constraints would rank a
44
+ table by how many roles one neighbour plays in it. */
45
+ const incoming = new Map(tables.map((t) => [t.id, new Set()]));
46
+ const outgoing = new Map(tables.map((t) => [t.id, new Set()]));
47
+ for (const fk of keys) {
48
+ incoming.get(fk.to.table)?.add(fk.from.table);
49
+ outgoing.get(fk.from.table)?.add(fk.to.table);
50
+ }
51
+ const inCount = (t) => incoming.get(t.id)?.size ?? 0;
52
+ const outCount = (t) => outgoing.get(t.id)?.size ?? 0;
53
+ const real = tables.filter((t) => !t.isView);
54
+ const hubs = real
55
+ .filter((t) => inCount(t) >= HUB_MINIMUM)
56
+ .sort((a, b) => inCount(b) - inCount(a) || a.name.localeCompare(b.name))
57
+ .slice(0, 4)
58
+ .map((table) => ({
59
+ table,
60
+ incoming: inCount(table),
61
+ from: [...(incoming.get(table.id) ?? [])].map((id) => byId.get(id)?.name ?? id).sort(),
62
+ }));
63
+ /* Leaves point outwards and are pointed at by nothing, which is what a
64
+ transaction or an event table looks like: the thing that happened, hanging
65
+ off the things it happened to. They are usually what someone actually
66
+ wants to query, and they are the least visible in a diagram because they
67
+ sit at the edges. */
68
+ const leaves = real
69
+ .filter((t) => outCount(t) > 0 && inCount(t) === 0)
70
+ .sort((a, b) => outCount(b) - outCount(a) || a.name.localeCompare(b.name));
71
+ /* A join table is mostly foreign keys, points at two or more things, and —
72
+ the part that separates it from a lookup table — is pointed at by almost
73
+ nothing itself. A join table *connects* things; things do not connect to
74
+ it.
75
+
76
+ Without that last clause `country` qualifies: three of its five columns are
77
+ references, to currency, language and region. But half the schema points at
78
+ `country`, which makes it a dimension everyone shares rather than a bridge
79
+ between two tables, and calling it a join table would mislead about the
80
+ one thing this list exists to say. */
81
+ const joins = real
82
+ .filter((t) => {
83
+ const fkColumns = t.columns.filter((c) => c.references).length;
84
+ return outCount(t) >= 2 && inCount(t) <= 1 && t.columns.length > 0 && fkColumns / t.columns.length >= JOIN_RATIO;
85
+ })
86
+ .map((table) => ({
87
+ table,
88
+ connects: [...(outgoing.get(table.id) ?? [])].map((id) => byId.get(id)?.name ?? id).sort(),
89
+ }));
90
+ return {
91
+ counts: {
92
+ tables: real.length,
93
+ views: tables.length - real.length,
94
+ keys: schema?.foreignKeys?.length ?? 0,
95
+ },
96
+ hubs,
97
+ leaves,
98
+ joins,
99
+ chain: longestChain(tables, outgoing)
100
+ .map((id) => byId.get(id))
101
+ .filter(Boolean),
102
+ islands: real.filter((t) => inCount(t) === 0 && outCount(t) === 0),
103
+ start: suggestStart(real, inCount, outCount),
104
+ };
105
+ }
106
+ /**
107
+ * The longest path of references, as the tables along it.
108
+ *
109
+ * The diagram computes the same *depth* to lay itself out, but a number is not
110
+ * the interesting part — "five levels deep" says less than "region → country →
111
+ * address → site → building → room", which is the shape of the domain written
112
+ * out. Recomputed here rather than shared because the diagram throws the path
113
+ * away and keeps only the count.
114
+ *
115
+ * A cycle is broken at the first table already on the path. A circular schema
116
+ * has no longest chain, and the alternative to stopping is not stopping.
117
+ */
118
+ function longestChain(tables, outgoing) {
119
+ const best = new Map();
120
+ const walk = (id, seen) => {
121
+ if (seen.has(id))
122
+ return [];
123
+ if (best.has(id))
124
+ return best.get(id);
125
+ seen.add(id);
126
+ let longest = [];
127
+ for (const next of outgoing.get(id) ?? []) {
128
+ const path = walk(next, seen);
129
+ if (path.length > longest.length)
130
+ longest = path;
131
+ }
132
+ seen.delete(id);
133
+ const result = [id, ...longest];
134
+ /* Only memoised when the walk was not truncated by the cycle guard — a
135
+ path cut short by `seen` is an answer about this route, not about this
136
+ table, and caching it would poison every later route through it. */
137
+ if (!longest.some((t) => seen.has(t)))
138
+ best.set(id, result);
139
+ return result;
140
+ };
141
+ let chain = [];
142
+ for (const t of tables) {
143
+ const path = walk(t.id, new Set());
144
+ if (path.length > chain.length)
145
+ chain = path;
146
+ }
147
+ return chain.length > 1 ? chain : [];
148
+ }
149
+ /**
150
+ * Where to start reading.
151
+ *
152
+ * The table that connects to the most, with a readable name to recognise rows
153
+ * by. Both halves matter: a join table is highly connected and tells you
154
+ * nothing on its own, and a lookup table is readable and leads nowhere.
155
+ */
156
+ function suggestStart(tables, inCount, outCount) {
157
+ const scored = tables
158
+ .filter((t) => t.columns.some((c) => !c.primaryKey && !c.references))
159
+ .map((t) => ({
160
+ table: t,
161
+ // Outgoing weighted higher: a table you can walk *from* opens more of the
162
+ // schema than one that is merely popular.
163
+ score: outCount(t) * 2 + inCount(t),
164
+ }))
165
+ .filter((s) => s.score > 0)
166
+ .sort((a, b) => b.score - a.score || a.table.name.localeCompare(b.table.name));
167
+ return scored[0]?.table ?? null;
168
+ }
@@ -0,0 +1 @@
1
+ export declare function slug(name: string, fallback: string): string;
@@ -0,0 +1,12 @@
1
+ /*
2
+ * The one rule for turning a display name into an id: lower case, each run of
3
+ * anything but letters and digits becomes one hyphen, and no hyphen at either
4
+ * end. Apps, pages, views and connections all derive a default id this way,
5
+ * each with its own word for a name that leaves nothing behind.
6
+ */
7
+ export function slug(name, fallback) {
8
+ return (name
9
+ .toLowerCase()
10
+ .replace(/[^a-z0-9]+/g, '-')
11
+ .replace(/^-+|-+$/g, '') || fallback);
12
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * A sort written the way the query bar writes it — "due_on desc, name" —
3
+ * parsed to the structure a planner runs. One spelling for one question: a
4
+ * structured orderBy lived beside textual sort in tab queries, and remembering
5
+ * which surface wanted which was a tax on every author.
6
+ *
7
+ * A page section's `sort` (pageConfig.ts) and a record view's list section
8
+ * (recordview.ts) both read it here, so the two cannot drift into accepting
9
+ * different text. `example` is the surface's own sample, quoted in the error.
10
+ */
11
+ export declare function parseSortText(raw: unknown, at: string, example: string): Array<{
12
+ column: string;
13
+ direction: 'asc' | 'desc';
14
+ }> | undefined;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * A sort written the way the query bar writes it — "due_on desc, name" —
3
+ * parsed to the structure a planner runs. One spelling for one question: a
4
+ * structured orderBy lived beside textual sort in tab queries, and remembering
5
+ * which surface wanted which was a tax on every author.
6
+ *
7
+ * A page section's `sort` (pageConfig.ts) and a record view's list section
8
+ * (recordview.ts) both read it here, so the two cannot drift into accepting
9
+ * different text. `example` is the surface's own sample, quoted in the error.
10
+ */
11
+ export function parseSortText(raw, at, example) {
12
+ if (raw === undefined)
13
+ return undefined;
14
+ if (typeof raw !== 'string' || !raw.trim()) {
15
+ throw new Error(`${at} has a "sort" that is not query-bar text like "${example}".`);
16
+ }
17
+ return raw.split(',').map((part) => {
18
+ const words = part.trim().split(/\s+/);
19
+ const column = words[0] ?? '';
20
+ const direction = (words[1] ?? 'asc').toLowerCase();
21
+ if (!column || words.length > 2 || (direction !== 'asc' && direction !== 'desc')) {
22
+ throw new Error(`${at} has a "sort" it cannot read at "${part.trim()}". Write it like the query bar: "${example}".`);
23
+ }
24
+ return { column, direction: direction };
25
+ });
26
+ }
@@ -0,0 +1,4 @@
1
+ import type { SqlStyle } from './filter.js';
2
+ import { type DatabaseSchema } from './schema.js';
3
+ /** Physical relation rendering, kept separate from scoped relation lookup. */
4
+ export declare function qualifiedTable(schema: DatabaseSchema, tableId: string, style: SqlStyle): string;
@@ -0,0 +1,8 @@
1
+ import { findTable } from './schema.js';
2
+ /** Physical relation rendering, kept separate from scoped relation lookup. */
3
+ export function qualifiedTable(schema, tableId, style) {
4
+ const table = findTable(schema, tableId);
5
+ if (!table)
6
+ return style.quote(tableId);
7
+ return table.schema ? `${style.quote(table.schema)}.${style.quote(table.name)}` : style.quote(table.name);
8
+ }
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Saved SQL statements, as a config file section.
3
+ *
4
+ * The same idea as the `views` section beside it, for the same reason: a
5
+ * statement you retype every morning is a statement that should have a name,
6
+ * and a *team's* statements belong in a file they can commit rather than in
7
+ * one person's browser. `tablewalk.json` is already the place a repository says
8
+ * "these are the databases this project talks to"; this lets it also say "and
9
+ * these are the questions people ask of them".
10
+ *
11
+ * The stored form is the text, never anything compiled. It stays readable in
12
+ * the editor, it survives the schema changing underneath it — at worst as a
13
+ * visible error you can fix rather than a silently wrong answer — and it can be
14
+ * reviewed in a pull request by someone who knows SQL and nothing about
15
+ * tablewalk.
16
+ */
17
+ export interface SavedQuery {
18
+ name: string;
19
+ sql: string;
20
+ /** Optional prose, for a statement whose purpose is not obvious from it. */
21
+ description?: string;
22
+ /**
23
+ * Connection id or name this belongs to. Absent means every connection —
24
+ * which is right for a statement about a schema several databases share, and
25
+ * wrong for one about a table only production has, so it is worth setting.
26
+ */
27
+ connection?: string;
28
+ /** Where it came from, so the interface can say what it can be edited. */
29
+ source?: 'config' | 'saved';
30
+ }
31
+ /**
32
+ * Read the `queries` section of a config file.
33
+ *
34
+ * Errors name the file, the position *and* the statement's name where there is
35
+ * one, because a config file is something a person wrote by hand and "queries
36
+ * is not an array" sends them to search a file they may not have written.
37
+ *
38
+ * A duplicate name is refused rather than resolved. Two statements called
39
+ * "Daily totals" that do different things is a worse outcome than a startup
40
+ * error, and silently keeping the last one is the worst of the three.
41
+ */
42
+ export declare function parseQueriesConfig(raw: unknown, where: string): SavedQuery[];
43
+ /** The saved statements that apply to one connection, by id or by name. */
44
+ export declare function queriesFor(all: SavedQuery[], connectionId: string, connectionName?: string): SavedQuery[];
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Saved SQL statements, as a config file section.
3
+ *
4
+ * The same idea as the `views` section beside it, for the same reason: a
5
+ * statement you retype every morning is a statement that should have a name,
6
+ * and a *team's* statements belong in a file they can commit rather than in
7
+ * one person's browser. `tablewalk.json` is already the place a repository says
8
+ * "these are the databases this project talks to"; this lets it also say "and
9
+ * these are the questions people ask of them".
10
+ *
11
+ * The stored form is the text, never anything compiled. It stays readable in
12
+ * the editor, it survives the schema changing underneath it — at worst as a
13
+ * visible error you can fix rather than a silently wrong answer — and it can be
14
+ * reviewed in a pull request by someone who knows SQL and nothing about
15
+ * tablewalk.
16
+ */
17
+ /**
18
+ * Read the `queries` section of a config file.
19
+ *
20
+ * Errors name the file, the position *and* the statement's name where there is
21
+ * one, because a config file is something a person wrote by hand and "queries
22
+ * is not an array" sends them to search a file they may not have written.
23
+ *
24
+ * A duplicate name is refused rather than resolved. Two statements called
25
+ * "Daily totals" that do different things is a worse outcome than a startup
26
+ * error, and silently keeping the last one is the worst of the three.
27
+ */
28
+ export function parseQueriesConfig(raw, where) {
29
+ const queries = raw?.queries;
30
+ if (queries === undefined)
31
+ return [];
32
+ if (!Array.isArray(queries))
33
+ throw new Error(`${where}: "queries" must be an array.`);
34
+ const seen = new Set();
35
+ return queries.map((entry, i) => {
36
+ const at = `${where}: query ${i + 1}`;
37
+ if (!entry || typeof entry !== 'object' || Array.isArray(entry)) {
38
+ throw new Error(`${at} is not an object.`);
39
+ }
40
+ const q = entry;
41
+ if (typeof q.name !== 'string' || !q.name.trim())
42
+ throw new Error(`${at} has no "name".`);
43
+ const name = q.name.trim();
44
+ if (seen.has(name)) {
45
+ throw new Error(`${where}: two queries are called "${name}". Names have to be distinct.`);
46
+ }
47
+ seen.add(name);
48
+ if (typeof q.sql !== 'string' || !q.sql.trim()) {
49
+ throw new Error(`${at} ("${name}") has no "sql".`);
50
+ }
51
+ return {
52
+ name,
53
+ sql: q.sql.trim(),
54
+ description: typeof q.description === 'string' && q.description.trim() ? q.description.trim() : undefined,
55
+ connection: typeof q.connection === 'string' && q.connection.trim() ? q.connection.trim() : undefined,
56
+ source: 'config',
57
+ };
58
+ });
59
+ }
60
+ /** The saved statements that apply to one connection, by id or by name. */
61
+ export function queriesFor(all, connectionId, connectionName) {
62
+ return all.filter((q) => !q.connection || q.connection === connectionId || q.connection === connectionName);
63
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Where a path crosses a stitched reference: a declared reference to a table
3
+ * in another source, on another connection (ForeignKey.stitched), which is
4
+ * read in a second step and never joined. Shared by the reader that stitches
5
+ * (appStitchedReads.ts) and the load-time check of an App's own lists, so an
6
+ * authored filter or sort through one is refused when the App starts, in the
7
+ * words a request through one is refused with.
8
+ */
9
+ import type { DatabaseSchema, ForeignKey } from './schema.js';
10
+ import { type ViewCondition, type ViewOrder } from './viewPaths.js';
11
+ /** A stitched hop a path takes: the prefix as the path wrote it, the edge, and whether it is past the first step. */
12
+ export interface StitchedHop {
13
+ prefix: string;
14
+ edge: ForeignKey;
15
+ deep: boolean;
16
+ }
17
+ /** The first stitched hop a path takes from `base`, or none. */
18
+ export declare function stitchedHop(schema: DatabaseSchema, base: string, path: string): StitchedHop | undefined;
19
+ /** Why a list cannot filter or sort by a path on the far side of a stitched reference. */
20
+ export declare function stitchedFarProblem(hop: StitchedHop, path: string, what: string): string;
21
+ /** The first condition or sort of a list that is across a stitched reference, said as a problem. */
22
+ export declare function stitchedListProblem(schema: DatabaseSchema, base: string, parsed: {
23
+ filter?: {
24
+ groups: ViewCondition[][];
25
+ };
26
+ orderBy?: ViewOrder[];
27
+ }): string | undefined;
@@ -0,0 +1,38 @@
1
+ import { hopsFrom } from './viewPaths.js';
2
+ /** The first stitched hop a path takes from `base`, or none. */
3
+ export function stitchedHop(schema, base, path) {
4
+ const segments = path.split('.').map((segment) => segment.trim());
5
+ let table = base;
6
+ for (let i = 0; i < segments.length - 1; i++) {
7
+ const matches = hopsFrom(schema, table).filter((hop) => hop.name === segments[i] || hop.fk.name === segments[i]);
8
+ if (matches.length !== 1)
9
+ return undefined;
10
+ const { fk } = matches[0];
11
+ if (fk.stitched)
12
+ return { prefix: segments.slice(0, i + 1).join('.'), edge: fk, deep: i > 0 };
13
+ table = fk.to.table;
14
+ }
15
+ return undefined;
16
+ }
17
+ /** Why a list cannot filter or sort by a path on the far side of a stitched reference. */
18
+ export function stitchedFarProblem(hop, path, what) {
19
+ const target = hop.edge.to.table;
20
+ return (`"${path}" is on ${target}, in another source on another connection, so a list of ${hop.edge.from.table} cannot ${what} by it: ` +
21
+ `each database filters and sorts what it holds. Show it, or ${what} on ${target}'s own list.`);
22
+ }
23
+ /** The first condition or sort of a list that is across a stitched reference, said as a problem. */
24
+ export function stitchedListProblem(schema, base, parsed) {
25
+ for (const condition of parsed.filter?.groups.flat() ?? []) {
26
+ for (const path of [condition.path, ...(condition.other ? [condition.other] : [])]) {
27
+ const hop = stitchedHop(schema, base, path);
28
+ if (hop)
29
+ return stitchedFarProblem(hop, path, 'filter');
30
+ }
31
+ }
32
+ for (const order of parsed.orderBy ?? []) {
33
+ const hop = order.alias ? undefined : stitchedHop(schema, base, order.path);
34
+ if (hop)
35
+ return stitchedFarProblem(hop, order.path, 'sort');
36
+ }
37
+ return undefined;
38
+ }
@@ -0,0 +1,22 @@
1
+ import type { Op } from './filter.js';
2
+ export type StructuredScalar = string | number | boolean | null;
3
+ /** A validated condition, shared by execution and transport. Parsing may build
4
+ * broader draft types; execution must validate them before claiming this shape. */
5
+ type StructuredCondition<Field extends 'column' | 'path'> = Record<Field, string> & ({
6
+ op: 'isNull' | 'isNotNull';
7
+ value?: StructuredScalar;
8
+ } | {
9
+ op: 'in';
10
+ value: StructuredScalar[];
11
+ } | {
12
+ op: Exclude<Op, 'isNull' | 'isNotNull' | 'in'>;
13
+ value: StructuredScalar;
14
+ } | (Field extends 'path' ? {
15
+ op: '=' | '!=' | '>' | '>=' | '<' | '<=';
16
+ other: string;
17
+ value?: undefined;
18
+ } : never));
19
+ export interface StructuredFilter<Field extends 'column' | 'path' = 'column'> {
20
+ groups: Array<Array<StructuredCondition<Field>>>;
21
+ }
22
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,20 @@
1
+ /**
2
+ * The path a shown column's second line reads, or undefined for none. A
3
+ * rule's `subtitle` names a column of the table the value was read from, so
4
+ * `employee_id.name` shown on a timesheet reads `employee_id.title` — the
5
+ * employee's title, never the timesheet's own column of that name. Its own
6
+ * module: the cell draws it (client valueModel.ts) and a list's question
7
+ * fetches it (listQuestion.ts), and a public page's cells carry nothing else.
8
+ */
9
+ export declare function subtitlePath(rule: {
10
+ subtitle?: string;
11
+ } | null | undefined, column: string): string | undefined;
12
+ /**
13
+ * The path a shown column's lead icon reads its tone from, or undefined for
14
+ * none: like a second line, a column of the table the value was read from.
15
+ */
16
+ export declare function leadTonePath(rule: {
17
+ icon?: {
18
+ toneOf?: string;
19
+ };
20
+ } | null | undefined, column: string): string | undefined;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * The path a shown column's second line reads, or undefined for none. A
3
+ * rule's `subtitle` names a column of the table the value was read from, so
4
+ * `employee_id.name` shown on a timesheet reads `employee_id.title` — the
5
+ * employee's title, never the timesheet's own column of that name. Its own
6
+ * module: the cell draws it (client valueModel.ts) and a list's question
7
+ * fetches it (listQuestion.ts), and a public page's cells carry nothing else.
8
+ */
9
+ export function subtitlePath(rule, column) {
10
+ if (!rule?.subtitle)
11
+ return undefined;
12
+ const hop = column.lastIndexOf('.');
13
+ return hop < 0 ? rule.subtitle : `${column.slice(0, hop + 1)}${rule.subtitle}`;
14
+ }
15
+ /**
16
+ * The path a shown column's lead icon reads its tone from, or undefined for
17
+ * none: like a second line, a column of the table the value was read from.
18
+ */
19
+ export function leadTonePath(rule, column) {
20
+ if (!rule?.icon?.toneOf)
21
+ return undefined;
22
+ const hop = column.lastIndexOf('.');
23
+ return hop < 0 ? rule.icon.toneOf : `${column.slice(0, hop + 1)}${rule.icon.toneOf}`;
24
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Levenshtein distance, capped: names more than three characters apart in
3
+ * length score 99 without the table being built. Only ever used to suggest
4
+ * a near miss, where anything that far off is no suggestion at all.
5
+ */
6
+ export declare function distance(a: string, b: string): number;
7
+ /** The candidate closest to `name` ignoring case, if one is within three edits. */
8
+ export declare function nearest(name: string, candidates: readonly string[]): string | undefined;
9
+ /**
10
+ * The refusal of a key its place does not take, after the place:
11
+ * `has no "lable". Did you mean "label"? It takes: …`, the caller ending the
12
+ * sentence. A key some other place takes (`homes`) is told where it belongs
13
+ * instead: it is spelled right and put in the wrong place. A key here one
14
+ * slip away still wins, since a typo is the likelier mistake.
15
+ */
16
+ export declare function unknownKey(key: string, takes: readonly string[], homes?: readonly string[]): string;
17
+ /** A short list for an error message; long lists help nobody. */
18
+ export declare function shortList(items: readonly string[]): string;