@aotter/mantle 0.2.0-alpha.1 → 0.2.0-alpha.11

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 (936) hide show
  1. package/README.md +180 -45
  2. package/dist/auth/adapter.d.ts +32 -0
  3. package/dist/auth/adapter.js +261 -0
  4. package/dist/auth/admin.d.ts +3 -0
  5. package/dist/auth/admin.js +18 -0
  6. package/dist/auth/caller.d.ts +86 -0
  7. package/dist/auth/caller.js +128 -0
  8. package/dist/auth/{createAuthRoutes.js → consent.js} +26 -54
  9. package/dist/auth/hardening.d.ts +24 -0
  10. package/dist/auth/hardening.js +33 -0
  11. package/dist/auth/identity.d.ts +121 -0
  12. package/dist/auth/identity.js +192 -0
  13. package/dist/auth/oauth.d.ts +63 -0
  14. package/dist/auth/oauth.js +185 -0
  15. package/dist/auth/resource-seeds.js +8 -0
  16. package/dist/auth/route-http.js +33 -0
  17. package/dist/auth/routes.d.ts +32 -0
  18. package/dist/auth/routes.js +80 -0
  19. package/dist/build/compiler.d.ts +122 -0
  20. package/dist/build/compiler.js +3 -0
  21. package/dist/{spec → build/spec}/domain/model/ManifestGrammar.d.ts +30 -43
  22. package/dist/{spec → build/spec}/domain/model/RuntimePlan.d.ts +77 -3
  23. package/dist/{spec → build/spec}/domain/model/SqlIr.d.ts +39 -6
  24. package/dist/build/spec/domain/model/UserFields.d.ts +21 -0
  25. package/dist/{spec → build/spec}/domain/service/PlanFingerprint.d.ts +4 -1
  26. package/dist/{spec → build/spec}/kernel/diagnostic.d.ts +1 -30
  27. package/dist/bun/assets.d.ts +2 -0
  28. package/dist/bun/assets.js +22 -0
  29. package/dist/domain/adminOrder.js +22 -0
  30. package/dist/domain/columns.js +42 -0
  31. package/dist/domain/describe/chunk-SGMRVDGE.js +1 -0
  32. package/dist/domain/describe/index.d.ts +58 -0
  33. package/dist/domain/describe/index.js +1 -0
  34. package/dist/domain/describe/target-hash.d.ts +8 -0
  35. package/dist/domain/describe/target-hash.js +1 -0
  36. package/dist/domain/describe/targets.d.ts +40 -0
  37. package/dist/domain/entry.js +19 -0
  38. package/dist/domain/generated-tools.js +18 -0
  39. package/dist/domain/generation.d.ts +16 -0
  40. package/dist/domain/generation.js +1 -0
  41. package/dist/domain/input.js +15 -0
  42. package/dist/domain/model.js +1 -0
  43. package/dist/domain/paging.js +213 -0
  44. package/dist/domain/recipes.js +22 -0
  45. package/dist/domain/userReferences.js +4 -0
  46. package/dist/domain/wireScalars.js +41 -0
  47. package/dist/infrastructure/adminEntries.js +156 -0
  48. package/dist/infrastructure/adminPaging.js +70 -0
  49. package/dist/infrastructure/artifacts.js +67 -0
  50. package/dist/infrastructure/authSchema.js +74 -0
  51. package/dist/infrastructure/bundle.js +159 -0
  52. package/dist/infrastructure/cli.js +111 -0
  53. package/dist/infrastructure/generate.d.ts +12 -0
  54. package/dist/infrastructure/generate.js +175 -0
  55. package/dist/infrastructure/generateAuth.d.ts +8 -0
  56. package/dist/infrastructure/generateAuth.js +66 -0
  57. package/dist/infrastructure/help.js +55 -0
  58. package/dist/infrastructure/init.js +50 -0
  59. package/dist/infrastructure/inputs.js +32 -0
  60. package/dist/infrastructure/mounts.js +22 -0
  61. package/dist/infrastructure/wrangler.js +103 -0
  62. package/dist/kernel/authorization.d.ts +4 -0
  63. package/dist/kernel/authorization.js +15 -0
  64. package/dist/kernel/binds.d.ts +60 -0
  65. package/dist/kernel/binds.js +39 -0
  66. package/dist/kernel/caller-identity.d.ts +21 -0
  67. package/dist/kernel/caller-identity.js +7 -0
  68. package/dist/kernel/caller-mode.d.ts +4 -0
  69. package/dist/kernel/caller-mode.js +14 -0
  70. package/dist/kernel/contract-error.d.ts +12 -0
  71. package/dist/kernel/contract-error.js +14 -0
  72. package/dist/kernel/contracts.d.ts +135 -0
  73. package/dist/kernel/contracts.js +56 -0
  74. package/dist/{spec/domain/service/CloudflareCron.d.ts → kernel/cron.d.ts} +0 -1
  75. package/dist/{spec/domain/service/CloudflareCron.js → kernel/cron.js} +0 -9
  76. package/dist/kernel/dialect/common.d.ts +38 -0
  77. package/dist/kernel/dialect/common.js +3 -0
  78. package/dist/kernel/dialect/postgres.d.ts +16 -0
  79. package/dist/kernel/dialect/postgres.js +16 -0
  80. package/dist/kernel/dialect/sqlite.d.ts +20 -0
  81. package/dist/kernel/dialect/sqlite.js +29 -0
  82. package/dist/kernel/drain.d.ts +5 -0
  83. package/dist/kernel/drain.js +29 -0
  84. package/dist/kernel/driver/bun-sqlite.d.ts +19 -0
  85. package/dist/kernel/driver/bun-sqlite.js +73 -0
  86. package/dist/kernel/driver/d1.d.ts +24 -0
  87. package/dist/kernel/driver/d1.js +21 -0
  88. package/dist/kernel/driver/postgres.d.ts +25 -0
  89. package/dist/kernel/driver/postgres.js +84 -0
  90. package/dist/kernel/driver/transaction-context.d.ts +10 -0
  91. package/dist/kernel/driver/transaction-context.js +28 -0
  92. package/dist/kernel/email.d.ts +28 -0
  93. package/dist/{auth/emailTemplates.js → kernel/email.js} +9 -2
  94. package/dist/kernel/host-access.d.ts +10 -0
  95. package/dist/kernel/host-access.js +64 -0
  96. package/dist/kernel/host-caller.d.ts +39 -0
  97. package/dist/kernel/host-caller.js +53 -0
  98. package/dist/kernel/json-body.d.ts +4 -0
  99. package/dist/kernel/json-body.js +42 -0
  100. package/dist/kernel/mcp-apps.d.ts +69 -0
  101. package/dist/kernel/mcp-apps.js +35 -0
  102. package/dist/kernel/mcp-call.d.ts +5 -0
  103. package/dist/kernel/mcp-call.js +24 -0
  104. package/dist/kernel/mcp-handler.js +347 -0
  105. package/dist/kernel/mcp.d.ts +110 -0
  106. package/dist/kernel/mcp.js +45 -0
  107. package/dist/kernel/media.d.ts +27 -0
  108. package/dist/kernel/media.js +198 -0
  109. package/dist/kernel/paging.d.ts +55 -0
  110. package/dist/kernel/paging.js +87 -0
  111. package/dist/kernel/publishing.d.ts +4 -0
  112. package/dist/kernel/publishing.js +15 -0
  113. package/dist/{cloudflare/r2Media.d.ts → kernel/r2-media.d.ts} +4 -5
  114. package/dist/kernel/r2-media.js +71 -0
  115. package/dist/kernel/rest-dispatch.js +37 -0
  116. package/dist/kernel/rest-router.js +63 -0
  117. package/dist/kernel/rest.d.ts +58 -0
  118. package/dist/kernel/rest.js +38 -0
  119. package/dist/kernel/scalars.d.ts +6 -0
  120. package/dist/kernel/scalars.js +36 -0
  121. package/dist/kernel/search.js +4 -0
  122. package/dist/{core/site.d.ts → kernel/site-types.d.ts} +38 -9
  123. package/dist/kernel/site-types.js +1 -0
  124. package/dist/kernel/site.d.ts +39 -0
  125. package/dist/kernel/site.js +30 -0
  126. package/dist/kernel/store.d.ts +175 -0
  127. package/dist/kernel/store.js +244 -0
  128. package/dist/kernel/surface-failure.d.ts +10 -0
  129. package/dist/kernel/surface-failure.js +29 -0
  130. package/dist/kernel/surface.d.ts +10 -0
  131. package/dist/kernel/surface.js +16 -0
  132. package/dist/kernel/sweep.d.ts +17 -0
  133. package/dist/kernel/sweep.js +26 -0
  134. package/dist/kernel/translations.d.ts +1 -0
  135. package/dist/kernel/translations.js +12 -0
  136. package/dist/kernel/user-caller.d.ts +31 -0
  137. package/dist/kernel/user-caller.js +61 -0
  138. package/dist/kernel/user-field-name.js +3 -0
  139. package/dist/kernel/user-fields.d.ts +35 -0
  140. package/dist/kernel/user-fields.js +71 -0
  141. package/dist/kernel/validation.d.ts +15 -0
  142. package/dist/kernel/validation.js +46 -0
  143. package/dist/kernel/web-gateway.js +66 -0
  144. package/dist/kernel/web-head.js +14 -0
  145. package/dist/kernel/web-index.js +39 -0
  146. package/dist/kernel/web-response.js +7 -0
  147. package/dist/kernel/web-serve.js +97 -0
  148. package/dist/kernel/web.d.ts +77 -0
  149. package/dist/kernel/web.js +43 -0
  150. package/dist/kernel/where.js +21 -0
  151. package/dist/testing/index.d.ts +1 -37
  152. package/dist/testing/index.js +1 -43
  153. package/dist/usecase/adminBindings.js +150 -0
  154. package/dist/usecase/adminClient.js +66 -0
  155. package/dist/usecase/adminDescriptors.js +100 -0
  156. package/dist/usecase/generate.js +160 -0
  157. package/dist/usecase/handlers.js +18 -0
  158. package/dist/usecase/mcp-media.js +16 -0
  159. package/dist/usecase/mcp.js +96 -0
  160. package/dist/usecase/paging.js +69 -0
  161. package/dist/usecase/publishing.js +59 -0
  162. package/dist/usecase/refusals.js +27 -0
  163. package/dist/usecase/rest.js +53 -0
  164. package/dist/usecase/search.js +7 -0
  165. package/dist/usecase/site.js +38 -0
  166. package/dist/usecase/stores.js +52 -0
  167. package/dist/usecase/tool-version.js +6 -0
  168. package/dist/usecase/translations.js +76 -0
  169. package/dist/usecase/ttl.js +20 -0
  170. package/dist/usecase/validation.js +221 -0
  171. package/dist/usecase/web.js +23 -0
  172. package/docs/examples/README.md +39 -16
  173. package/docs/examples/app-shell/README.md +121 -0
  174. package/docs/examples/app-shell/accept.mjs +91 -0
  175. package/docs/examples/app-shell/gitignore +7 -0
  176. package/docs/examples/app-shell/package.json +43 -0
  177. package/docs/examples/app-shell/pnpm-workspace.yaml +8 -0
  178. package/docs/examples/app-shell/smoke-kit.mjs +168 -0
  179. package/docs/examples/app-shell/src/auth.ts +58 -0
  180. package/docs/examples/app-shell/src/handlers.ts +5 -0
  181. package/docs/examples/app-shell/src/index.ts +4 -0
  182. package/docs/examples/app-shell/src/routes.ts +16 -0
  183. package/docs/examples/app-shell/src/schedule.ts +8 -0
  184. package/docs/examples/app-shell/src/service.ts +71 -0
  185. package/docs/examples/app-shell/src/sign-in.ts +41 -0
  186. package/docs/examples/app-shell/src/signup.ts +8 -0
  187. package/docs/examples/{reference-service → app-shell}/tsconfig.json +6 -2
  188. package/docs/examples/app-shell/worker-configuration.d.ts +22 -0
  189. package/docs/examples/app-shell/wrangler.jsonc +62 -0
  190. package/docs/examples/club-events/README.md +65 -0
  191. package/docs/examples/club-events/manifests/club-events.yaml +247 -0
  192. package/docs/examples/club-events/smoke.mjs +127 -0
  193. package/docs/examples/club-events/src/handlers.ts +25 -0
  194. package/docs/examples/club-events/src/signup.ts +9 -0
  195. package/docs/examples/generated-web/README.md +78 -0
  196. package/docs/examples/generated-web/posts.yaml +38 -0
  197. package/docs/examples/generated-web/seed.sql +6 -0
  198. package/docs/examples/generated-web/src/worker.ts +43 -0
  199. package/docs/examples/generated-web/tsconfig.json +8 -0
  200. package/docs/examples/generated-web/wrangler.jsonc +8 -0
  201. package/docs/examples/purchasing/.dev.vars.example +6 -0
  202. package/docs/examples/purchasing/README.md +99 -0
  203. package/docs/examples/purchasing/manifests/purchasing.yaml +374 -0
  204. package/docs/examples/purchasing/seed.sql +4 -0
  205. package/docs/examples/purchasing/smoke.mjs +191 -0
  206. package/docs/examples/purchasing/src/admin.tsx +13 -0
  207. package/docs/examples/purchasing/src/handlers.ts +33 -0
  208. package/docs/examples/purchasing/src/notify.ts +29 -0
  209. package/docs/examples/purchasing/src/requests-page.ts +57 -0
  210. package/docs/examples/purchasing/src/routes.ts +53 -0
  211. package/docs/examples/purchasing/src/schedule.ts +31 -0
  212. package/docs/examples/purchasing/src/signup.ts +5 -0
  213. package/docs/examples/purchasing/src/supplier.ts +32 -0
  214. package/docs/examples/purchasing/wrangler.jsonc +69 -0
  215. package/docs/examples/recipes/README.md +60 -0
  216. package/docs/examples/recipes/manifests/recipes.yaml +75 -0
  217. package/docs/examples/recipes/smoke.mjs +102 -0
  218. package/docs/examples/recipes/src/media.ts +13 -0
  219. package/docs/examples/recipes/src/pages.ts +99 -0
  220. package/docs/examples/recipes/src/routes.ts +71 -0
  221. package/docs/examples/recipes/src/site-config.ts +12 -0
  222. package/docs/examples/recipes/wrangler.jsonc +74 -0
  223. package/docs/handbook/cloudflare/authentication.md +186 -108
  224. package/docs/handbook/cloudflare/chatgpt-sites.md +5 -112
  225. package/docs/handbook/cloudflare/deploy-and-operate.md +59 -87
  226. package/docs/handbook/cloudflare/media-r2.md +61 -82
  227. package/docs/handbook/cloudflare/service-entry.md +223 -119
  228. package/docs/handbook/concepts/authorization.md +10 -117
  229. package/docs/handbook/concepts/four-atoms.md +9 -92
  230. package/docs/handbook/concepts/lifecycle-and-locales.md +9 -80
  231. package/docs/handbook/concepts/mcp-and-agents.md +24 -116
  232. package/docs/handbook/concepts/procedures-and-triggers.md +5 -162
  233. package/docs/handbook/concepts/runtime-and-adapters.md +15 -183
  234. package/docs/handbook/concepts/views.md +10 -109
  235. package/docs/handbook/examples/hub.md +2 -18
  236. package/docs/handbook/guides/adapter-guide.md +11 -0
  237. package/docs/handbook/guides/admin-ui.md +113 -136
  238. package/docs/handbook/guides/agent-setup.md +32 -27
  239. package/docs/handbook/guides/agent-workflow-acceptance.md +232 -0
  240. package/docs/handbook/guides/email.md +86 -0
  241. package/docs/handbook/guides/local-testing.md +40 -0
  242. package/docs/handbook/guides/mcp-apps.md +560 -0
  243. package/docs/handbook/guides/native-admin.md +566 -0
  244. package/docs/handbook/guides/native-execution.md +133 -0
  245. package/docs/handbook/guides/oauth.md +219 -0
  246. package/docs/handbook/guides/postgres-adapters.md +56 -0
  247. package/docs/handbook/guides/public-pages.md +93 -0
  248. package/docs/handbook/guides/size-and-startup.md +9 -0
  249. package/docs/handbook/guides/sql-patterns.md +266 -0
  250. package/docs/handbook/guides/typed-queries.md +210 -100
  251. package/docs/handbook/navigation.json +176 -30
  252. package/docs/handbook/reference/admin-descriptors.md +56 -0
  253. package/docs/handbook/reference/authorization.md +44 -52
  254. package/docs/handbook/reference/describe.md +56 -0
  255. package/docs/handbook/reference/diagnostics.md +19 -77
  256. package/docs/handbook/reference/features.md +45 -53
  257. package/docs/handbook/reference/manifest.md +6 -69
  258. package/docs/handbook/reference/procedure.md +11 -115
  259. package/docs/handbook/reference/schema.md +81 -172
  260. package/docs/handbook/reference/site-config.md +5 -65
  261. package/docs/handbook/reference/sql.md +64 -0
  262. package/docs/handbook/reference/surface.md +396 -93
  263. package/docs/handbook/reference/trigger.md +62 -89
  264. package/docs/handbook/reference/view.md +40 -158
  265. package/docs/handbook/releases/index.md +198 -12
  266. package/docs/handbook/start/agents.md +45 -0
  267. package/docs/handbook/start/overview.md +9 -56
  268. package/docs/handbook/start/project-and-cli.md +51 -131
  269. package/docs/handbook/start/quickstart-worker.md +38 -115
  270. package/docs/skills/develop/SKILL.md +77 -121
  271. package/docs/skills/integrate/SKILL.md +37 -84
  272. package/docs/skills/media-gc/SKILL.md +21 -8
  273. package/docs/skills/provision/SKILL.md +31 -87
  274. package/docs/skills/update/SKILL.md +20 -34
  275. package/docs/source/scripts/postgres-adapter.ts +101 -0
  276. package/docs/upgrade-0.1-to-0.2.md +26 -10
  277. package/package.json +120 -112
  278. package/skills/README.md +67 -0
  279. package/skills/mantle/SKILL.md +76 -0
  280. package/dist/admin/consent.d.ts +0 -17
  281. package/dist/admin/consent.d.ts.map +0 -1
  282. package/dist/admin/consent.js +0 -17
  283. package/dist/admin/consent.js.map +0 -1
  284. package/dist/admin/createAdminSurface.d.ts +0 -22
  285. package/dist/admin/createAdminSurface.d.ts.map +0 -1
  286. package/dist/admin/createAdminSurface.js +0 -589
  287. package/dist/admin/createAdminSurface.js.map +0 -1
  288. package/dist/admin/developerConsole.d.ts +0 -264
  289. package/dist/admin/developerConsole.d.ts.map +0 -1
  290. package/dist/admin/developerConsole.js +0 -136
  291. package/dist/admin/developerConsole.js.map +0 -1
  292. package/dist/admin/identity.d.ts +0 -62
  293. package/dist/admin/identity.d.ts.map +0 -1
  294. package/dist/admin/identity.js +0 -7
  295. package/dist/admin/identity.js.map +0 -1
  296. package/dist/admin/index.d.ts +0 -4
  297. package/dist/admin/index.d.ts.map +0 -1
  298. package/dist/admin/index.js +0 -4
  299. package/dist/admin/index.js.map +0 -1
  300. package/dist/admin/procedureFlow.d.ts +0 -25
  301. package/dist/admin/procedureFlow.d.ts.map +0 -1
  302. package/dist/admin/procedureFlow.js +0 -154
  303. package/dist/admin/procedureFlow.js.map +0 -1
  304. package/dist/auth/ConsoleEmailSender.d.ts +0 -15
  305. package/dist/auth/ConsoleEmailSender.d.ts.map +0 -1
  306. package/dist/auth/ConsoleEmailSender.js +0 -19
  307. package/dist/auth/ConsoleEmailSender.js.map +0 -1
  308. package/dist/auth/appleClientSecret.d.ts +0 -75
  309. package/dist/auth/appleClientSecret.d.ts.map +0 -1
  310. package/dist/auth/appleClientSecret.js +0 -116
  311. package/dist/auth/appleClientSecret.js.map +0 -1
  312. package/dist/auth/buildAuth.d.ts +0 -4565
  313. package/dist/auth/buildAuth.d.ts.map +0 -1
  314. package/dist/auth/buildAuth.js +0 -307
  315. package/dist/auth/buildAuth.js.map +0 -1
  316. package/dist/auth/callerResolver.d.ts +0 -48
  317. package/dist/auth/callerResolver.d.ts.map +0 -1
  318. package/dist/auth/callerResolver.js +0 -49
  319. package/dist/auth/callerResolver.js.map +0 -1
  320. package/dist/auth/createAuthRoutes.d.ts +0 -22
  321. package/dist/auth/createAuthRoutes.d.ts.map +0 -1
  322. package/dist/auth/createAuthRoutes.js.map +0 -1
  323. package/dist/auth/createMantleAuth.d.ts +0 -3
  324. package/dist/auth/createMantleAuth.d.ts.map +0 -1
  325. package/dist/auth/createMantleAuth.js +0 -483
  326. package/dist/auth/createMantleAuth.js.map +0 -1
  327. package/dist/auth/db.d.ts +0 -17
  328. package/dist/auth/db.d.ts.map +0 -1
  329. package/dist/auth/db.js +0 -24
  330. package/dist/auth/db.js.map +0 -1
  331. package/dist/auth/emailTemplates.d.ts +0 -7
  332. package/dist/auth/emailTemplates.d.ts.map +0 -1
  333. package/dist/auth/emailTemplates.js.map +0 -1
  334. package/dist/auth/index.d.ts +0 -9
  335. package/dist/auth/index.d.ts.map +0 -1
  336. package/dist/auth/index.js +0 -7
  337. package/dist/auth/index.js.map +0 -1
  338. package/dist/auth/methods.d.ts +0 -717
  339. package/dist/auth/methods.d.ts.map +0 -1
  340. package/dist/auth/methods.js +0 -321
  341. package/dist/auth/methods.js.map +0 -1
  342. package/dist/auth/oauthTokens.d.ts +0 -24
  343. package/dist/auth/oauthTokens.d.ts.map +0 -1
  344. package/dist/auth/oauthTokens.js +0 -146
  345. package/dist/auth/oauthTokens.js.map +0 -1
  346. package/dist/auth/setupIncomplete.d.ts +0 -16
  347. package/dist/auth/setupIncomplete.d.ts.map +0 -1
  348. package/dist/auth/setupIncomplete.js +0 -50
  349. package/dist/auth/setupIncomplete.js.map +0 -1
  350. package/dist/auth/types.d.ts +0 -440
  351. package/dist/auth/types.d.ts.map +0 -1
  352. package/dist/auth/types.js +0 -10
  353. package/dist/auth/types.js.map +0 -1
  354. package/dist/bun/index.d.ts +0 -65
  355. package/dist/bun/index.d.ts.map +0 -1
  356. package/dist/bun/index.js +0 -130
  357. package/dist/bun/index.js.map +0 -1
  358. package/dist/cli/emitModule.d.ts +0 -7
  359. package/dist/cli/emitModule.d.ts.map +0 -1
  360. package/dist/cli/emitModule.js +0 -127
  361. package/dist/cli/emitModule.js.map +0 -1
  362. package/dist/cli/generate.d.ts +0 -8
  363. package/dist/cli/generate.d.ts.map +0 -1
  364. package/dist/cli/generate.js +0 -355
  365. package/dist/cli/generate.js.map +0 -1
  366. package/dist/cli/main.d.ts +0 -3
  367. package/dist/cli/main.d.ts.map +0 -1
  368. package/dist/cli/main.js +0 -21
  369. package/dist/cli/main.js.map +0 -1
  370. package/dist/cli/preset.d.ts +0 -18
  371. package/dist/cli/preset.d.ts.map +0 -1
  372. package/dist/cli/preset.js +0 -352
  373. package/dist/cli/preset.js.map +0 -1
  374. package/dist/cloudflare/index.d.ts +0 -21
  375. package/dist/cloudflare/index.d.ts.map +0 -1
  376. package/dist/cloudflare/index.js +0 -14
  377. package/dist/cloudflare/index.js.map +0 -1
  378. package/dist/cloudflare/r2Media.d.ts.map +0 -1
  379. package/dist/cloudflare/r2Media.js +0 -69
  380. package/dist/cloudflare/r2Media.js.map +0 -1
  381. package/dist/core/caller.d.ts +0 -35
  382. package/dist/core/caller.d.ts.map +0 -1
  383. package/dist/core/caller.js +0 -3
  384. package/dist/core/caller.js.map +0 -1
  385. package/dist/core/createMantle.d.ts +0 -22
  386. package/dist/core/createMantle.d.ts.map +0 -1
  387. package/dist/core/createMantle.js +0 -117
  388. package/dist/core/createMantle.js.map +0 -1
  389. package/dist/core/dialect.d.ts +0 -41
  390. package/dist/core/dialect.d.ts.map +0 -1
  391. package/dist/core/dialect.js +0 -7
  392. package/dist/core/dialect.js.map +0 -1
  393. package/dist/core/driver.d.ts +0 -17
  394. package/dist/core/driver.d.ts.map +0 -1
  395. package/dist/core/driver.js +0 -2
  396. package/dist/core/driver.js.map +0 -1
  397. package/dist/core/email.d.ts +0 -17
  398. package/dist/core/email.d.ts.map +0 -1
  399. package/dist/core/email.js +0 -2
  400. package/dist/core/email.js.map +0 -1
  401. package/dist/core/index.d.ts +0 -16
  402. package/dist/core/index.d.ts.map +0 -1
  403. package/dist/core/index.js +0 -16
  404. package/dist/core/index.js.map +0 -1
  405. package/dist/core/invocation.d.ts +0 -66
  406. package/dist/core/invocation.d.ts.map +0 -1
  407. package/dist/core/invocation.js +0 -3
  408. package/dist/core/invocation.js.map +0 -1
  409. package/dist/core/runtime/auth.d.ts +0 -9
  410. package/dist/core/runtime/auth.d.ts.map +0 -1
  411. package/dist/core/runtime/auth.js +0 -39
  412. package/dist/core/runtime/auth.js.map +0 -1
  413. package/dist/core/runtime/createRuntime.d.ts +0 -23
  414. package/dist/core/runtime/createRuntime.d.ts.map +0 -1
  415. package/dist/core/runtime/createRuntime.js +0 -214
  416. package/dist/core/runtime/createRuntime.js.map +0 -1
  417. package/dist/core/runtime/verifyPlan.d.ts +0 -34
  418. package/dist/core/runtime/verifyPlan.d.ts.map +0 -1
  419. package/dist/core/runtime/verifyPlan.js +0 -301
  420. package/dist/core/runtime/verifyPlan.js.map +0 -1
  421. package/dist/core/service.d.ts +0 -45
  422. package/dist/core/service.d.ts.map +0 -1
  423. package/dist/core/service.js +0 -2
  424. package/dist/core/service.js.map +0 -1
  425. package/dist/core/site.d.ts.map +0 -1
  426. package/dist/core/site.js +0 -2
  427. package/dist/core/site.js.map +0 -1
  428. package/dist/core/siteConfig.d.ts +0 -5
  429. package/dist/core/siteConfig.d.ts.map +0 -1
  430. package/dist/core/siteConfig.js +0 -24
  431. package/dist/core/siteConfig.js.map +0 -1
  432. package/dist/core/sql/allowlist.d.ts +0 -65
  433. package/dist/core/sql/allowlist.d.ts.map +0 -1
  434. package/dist/core/sql/allowlist.js +0 -705
  435. package/dist/core/sql/allowlist.js.map +0 -1
  436. package/dist/core/sql/ast.d.ts +0 -24
  437. package/dist/core/sql/ast.d.ts.map +0 -1
  438. package/dist/core/sql/ast.js +0 -32
  439. package/dist/core/sql/ast.js.map +0 -1
  440. package/dist/core/sql/compile.d.ts +0 -50
  441. package/dist/core/sql/compile.d.ts.map +0 -1
  442. package/dist/core/sql/compile.js +0 -48
  443. package/dist/core/sql/compile.js.map +0 -1
  444. package/dist/core/sql/policy.d.ts +0 -121
  445. package/dist/core/sql/policy.d.ts.map +0 -1
  446. package/dist/core/sql/policy.js +0 -379
  447. package/dist/core/sql/policy.js.map +0 -1
  448. package/dist/core/sql/positions.d.ts +0 -30
  449. package/dist/core/sql/positions.d.ts.map +0 -1
  450. package/dist/core/sql/positions.js +0 -22
  451. package/dist/core/sql/positions.js.map +0 -1
  452. package/dist/core/sql/run.d.ts +0 -76
  453. package/dist/core/sql/run.d.ts.map +0 -1
  454. package/dist/core/sql/run.js +0 -267
  455. package/dist/core/sql/run.js.map +0 -1
  456. package/dist/core/store/createStore.d.ts +0 -49
  457. package/dist/core/store/createStore.d.ts.map +0 -1
  458. package/dist/core/store/createStore.js +0 -227
  459. package/dist/core/store/createStore.js.map +0 -1
  460. package/dist/core/store/cursor.d.ts +0 -4
  461. package/dist/core/store/cursor.d.ts.map +0 -1
  462. package/dist/core/store/cursor.js +0 -22
  463. package/dist/core/store/cursor.js.map +0 -1
  464. package/dist/core/store/json.d.ts +0 -80
  465. package/dist/core/store/json.d.ts.map +0 -1
  466. package/dist/core/store/json.js +0 -342
  467. package/dist/core/store/json.js.map +0 -1
  468. package/dist/core/store.d.ts +0 -160
  469. package/dist/core/store.d.ts.map +0 -1
  470. package/dist/core/store.js +0 -2
  471. package/dist/core/store.js.map +0 -1
  472. package/dist/core/wire.d.ts +0 -20
  473. package/dist/core/wire.d.ts.map +0 -1
  474. package/dist/core/wire.js +0 -84
  475. package/dist/core/wire.js.map +0 -1
  476. package/dist/core/withCaller.d.ts +0 -16
  477. package/dist/core/withCaller.d.ts.map +0 -1
  478. package/dist/core/withCaller.js +0 -29
  479. package/dist/core/withCaller.js.map +0 -1
  480. package/dist/d1/adapter.d.ts +0 -12
  481. package/dist/d1/adapter.d.ts.map +0 -1
  482. package/dist/d1/adapter.js +0 -23
  483. package/dist/d1/adapter.js.map +0 -1
  484. package/dist/d1/codec.d.ts +0 -14
  485. package/dist/d1/codec.d.ts.map +0 -1
  486. package/dist/d1/codec.js +0 -136
  487. package/dist/d1/codec.js.map +0 -1
  488. package/dist/d1/compile/index.d.ts +0 -9
  489. package/dist/d1/compile/index.d.ts.map +0 -1
  490. package/dist/d1/compile/index.js +0 -9
  491. package/dist/d1/compile/index.js.map +0 -1
  492. package/dist/d1/dialect.d.ts +0 -4
  493. package/dist/d1/dialect.d.ts.map +0 -1
  494. package/dist/d1/dialect.js +0 -13
  495. package/dist/d1/dialect.js.map +0 -1
  496. package/dist/d1/executor.d.ts +0 -13
  497. package/dist/d1/executor.d.ts.map +0 -1
  498. package/dist/d1/executor.js +0 -91
  499. package/dist/d1/executor.js.map +0 -1
  500. package/dist/d1/index.d.ts +0 -6
  501. package/dist/d1/index.d.ts.map +0 -1
  502. package/dist/d1/index.js +0 -6
  503. package/dist/d1/index.js.map +0 -1
  504. package/dist/d1/lower.d.ts +0 -8
  505. package/dist/d1/lower.d.ts.map +0 -1
  506. package/dist/d1/lower.js +0 -167
  507. package/dist/d1/lower.js.map +0 -1
  508. package/dist/d1/media.d.ts +0 -5
  509. package/dist/d1/media.d.ts.map +0 -1
  510. package/dist/d1/media.js +0 -157
  511. package/dist/d1/media.js.map +0 -1
  512. package/dist/d1/migrations.d.ts +0 -12
  513. package/dist/d1/migrations.d.ts.map +0 -1
  514. package/dist/d1/migrations.js +0 -111
  515. package/dist/d1/migrations.js.map +0 -1
  516. package/dist/d1/print.d.ts +0 -28
  517. package/dist/d1/print.d.ts.map +0 -1
  518. package/dist/d1/print.js +0 -54
  519. package/dist/d1/print.js.map +0 -1
  520. package/dist/d1/site.d.ts +0 -17
  521. package/dist/d1/site.d.ts.map +0 -1
  522. package/dist/d1/site.js +0 -63
  523. package/dist/d1/site.js.map +0 -1
  524. package/dist/d1/storage.d.ts +0 -34
  525. package/dist/d1/storage.d.ts.map +0 -1
  526. package/dist/d1/storage.js +0 -288
  527. package/dist/d1/storage.js.map +0 -1
  528. package/dist/d1/tz.d.ts +0 -21
  529. package/dist/d1/tz.d.ts.map +0 -1
  530. package/dist/d1/tz.js +0 -54
  531. package/dist/d1/tz.js.map +0 -1
  532. package/dist/d1/validator.d.ts +0 -10
  533. package/dist/d1/validator.d.ts.map +0 -1
  534. package/dist/d1/validator.js +0 -33
  535. package/dist/d1/validator.js.map +0 -1
  536. package/dist/mcp/apps.d.ts +0 -43
  537. package/dist/mcp/apps.d.ts.map +0 -1
  538. package/dist/mcp/apps.js +0 -57
  539. package/dist/mcp/apps.js.map +0 -1
  540. package/dist/mcp/catalog.d.ts +0 -55
  541. package/dist/mcp/catalog.d.ts.map +0 -1
  542. package/dist/mcp/catalog.js +0 -81
  543. package/dist/mcp/catalog.js.map +0 -1
  544. package/dist/mcp/createMcpSurface.d.ts +0 -34
  545. package/dist/mcp/createMcpSurface.d.ts.map +0 -1
  546. package/dist/mcp/createMcpSurface.js +0 -150
  547. package/dist/mcp/createMcpSurface.js.map +0 -1
  548. package/dist/mcp/index.d.ts +0 -4
  549. package/dist/mcp/index.d.ts.map +0 -1
  550. package/dist/mcp/index.js +0 -4
  551. package/dist/mcp/index.js.map +0 -1
  552. package/dist/postgres/adapter.d.ts +0 -20
  553. package/dist/postgres/adapter.d.ts.map +0 -1
  554. package/dist/postgres/adapter.js +0 -44
  555. package/dist/postgres/adapter.js.map +0 -1
  556. package/dist/postgres/codec.d.ts +0 -13
  557. package/dist/postgres/codec.d.ts.map +0 -1
  558. package/dist/postgres/codec.js +0 -110
  559. package/dist/postgres/codec.js.map +0 -1
  560. package/dist/postgres/compile/index.d.ts +0 -9
  561. package/dist/postgres/compile/index.d.ts.map +0 -1
  562. package/dist/postgres/compile/index.js +0 -9
  563. package/dist/postgres/compile/index.js.map +0 -1
  564. package/dist/postgres/driver.d.ts +0 -92
  565. package/dist/postgres/driver.d.ts.map +0 -1
  566. package/dist/postgres/driver.js +0 -110
  567. package/dist/postgres/driver.js.map +0 -1
  568. package/dist/postgres/executor.d.ts +0 -20
  569. package/dist/postgres/executor.d.ts.map +0 -1
  570. package/dist/postgres/executor.js +0 -69
  571. package/dist/postgres/executor.js.map +0 -1
  572. package/dist/postgres/index.d.ts +0 -7
  573. package/dist/postgres/index.d.ts.map +0 -1
  574. package/dist/postgres/index.js +0 -7
  575. package/dist/postgres/index.js.map +0 -1
  576. package/dist/postgres/lower.d.ts +0 -6
  577. package/dist/postgres/lower.d.ts.map +0 -1
  578. package/dist/postgres/lower.js +0 -157
  579. package/dist/postgres/lower.js.map +0 -1
  580. package/dist/postgres/print.d.ts +0 -11
  581. package/dist/postgres/print.d.ts.map +0 -1
  582. package/dist/postgres/print.js +0 -121
  583. package/dist/postgres/print.js.map +0 -1
  584. package/dist/postgres/storage.d.ts +0 -19
  585. package/dist/postgres/storage.d.ts.map +0 -1
  586. package/dist/postgres/storage.js +0 -201
  587. package/dist/postgres/storage.js.map +0 -1
  588. package/dist/postgres/textRows.d.ts +0 -10
  589. package/dist/postgres/textRows.d.ts.map +0 -1
  590. package/dist/postgres/textRows.js +0 -44
  591. package/dist/postgres/textRows.js.map +0 -1
  592. package/dist/postgres/validator.d.ts +0 -12
  593. package/dist/postgres/validator.d.ts.map +0 -1
  594. package/dist/postgres/validator.js +0 -46
  595. package/dist/postgres/validator.js.map +0 -1
  596. package/dist/spec/domain/index.d.ts +0 -3
  597. package/dist/spec/domain/index.d.ts.map +0 -1
  598. package/dist/spec/domain/index.js +0 -3
  599. package/dist/spec/domain/index.js.map +0 -1
  600. package/dist/spec/domain/model/ContentState.d.ts +0 -8
  601. package/dist/spec/domain/model/ContentState.d.ts.map +0 -1
  602. package/dist/spec/domain/model/ContentState.js +0 -7
  603. package/dist/spec/domain/model/ContentState.js.map +0 -1
  604. package/dist/spec/domain/model/Entry.d.ts +0 -29
  605. package/dist/spec/domain/model/Entry.d.ts.map +0 -1
  606. package/dist/spec/domain/model/Entry.js +0 -16
  607. package/dist/spec/domain/model/Entry.js.map +0 -1
  608. package/dist/spec/domain/model/Locale.d.ts +0 -30
  609. package/dist/spec/domain/model/Locale.d.ts.map +0 -1
  610. package/dist/spec/domain/model/Locale.js +0 -33
  611. package/dist/spec/domain/model/Locale.js.map +0 -1
  612. package/dist/spec/domain/model/ManifestGrammar.d.ts.map +0 -1
  613. package/dist/spec/domain/model/ManifestGrammar.js +0 -149
  614. package/dist/spec/domain/model/ManifestGrammar.js.map +0 -1
  615. package/dist/spec/domain/model/MediaMimeAccept.d.ts +0 -55
  616. package/dist/spec/domain/model/MediaMimeAccept.d.ts.map +0 -1
  617. package/dist/spec/domain/model/MediaMimeAccept.js +0 -90
  618. package/dist/spec/domain/model/MediaMimeAccept.js.map +0 -1
  619. package/dist/spec/domain/model/RuntimePlan.d.ts.map +0 -1
  620. package/dist/spec/domain/model/RuntimePlan.js +0 -4
  621. package/dist/spec/domain/model/RuntimePlan.js.map +0 -1
  622. package/dist/spec/domain/model/SiteConfig.d.ts +0 -173
  623. package/dist/spec/domain/model/SiteConfig.d.ts.map +0 -1
  624. package/dist/spec/domain/model/SiteConfig.js +0 -13
  625. package/dist/spec/domain/model/SiteConfig.js.map +0 -1
  626. package/dist/spec/domain/model/SqlIr.d.ts.map +0 -1
  627. package/dist/spec/domain/model/SqlIr.js +0 -95
  628. package/dist/spec/domain/model/SqlIr.js.map +0 -1
  629. package/dist/spec/domain/model/index.d.ts +0 -14
  630. package/dist/spec/domain/model/index.d.ts.map +0 -1
  631. package/dist/spec/domain/model/index.js +0 -14
  632. package/dist/spec/domain/model/index.js.map +0 -1
  633. package/dist/spec/domain/service/CloudflareCron.d.ts.map +0 -1
  634. package/dist/spec/domain/service/CloudflareCron.js.map +0 -1
  635. package/dist/spec/domain/service/CrossSchemaChecker.d.ts +0 -34
  636. package/dist/spec/domain/service/CrossSchemaChecker.d.ts.map +0 -1
  637. package/dist/spec/domain/service/CrossSchemaChecker.js +0 -114
  638. package/dist/spec/domain/service/CrossSchemaChecker.js.map +0 -1
  639. package/dist/spec/domain/service/EntryDataValidator.d.ts +0 -56
  640. package/dist/spec/domain/service/EntryDataValidator.d.ts.map +0 -1
  641. package/dist/spec/domain/service/EntryDataValidator.js +0 -88
  642. package/dist/spec/domain/service/EntryDataValidator.js.map +0 -1
  643. package/dist/spec/domain/service/JsonSchemaToZod.d.ts +0 -29
  644. package/dist/spec/domain/service/JsonSchemaToZod.d.ts.map +0 -1
  645. package/dist/spec/domain/service/JsonSchemaToZod.js +0 -156
  646. package/dist/spec/domain/service/JsonSchemaToZod.js.map +0 -1
  647. package/dist/spec/domain/service/LifecycleStateMachine.d.ts +0 -75
  648. package/dist/spec/domain/service/LifecycleStateMachine.d.ts.map +0 -1
  649. package/dist/spec/domain/service/LifecycleStateMachine.js +0 -76
  650. package/dist/spec/domain/service/LifecycleStateMachine.js.map +0 -1
  651. package/dist/spec/domain/service/LocaleCanonicalizer.d.ts +0 -29
  652. package/dist/spec/domain/service/LocaleCanonicalizer.d.ts.map +0 -1
  653. package/dist/spec/domain/service/LocaleCanonicalizer.js +0 -96
  654. package/dist/spec/domain/service/LocaleCanonicalizer.js.map +0 -1
  655. package/dist/spec/domain/service/ManifestFieldChecks.d.ts +0 -60
  656. package/dist/spec/domain/service/ManifestFieldChecks.d.ts.map +0 -1
  657. package/dist/spec/domain/service/ManifestFieldChecks.js +0 -116
  658. package/dist/spec/domain/service/ManifestFieldChecks.js.map +0 -1
  659. package/dist/spec/domain/service/ManifestGraphValidator.d.ts +0 -15
  660. package/dist/spec/domain/service/ManifestGraphValidator.d.ts.map +0 -1
  661. package/dist/spec/domain/service/ManifestGraphValidator.js +0 -225
  662. package/dist/spec/domain/service/ManifestGraphValidator.js.map +0 -1
  663. package/dist/spec/domain/service/ManifestLinker.d.ts +0 -45
  664. package/dist/spec/domain/service/ManifestLinker.d.ts.map +0 -1
  665. package/dist/spec/domain/service/ManifestLinker.js +0 -92
  666. package/dist/spec/domain/service/ManifestLinker.js.map +0 -1
  667. package/dist/spec/domain/service/ManifestLocaleTrimmer.d.ts +0 -16
  668. package/dist/spec/domain/service/ManifestLocaleTrimmer.d.ts.map +0 -1
  669. package/dist/spec/domain/service/ManifestLocaleTrimmer.js +0 -76
  670. package/dist/spec/domain/service/ManifestLocaleTrimmer.js.map +0 -1
  671. package/dist/spec/domain/service/ManifestParser.d.ts +0 -49
  672. package/dist/spec/domain/service/ManifestParser.d.ts.map +0 -1
  673. package/dist/spec/domain/service/ManifestParser.js +0 -203
  674. package/dist/spec/domain/service/ManifestParser.js.map +0 -1
  675. package/dist/spec/domain/service/ManifestPartition.d.ts +0 -9
  676. package/dist/spec/domain/service/ManifestPartition.d.ts.map +0 -1
  677. package/dist/spec/domain/service/ManifestPartition.js +0 -19
  678. package/dist/spec/domain/service/ManifestPartition.js.map +0 -1
  679. package/dist/spec/domain/service/ManifestPathDiagnoser.d.ts +0 -33
  680. package/dist/spec/domain/service/ManifestPathDiagnoser.d.ts.map +0 -1
  681. package/dist/spec/domain/service/ManifestPathDiagnoser.js +0 -43
  682. package/dist/spec/domain/service/ManifestPathDiagnoser.js.map +0 -1
  683. package/dist/spec/domain/service/ManifestSourceSpans.d.ts +0 -10
  684. package/dist/spec/domain/service/ManifestSourceSpans.d.ts.map +0 -1
  685. package/dist/spec/domain/service/ManifestSourceSpans.js +0 -76
  686. package/dist/spec/domain/service/ManifestSourceSpans.js.map +0 -1
  687. package/dist/spec/domain/service/McpToolNaming.d.ts +0 -25
  688. package/dist/spec/domain/service/McpToolNaming.d.ts.map +0 -1
  689. package/dist/spec/domain/service/McpToolNaming.js +0 -50
  690. package/dist/spec/domain/service/McpToolNaming.js.map +0 -1
  691. package/dist/spec/domain/service/PlanFingerprint.d.ts.map +0 -1
  692. package/dist/spec/domain/service/PlanFingerprint.js +0 -14
  693. package/dist/spec/domain/service/PlanFingerprint.js.map +0 -1
  694. package/dist/spec/domain/service/ProcedureViewSpecChecks.d.ts +0 -4
  695. package/dist/spec/domain/service/ProcedureViewSpecChecks.d.ts.map +0 -1
  696. package/dist/spec/domain/service/ProcedureViewSpecChecks.js +0 -211
  697. package/dist/spec/domain/service/ProcedureViewSpecChecks.js.map +0 -1
  698. package/dist/spec/domain/service/SchemaAdminUiChecker.d.ts +0 -42
  699. package/dist/spec/domain/service/SchemaAdminUiChecker.d.ts.map +0 -1
  700. package/dist/spec/domain/service/SchemaAdminUiChecker.js +0 -289
  701. package/dist/spec/domain/service/SchemaAdminUiChecker.js.map +0 -1
  702. package/dist/spec/domain/service/SchemaIndexChecker.d.ts +0 -33
  703. package/dist/spec/domain/service/SchemaIndexChecker.d.ts.map +0 -1
  704. package/dist/spec/domain/service/SchemaIndexChecker.js +0 -256
  705. package/dist/spec/domain/service/SchemaIndexChecker.js.map +0 -1
  706. package/dist/spec/domain/service/SchemaSearchChecker.d.ts +0 -11
  707. package/dist/spec/domain/service/SchemaSearchChecker.d.ts.map +0 -1
  708. package/dist/spec/domain/service/SchemaSearchChecker.js +0 -78
  709. package/dist/spec/domain/service/SchemaSearchChecker.js.map +0 -1
  710. package/dist/spec/domain/service/SchemaSpecChecks.d.ts +0 -31
  711. package/dist/spec/domain/service/SchemaSpecChecks.d.ts.map +0 -1
  712. package/dist/spec/domain/service/SchemaSpecChecks.js +0 -445
  713. package/dist/spec/domain/service/SchemaSpecChecks.js.map +0 -1
  714. package/dist/spec/domain/service/SiteDefaultsValidator.d.ts +0 -39
  715. package/dist/spec/domain/service/SiteDefaultsValidator.d.ts.map +0 -1
  716. package/dist/spec/domain/service/SiteDefaultsValidator.js +0 -194
  717. package/dist/spec/domain/service/SiteDefaultsValidator.js.map +0 -1
  718. package/dist/spec/domain/service/SqlClassify.d.ts +0 -19
  719. package/dist/spec/domain/service/SqlClassify.d.ts.map +0 -1
  720. package/dist/spec/domain/service/SqlClassify.js +0 -42
  721. package/dist/spec/domain/service/SqlClassify.js.map +0 -1
  722. package/dist/spec/domain/service/SqlRefusal.d.ts +0 -16
  723. package/dist/spec/domain/service/SqlRefusal.d.ts.map +0 -1
  724. package/dist/spec/domain/service/SqlRefusal.js +0 -20
  725. package/dist/spec/domain/service/SqlRefusal.js.map +0 -1
  726. package/dist/spec/domain/service/SqlTypes.d.ts +0 -40
  727. package/dist/spec/domain/service/SqlTypes.d.ts.map +0 -1
  728. package/dist/spec/domain/service/SqlTypes.js +0 -110
  729. package/dist/spec/domain/service/SqlTypes.js.map +0 -1
  730. package/dist/spec/domain/service/StaffRoleHierarchy.d.ts +0 -3
  731. package/dist/spec/domain/service/StaffRoleHierarchy.d.ts.map +0 -1
  732. package/dist/spec/domain/service/StaffRoleHierarchy.js +0 -19
  733. package/dist/spec/domain/service/StaffRoleHierarchy.js.map +0 -1
  734. package/dist/spec/domain/service/TriggerGraphChecks.d.ts +0 -16
  735. package/dist/spec/domain/service/TriggerGraphChecks.d.ts.map +0 -1
  736. package/dist/spec/domain/service/TriggerGraphChecks.js +0 -337
  737. package/dist/spec/domain/service/TriggerGraphChecks.js.map +0 -1
  738. package/dist/spec/domain/service/TriggerSpecChecks.d.ts +0 -4
  739. package/dist/spec/domain/service/TriggerSpecChecks.d.ts.map +0 -1
  740. package/dist/spec/domain/service/TriggerSpecChecks.js +0 -89
  741. package/dist/spec/domain/service/TriggerSpecChecks.js.map +0 -1
  742. package/dist/spec/domain/service/ValidatedAdminUiProjection.d.ts +0 -11
  743. package/dist/spec/domain/service/ValidatedAdminUiProjection.d.ts.map +0 -1
  744. package/dist/spec/domain/service/ValidatedAdminUiProjection.js +0 -26
  745. package/dist/spec/domain/service/ValidatedAdminUiProjection.js.map +0 -1
  746. package/dist/spec/domain/service/ViewAdminUiChecker.d.ts +0 -14
  747. package/dist/spec/domain/service/ViewAdminUiChecker.d.ts.map +0 -1
  748. package/dist/spec/domain/service/ViewAdminUiChecker.js +0 -53
  749. package/dist/spec/domain/service/ViewAdminUiChecker.js.map +0 -1
  750. package/dist/spec/domain/service/index.d.ts +0 -24
  751. package/dist/spec/domain/service/index.d.ts.map +0 -1
  752. package/dist/spec/domain/service/index.js +0 -24
  753. package/dist/spec/domain/service/index.js.map +0 -1
  754. package/dist/spec/index.d.ts +0 -10
  755. package/dist/spec/index.d.ts.map +0 -1
  756. package/dist/spec/index.js +0 -12
  757. package/dist/spec/index.js.map +0 -1
  758. package/dist/spec/infrastructure/cli/parseArgsError.d.ts +0 -16
  759. package/dist/spec/infrastructure/cli/parseArgsError.d.ts.map +0 -1
  760. package/dist/spec/infrastructure/cli/parseArgsError.js +0 -34
  761. package/dist/spec/infrastructure/cli/parseArgsError.js.map +0 -1
  762. package/dist/spec/infrastructure/index.d.ts +0 -2
  763. package/dist/spec/infrastructure/index.d.ts.map +0 -1
  764. package/dist/spec/infrastructure/index.js +0 -2
  765. package/dist/spec/infrastructure/index.js.map +0 -1
  766. package/dist/spec/infrastructure/sql/PgQueryParser.d.ts +0 -18
  767. package/dist/spec/infrastructure/sql/PgQueryParser.d.ts.map +0 -1
  768. package/dist/spec/infrastructure/sql/PgQueryParser.js +0 -17
  769. package/dist/spec/infrastructure/sql/PgQueryParser.js.map +0 -1
  770. package/dist/spec/infrastructure/sql/compilePlan.d.ts +0 -37
  771. package/dist/spec/infrastructure/sql/compilePlan.d.ts.map +0 -1
  772. package/dist/spec/infrastructure/sql/compilePlan.js +0 -282
  773. package/dist/spec/infrastructure/sql/compilePlan.js.map +0 -1
  774. package/dist/spec/infrastructure/sql/compileSql.d.ts +0 -35
  775. package/dist/spec/infrastructure/sql/compileSql.d.ts.map +0 -1
  776. package/dist/spec/infrastructure/sql/compileSql.js +0 -92
  777. package/dist/spec/infrastructure/sql/compileSql.js.map +0 -1
  778. package/dist/spec/infrastructure/sql/frontEnd.d.ts +0 -8
  779. package/dist/spec/infrastructure/sql/frontEnd.d.ts.map +0 -1
  780. package/dist/spec/infrastructure/sql/frontEnd.js +0 -100
  781. package/dist/spec/infrastructure/sql/frontEnd.js.map +0 -1
  782. package/dist/spec/infrastructure/sql/index.d.ts +0 -4
  783. package/dist/spec/infrastructure/sql/index.d.ts.map +0 -1
  784. package/dist/spec/infrastructure/sql/index.js +0 -4
  785. package/dist/spec/infrastructure/sql/index.js.map +0 -1
  786. package/dist/spec/kernel/diagnostic.d.ts.map +0 -1
  787. package/dist/spec/kernel/diagnostic.js +0 -296
  788. package/dist/spec/kernel/diagnostic.js.map +0 -1
  789. package/dist/spec/kernel/index.d.ts +0 -8
  790. package/dist/spec/kernel/index.d.ts.map +0 -1
  791. package/dist/spec/kernel/index.js +0 -8
  792. package/dist/spec/kernel/index.js.map +0 -1
  793. package/dist/spec/usecase/EmitTypes.d.ts +0 -22
  794. package/dist/spec/usecase/EmitTypes.d.ts.map +0 -1
  795. package/dist/spec/usecase/EmitTypes.js +0 -182
  796. package/dist/spec/usecase/EmitTypes.js.map +0 -1
  797. package/dist/spec/usecase/ValidateManifestsUseCase.d.ts +0 -8
  798. package/dist/spec/usecase/ValidateManifestsUseCase.d.ts.map +0 -1
  799. package/dist/spec/usecase/ValidateManifestsUseCase.js +0 -101
  800. package/dist/spec/usecase/ValidateManifestsUseCase.js.map +0 -1
  801. package/dist/spec/usecase/dto/ValidateManifestsRequest.d.ts +0 -27
  802. package/dist/spec/usecase/dto/ValidateManifestsRequest.d.ts.map +0 -1
  803. package/dist/spec/usecase/dto/ValidateManifestsRequest.js +0 -2
  804. package/dist/spec/usecase/dto/ValidateManifestsRequest.js.map +0 -1
  805. package/dist/spec/usecase/dto/ValidateManifestsResponse.d.ts +0 -14
  806. package/dist/spec/usecase/dto/ValidateManifestsResponse.d.ts.map +0 -1
  807. package/dist/spec/usecase/dto/ValidateManifestsResponse.js +0 -2
  808. package/dist/spec/usecase/dto/ValidateManifestsResponse.js.map +0 -1
  809. package/dist/spec/usecase/dto/index.d.ts +0 -3
  810. package/dist/spec/usecase/dto/index.d.ts.map +0 -1
  811. package/dist/spec/usecase/dto/index.js +0 -3
  812. package/dist/spec/usecase/dto/index.js.map +0 -1
  813. package/dist/spec/usecase/index.d.ts +0 -10
  814. package/dist/spec/usecase/index.d.ts.map +0 -1
  815. package/dist/spec/usecase/index.js +0 -10
  816. package/dist/spec/usecase/index.js.map +0 -1
  817. package/dist/testing/cases/before-hook.d.ts +0 -4
  818. package/dist/testing/cases/before-hook.d.ts.map +0 -1
  819. package/dist/testing/cases/before-hook.js +0 -71
  820. package/dist/testing/cases/before-hook.js.map +0 -1
  821. package/dist/testing/cases/corpus.d.ts +0 -12
  822. package/dist/testing/cases/corpus.d.ts.map +0 -1
  823. package/dist/testing/cases/corpus.js +0 -91
  824. package/dist/testing/cases/corpus.js.map +0 -1
  825. package/dist/testing/cases/policy.d.ts +0 -74
  826. package/dist/testing/cases/policy.d.ts.map +0 -1
  827. package/dist/testing/cases/policy.js +0 -142
  828. package/dist/testing/cases/policy.js.map +0 -1
  829. package/dist/testing/cases/printer.d.ts +0 -4
  830. package/dist/testing/cases/printer.d.ts.map +0 -1
  831. package/dist/testing/cases/printer.js +0 -32
  832. package/dist/testing/cases/printer.js.map +0 -1
  833. package/dist/testing/cases/report-view.d.ts +0 -5
  834. package/dist/testing/cases/report-view.d.ts.map +0 -1
  835. package/dist/testing/cases/report-view.js +0 -33
  836. package/dist/testing/cases/report-view.js.map +0 -1
  837. package/dist/testing/cases/requisition.d.ts +0 -4
  838. package/dist/testing/cases/requisition.d.ts.map +0 -1
  839. package/dist/testing/cases/requisition.js +0 -38
  840. package/dist/testing/cases/requisition.js.map +0 -1
  841. package/dist/testing/cases/search-places.d.ts +0 -4
  842. package/dist/testing/cases/search-places.d.ts.map +0 -1
  843. package/dist/testing/cases/search-places.js +0 -60
  844. package/dist/testing/cases/search-places.js.map +0 -1
  845. package/dist/testing/cases/stock.d.ts +0 -4
  846. package/dist/testing/cases/stock.d.ts.map +0 -1
  847. package/dist/testing/cases/stock.js +0 -35
  848. package/dist/testing/cases/stock.js.map +0 -1
  849. package/dist/testing/cases/store.d.ts +0 -4
  850. package/dist/testing/cases/store.d.ts.map +0 -1
  851. package/dist/testing/cases/store.js +0 -100
  852. package/dist/testing/cases/store.js.map +0 -1
  853. package/dist/testing/harness.d.ts +0 -94
  854. package/dist/testing/harness.d.ts.map +0 -1
  855. package/dist/testing/harness.js +0 -168
  856. package/dist/testing/harness.js.map +0 -1
  857. package/dist/testing/index.d.ts.map +0 -1
  858. package/dist/testing/index.js.map +0 -1
  859. package/dist/testing/report.d.ts +0 -15
  860. package/dist/testing/report.d.ts.map +0 -1
  861. package/dist/testing/report.js +0 -22
  862. package/dist/testing/report.js.map +0 -1
  863. package/dist/web/createRestSurface.d.ts +0 -7
  864. package/dist/web/createRestSurface.d.ts.map +0 -1
  865. package/dist/web/createRestSurface.js +0 -39
  866. package/dist/web/createRestSurface.js.map +0 -1
  867. package/dist/web/index.d.ts +0 -2
  868. package/dist/web/index.d.ts.map +0 -1
  869. package/dist/web/index.js +0 -2
  870. package/dist/web/index.js.map +0 -1
  871. package/docs/adr/0001-four-atom-manifest-model.md +0 -440
  872. package/docs/adr/0002-closed-enums-for-bindings.md +0 -253
  873. package/docs/adr/0007-ai-as-primary-author.md +0 -473
  874. package/docs/adr/0008-structured-diagnostic-shape.md +0 -338
  875. package/docs/adr/0009-consumer-supplied-manifests.md +0 -149
  876. package/docs/adr/0010-locale-and-translates.md +0 -453
  877. package/docs/adr/0011-adapter-port-spec.md +0 -281
  878. package/docs/adr/0012-views-as-public-rest.md +0 -161
  879. package/docs/adr/0013-agent-provisioned-consumer-projects.md +0 -154
  880. package/docs/adr/0014-auth-better-auth-and-multi-tenant-mcp.md +0 -919
  881. package/docs/adr/0016-site-semantic-layer.md +0 -70
  882. package/docs/adr/0017-media-multi-variant-agent-side-optimization.md +0 -181
  883. package/docs/adr/0018-core-starters-repository-boundary.md +0 -179
  884. package/docs/adr/0019-sealed-manifest-runtime-pipeline.md +0 -244
  885. package/docs/adr/0020-builtin-handler-contracts-and-matched-upsert.md +0 -199
  886. package/docs/adr/0021-retire-starter-scaffolding.md +0 -30
  887. package/docs/adr/0022-caller-observed-version-occ.md +0 -212
  888. package/docs/adr/0023-port-failure-contract.md +0 -69
  889. package/docs/adr/0024-manifest-native-schema-tables.md +0 -264
  890. package/docs/adr/0025-reserved-native-columns-and-published-only-public-views.md +0 -105
  891. package/docs/adr/0026-progressive-generate.md +0 -36
  892. package/docs/adr/0027-scheduled-procedure-triggers.md +0 -31
  893. package/docs/adr/0028-schema-ttl-expiry.md +0 -33
  894. package/docs/adr/0029-mcp-apps-interaction-contracts.md +0 -324
  895. package/docs/adr/0030-store.md +0 -40
  896. package/docs/adr/0031-host-cloud-core-contract.md +0 -25
  897. package/docs/adr/0032-store-centric-core-and-service-contract.md +0 -361
  898. package/docs/adr/0033-storage-converges-to-the-plan.md +0 -92
  899. package/docs/adr/0034-store-is-authored-as-sql.md +0 -192
  900. package/docs/adr/0035-sql-dialects.md +0 -154
  901. package/docs/adr/0036-host-and-dialect.md +0 -65
  902. package/docs/adr/0037-postgresql-is-the-reference-dialect.md +0 -124
  903. package/docs/adr/0038-bun-native-host.md +0 -63
  904. package/docs/adr/README.md +0 -96
  905. package/docs/adr/adr-lite-803-request-diagnostics.md +0 -38
  906. package/docs/adr/adr-lite-808-route-readiness.md +0 -47
  907. package/docs/adr/adr-lite-809-bounded-public-content.md +0 -71
  908. package/docs/adr/adr-lite-812-native-parity.md +0 -150
  909. package/docs/adr/adr-lite-823-home-statistics.md +0 -64
  910. package/docs/adr/adr-lite-842-mcp-authoring.md +0 -30
  911. package/docs/adr/adr-lite-845-frontend-client.md +0 -38
  912. package/docs/adr/adr-lite-861-admin-webmcp.md +0 -48
  913. package/docs/adr/adr-lite-909-admin-ui-kit.md +0 -37
  914. package/docs/examples/commerce-inventory.md +0 -481
  915. package/docs/examples/commerce.md +0 -254
  916. package/docs/examples/guarded-api.md +0 -238
  917. package/docs/examples/intake-hooks.md +0 -237
  918. package/docs/examples/intake.md +0 -127
  919. package/docs/examples/legal-documents.md +0 -218
  920. package/docs/examples/procurement.md +0 -215
  921. package/docs/examples/publication.md +0 -211
  922. package/docs/examples/reference-service/.mantle/generated/mantle.ts +0 -174
  923. package/docs/examples/reference-service/.mantle/generated/plan.json +0 -1936
  924. package/docs/examples/reference-service/README.md +0 -33
  925. package/docs/examples/reference-service/manifests/catalog.yaml +0 -103
  926. package/docs/examples/reference-service/manifests/orders.yaml +0 -120
  927. package/docs/examples/reference-service/mantle.config.json +0 -1
  928. package/docs/examples/reference-service/package.json +0 -27
  929. package/docs/examples/reference-service/smoke.mjs +0 -156
  930. package/docs/examples/reference-service/src/handlers.ts +0 -36
  931. package/docs/examples/reference-service/src/index.ts +0 -33
  932. package/docs/examples/reference-service/src/service.ts +0 -78
  933. package/docs/examples/reference-service/wrangler.jsonc +0 -26
  934. package/docs/examples/reservation.md +0 -142
  935. package/docs/skills/develop/mcp-app.md +0 -79
  936. /package/docs/examples/{reference-service → app-shell}/.dev.vars.example +0 -0
@@ -0,0 +1,266 @@
1
+ ---
2
+ description: Seven SQL patterns most apps need, each a complete manifest that compiles on every target, with the PostgreSQL spelling and what each refuses.
3
+ ---
4
+ # SQL patterns
5
+
6
+ Each section is a business need, the manifest that meets it, and what the database refuses. Every block here is
7
+ generated by the docs check, and `packages/mantle/tests/sql-patterns.test.ts` runs the same manifest on bun:sqlite,
8
+ local D1 and PostgreSQL through the generated REST boundary. The SQL is the SQLite and D1 spelling; where PostgreSQL
9
+ differs, the section says so. What each dialect accepts is listed in [the SQL reference](../reference/sql.md).
10
+
11
+ For an order with any number of lines, see [several rows that commit together](typed-queries.md#several-rows-that-commit-together).
12
+
13
+ The sections share two Schemas:
14
+
15
+ ```yaml
16
+ apiVersion: cms.mantle.aotter.net/v2
17
+ kind: Schema
18
+ metadata: { name: products }
19
+ spec:
20
+ title: Products
21
+ lifecycle: operational
22
+ uniqueIndexes: [[sku]]
23
+ checks: ["reserved <= stock"]
24
+ schema:
25
+ type: object
26
+ required: [sku, name, price, stock, reserved, active]
27
+ properties:
28
+ sku: { type: string }
29
+ name: { type: string, minLength: 1 }
30
+ note: { type: string }
31
+ price: { type: integer, minimum: 0 }
32
+ stock: { type: integer, minimum: 0 }
33
+ reserved: { type: integer, minimum: 0 }
34
+ active: { type: boolean }
35
+ ---
36
+ apiVersion: cms.mantle.aotter.net/v2
37
+ kind: Schema
38
+ metadata: { name: orders }
39
+ spec:
40
+ title: Orders
41
+ lifecycle: operational
42
+ indexes: [[productId, createdAt, id]]
43
+ schema:
44
+ type: object
45
+ required: [productId, qty, total, orderStatus]
46
+ properties:
47
+ productId: { type: string, x-mantle-ref: products }
48
+ qty: { type: integer, minimum: 1 }
49
+ total: { type: integer, minimum: 0 }
50
+ orderStatus: { type: string, enum: [reserved, pending_approval] }
51
+ ```
52
+
53
+ ## Choose a status while writing: CASE
54
+
55
+ An order over 5000 waits for a manager; a smaller one reserves stock at once. `CASE` picks the status inside the
56
+ INSERT, and the reservation runs only for a small order, in the same program, so the two never disagree. The total
57
+ comes from the catalogue's `price`, never from the caller: a price in the input would let a caller choose the total,
58
+ and with it whether the order needs approval.
59
+
60
+ ```yaml
61
+ apiVersion: cms.mantle.aotter.net/v2
62
+ kind: Procedure
63
+ metadata: { name: place-order }
64
+ spec:
65
+ description: Order a product. An order over 5000 waits for approval and reserves nothing yet.
66
+ requires: { auth: { all: [ctx.user] } }
67
+ input:
68
+ type: object
69
+ additionalProperties: false
70
+ required: [productId, qty]
71
+ properties:
72
+ productId: { type: string }
73
+ qty: { type: integer, minimum: 1 }
74
+ output: { type: object }
75
+ handler:
76
+ sql: |
77
+ INSERT INTO orders (productId, qty, total, orderStatus)
78
+ SELECT p.id, input.qty, input.qty * p.price,
79
+ CASE WHEN input.qty * p.price > 5000 THEN 'pending_approval' ELSE 'reserved' END
80
+ FROM products p WHERE p.id = input.productId AND p.active
81
+ RETURNING id, orderStatus AS "orderStatus";
82
+ UPDATE products SET reserved = reserved + input.qty
83
+ WHERE id IN (SELECT p.id FROM products p WHERE p.id = input.productId AND p.active AND input.qty * p.price <= 5000)
84
+ ```
85
+
86
+ The second statement is written as `WHERE id IN (SELECT …)` on purpose. `WHERE id = input.productId AND …` is a
87
+ row-classified UPDATE, which must change exactly one row: for an order that waits, it would change none and refuse the
88
+ whole call with `CONFLICT`. A write that should do nothing when its condition is false needs the set form. The first
89
+ statement's join on `products` with `p.active` means an unknown or discontinued product writes no order.
90
+
91
+ ## Approve before reserving
92
+
93
+ Approval changes the status and reserves the stock in one program. The first statement is the guard: a stale
94
+ `expectedVersion` or an order that is no longer `pending_approval` matches no row, which is `CONFLICT`. The second
95
+ statement fails `reserved <= stock` when the stock is gone by now, and that rolls back the status change too, so the
96
+ order stays pending. [Purchasing](../../examples/purchasing/README.md) does the same with a department budget
97
+ (`approve-request-write`), and approves small requests at submission with `CASE` (`submit-request`).
98
+
99
+ ```yaml
100
+ apiVersion: cms.mantle.aotter.net/v2
101
+ kind: Procedure
102
+ metadata: { name: approve-order }
103
+ spec:
104
+ description: Approve a pending order at the version you reviewed; reserves its stock.
105
+ requires: { auth: { all: [ctx.admin] } }
106
+ input:
107
+ type: object
108
+ additionalProperties: false
109
+ required: [id, expectedVersion]
110
+ properties:
111
+ id: { type: string }
112
+ expectedVersion: { type: integer }
113
+ output: { type: object }
114
+ handler:
115
+ sql: |
116
+ UPDATE orders SET orderStatus = 'reserved'
117
+ WHERE id = input.id AND version = input.expectedVersion AND orderStatus = 'pending_approval'
118
+ RETURNING id, version;
119
+ UPDATE products SET reserved = reserved + (SELECT o.qty FROM orders o WHERE o.id = input.id)
120
+ WHERE id = (SELECT o.productId FROM orders o WHERE o.id = input.id)
121
+ ```
122
+
123
+ ## Change only the fields given: COALESCE
124
+
125
+ A partial update keeps every field the caller left out: `COALESCE(input.name, name)` is the new name when one is given
126
+ and the current one otherwise. `NULLIF(input.note, '')` also treats an empty string as left out. Because of that, this
127
+ Procedure cannot clear a note; give clearing its own input (for example `clearNote: true` with
128
+ `CASE WHEN input.clearNote THEN NULL ELSE … END`) if the app needs it. The version guard makes a stale edit a 409.
129
+
130
+ ```yaml
131
+ apiVersion: cms.mantle.aotter.net/v2
132
+ kind: Procedure
133
+ metadata: { name: update-product }
134
+ spec:
135
+ description: Change a product's name or note; a field you leave out keeps its value.
136
+ requires: { auth: { all: [ctx.admin] } }
137
+ input:
138
+ type: object
139
+ additionalProperties: false
140
+ required: [id, expectedVersion]
141
+ properties:
142
+ id: { type: string }
143
+ expectedVersion: { type: integer }
144
+ name: { type: string, minLength: 1 }
145
+ note: { type: string }
146
+ output: { type: object }
147
+ handler:
148
+ sql: |
149
+ UPDATE products SET name = COALESCE(input.name, name), note = COALESCE(NULLIF(input.note, ''), note)
150
+ WHERE id = input.id AND version = input.expectedVersion
151
+ RETURNING id, version, name, note
152
+ ```
153
+
154
+ ## Create or add: ON CONFLICT DO UPDATE
155
+
156
+ Restocking a SKU creates the product the first time and adds to its stock afterwards, in one statement. The conflict
157
+ target must be a declared unique index (`uniqueIndexes: [[sku]]`). `excluded` is the row the INSERT proposed;
158
+ qualify the existing row with the table name (`products.stock`).
159
+
160
+ ```yaml
161
+ apiVersion: cms.mantle.aotter.net/v2
162
+ kind: Procedure
163
+ metadata: { name: restock }
164
+ spec:
165
+ description: Add stock by SKU, creating the product the first time.
166
+ requires: { auth: { all: [ctx.admin] } }
167
+ input:
168
+ type: object
169
+ additionalProperties: false
170
+ required: [sku, name, price, qty]
171
+ properties:
172
+ sku: { type: string }
173
+ name: { type: string, minLength: 1 }
174
+ price: { type: integer, minimum: 0 }
175
+ qty: { type: integer, minimum: 1 }
176
+ output: { type: object }
177
+ handler:
178
+ sql: |
179
+ INSERT INTO products (sku, name, price, stock, reserved, active) VALUES (input.sku, input.name, input.price, input.qty, 0, true)
180
+ ON CONFLICT (sku) DO UPDATE SET stock = products.stock + excluded.stock
181
+ RETURNING id, stock
182
+ ```
183
+
184
+ ## Refuse while something refers to it: NOT EXISTS
185
+
186
+ A product cannot be discontinued while an order for it waits for approval, since approving that order would reserve
187
+ stock of a product no longer sold. `NOT EXISTS (…)` is part of the guard, so while such an order exists the
188
+ row-classified UPDATE changes nothing and the call is `CONFLICT`; the product stays on sale. Use `EXISTS` the same way
189
+ for "only if a related row exists". [Purchasing](../../examples/purchasing/README.md) uses `NOT EXISTS` to write the
190
+ ledger row only for the request its program just approved (`submit-request`).
191
+
192
+ ```yaml
193
+ apiVersion: cms.mantle.aotter.net/v2
194
+ kind: Procedure
195
+ metadata: { name: discontinue-product }
196
+ spec:
197
+ description: Stop selling a product; refused while an order for it waits for approval.
198
+ requires: { auth: { all: [ctx.admin] } }
199
+ input:
200
+ type: object
201
+ additionalProperties: false
202
+ required: [id]
203
+ properties:
204
+ id: { type: string }
205
+ output: { type: object }
206
+ handler:
207
+ sql: |
208
+ UPDATE products SET active = false
209
+ WHERE id = input.id
210
+ AND NOT EXISTS (SELECT 1 FROM orders o WHERE o.productId = products.id AND o.orderStatus = 'pending_approval')
211
+ RETURNING id
212
+ ```
213
+
214
+ ## A row with its children in one read
215
+
216
+ An admin, or an AI client, reads each product with its orders in one call instead of one call per product. A
217
+ correlated subquery builds the array, so a product without orders has `[]`; `LEFT JOIN … GROUP BY` would give it one
218
+ empty object instead.
219
+
220
+ ```yaml
221
+ apiVersion: cms.mantle.aotter.net/v2
222
+ kind: View
223
+ metadata: { name: products-with-orders }
224
+ spec:
225
+ description: Each product with its orders as one JSON array.
226
+ surface: admin
227
+ requires: { auth: { all: [ctx.admin] } }
228
+ sql: |
229
+ SELECT p.id, p.name,
230
+ (SELECT json_group_array(json_set('{}', '$.id', o.id, '$.qty', o.qty)) FROM orders o WHERE o.productId = p.id) AS orders
231
+ FROM products p ORDER BY p.id
232
+ ```
233
+
234
+ SQLite and D1 build each object with `json_set('{}', '$.id', o.id, …)` (`json_object` is not on the allowlist).
235
+ PostgreSQL writes it as `COALESCE(jsonb_agg(jsonb_build_object('id', o.id, 'qty', o.qty)), CAST('[]' AS jsonb))`;
236
+ `jsonb_agg` of no rows is `NULL`, hence the `COALESCE`. PostgreSQL can also order inside the aggregate
237
+ (`jsonb_agg(… ORDER BY o.id)`); SQLite cannot, so sort the array.
238
+
239
+ Generation types the column as JSON because its expression can only produce a JSON document: a `json_group_array`,
240
+ `json_group_object`, `json_set`, `json_insert`, `json_remove`, `jsonb_agg`, `jsonb_object_agg`, `jsonb_build_object`,
241
+ `jsonb_build_array`, `jsonb_strip_nulls`, `to_jsonb` or `CAST(… AS jsonb)` call, a scalar subquery of one, or a
242
+ `COALESCE` of those with JSON literal fallbacks such as `'[]'`. REST, MCP (`structuredContent`) and Admin therefore
243
+ return an array on every target, and `WireRow` types the column `unknown`. The bare View and the Store keep the
244
+ driver's value: on SQLite and D1 that is JSON text, so code calling the bare View parses it. `json_extract`, `->>`
245
+ and `CASE` can return a scalar, so their output stays native.
246
+
247
+ ## The latest row of each group: row_number()
248
+
249
+ The most recent order of each product. `row_number() OVER (PARTITION BY … ORDER BY …)` numbers each product's orders
250
+ newest first, and the outer query keeps number 1. End the window's ORDER BY with `id` so two rows created in the same
251
+ instant still have one order. `rank()` instead gives tied rows the same number.
252
+
253
+ ```yaml
254
+ apiVersion: cms.mantle.aotter.net/v2
255
+ kind: View
256
+ metadata: { name: latest-order-per-product }
257
+ spec:
258
+ description: The most recent order of each product.
259
+ surface: admin
260
+ requires: { auth: { all: [ctx.admin] } }
261
+ sql: |
262
+ SELECT x.productId AS "productId", x.id, x.qty FROM (
263
+ SELECT o.productId, o.id, o.qty, row_number() OVER (PARTITION BY o.productId ORDER BY o.created_at DESC, o.id DESC) AS n
264
+ FROM orders o
265
+ ) x WHERE x.n = 1 ORDER BY x.productId
266
+ ```
@@ -1,26 +1,20 @@
1
1
  ---
2
- description: Read and write through the typed Store from handlers and service code, call named Views, and choose between ctx.store, runtime.store and runtime.store.as(caller).
2
+ description: Choose Store for writes and simple lookups; declare internal Views for richer reads.
3
3
  ---
4
4
  # Query from TypeScript
5
5
 
6
- Handler and service code reach Mantle-owned rows only through Store. The
7
- generated `.mantle/generated/mantle.ts` types it over your Schemas and Views:
8
- `ctx.store` in a `MantleHandlers` handler is its `CallerStore`, while
9
- `runtime.store` is the untyped `MantleStore` until you cast it to the
10
- generated `Store`.
6
+ | Work | Data path |
7
+ | --- | --- |
8
+ | Writes | Store `insert` / `update` / `delete`, atomic `batch`, supported `transaction`, or declared Procedures |
9
+ | Id lookup or simple AND filter | Store `findById` / `find` / `first`, inside handlers or an existing application |
10
+ | Joins, aggregates, OR, reusable reads | Internal View: manifest SQL that is reviewable and typed |
11
11
 
12
- | Store | Where | Scope |
13
- |---|---|---|
14
- | `ctx.store` | inside a `ref` handler | bound to the invocation's caller. A guard or a before hook gets a read-only one |
15
- | `runtime.store.as(caller)` | service code that has resolved a caller | that caller |
16
- | `runtime.store` | trusted host code (imports, maintenance) | none: no caller scope. TTL still applies |
17
-
18
- Each one applies TTL visibility, and published-only on public Views. Only
19
- `runtime.store` skips caller scope, so never hand it a request's input
20
- unchecked.
12
+ Never write raw SQL to Mantle collections: it bypasses scope, TTL, publishing and system-column rules. The Store applies row rules but does not check a View's or Procedure's `requires`; authorize your handler before using it.
21
13
 
22
14
  ## Declare an internal View
23
15
 
16
+ Save this as `manifests/tickets.yaml`:
17
+
24
18
  ```yaml
25
19
  apiVersion: cms.mantle.aotter.net/v2
26
20
  kind: Schema
@@ -49,107 +43,223 @@ spec:
49
43
  properties:
50
44
  ticketState: { type: string, enum: [open, closed] }
51
45
  sql: |
52
- SELECT id, subject, ticketState FROM tickets
46
+ SELECT id, subject, ticketState AS "ticketState" FROM tickets
53
47
  WHERE ticketState = input.ticketState
54
- ORDER BY created_at DESC LIMIT 50
48
+ ORDER BY id ASC
55
49
  ```
56
50
 
57
- `internal` keeps the View off REST, MCP and Admin. It is still in the plan and
58
- the typed Store. It is not a security bypass: a `requires` on it is checked
59
- for the caller the Store is bound to.
60
-
61
- ## Call it
51
+ Generate with `mantle generate cloudflare-d1 generated manifests/tickets.yaml`.
52
+ An internal View has no public REST route or MCP tool. Its generated function still applies declared authorization and compiled row policy.
62
53
 
63
54
  ```ts
64
- import type { MantleHandlers } from "../.mantle/generated/mantle.js";
65
-
66
- export const handlers: MantleHandlers = {
67
- closeStale: async (_input, ctx) => {
68
- const { rows, nextCursor } = await ctx.store.view("tickets-by-state", { input: { ticketState: "open" }, limit: 20 });
69
- // rows: { id: unknown; subject: string | null; ticketState: "open" | "closed" | null }[]
70
- return { open: rows.length, more: nextCursor !== undefined };
71
- },
72
- };
55
+ import { store } from './generated/generated.js';
56
+ import ticketsByState from './generated/views/tickets-by-state.js';
57
+ import type { Caller } from '@aotter/mantle/contracts';
58
+
59
+ export async function readTickets(db: Parameters<typeof store>[0], caller: Caller) {
60
+ const tickets = store(db, caller).collection('tickets');
61
+ const first = await tickets.first({ where: { ticketstate: 'open' } });
62
+ const rows = await ticketsByState(db, caller, { ticketState: 'open' });
63
+ return { first, rows };
64
+ }
73
65
  ```
74
66
 
75
- The View name, its `input` and its row type are checked by `tsc`. A staff View
76
- with `uiSchema.list.searchFields` or `filterFields` also takes `search` and
77
- `filters` (`ctx.store.view(name, { search: "refund", filters: { ticketState: "open" } })`);
78
- Store refuses a filter the View does not declare. An output that reads a
79
- Schema field unchanged has that field's type, `created_at` and `updated_at`
80
- are `string | null`, and an expression, or another native column such as `id`,
81
- is `unknown`. Page with `limit` (default 50, at most 500) and the opaque
82
- `cursor` from `nextCursor`.
67
+ The app supplies a verified Caller and its existing native handle. External input needs boundary validation. Store rows, filters and writes use storage names (`ticketstate`, `created_at`); View aliases use the SQL output names.
83
68
 
84
- ## `select` and `write`
69
+ ## Store reads and writes
85
70
 
86
- For a query that needs no declared View, `select` takes a JSON query over one
87
- Schema:
71
+ `find` returns `{ rows, cursor }` (null cursor on the last page), with limits 1–500 and opaque keyset cursors. `where` combines fields with AND; `orderBy` selects a generated indexed column with `id` ties. Most order columns must be NOT NULL; publishing `published_at` supports nulls. For a proved pageable internal View, import `paged/views/<encoded-name>.ts` and call `(db, caller, input, { limit?, cursor? })`. Other internal Views retain their bare row-array function.
88
72
 
89
- ```ts
90
- const { rows } = await ctx.store.select({
91
- from: "tickets",
92
- columns: ["id", "subject"],
93
- where: { ticketState: "open", subject: { like: "%refund%" } },
94
- orderBy: { updatedAt: "desc" },
95
- limit: 20,
96
- });
73
+ Store keeps `find({ search: 'text' })`, `first({ search: 'text' })` and `count(where?)`. Search matches exact id or declared searchable fields under the same row policy.
74
+
75
+ `count` scans every matching row. For large tables or frequently shown totals, use an internal View with indexed predicates or avoid exact totals; a View's aggregate still scans the matching rows.
76
+
77
+ Store search, Admin list search and Views using `mantle.search` share the same dialect search. SQLite/D1 use FTS5 trigram for queries of 3 or more characters, and LIKE for shorter queries. PostgreSQL uses ILIKE over the declared fields, which scans by default. A View does not make PostgreSQL search faster. For large PostgreSQL tables, the application's agent adds trigram indexes in a migration; ILIKE then uses them with no code change:
78
+
79
+ ```sql
80
+ CREATE EXTENSION IF NOT EXISTS pg_trgm;
81
+ CREATE INDEX articles_title_trgm ON articles USING gin (title gin_trgm_ops);
97
82
  ```
98
83
 
99
- - `where`: `{ column: value }` is equality and sibling keys are AND; also
100
- `{ column: { eq, ne, gt, gte, lt, lte, like, in, notIn, isNull } }`, and
101
- `and`, `or`, `not`. `in` takes a list or `{ select, from, where }`.
102
- - `orderBy`: one column; `id` breaks ties. Default `{ updatedAt: "desc" }`.
103
- - `search`: text matched against `searchableFields` (and `id`).
104
- - Native columns are camelCase here (`createdAt`, `authorId`), while SQL spells
105
- them snake_case (`created_at`).
84
+ Index each searched field as needed and inspect EXPLAIN for the workload. Case folding follows the engine.
106
85
 
107
- `write` applies every operation or none, in order:
86
+ Writes are lazy and execute once when awaited. Insert/update return native rows; delete returns void. `update(id, set, { lock })` and `delete(id, { lock })` require the version the caller reviewed. A stale lock, excluded row or unique clash is `CONFLICT`. `batch` atomically executes unused Writes from one Store in input order; a step cannot use a prior result.
108
87
 
109
- ```ts
110
- await ctx.store.write([
111
- { update: "tickets", set: { ticketState: "closed" }, where: { id }, lock: expectedVersion },
112
- { insert: "ticket-events", values: { ticketId: id, kind: "closed" } },
113
- ]);
88
+ Interactive `transaction(async tx => …)` exists on bun:sqlite and PostgreSQL, with collections, Views and Procedures bound to the transaction. D1 supports batches only. PostgreSQL defaults to serializable, with an explicit isolation override; SQLite uses BEGIN IMMEDIATE. Use `tx` inside the callback, not the outer Store or handle. Nested transactions and `tx.batch` are refused; there is no automatic retry.
89
+
90
+ Ref handlers receive `{ caller, db, store }` bound to the same Caller and transaction. Implement the generated `Handlers` interface and pass it to `store(db, caller, { handlers })`. Direct Procedure modules expose SQL Procedures; ref Procedures are reached through the bound Store or selected surfaces.
91
+
92
+ See [native execution](native-execution.md) for values and write outcomes and [migrations](../concepts/runtime-and-adapters.md#schema-installation-and-migrations) before changing a Schema.
93
+
94
+ ## Prefer Store-backed ref Procedures for simple writes
95
+
96
+ For a single-entity create or partial update, prefer a declared `ref` Procedure
97
+ whose handler awaits its caller-bound `ctx.store.collection(...).insert(...)`
98
+ or `.update(id, allowedPatch, { lock: expectedVersion })`. Keep the Procedure's
99
+ `requires` and generated validation at its invocation boundary: Store enforces
100
+ row policy, but does not substitute for operation authorization. Do not invoke
101
+ a handler directly from a route and accidentally bypass those checks.
102
+
103
+ Insert/update returns the actual written native row. Inside a transaction,
104
+ that result is provisional until the outer transaction commits; later failure
105
+ can still roll it back. Report committed success or emit external effects only
106
+ after that transaction succeeds. Return an explicit
107
+ allowlist of useful business fields, its backend `id` and returned `version`;
108
+ do not spread the entire row, echo the submitted version, calculate a new
109
+ version instead of reading the result, or add a generic receipt adapter. These
110
+ ref results are app-owned: declare their output schema and make any required
111
+ native-to-wire conversion explicit at the boundary.
112
+
113
+ Patch only permitted fields. Omitted fields remain unchanged; define whether
114
+ explicit null clears a nullable field or is invalid. Do not expand a partial
115
+ request into a full replacement with defaults for unseen fields. A stale lock
116
+ is a conflict; preserve intent and reconcile/review rather than silently
117
+ refreshing the lock and retrying.
118
+
119
+ Use SQL Procedures when conditions or related effects must commit together:
120
+ for example, creating an order while decrementing stock under a CHECK, a state
121
+ transition guarded by an atomic WHERE, or an additive restock upsert. A
122
+ pre-read in TypeScript followed by an unguarded write is not equivalent.
123
+ Store `batch` is atomic for known writes; a D1 batch step cannot consume a prior
124
+ step's returned ID. D1 has no interactive transaction callback, so retain the
125
+ supported SQL program or another existing native atomic boundary for that case.
126
+ The [MCP design audit](agent-workflow-acceptance.md) applies these choices before
127
+ implementation and separates them from independent end-user acceptance.
128
+
129
+ ## Several rows that commit together
130
+
131
+ An order with any number of lines, a cart checkout or a bulk import must commit
132
+ every row or none. Pass the rows as one array input and write them in one SQL
133
+ Procedure that reads the array as a row source: `json_each(input.items)` on
134
+ SQLite and D1, `jsonb_array_elements(input.items) AS j(value)` on PostgreSQL.
135
+ The Procedure's statements commit together on every target, so a Schema
136
+ `checks` failure in any statement refuses the whole call with `CONFLICT` and
137
+ leaves nothing behind. Bound the array with `maxItems`.
138
+
139
+ A statement cannot read an earlier statement's `RETURNING`, so rows that must
140
+ refer to each other share a key from the input: here the caller (or a `ref`
141
+ handler that then calls this Procedure) supplies `orderRef`. A later statement
142
+ does see the rows an earlier one wrote, so it can also store the parent's id
143
+ (`(SELECT o.id FROM orders o WHERE o.orderRef = input.orderRef)`) in a field with
144
+ `x-mantle-ref: orders`, which lets Admin fold the lines under their order.
145
+
146
+ ```yaml
147
+ apiVersion: cms.mantle.aotter.net/v2
148
+ kind: Schema
149
+ metadata: { name: products }
150
+ spec:
151
+ title: Products
152
+ lifecycle: operational
153
+ checks: ["reserved <= stock"]
154
+ schema:
155
+ type: object
156
+ required: [name, stock, reserved]
157
+ properties:
158
+ name: { type: string }
159
+ stock: { type: integer, minimum: 0 }
160
+ reserved: { type: integer, minimum: 0 }
161
+ ---
162
+ apiVersion: cms.mantle.aotter.net/v2
163
+ kind: Schema
164
+ metadata: { name: orders }
165
+ spec:
166
+ title: Orders
167
+ lifecycle: operational
168
+ uniqueIndexes: [[orderRef]]
169
+ checks: ["matchedLines = lineCount"]
170
+ schema:
171
+ type: object
172
+ required: [orderRef, lineCount, matchedLines]
173
+ properties:
174
+ orderRef: { type: string }
175
+ lineCount: { type: integer, minimum: 1 }
176
+ matchedLines: { type: integer, minimum: 0 }
177
+ ---
178
+ apiVersion: cms.mantle.aotter.net/v2
179
+ kind: Schema
180
+ metadata: { name: order_lines }
181
+ spec:
182
+ title: Order lines
183
+ lifecycle: operational
184
+ schema:
185
+ type: object
186
+ required: [orderRef, productId, qty]
187
+ properties:
188
+ orderRef: { type: string }
189
+ productId: { type: string, x-mantle-ref: products }
190
+ qty: { type: integer, minimum: 1 }
191
+ ---
192
+ apiVersion: cms.mantle.aotter.net/v2
193
+ kind: Procedure
194
+ metadata: { name: place-order }
195
+ spec:
196
+ description: Place an order of one or more lines; an unknown product or a line that would oversell refuses the whole order.
197
+ requires: { auth: { all: [ctx.user] } }
198
+ input:
199
+ type: object
200
+ additionalProperties: false
201
+ required: [orderRef, items]
202
+ properties:
203
+ orderRef: { type: string }
204
+ items:
205
+ type: array
206
+ minItems: 1
207
+ maxItems: 50
208
+ items:
209
+ type: object
210
+ additionalProperties: false
211
+ required: [productId, qty]
212
+ properties:
213
+ productId: { type: string }
214
+ qty: { type: integer, minimum: 1 }
215
+ output: { type: object }
216
+ handler:
217
+ sql: |
218
+ INSERT INTO orders (orderRef, lineCount, matchedLines) VALUES (input.orderRef,
219
+ (SELECT COUNT(*) FROM json_each(input.items) j),
220
+ (SELECT COUNT(*) FROM json_each(input.items) j JOIN products p ON p.id = j.value ->> 'productId'));
221
+ UPDATE products SET reserved = reserved + (SELECT SUM(j.value ->> 'qty') FROM json_each(input.items) j WHERE j.value ->> 'productId' = products.id)
222
+ WHERE id IN (SELECT j.value ->> 'productId' FROM json_each(input.items) j);
223
+ INSERT INTO order_lines (orderRef, productId, qty)
224
+ SELECT input.orderRef, p.id, j.value ->> 'qty' FROM json_each(input.items) j JOIN products p ON p.id = j.value ->> 'productId'
225
+ RETURNING id, productId AS "productId";
114
226
  ```
115
227
 
116
- - `insert` with `values`, optional client `id` (`ctx.store.id()`) and
117
- `onConflict: "ignore" | { columns, update }`. A scoped Schema refuses a
118
- client `id`, because a chosen id could collide with another owner's row and
119
- reveal it: give such rows a field of your own that is unique with the scope
120
- field (`uniqueIndexes: [[owner, clientKey]]`) when other rows of the same
121
- write must point at them, or when a retry must find them.
122
- - `update` with `set` and `where`; `delete` with `where`. A `where` that pins
123
- `id` is a row op: it may carry `lock` (the version the caller saw), and
124
- writing no row is `CONFLICT`.
125
- - A result is `{ id, version }` for a row op and `{ affected }` for a set op.
126
- - `set` and `values` never name the scope field or a native column (except
127
- `status` on a `publishing` Schema, below); Store
128
- fills them. A `null` leaves empty, or clears, a field the Schema does not
129
- require (the generated `values` and `set` types accept it); for a required
130
- field it is refused. On a `publishing` Schema, `set: { status }` is how a `ref`
131
- handler publishes, unpublishes or archives.
132
-
133
- Failures throw `DiagnosticError` with `INPUT_VALIDATION_FAILED` (including a
134
- failed `check`), `CONFLICT` (`conflict.reason` is `lock`, `expect` or
135
- `unique`, and `conflict.opIndex` names the operation; for `unique` it is
136
- present when exactly one operation of the write targets the violated Schema,
137
- since the engine names the table and not the statement), `RESOURCE_UNAVAILABLE`
138
- or `OUTCOME_UNKNOWN`. Nothing is written on any failure. After
139
- `OUTCOME_UNKNOWN`, retry with the same client ids and locks: a replayed insert
140
- conflicts on its id, a replayed update on its lock.
141
-
142
- ## From service code
143
-
144
- The service's `fetch` receives the runtime. Resolve the caller first, as the
145
- generated `withCaller` does, and bind Store to it:
228
+ Each refusal is a check or a unique index, so it rolls back all three statements:
229
+
230
+ - A line that would oversell fails `reserved <= stock`. Repeated lines for one
231
+ product add up in the `SUM`, so they are checked against the same stock.
232
+ - A line naming an unknown product does not match in the join, so
233
+ `matchedLines` falls short of `lineCount` and the `orders` check fails. Set
234
+ operations alone would skip that line and still succeed.
235
+ - A repeated `orderRef` clashes with the unique index, so replaying a request
236
+ cannot reserve twice.
237
+
238
+ On PostgreSQL `->>` returns text: write `CAST(j.value ->> 'qty' AS int8)`
239
+ there. SQLite and D1 refuse that integer cast (`SQL_TYPE`, because SQLite
240
+ truncates where PostgreSQL rounds), and their `->>` already returns the JSON
241
+ number.
242
+
243
+ [SQL patterns](sql-patterns.md) covers approving before reserving, choosing a status with `CASE`, partial updates,
244
+ upserts, `EXISTS` guards and nested reads on the same `products`.
245
+
246
+ Do not split this into a Store write, then a SQL Procedure, then a compensating
247
+ delete: the rows are visible between the steps and a failure leaves cleanup to
248
+ the handler. A `ref` handler that needs the rows written together calls this
249
+ Procedure through `ctx.store.procedures`, passing the array itself: the
250
+ generated input type is the authored one, and the generated query serializes
251
+ the array for the driver (a string is bound as it is). Like a direct call, the
252
+ Store does not validate input against the Procedure's schema (REST and MCP do),
253
+ so `maxItems` and the line shape hold only for rows the handler has checked or
254
+ built.
146
255
 
147
256
  ```ts
148
- const caller = await resolveCaller(request);
149
- if (!("caller" in caller)) return new Response("unauthorized", { status: 401 });
150
- const { rows } = await runtime.store.as(caller.caller).view("tickets-by-state", { input: { ticketState: "open" } });
151
- ```
257
+ import { store } from './generated/generated.js';
258
+ import type { Caller } from '@aotter/mantle/contracts';
152
259
 
153
- To run a Procedure from service code, with its auth, guard and validation, call
154
- `runtime.invokeProcedure({ procedure, input, caller, cause: { kind: "internal", id } })`.
155
- Inside a handler, `ctx.invoke(name, input)` does the same and keeps the caller.
260
+ // `ctx.store` in a `ref` handler is this Store: `ctx.store.procedures['place-order']({ orderRef, items })`.
261
+ export async function placeOrder(db: Parameters<typeof store>[0], caller: Caller, orderRef: string) {
262
+ const items = [{ productId: 'pen', qty: 2 }, { productId: 'stapler', qty: 1 }];
263
+ return store(db, caller).procedures['place-order']({ orderRef, items });
264
+ }
265
+ ```