@aotter/mantle-runtime 0.1.0-alpha.1 → 0.1.0-alpha.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (298) hide show
  1. package/README.md +37 -4
  2. package/dist/MantleRuntime.d.ts +96 -0
  3. package/dist/MantleRuntime.d.ts.map +1 -0
  4. package/dist/MantleRuntime.js +197 -0
  5. package/dist/MantleRuntime.js.map +1 -0
  6. package/dist/domain/model/HandlerContext.d.ts +3 -4
  7. package/dist/domain/model/HandlerContext.d.ts.map +1 -1
  8. package/dist/domain/model/PreparedMantleRevision.d.ts +14 -0
  9. package/dist/domain/model/PreparedMantleRevision.d.ts.map +1 -0
  10. package/dist/domain/model/PreparedMantleRevision.js +8 -0
  11. package/dist/domain/model/PreparedMantleRevision.js.map +1 -0
  12. package/dist/domain/model/index.d.ts +1 -2
  13. package/dist/domain/model/index.d.ts.map +1 -1
  14. package/dist/domain/model/index.js +0 -1
  15. package/dist/domain/model/index.js.map +1 -1
  16. package/dist/domain/port/Clock.d.ts +1 -2
  17. package/dist/domain/port/Clock.d.ts.map +1 -1
  18. package/dist/domain/port/Clock.js.map +1 -1
  19. package/dist/domain/port/DatabaseDriver.d.ts +13 -21
  20. package/dist/domain/port/DatabaseDriver.d.ts.map +1 -1
  21. package/dist/domain/port/EntryReader.d.ts +1 -1
  22. package/dist/domain/port/EntryReader.d.ts.map +1 -1
  23. package/dist/domain/port/EntryRepository.d.ts +19 -4
  24. package/dist/domain/port/EntryRepository.d.ts.map +1 -1
  25. package/dist/domain/port/HandlerRegistry.d.ts +1 -1
  26. package/dist/domain/port/IdGenerator.d.ts +3 -4
  27. package/dist/domain/port/IdGenerator.d.ts.map +1 -1
  28. package/dist/domain/port/IdGenerator.js.map +1 -1
  29. package/dist/domain/port/MantleStorageAdapter.d.ts +23 -0
  30. package/dist/domain/port/MantleStorageAdapter.d.ts.map +1 -0
  31. package/dist/domain/port/MantleStorageAdapter.js +2 -0
  32. package/dist/domain/port/MantleStorageAdapter.js.map +1 -0
  33. package/dist/domain/port/SiteConfigRepository.d.ts +12 -10
  34. package/dist/domain/port/SiteConfigRepository.d.ts.map +1 -1
  35. package/dist/domain/port/ViewQueryExecutor.d.ts +29 -0
  36. package/dist/domain/port/ViewQueryExecutor.d.ts.map +1 -0
  37. package/dist/domain/port/ViewQueryExecutor.js +2 -0
  38. package/dist/domain/port/ViewQueryExecutor.js.map +1 -0
  39. package/dist/domain/port/index.d.ts +5 -2
  40. package/dist/domain/port/index.d.ts.map +1 -1
  41. package/dist/domain/port/index.js.map +1 -1
  42. package/dist/domain/service/LocaleNegotiator.d.ts.map +1 -1
  43. package/dist/domain/service/LocaleNegotiator.js +2 -2
  44. package/dist/domain/service/LocaleNegotiator.js.map +1 -1
  45. package/dist/domain/service/RuntimePlanCompiler.d.ts +89 -0
  46. package/dist/domain/service/RuntimePlanCompiler.d.ts.map +1 -0
  47. package/dist/domain/service/RuntimePlanCompiler.js +230 -0
  48. package/dist/domain/service/RuntimePlanCompiler.js.map +1 -0
  49. package/dist/domain/service/TriggerIndex.d.ts +5 -3
  50. package/dist/domain/service/TriggerIndex.d.ts.map +1 -1
  51. package/dist/domain/service/TriggerIndex.js +16 -4
  52. package/dist/domain/service/TriggerIndex.js.map +1 -1
  53. package/dist/domain/service/ViewParamCoercer.d.ts +1 -1
  54. package/dist/domain/service/ViewParamCoercer.js +1 -1
  55. package/dist/domain/service/index.d.ts +1 -9
  56. package/dist/domain/service/index.d.ts.map +1 -1
  57. package/dist/domain/service/index.js +1 -9
  58. package/dist/domain/service/index.js.map +1 -1
  59. package/dist/domain/service/io/EntryDeleteGuard.js +1 -1
  60. package/dist/domain/service/io/EntryDeleteGuard.js.map +1 -1
  61. package/dist/domain/service/io/EntryWriteGuard.d.ts +2 -2
  62. package/dist/domain/service/io/EntryWriteGuard.d.ts.map +1 -1
  63. package/dist/domain/service/io/EntryWriteGuard.js +1 -3
  64. package/dist/domain/service/io/EntryWriteGuard.js.map +1 -1
  65. package/dist/index.d.ts +17 -12
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +10 -11
  68. package/dist/index.js.map +1 -1
  69. package/dist/infrastructure/boot/SqliteMigrationRunner.d.ts +10 -0
  70. package/dist/infrastructure/boot/SqliteMigrationRunner.d.ts.map +1 -0
  71. package/dist/infrastructure/boot/SqliteMigrationRunner.js +41 -0
  72. package/dist/infrastructure/boot/SqliteMigrationRunner.js.map +1 -0
  73. package/dist/infrastructure/boot/bootState.d.ts +9 -0
  74. package/dist/infrastructure/boot/bootState.d.ts.map +1 -0
  75. package/dist/infrastructure/boot/bootState.js +32 -0
  76. package/dist/infrastructure/boot/bootState.js.map +1 -0
  77. package/dist/infrastructure/boot/canonicalMigrations.d.ts +2 -0
  78. package/dist/infrastructure/boot/canonicalMigrations.d.ts.map +1 -1
  79. package/dist/infrastructure/boot/canonicalMigrations.js +166 -87
  80. package/dist/infrastructure/boot/canonicalMigrations.js.map +1 -1
  81. package/dist/infrastructure/boot/index.d.ts +3 -1
  82. package/dist/infrastructure/boot/index.d.ts.map +1 -1
  83. package/dist/infrastructure/boot/index.js +3 -1
  84. package/dist/infrastructure/boot/index.js.map +1 -1
  85. package/dist/infrastructure/http/createMantleRequestHandler.d.ts +12 -0
  86. package/dist/infrastructure/http/createMantleRequestHandler.d.ts.map +1 -0
  87. package/dist/infrastructure/http/createMantleRequestHandler.js +127 -0
  88. package/dist/infrastructure/http/createMantleRequestHandler.js.map +1 -0
  89. package/dist/infrastructure/mcp/McpJsonRpcDispatcher.d.ts +18 -23
  90. package/dist/infrastructure/mcp/McpJsonRpcDispatcher.d.ts.map +1 -1
  91. package/dist/infrastructure/mcp/McpJsonRpcDispatcher.js +64 -39
  92. package/dist/infrastructure/mcp/McpJsonRpcDispatcher.js.map +1 -1
  93. package/dist/infrastructure/mcp/McpToolCatalog.d.ts.map +1 -1
  94. package/dist/infrastructure/mcp/McpToolCatalog.js +84 -19
  95. package/dist/infrastructure/mcp/McpToolCatalog.js.map +1 -1
  96. package/dist/infrastructure/mcp/index.d.ts +1 -1
  97. package/dist/infrastructure/mcp/index.d.ts.map +1 -1
  98. package/dist/infrastructure/mcp/index.js.map +1 -1
  99. package/dist/infrastructure/persistence/DatabaseEntryRepository.d.ts +4 -8
  100. package/dist/infrastructure/persistence/DatabaseEntryRepository.d.ts.map +1 -1
  101. package/dist/infrastructure/persistence/DatabaseEntryRepository.js +75 -36
  102. package/dist/infrastructure/persistence/DatabaseEntryRepository.js.map +1 -1
  103. package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.d.ts.map +1 -1
  104. package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.js +39 -31
  105. package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.js.map +1 -1
  106. package/dist/infrastructure/persistence/Pagination.d.ts +3 -0
  107. package/dist/infrastructure/persistence/Pagination.d.ts.map +1 -1
  108. package/dist/infrastructure/persistence/Pagination.js +28 -0
  109. package/dist/infrastructure/persistence/Pagination.js.map +1 -1
  110. package/dist/infrastructure/storage/SqliteMantleStorageAdapter.d.ts +22 -0
  111. package/dist/infrastructure/storage/SqliteMantleStorageAdapter.d.ts.map +1 -0
  112. package/dist/infrastructure/storage/SqliteMantleStorageAdapter.js +86 -0
  113. package/dist/infrastructure/storage/SqliteMantleStorageAdapter.js.map +1 -0
  114. package/dist/{domain/service/ViewSqlCompiler.d.ts → infrastructure/storage/SqliteViewCompiler.d.ts} +9 -10
  115. package/dist/infrastructure/storage/SqliteViewCompiler.d.ts.map +1 -0
  116. package/dist/infrastructure/storage/SqliteViewCompiler.js +307 -0
  117. package/dist/infrastructure/storage/SqliteViewCompiler.js.map +1 -0
  118. package/dist/infrastructure/testing/IndexCoverageHarness.d.ts +2 -2
  119. package/dist/infrastructure/testing/IndexCoverageHarness.d.ts.map +1 -1
  120. package/dist/infrastructure/testing/IndexCoverageHarness.js +9 -8
  121. package/dist/infrastructure/testing/IndexCoverageHarness.js.map +1 -1
  122. package/dist/usecase/boot/ValidateBootUseCase.d.ts +16 -35
  123. package/dist/usecase/boot/ValidateBootUseCase.d.ts.map +1 -1
  124. package/dist/usecase/boot/ValidateBootUseCase.js +79 -254
  125. package/dist/usecase/boot/ValidateBootUseCase.js.map +1 -1
  126. package/dist/usecase/boot/index.d.ts +1 -1
  127. package/dist/usecase/boot/index.d.ts.map +1 -1
  128. package/dist/usecase/boot/index.js +1 -1
  129. package/dist/usecase/boot/index.js.map +1 -1
  130. package/dist/usecase/content/ArchiveUseCase.d.ts +1 -1
  131. package/dist/usecase/content/ArchiveUseCase.js +1 -1
  132. package/dist/usecase/content/CreateDraftUseCase.d.ts +3 -3
  133. package/dist/usecase/content/CreateDraftUseCase.d.ts.map +1 -1
  134. package/dist/usecase/content/CreateDraftUseCase.js +5 -5
  135. package/dist/usecase/content/CreateDraftUseCase.js.map +1 -1
  136. package/dist/usecase/content/DeleteEntryUseCase.d.ts +3 -5
  137. package/dist/usecase/content/DeleteEntryUseCase.d.ts.map +1 -1
  138. package/dist/usecase/content/DeleteEntryUseCase.js +3 -5
  139. package/dist/usecase/content/DeleteEntryUseCase.js.map +1 -1
  140. package/dist/usecase/content/ListEntriesUseCase.d.ts.map +1 -1
  141. package/dist/usecase/content/ListEntriesUseCase.js +30 -3
  142. package/dist/usecase/content/ListEntriesUseCase.js.map +1 -1
  143. package/dist/usecase/content/RequestPublishUseCase.d.ts +4 -12
  144. package/dist/usecase/content/RequestPublishUseCase.d.ts.map +1 -1
  145. package/dist/usecase/content/RequestPublishUseCase.js +3 -21
  146. package/dist/usecase/content/RequestPublishUseCase.js.map +1 -1
  147. package/dist/usecase/content/UpdateDraftUseCase.d.ts +2 -2
  148. package/dist/usecase/content/UpdateDraftUseCase.d.ts.map +1 -1
  149. package/dist/usecase/content/UpdateDraftUseCase.js +4 -4
  150. package/dist/usecase/content/UpdateDraftUseCase.js.map +1 -1
  151. package/dist/usecase/content/diagnostics.d.ts +1 -0
  152. package/dist/usecase/content/diagnostics.d.ts.map +1 -1
  153. package/dist/usecase/content/diagnostics.js +10 -0
  154. package/dist/usecase/content/diagnostics.js.map +1 -1
  155. package/dist/usecase/dto/content/index.d.ts +10 -1
  156. package/dist/usecase/dto/content/index.d.ts.map +1 -1
  157. package/dist/usecase/dto/index.d.ts +0 -1
  158. package/dist/usecase/dto/index.d.ts.map +1 -1
  159. package/dist/usecase/dto/index.js +0 -1
  160. package/dist/usecase/dto/index.js.map +1 -1
  161. package/dist/usecase/dto/view/ExecuteViewRequest.d.ts +2 -2
  162. package/dist/usecase/dto/view/ExecuteViewRequest.d.ts.map +1 -1
  163. package/dist/usecase/index.d.ts +0 -1
  164. package/dist/usecase/index.d.ts.map +1 -1
  165. package/dist/usecase/index.js +0 -1
  166. package/dist/usecase/index.js.map +1 -1
  167. package/dist/usecase/media/diagnostics.js +1 -1
  168. package/dist/usecase/procedure/InvokeBuiltinUseCase.d.ts +3 -3
  169. package/dist/usecase/procedure/InvokeBuiltinUseCase.d.ts.map +1 -1
  170. package/dist/usecase/procedure/InvokeBuiltinUseCase.js +2 -2
  171. package/dist/usecase/procedure/InvokeBuiltinUseCase.js.map +1 -1
  172. package/dist/usecase/site/UpdateSiteSettingsUseCase.d.ts +3 -2
  173. package/dist/usecase/site/UpdateSiteSettingsUseCase.d.ts.map +1 -1
  174. package/dist/usecase/site/UpdateSiteSettingsUseCase.js +35 -2
  175. package/dist/usecase/site/UpdateSiteSettingsUseCase.js.map +1 -1
  176. package/dist/usecase/view/ExecuteViewUseCase.d.ts +8 -16
  177. package/dist/usecase/view/ExecuteViewUseCase.d.ts.map +1 -1
  178. package/dist/usecase/view/ExecuteViewUseCase.js +23 -94
  179. package/dist/usecase/view/ExecuteViewUseCase.js.map +1 -1
  180. package/dist/usecase/view/index.d.ts +2 -1
  181. package/dist/usecase/view/index.d.ts.map +1 -1
  182. package/dist/usecase/view/index.js.map +1 -1
  183. package/package.json +4 -4
  184. package/dist/domain/model/SeoMeta.d.ts +0 -47
  185. package/dist/domain/model/SeoMeta.d.ts.map +0 -1
  186. package/dist/domain/model/SeoMeta.js +0 -2
  187. package/dist/domain/model/SeoMeta.js.map +0 -1
  188. package/dist/domain/model/TemplateRegistry.d.ts +0 -50
  189. package/dist/domain/model/TemplateRegistry.d.ts.map +0 -1
  190. package/dist/domain/model/TemplateRegistry.js +0 -17
  191. package/dist/domain/model/TemplateRegistry.js.map +0 -1
  192. package/dist/domain/port/AssetServer.d.ts +0 -21
  193. package/dist/domain/port/AssetServer.d.ts.map +0 -1
  194. package/dist/domain/port/AssetServer.js +0 -2
  195. package/dist/domain/port/AssetServer.js.map +0 -1
  196. package/dist/domain/service/AbsoluteUrl.d.ts +0 -6
  197. package/dist/domain/service/AbsoluteUrl.d.ts.map +0 -1
  198. package/dist/domain/service/AbsoluteUrl.js +0 -33
  199. package/dist/domain/service/AbsoluteUrl.js.map +0 -1
  200. package/dist/domain/service/HtmlEscaping.d.ts +0 -2
  201. package/dist/domain/service/HtmlEscaping.d.ts.map +0 -1
  202. package/dist/domain/service/HtmlEscaping.js +0 -9
  203. package/dist/domain/service/HtmlEscaping.js.map +0 -1
  204. package/dist/domain/service/HtmlRenderer.d.ts +0 -36
  205. package/dist/domain/service/HtmlRenderer.d.ts.map +0 -1
  206. package/dist/domain/service/HtmlRenderer.js +0 -73
  207. package/dist/domain/service/HtmlRenderer.js.map +0 -1
  208. package/dist/domain/service/MarkdownSerializer.d.ts +0 -48
  209. package/dist/domain/service/MarkdownSerializer.d.ts.map +0 -1
  210. package/dist/domain/service/MarkdownSerializer.js +0 -109
  211. package/dist/domain/service/MarkdownSerializer.js.map +0 -1
  212. package/dist/domain/service/McpToolNaming.d.ts +0 -31
  213. package/dist/domain/service/McpToolNaming.d.ts.map +0 -1
  214. package/dist/domain/service/McpToolNaming.js +0 -48
  215. package/dist/domain/service/McpToolNaming.js.map +0 -1
  216. package/dist/domain/service/PreviewBanner.d.ts +0 -10
  217. package/dist/domain/service/PreviewBanner.d.ts.map +0 -1
  218. package/dist/domain/service/PreviewBanner.js +0 -30
  219. package/dist/domain/service/PreviewBanner.js.map +0 -1
  220. package/dist/domain/service/PublicPathResolver.d.ts +0 -46
  221. package/dist/domain/service/PublicPathResolver.d.ts.map +0 -1
  222. package/dist/domain/service/PublicPathResolver.js +0 -36
  223. package/dist/domain/service/PublicPathResolver.js.map +0 -1
  224. package/dist/domain/service/SeoMetaComposer.d.ts +0 -47
  225. package/dist/domain/service/SeoMetaComposer.d.ts.map +0 -1
  226. package/dist/domain/service/SeoMetaComposer.js +0 -164
  227. package/dist/domain/service/SeoMetaComposer.js.map +0 -1
  228. package/dist/domain/service/SitemapSerializer.d.ts +0 -19
  229. package/dist/domain/service/SitemapSerializer.d.ts.map +0 -1
  230. package/dist/domain/service/SitemapSerializer.js +0 -27
  231. package/dist/domain/service/SitemapSerializer.js.map +0 -1
  232. package/dist/domain/service/ViewSqlCompiler.d.ts.map +0 -1
  233. package/dist/domain/service/ViewSqlCompiler.js +0 -198
  234. package/dist/domain/service/ViewSqlCompiler.js.map +0 -1
  235. package/dist/domain/service/io/MediaAssetReferences.d.ts +0 -13
  236. package/dist/domain/service/io/MediaAssetReferences.d.ts.map +0 -1
  237. package/dist/domain/service/io/MediaAssetReferences.js +0 -48
  238. package/dist/domain/service/io/MediaAssetReferences.js.map +0 -1
  239. package/dist/runtime.d.ts +0 -141
  240. package/dist/runtime.d.ts.map +0 -1
  241. package/dist/runtime.js +0 -177
  242. package/dist/runtime.js.map +0 -1
  243. package/dist/usecase/dto/render/ComposeEntrySeoMetaRequest.d.ts +0 -14
  244. package/dist/usecase/dto/render/ComposeEntrySeoMetaRequest.d.ts.map +0 -1
  245. package/dist/usecase/dto/render/ComposeEntrySeoMetaRequest.js +0 -2
  246. package/dist/usecase/dto/render/ComposeEntrySeoMetaRequest.js.map +0 -1
  247. package/dist/usecase/dto/render/ComposeLlmsTxtRequest.d.ts +0 -8
  248. package/dist/usecase/dto/render/ComposeLlmsTxtRequest.d.ts.map +0 -1
  249. package/dist/usecase/dto/render/ComposeLlmsTxtRequest.js +0 -2
  250. package/dist/usecase/dto/render/ComposeLlmsTxtRequest.js.map +0 -1
  251. package/dist/usecase/dto/render/ComposeSitemapRequest.d.ts +0 -11
  252. package/dist/usecase/dto/render/ComposeSitemapRequest.d.ts.map +0 -1
  253. package/dist/usecase/dto/render/ComposeSitemapRequest.js +0 -2
  254. package/dist/usecase/dto/render/ComposeSitemapRequest.js.map +0 -1
  255. package/dist/usecase/dto/render/PreviewEntryRequest.d.ts +0 -13
  256. package/dist/usecase/dto/render/PreviewEntryRequest.d.ts.map +0 -1
  257. package/dist/usecase/dto/render/PreviewEntryRequest.js +0 -2
  258. package/dist/usecase/dto/render/PreviewEntryRequest.js.map +0 -1
  259. package/dist/usecase/dto/render/RenderEntryLiveRequest.d.ts +0 -14
  260. package/dist/usecase/dto/render/RenderEntryLiveRequest.d.ts.map +0 -1
  261. package/dist/usecase/dto/render/RenderEntryLiveRequest.js +0 -2
  262. package/dist/usecase/dto/render/RenderEntryLiveRequest.js.map +0 -1
  263. package/dist/usecase/dto/render/RenderListLiveRequest.d.ts +0 -11
  264. package/dist/usecase/dto/render/RenderListLiveRequest.d.ts.map +0 -1
  265. package/dist/usecase/dto/render/RenderListLiveRequest.js +0 -2
  266. package/dist/usecase/dto/render/RenderListLiveRequest.js.map +0 -1
  267. package/dist/usecase/dto/render/index.d.ts +0 -7
  268. package/dist/usecase/dto/render/index.d.ts.map +0 -1
  269. package/dist/usecase/dto/render/index.js +0 -7
  270. package/dist/usecase/dto/render/index.js.map +0 -1
  271. package/dist/usecase/render/ComposeEntrySeoMetaUseCase.d.ts +0 -28
  272. package/dist/usecase/render/ComposeEntrySeoMetaUseCase.d.ts.map +0 -1
  273. package/dist/usecase/render/ComposeEntrySeoMetaUseCase.js +0 -59
  274. package/dist/usecase/render/ComposeEntrySeoMetaUseCase.js.map +0 -1
  275. package/dist/usecase/render/ComposeLlmsTxtUseCase.d.ts +0 -16
  276. package/dist/usecase/render/ComposeLlmsTxtUseCase.d.ts.map +0 -1
  277. package/dist/usecase/render/ComposeLlmsTxtUseCase.js +0 -36
  278. package/dist/usecase/render/ComposeLlmsTxtUseCase.js.map +0 -1
  279. package/dist/usecase/render/ComposeSitemapUseCase.d.ts +0 -15
  280. package/dist/usecase/render/ComposeSitemapUseCase.d.ts.map +0 -1
  281. package/dist/usecase/render/ComposeSitemapUseCase.js +0 -28
  282. package/dist/usecase/render/ComposeSitemapUseCase.js.map +0 -1
  283. package/dist/usecase/render/PreviewEntryUseCase.d.ts +0 -28
  284. package/dist/usecase/render/PreviewEntryUseCase.d.ts.map +0 -1
  285. package/dist/usecase/render/PreviewEntryUseCase.js +0 -72
  286. package/dist/usecase/render/PreviewEntryUseCase.js.map +0 -1
  287. package/dist/usecase/render/RenderEntryLiveUseCase.d.ts +0 -36
  288. package/dist/usecase/render/RenderEntryLiveUseCase.d.ts.map +0 -1
  289. package/dist/usecase/render/RenderEntryLiveUseCase.js +0 -62
  290. package/dist/usecase/render/RenderEntryLiveUseCase.js.map +0 -1
  291. package/dist/usecase/render/RenderListLiveUseCase.d.ts +0 -25
  292. package/dist/usecase/render/RenderListLiveUseCase.d.ts.map +0 -1
  293. package/dist/usecase/render/RenderListLiveUseCase.js +0 -45
  294. package/dist/usecase/render/RenderListLiveUseCase.js.map +0 -1
  295. package/dist/usecase/render/index.d.ts +0 -7
  296. package/dist/usecase/render/index.d.ts.map +0 -1
  297. package/dist/usecase/render/index.js +0 -7
  298. package/dist/usecase/render/index.js.map +0 -1
@@ -1,23 +1,15 @@
1
- import { type Diagnostic, type SchemaManifest } from "@aotter/mantle-spec";
2
- import type { DatabaseDriver } from "../../domain/port/DatabaseDriver.js";
1
+ import { type Diagnostic } from "@aotter/mantle-spec";
2
+ import type { ViewQueryExecutor, ViewQueryResult } from "../../domain/port/ViewQueryExecutor.js";
3
+ import type { RuntimeViewPlan } from "../../domain/service/RuntimePlanCompiler.js";
3
4
  import type { ExecuteViewRequest } from "../dto/view/ExecuteViewRequest.js";
4
5
  import type { InvokeProcedureResponse } from "../dto/procedure/index.js";
5
6
  import type { HandlerContext } from "../../domain/model/HandlerContext.js";
6
7
  /**
7
- * Compile a View manifest and run it against `DatabaseDriver`. The
8
- * REST adapters coerce query strings and MCP passes typed JSON; this use
8
+ * Authorize and bind request values to a prepared View query. REST
9
+ * adapters coerce query strings and MCP passes typed JSON; this use
9
10
  * case validates the converged param map against `View.spec.params` after
10
11
  * static auth and before an optional guard.
11
12
  */
12
- export interface ViewQueryResult<R = Record<string, unknown>> {
13
- readonly rows: readonly R[];
14
- readonly page: number;
15
- readonly show: number;
16
- /** True when `rows.length === show` — there *might* be more on the
17
- * next page. False guarantees no more. v0.1.0 takes the cheap
18
- * path: no count query, no limit+1 probe. ADR-0012. */
19
- readonly hasMore: boolean;
20
- }
21
13
  export type ExecuteViewResponse<R = Record<string, unknown>> = {
22
14
  readonly ok: true;
23
15
  readonly result: ViewQueryResult<R>;
@@ -32,11 +24,11 @@ export type InvokeViewGuard = (request: {
32
24
  readonly pathPrefix: string;
33
25
  }) => Promise<InvokeProcedureResponse>;
34
26
  export declare class ExecuteViewUseCase {
35
- private readonly db;
27
+ private readonly queries;
36
28
  private readonly invokeGuard?;
37
- private readonly schemasByName;
29
+ private readonly views;
38
30
  private readonly paramsCache;
39
- constructor(db: DatabaseDriver, invokeGuard?: InvokeViewGuard | undefined, schemasByName?: ReadonlyMap<string, SchemaManifest>);
31
+ constructor(queries: ViewQueryExecutor, invokeGuard?: InvokeViewGuard | undefined, views?: Readonly<Record<string, RuntimeViewPlan>>);
40
32
  execute<R = Record<string, unknown>>(request: ExecuteViewRequest): Promise<ExecuteViewResponse<R>>;
41
33
  }
42
34
  //# sourceMappingURL=ExecuteViewUseCase.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ExecuteViewUseCase.d.ts","sourceRoot":"","sources":["../../../src/usecase/view/ExecuteViewUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,UAAU,EACf,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAG1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAE3E;;;;;GAKG;AAEH,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC1D,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;4DAEwD;IACxD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,MAAM,mBAAmB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACvD;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,CAAA;CAAE,GAC1D;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;CAAE,CAAC;AAE5D,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;AAEvC,qBAAa,kBAAkB;IAI3B,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC7B,OAAO,CAAC,QAAQ,CAAC,aAAa;IALhC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8B;gBAGvC,EAAE,EAAE,cAAc,EAClB,WAAW,CAAC,EAAE,eAAe,YAAA,EAC7B,aAAa,GAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAa;IAG3E,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;CA+InC"}
1
+ {"version":3,"file":"ExecuteViewUseCase.d.ts","sourceRoot":"","sources":["../../../src/usecase/view/ExecuteViewUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,UAAU,EAChB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EAChB,MAAM,wCAAwC,CAAC;AAEhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAE3E;;;;;GAKG;AAEH,MAAM,MAAM,mBAAmB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACvD;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,CAAA;CAAE,GAC1D;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;CAAE,CAAC;AAE5D,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;AAEvC,qBAAa,kBAAkB;IAI3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC7B,OAAO,CAAC,QAAQ,CAAC,KAAK;IALxB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8B;gBAGvC,OAAO,EAAE,iBAAiB,EAC1B,WAAW,CAAC,EAAE,eAAe,YAAA,EAC7B,KAAK,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAuB;IAGnF,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;CAmHnC"}
@@ -1,21 +1,22 @@
1
- import { firstZodIssueAsJsonPointer, jsonSchemaToZod, makeDiagnostic, readJsonPointer, runtimeDiagnostic, } from "@aotter/mantle-spec";
1
+ import { DiagnosticError, firstZodIssueAsJsonPointer, jsonSchemaToZod, makeDiagnostic, readJsonPointer, runtimeDiagnostic, } from "@aotter/mantle-spec";
2
2
  import { evaluateAuthAll } from "../../domain/service/AuthPredicateEvaluator.js";
3
- import { compileView } from "../../domain/service/ViewSqlCompiler.js";
4
3
  export class ExecuteViewUseCase {
5
- db;
4
+ queries;
6
5
  invokeGuard;
7
- schemasByName;
6
+ views;
8
7
  paramsCache = new Map();
9
- constructor(db, invokeGuard, schemasByName = new Map()) {
10
- this.db = db;
8
+ constructor(queries, invokeGuard, views = Object.create(null)) {
9
+ this.queries = queries;
11
10
  this.invokeGuard = invokeGuard;
12
- this.schemasByName = schemasByName;
11
+ this.views = views;
13
12
  }
14
13
  async execute(request) {
15
- const viewPath = request.pathPrefix ?? `manifest:View/${request.view.metadata.name}`;
14
+ const planned = this.views[request.view.metadata.name];
15
+ const view = planned?.manifest ?? request.view;
16
+ const viewPath = request.pathPrefix ?? `manifest:View/${view.metadata.name}`;
16
17
  // Auth — closed predicate vocabulary same as Procedure. When the
17
18
  // View has no `requires.auth.all`, evaluateAuthAll returns null.
18
- const requires = request.view.spec.requires;
19
+ const requires = view.spec.requires;
19
20
  if (requires?.auth?.all && requires.auth.all.length > 0) {
20
21
  if (!request.ctx) {
21
22
  return {
@@ -38,11 +39,11 @@ export class ExecuteViewUseCase {
38
39
  // callers. MCP sends already-typed JSON; REST passes coerced query
39
40
  // values. Both converge here before the dynamic guard.
40
41
  let validatedParams = request.options?.params ?? {};
41
- if (request.view.spec.params) {
42
- let validator = this.paramsCache.get(request.view.metadata.name);
42
+ if (view.spec.params) {
43
+ let validator = this.paramsCache.get(view.metadata.name);
43
44
  if (!validator) {
44
- validator = jsonSchemaToZod(request.view.spec.params);
45
- this.paramsCache.set(request.view.metadata.name, validator);
45
+ validator = jsonSchemaToZod(view.spec.params);
46
+ this.paramsCache.set(view.metadata.name, validator);
46
47
  }
47
48
  const parsed = validator.safeParse(validatedParams);
48
49
  if (!parsed.success) {
@@ -97,45 +98,19 @@ export class ExecuteViewUseCase {
97
98
  if (!guarded.ok)
98
99
  return guarded;
99
100
  }
100
- const schema = this.schemasByName.get(request.view.spec.from);
101
- let compiled;
102
101
  try {
103
- compiled = compileView(request.view, {
102
+ const result = await this.queries.execute({
103
+ view: view.metadata.name,
104
104
  ...request.options,
105
105
  params: validatedParams,
106
106
  ctxUserId: request.ctx?.user?.id,
107
- }, schema);
108
- }
109
- catch (err) {
110
- const msg = err instanceof Error ? err.message : String(err);
111
- return {
112
- ok: false,
113
- diagnostic: runtimeDiagnostic({
114
- code: "INTERNAL_ERROR",
115
- severity: "error",
116
- path: viewPath,
117
- expected: "View compiles to valid SQL",
118
- message: `View compile failed: ${msg}`,
119
- }),
120
- };
121
- }
122
- try {
123
- const rows = await this.db
124
- .prepare(compiled.sql)
125
- .bind(...compiled.params)
126
- .all();
127
- const normalizedRows = normalizeProjectedFields(rows, request.view.spec.fields, schema);
128
- return {
129
- ok: true,
130
- result: {
131
- rows: normalizedRows,
132
- page: compiled.effectivePage,
133
- show: compiled.effectiveShow,
134
- hasMore: normalizedRows.length === compiled.effectiveShow,
135
- },
136
- };
107
+ });
108
+ return { ok: true, result };
137
109
  }
138
110
  catch (err) {
111
+ if (err instanceof DiagnosticError) {
112
+ return { ok: false, diagnostic: err.diagnostic };
113
+ }
139
114
  const msg = err instanceof Error ? err.message : String(err);
140
115
  return {
141
116
  ok: false,
@@ -143,57 +118,11 @@ export class ExecuteViewUseCase {
143
118
  code: "INTERNAL_ERROR",
144
119
  severity: "error",
145
120
  path: viewPath,
146
- expected: "SQL executes without error",
147
- message: `View SQL execution failed: ${msg}`,
121
+ expected: "prepared View query executes successfully",
122
+ message: `View query failed: ${msg}`,
148
123
  }),
149
124
  };
150
125
  }
151
126
  }
152
127
  }
153
- function normalizeProjectedFields(rows, fields, schema) {
154
- const properties = schema?.spec.schema.properties;
155
- const projectedFields = fields?.flatMap((field) => {
156
- const property = properties?.[field];
157
- return property && isSqliteNormalizedProperty(property) ? [[field, property]] : [];
158
- }) ?? [];
159
- if (projectedFields.length === 0)
160
- return rows;
161
- return rows.map((row) => {
162
- if (!row || typeof row !== "object" || Array.isArray(row))
163
- return row;
164
- const normalized = { ...row };
165
- for (const [field, property] of projectedFields) {
166
- normalized[field] = normalizeProjectedValue(normalized[field], property);
167
- }
168
- return normalized;
169
- });
170
- }
171
- function isSqliteNormalizedProperty(property) {
172
- const types = Array.isArray(property.type) ? property.type : [property.type];
173
- return types.some((type) => type === "boolean" || type === "object" || type === "array");
174
- }
175
- function normalizeProjectedValue(value, property) {
176
- const types = Array.isArray(property.type) ? property.type : [property.type];
177
- if (types.includes("boolean")) {
178
- if (value === 0)
179
- return false;
180
- if (value === 1)
181
- return true;
182
- }
183
- if (typeof value !== "string" || (!types.includes("object") && !types.includes("array"))) {
184
- return value;
185
- }
186
- try {
187
- const parsed = JSON.parse(value);
188
- if (types.includes("array") && Array.isArray(parsed))
189
- return parsed;
190
- if (types.includes("object") && parsed !== null && typeof parsed === "object" && !Array.isArray(parsed)) {
191
- return parsed;
192
- }
193
- }
194
- catch {
195
- // Preserve malformed legacy values so callers can fail their own schema checks.
196
- }
197
- return value;
198
- }
199
128
  //# sourceMappingURL=ExecuteViewUseCase.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ExecuteViewUseCase.js","sourceRoot":"","sources":["../../../src/usecase/view/ExecuteViewUseCase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ExecuteViewUseCase.js","sourceRoot":"","sources":["../../../src/usecase/view/ExecuteViewUseCase.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
- export { ExecuteViewUseCase, type ExecuteViewResponse, type ViewQueryResult, } from "./ExecuteViewUseCase.js";
1
+ export { ExecuteViewUseCase, type ExecuteViewResponse, } from "./ExecuteViewUseCase.js";
2
+ export type { ViewQueryResult } from "../../domain/port/ViewQueryExecutor.js";
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/usecase/view/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,KAAK,mBAAmB,EACxB,KAAK,eAAe,GACrB,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/usecase/view/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,KAAK,mBAAmB,GACzB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/usecase/view/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,GAGnB,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/usecase/view/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,GAEnB,MAAM,yBAAyB,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@aotter/mantle-runtime",
3
- "version": "0.1.0-alpha.1",
4
- "description": "Runtime engine for mantle: dispatcher + entry-writer + view executor + content-ops + render pipeline + auth + MCP. Defines adapter-agnostic ports. MUST NOT import D1Database / KVNamespace types.",
3
+ "version": "0.1.0-alpha.10",
4
+ "description": "Headless runtime engine for Mantle: entry operations, procedures, views, triggers, lifecycle, and adapter-agnostic ports.",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://mantle.tools/",
7
7
  "repository": {
@@ -33,7 +33,7 @@
33
33
  "README.md"
34
34
  ],
35
35
  "dependencies": {
36
- "@aotter/mantle-spec": "0.1.0-alpha.1"
36
+ "@aotter/mantle-spec": "0.1.0-alpha.10"
37
37
  },
38
38
  "peerDependencies": {
39
39
  "zod": "^4.0.0"
@@ -42,7 +42,7 @@
42
42
  "@types/node": "^26",
43
43
  "typescript": "^6.0.3",
44
44
  "vitest": "^4.1.10",
45
- "zod": "^4.4.2"
45
+ "zod": "^4.4.3"
46
46
  },
47
47
  "scripts": {
48
48
  "prebuild": "rm -rf dist .tsbuildinfo",
@@ -1,47 +0,0 @@
1
- /**
2
- * Composed SEO + AEO meta block surfaced to entry / list templates
3
- * via `EntryContext.seo` / `ListContext.seo`. Built by
4
- * `composeEntrySeoMeta` (pure) — see `domain/service/SeoMetaComposer`.
5
- *
6
- * "AEO-friendly" means: in addition to the standard SEO tags, every
7
- * entry page carries a `<link rel="alternate" type="text/markdown"
8
- * href="...md">` pointing at the publish-pipeline-emitted markdown
9
- * mirror. LLM crawlers can grab the markdown directly — no HTML
10
- * scraping, no DOM parsing.
11
- */
12
- export interface SeoMeta {
13
- /** Absolute canonical URL — `<link rel="canonical">`. */
14
- readonly canonical: string;
15
- /** Absolute URL of the markdown mirror — `<link rel="alternate"
16
- * type="text/markdown">`. AEO-critical. */
17
- readonly alternateMarkdown: string;
18
- /** One per locale this entry has a translation in, plus an
19
- * `x-default` row when the site has multiple locales. */
20
- readonly hreflangs: ReadonlyArray<{
21
- readonly locale: string;
22
- readonly href: string;
23
- }>;
24
- /** `<meta name="description">`. `null` to skip. */
25
- readonly description: string | null;
26
- /** Open Graph block. */
27
- readonly og: {
28
- readonly type: "article" | "website";
29
- readonly url: string;
30
- readonly title: string;
31
- readonly siteName: string;
32
- readonly description: string | null;
33
- readonly image: string | null;
34
- readonly locale: string;
35
- };
36
- /** Twitter card block. */
37
- readonly twitter: {
38
- readonly card: "summary" | "summary_large_image";
39
- readonly title: string;
40
- readonly description: string | null;
41
- readonly image: string | null;
42
- };
43
- /** JSON-LD object — emitted as `<script type="application/ld+json">`.
44
- * `null` skips emission. */
45
- readonly jsonLd: object | null;
46
- }
47
- //# sourceMappingURL=SeoMeta.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SeoMeta.d.ts","sourceRoot":"","sources":["../../../src/domain/model/SeoMeta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,WAAW,OAAO;IACtB,yDAAyD;IACzD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;gDAC4C;IAC5C,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC;8DAC0D;IAC1D,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtF,mDAAmD;IACnD,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,wBAAwB;IACxB,QAAQ,CAAC,EAAE,EAAE;QACX,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;QACrC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,0BAA0B;IAC1B,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,qBAAqB,CAAC;QACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;KAC/B,CAAC;IACF;iCAC6B;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=SeoMeta.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SeoMeta.js","sourceRoot":"","sources":["../../../src/domain/model/SeoMeta.ts"],"names":[],"mappings":""}
@@ -1,50 +0,0 @@
1
- import type { Entry, SiteConfig } from "@aotter/mantle-spec";
2
- import type { SeoMeta } from "./SeoMeta.js";
3
- import type { MediaAsset } from "../port/MediaStorage.js";
4
- /**
5
- * Render-pipeline types + consumer-supplied template registry.
6
- *
7
- * The runtime stays string-typed — templates return complete HTML
8
- * body strings (no doctype prefix; the HTML renderer adds it) so
9
- * the runtime carries no JSX dependency. Consumers using JSX in
10
- * their public surface (Hono + hono/jsx) call their JSX → string
11
- * function before the template returns.
12
- *
13
- * Schemas without a registered entry/list template still get
14
- * markdown / `llms.txt` mirrors — the HTML surfaces are simply
15
- * skipped (per ADR-0009-extended: the SDK ships zero opinionated
16
- * templates).
17
- *
18
- * `seo` is populated when the renderer is given a composed SeoMeta
19
- * block — templates render `<SeoTags seo={seo} />` (or read fields
20
- * directly) when present. Renderers that skip composition leave
21
- * `seo` undefined so opt-out templates don't break.
22
- *
23
- * Lives in `domain/model/` because runtime render use cases and
24
- * consumer-supplied templates both reference it.
25
- */
26
- export interface EntryContext {
27
- readonly entry: Entry;
28
- readonly site: SiteConfig;
29
- readonly mediaAssets?: ReadonlyMap<string, MediaAsset>;
30
- readonly seo?: SeoMeta;
31
- }
32
- export interface ListContext {
33
- readonly collection: string;
34
- readonly locale: string;
35
- readonly entries: readonly Entry[];
36
- readonly site: SiteConfig;
37
- readonly mediaAssets?: ReadonlyMap<string, MediaAsset>;
38
- readonly seo?: SeoMeta;
39
- }
40
- export type EntryTemplate = (ctx: EntryContext) => string;
41
- export type ListTemplate = (ctx: ListContext) => string;
42
- export declare class TemplateRegistry {
43
- private readonly entries;
44
- private readonly lists;
45
- registerEntryTemplate(collection: string, t: EntryTemplate): void;
46
- registerListTemplate(collection: string, t: ListTemplate): void;
47
- getEntryTemplate(collection: string): EntryTemplate | undefined;
48
- getListTemplate(collection: string): ListTemplate | undefined;
49
- }
50
- //# sourceMappingURL=TemplateRegistry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TemplateRegistry.d.ts","sourceRoot":"","sources":["../../../src/domain/model/TemplateRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACvD,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,SAAS,KAAK,EAAE,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACvD,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,YAAY,KAAK,MAAM,CAAC;AAC1D,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,WAAW,KAAK,MAAM,CAAC;AAExD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmC;IAEzD,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,aAAa,GAAG,IAAI;IAIjE,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,GAAG,IAAI;IAI/D,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI/D,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;CAG9D"}
@@ -1,17 +0,0 @@
1
- export class TemplateRegistry {
2
- entries = new Map();
3
- lists = new Map();
4
- registerEntryTemplate(collection, t) {
5
- this.entries.set(collection, t);
6
- }
7
- registerListTemplate(collection, t) {
8
- this.lists.set(collection, t);
9
- }
10
- getEntryTemplate(collection) {
11
- return this.entries.get(collection);
12
- }
13
- getListTemplate(collection) {
14
- return this.lists.get(collection);
15
- }
16
- }
17
- //# sourceMappingURL=TemplateRegistry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TemplateRegistry.js","sourceRoot":"","sources":["../../../src/domain/model/TemplateRegistry.ts"],"names":[],"mappings":"AA6CA,MAAM,OAAO,gBAAgB;IACV,OAAO,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC3C,KAAK,GAAG,IAAI,GAAG,EAAwB,CAAC;IAEzD,qBAAqB,CAAC,UAAkB,EAAE,CAAgB;QACxD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,oBAAoB,CAAC,UAAkB,EAAE,CAAe;QACtD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAChC,CAAC;IAED,gBAAgB,CAAC,UAAkB;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;IAED,eAAe,CAAC,UAAkB;QAChC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;CACF"}
@@ -1,21 +0,0 @@
1
- /**
2
- * `AssetServer` — static-asset serving for the admin SPA. The admin
3
- * SPA itself lives in `@aotter/mantle-admin-ui` as a pre-built
4
- * `dist/` (commit 5); the adapter binds `AssetServer` to whatever
5
- * actually serves that `dist/`. The runtime knows nothing about MIME
6
- * types, caching headers, or compression — it just asks the port and
7
- * returns the response.
8
- *
9
- * CF adapter: wraps `env.ASSETS.fetch(req)`. Future: filesystem read,
10
- * S3+CDN, Netlify static-publish dir.
11
- *
12
- * Returning `null` lets the runtime's HTTP layer fall back to the
13
- * SPA's `index.html` catchall — the React Router routing model.
14
- *
15
- * Renamed from `AssetsPort` per the clean-architecture naming
16
- * convention.
17
- */
18
- export interface AssetServer {
19
- fetch(req: Request): Promise<Response | null>;
20
- }
21
- //# sourceMappingURL=AssetServer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AssetServer.d.ts","sourceRoot":"","sources":["../../../src/domain/port/AssetServer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;CAC/C"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=AssetServer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AssetServer.js","sourceRoot":"","sources":["../../../src/domain/port/AssetServer.ts"],"names":[],"mappings":""}
@@ -1,6 +0,0 @@
1
- export declare function absoluteUrl(origin: string, path: string): string;
2
- /** Append `.md` before any query string / hash. Used by the SEO
3
- * composer + sitemap to derive markdown-mirror URLs without
4
- * mangling query params. */
5
- export declare function appendMarkdownExt(absoluteOrPath: string): string;
6
- //# sourceMappingURL=AbsoluteUrl.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AbsoluteUrl.d.ts","sourceRoot":"","sources":["../../../src/domain/service/AbsoluteUrl.ts"],"names":[],"mappings":"AAcA,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAMhE;AAED;;6BAE6B;AAC7B,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAIhE"}
@@ -1,33 +0,0 @@
1
- /**
2
- * Absolutize a path against a `SiteConfig.origin`. Single chokepoint
3
- * so trailing-slash handling is consistent across every URL the SDK
4
- * emits — sitemap, llms.txt mirrors, SEO canonical, hreflang siblings.
5
- *
6
- * Two divergent strip behaviors used to live across the codebase
7
- * (`/\/$/` vs `/\/+$/`); both flow through here now.
8
- *
9
- * Empty `origin` returns the path unchanged — useful for tests and
10
- * for templates that intentionally emit relative URLs. Already-
11
- * absolute `path` (http(s)://...) returns unchanged.
12
- */
13
- const TRAILING_SLASHES = /\/+$/;
14
- export function absoluteUrl(origin, path) {
15
- if (!origin)
16
- return path;
17
- if (path.startsWith("http://") || path.startsWith("https://"))
18
- return path;
19
- const cleanOrigin = origin.replace(TRAILING_SLASHES, "");
20
- if (!path)
21
- return cleanOrigin;
22
- return `${cleanOrigin}${path.startsWith("/") ? "" : "/"}${path}`;
23
- }
24
- /** Append `.md` before any query string / hash. Used by the SEO
25
- * composer + sitemap to derive markdown-mirror URLs without
26
- * mangling query params. */
27
- export function appendMarkdownExt(absoluteOrPath) {
28
- const match = /^([^?#]*)(.*)$/.exec(absoluteOrPath);
29
- if (!match)
30
- return `${absoluteOrPath}.md`;
31
- return `${match[1]}.md${match[2]}`;
32
- }
33
- //# sourceMappingURL=AbsoluteUrl.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AbsoluteUrl.js","sourceRoot":"","sources":["../../../src/domain/service/AbsoluteUrl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,IAAY;IACtD,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3E,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;IACzD,IAAI,CAAC,IAAI;QAAE,OAAO,WAAW,CAAC;IAC9B,OAAO,GAAG,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC;AACnE,CAAC;AAED;;6BAE6B;AAC7B,MAAM,UAAU,iBAAiB,CAAC,cAAsB;IACtD,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACpD,IAAI,CAAC,KAAK;QAAE,OAAO,GAAG,cAAc,KAAK,CAAC;IAC1C,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AACrC,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare function escapeHtml(value: string): string;
2
- //# sourceMappingURL=HtmlEscaping.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"HtmlEscaping.d.ts","sourceRoot":"","sources":["../../../src/domain/service/HtmlEscaping.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOhD"}
@@ -1,9 +0,0 @@
1
- export function escapeHtml(value) {
2
- return value
3
- .replace(/&/g, "&amp;")
4
- .replace(/</g, "&lt;")
5
- .replace(/>/g, "&gt;")
6
- .replace(/"/g, "&quot;")
7
- .replace(/'/g, "&#39;");
8
- }
9
- //# sourceMappingURL=HtmlEscaping.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"HtmlEscaping.js","sourceRoot":"","sources":["../../../src/domain/service/HtmlEscaping.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,KAAK;SACT,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5B,CAAC"}
@@ -1,36 +0,0 @@
1
- import type { Entry, SiteConfig } from "@aotter/mantle-spec";
2
- import type { TemplateRegistry } from "../model/TemplateRegistry.js";
3
- import type { SeoMeta } from "../model/SeoMeta.js";
4
- import type { MediaAsset } from "../port/MediaStorage.js";
5
- export interface RenderEntryArgs {
6
- readonly entry: Entry;
7
- readonly site: SiteConfig;
8
- readonly templates: TemplateRegistry;
9
- /** Defaults to `<!doctype html>`. Pipelines that want the
10
- * upper-case `<!DOCTYPE html>\n` shape pass it explicitly. */
11
- readonly doctype?: string;
12
- readonly mediaAssets?: ReadonlyMap<string, MediaAsset>;
13
- /** Optional pre-composed SEO/AEO block. Threaded into the
14
- * `EntryContext.seo` field so templates can emit `<SeoTags
15
- * seo={seo}/>` inside `<head>`. Renderers that skip composition
16
- * leave it undefined — opt-out templates keep working. */
17
- readonly seo?: SeoMeta;
18
- }
19
- /** Returns the full HTML doc (doctype + body) or `null` if no entry
20
- * template is registered for `entry.collection`. */
21
- export declare function renderEntryHtml(args: RenderEntryArgs): string | null;
22
- export interface RenderListArgs {
23
- readonly collection: string;
24
- readonly locale: string;
25
- readonly entries: ReadonlyArray<Entry>;
26
- readonly site: SiteConfig;
27
- readonly templates: TemplateRegistry;
28
- readonly doctype?: string;
29
- readonly mediaAssets?: ReadonlyMap<string, MediaAsset>;
30
- readonly seo?: SeoMeta;
31
- }
32
- /** Returns the full HTML doc or `null` if no list template is
33
- * registered for `collection`. */
34
- export declare function renderListHtml(args: RenderListArgs): string | null;
35
- export declare function renderTrackingTagsHtml(site: SiteConfig): string;
36
- //# sourceMappingURL=HtmlRenderer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"HtmlRenderer.d.ts","sourceRoot":"","sources":["../../../src/domain/service/HtmlRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAGV,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAW1D,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC;mEAC+D;IAC/D,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACvD;;;+DAG2D;IAC3D,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;qDACqD;AACrD,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAepE;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACvD,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;mCACmC;AACnC,wBAAgB,cAAc,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI,CAelE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAa/D"}