@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.
- package/README.md +37 -4
- package/dist/MantleRuntime.d.ts +96 -0
- package/dist/MantleRuntime.d.ts.map +1 -0
- package/dist/MantleRuntime.js +197 -0
- package/dist/MantleRuntime.js.map +1 -0
- package/dist/domain/model/HandlerContext.d.ts +3 -4
- package/dist/domain/model/HandlerContext.d.ts.map +1 -1
- package/dist/domain/model/PreparedMantleRevision.d.ts +14 -0
- package/dist/domain/model/PreparedMantleRevision.d.ts.map +1 -0
- package/dist/domain/model/PreparedMantleRevision.js +8 -0
- package/dist/domain/model/PreparedMantleRevision.js.map +1 -0
- package/dist/domain/model/index.d.ts +1 -2
- package/dist/domain/model/index.d.ts.map +1 -1
- package/dist/domain/model/index.js +0 -1
- package/dist/domain/model/index.js.map +1 -1
- package/dist/domain/port/Clock.d.ts +1 -2
- package/dist/domain/port/Clock.d.ts.map +1 -1
- package/dist/domain/port/Clock.js.map +1 -1
- package/dist/domain/port/DatabaseDriver.d.ts +13 -21
- package/dist/domain/port/DatabaseDriver.d.ts.map +1 -1
- package/dist/domain/port/EntryReader.d.ts +1 -1
- package/dist/domain/port/EntryReader.d.ts.map +1 -1
- package/dist/domain/port/EntryRepository.d.ts +19 -4
- package/dist/domain/port/EntryRepository.d.ts.map +1 -1
- package/dist/domain/port/HandlerRegistry.d.ts +1 -1
- package/dist/domain/port/IdGenerator.d.ts +3 -4
- package/dist/domain/port/IdGenerator.d.ts.map +1 -1
- package/dist/domain/port/IdGenerator.js.map +1 -1
- package/dist/domain/port/MantleStorageAdapter.d.ts +23 -0
- package/dist/domain/port/MantleStorageAdapter.d.ts.map +1 -0
- package/dist/domain/port/MantleStorageAdapter.js +2 -0
- package/dist/domain/port/MantleStorageAdapter.js.map +1 -0
- package/dist/domain/port/SiteConfigRepository.d.ts +12 -10
- package/dist/domain/port/SiteConfigRepository.d.ts.map +1 -1
- package/dist/domain/port/ViewQueryExecutor.d.ts +29 -0
- package/dist/domain/port/ViewQueryExecutor.d.ts.map +1 -0
- package/dist/domain/port/ViewQueryExecutor.js +2 -0
- package/dist/domain/port/ViewQueryExecutor.js.map +1 -0
- package/dist/domain/port/index.d.ts +5 -2
- package/dist/domain/port/index.d.ts.map +1 -1
- package/dist/domain/port/index.js.map +1 -1
- package/dist/domain/service/LocaleNegotiator.d.ts.map +1 -1
- package/dist/domain/service/LocaleNegotiator.js +2 -2
- package/dist/domain/service/LocaleNegotiator.js.map +1 -1
- package/dist/domain/service/RuntimePlanCompiler.d.ts +89 -0
- package/dist/domain/service/RuntimePlanCompiler.d.ts.map +1 -0
- package/dist/domain/service/RuntimePlanCompiler.js +230 -0
- package/dist/domain/service/RuntimePlanCompiler.js.map +1 -0
- package/dist/domain/service/TriggerIndex.d.ts +5 -3
- package/dist/domain/service/TriggerIndex.d.ts.map +1 -1
- package/dist/domain/service/TriggerIndex.js +16 -4
- package/dist/domain/service/TriggerIndex.js.map +1 -1
- package/dist/domain/service/ViewParamCoercer.d.ts +1 -1
- package/dist/domain/service/ViewParamCoercer.js +1 -1
- package/dist/domain/service/index.d.ts +1 -9
- package/dist/domain/service/index.d.ts.map +1 -1
- package/dist/domain/service/index.js +1 -9
- package/dist/domain/service/index.js.map +1 -1
- package/dist/domain/service/io/EntryDeleteGuard.js +1 -1
- package/dist/domain/service/io/EntryDeleteGuard.js.map +1 -1
- package/dist/domain/service/io/EntryWriteGuard.d.ts +2 -2
- package/dist/domain/service/io/EntryWriteGuard.d.ts.map +1 -1
- package/dist/domain/service/io/EntryWriteGuard.js +1 -3
- package/dist/domain/service/io/EntryWriteGuard.js.map +1 -1
- package/dist/index.d.ts +17 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -11
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/boot/SqliteMigrationRunner.d.ts +10 -0
- package/dist/infrastructure/boot/SqliteMigrationRunner.d.ts.map +1 -0
- package/dist/infrastructure/boot/SqliteMigrationRunner.js +41 -0
- package/dist/infrastructure/boot/SqliteMigrationRunner.js.map +1 -0
- package/dist/infrastructure/boot/bootState.d.ts +9 -0
- package/dist/infrastructure/boot/bootState.d.ts.map +1 -0
- package/dist/infrastructure/boot/bootState.js +32 -0
- package/dist/infrastructure/boot/bootState.js.map +1 -0
- package/dist/infrastructure/boot/canonicalMigrations.d.ts +2 -0
- package/dist/infrastructure/boot/canonicalMigrations.d.ts.map +1 -1
- package/dist/infrastructure/boot/canonicalMigrations.js +166 -87
- package/dist/infrastructure/boot/canonicalMigrations.js.map +1 -1
- package/dist/infrastructure/boot/index.d.ts +3 -1
- package/dist/infrastructure/boot/index.d.ts.map +1 -1
- package/dist/infrastructure/boot/index.js +3 -1
- package/dist/infrastructure/boot/index.js.map +1 -1
- package/dist/infrastructure/http/createMantleRequestHandler.d.ts +12 -0
- package/dist/infrastructure/http/createMantleRequestHandler.d.ts.map +1 -0
- package/dist/infrastructure/http/createMantleRequestHandler.js +127 -0
- package/dist/infrastructure/http/createMantleRequestHandler.js.map +1 -0
- package/dist/infrastructure/mcp/McpJsonRpcDispatcher.d.ts +18 -23
- package/dist/infrastructure/mcp/McpJsonRpcDispatcher.d.ts.map +1 -1
- package/dist/infrastructure/mcp/McpJsonRpcDispatcher.js +64 -39
- package/dist/infrastructure/mcp/McpJsonRpcDispatcher.js.map +1 -1
- package/dist/infrastructure/mcp/McpToolCatalog.d.ts.map +1 -1
- package/dist/infrastructure/mcp/McpToolCatalog.js +84 -19
- package/dist/infrastructure/mcp/McpToolCatalog.js.map +1 -1
- package/dist/infrastructure/mcp/index.d.ts +1 -1
- package/dist/infrastructure/mcp/index.d.ts.map +1 -1
- package/dist/infrastructure/mcp/index.js.map +1 -1
- package/dist/infrastructure/persistence/DatabaseEntryRepository.d.ts +4 -8
- package/dist/infrastructure/persistence/DatabaseEntryRepository.d.ts.map +1 -1
- package/dist/infrastructure/persistence/DatabaseEntryRepository.js +75 -36
- package/dist/infrastructure/persistence/DatabaseEntryRepository.js.map +1 -1
- package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.d.ts.map +1 -1
- package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.js +39 -31
- package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.js.map +1 -1
- package/dist/infrastructure/persistence/Pagination.d.ts +3 -0
- package/dist/infrastructure/persistence/Pagination.d.ts.map +1 -1
- package/dist/infrastructure/persistence/Pagination.js +28 -0
- package/dist/infrastructure/persistence/Pagination.js.map +1 -1
- package/dist/infrastructure/storage/SqliteMantleStorageAdapter.d.ts +22 -0
- package/dist/infrastructure/storage/SqliteMantleStorageAdapter.d.ts.map +1 -0
- package/dist/infrastructure/storage/SqliteMantleStorageAdapter.js +86 -0
- package/dist/infrastructure/storage/SqliteMantleStorageAdapter.js.map +1 -0
- package/dist/{domain/service/ViewSqlCompiler.d.ts → infrastructure/storage/SqliteViewCompiler.d.ts} +9 -10
- package/dist/infrastructure/storage/SqliteViewCompiler.d.ts.map +1 -0
- package/dist/infrastructure/storage/SqliteViewCompiler.js +307 -0
- package/dist/infrastructure/storage/SqliteViewCompiler.js.map +1 -0
- package/dist/infrastructure/testing/IndexCoverageHarness.d.ts +2 -2
- package/dist/infrastructure/testing/IndexCoverageHarness.d.ts.map +1 -1
- package/dist/infrastructure/testing/IndexCoverageHarness.js +9 -8
- package/dist/infrastructure/testing/IndexCoverageHarness.js.map +1 -1
- package/dist/usecase/boot/ValidateBootUseCase.d.ts +16 -35
- package/dist/usecase/boot/ValidateBootUseCase.d.ts.map +1 -1
- package/dist/usecase/boot/ValidateBootUseCase.js +79 -254
- package/dist/usecase/boot/ValidateBootUseCase.js.map +1 -1
- package/dist/usecase/boot/index.d.ts +1 -1
- package/dist/usecase/boot/index.d.ts.map +1 -1
- package/dist/usecase/boot/index.js +1 -1
- package/dist/usecase/boot/index.js.map +1 -1
- package/dist/usecase/content/ArchiveUseCase.d.ts +1 -1
- package/dist/usecase/content/ArchiveUseCase.js +1 -1
- package/dist/usecase/content/CreateDraftUseCase.d.ts +3 -3
- package/dist/usecase/content/CreateDraftUseCase.d.ts.map +1 -1
- package/dist/usecase/content/CreateDraftUseCase.js +5 -5
- package/dist/usecase/content/CreateDraftUseCase.js.map +1 -1
- package/dist/usecase/content/DeleteEntryUseCase.d.ts +3 -5
- package/dist/usecase/content/DeleteEntryUseCase.d.ts.map +1 -1
- package/dist/usecase/content/DeleteEntryUseCase.js +3 -5
- package/dist/usecase/content/DeleteEntryUseCase.js.map +1 -1
- package/dist/usecase/content/ListEntriesUseCase.d.ts.map +1 -1
- package/dist/usecase/content/ListEntriesUseCase.js +30 -3
- package/dist/usecase/content/ListEntriesUseCase.js.map +1 -1
- package/dist/usecase/content/RequestPublishUseCase.d.ts +4 -12
- package/dist/usecase/content/RequestPublishUseCase.d.ts.map +1 -1
- package/dist/usecase/content/RequestPublishUseCase.js +3 -21
- package/dist/usecase/content/RequestPublishUseCase.js.map +1 -1
- package/dist/usecase/content/UpdateDraftUseCase.d.ts +2 -2
- package/dist/usecase/content/UpdateDraftUseCase.d.ts.map +1 -1
- package/dist/usecase/content/UpdateDraftUseCase.js +4 -4
- package/dist/usecase/content/UpdateDraftUseCase.js.map +1 -1
- package/dist/usecase/content/diagnostics.d.ts +1 -0
- package/dist/usecase/content/diagnostics.d.ts.map +1 -1
- package/dist/usecase/content/diagnostics.js +10 -0
- package/dist/usecase/content/diagnostics.js.map +1 -1
- package/dist/usecase/dto/content/index.d.ts +10 -1
- package/dist/usecase/dto/content/index.d.ts.map +1 -1
- package/dist/usecase/dto/index.d.ts +0 -1
- package/dist/usecase/dto/index.d.ts.map +1 -1
- package/dist/usecase/dto/index.js +0 -1
- package/dist/usecase/dto/index.js.map +1 -1
- package/dist/usecase/dto/view/ExecuteViewRequest.d.ts +2 -2
- package/dist/usecase/dto/view/ExecuteViewRequest.d.ts.map +1 -1
- package/dist/usecase/index.d.ts +0 -1
- package/dist/usecase/index.d.ts.map +1 -1
- package/dist/usecase/index.js +0 -1
- package/dist/usecase/index.js.map +1 -1
- package/dist/usecase/media/diagnostics.js +1 -1
- package/dist/usecase/procedure/InvokeBuiltinUseCase.d.ts +3 -3
- package/dist/usecase/procedure/InvokeBuiltinUseCase.d.ts.map +1 -1
- package/dist/usecase/procedure/InvokeBuiltinUseCase.js +2 -2
- package/dist/usecase/procedure/InvokeBuiltinUseCase.js.map +1 -1
- package/dist/usecase/site/UpdateSiteSettingsUseCase.d.ts +3 -2
- package/dist/usecase/site/UpdateSiteSettingsUseCase.d.ts.map +1 -1
- package/dist/usecase/site/UpdateSiteSettingsUseCase.js +35 -2
- package/dist/usecase/site/UpdateSiteSettingsUseCase.js.map +1 -1
- package/dist/usecase/view/ExecuteViewUseCase.d.ts +8 -16
- package/dist/usecase/view/ExecuteViewUseCase.d.ts.map +1 -1
- package/dist/usecase/view/ExecuteViewUseCase.js +23 -94
- package/dist/usecase/view/ExecuteViewUseCase.js.map +1 -1
- package/dist/usecase/view/index.d.ts +2 -1
- package/dist/usecase/view/index.d.ts.map +1 -1
- package/dist/usecase/view/index.js.map +1 -1
- package/package.json +4 -4
- package/dist/domain/model/SeoMeta.d.ts +0 -47
- package/dist/domain/model/SeoMeta.d.ts.map +0 -1
- package/dist/domain/model/SeoMeta.js +0 -2
- package/dist/domain/model/SeoMeta.js.map +0 -1
- package/dist/domain/model/TemplateRegistry.d.ts +0 -50
- package/dist/domain/model/TemplateRegistry.d.ts.map +0 -1
- package/dist/domain/model/TemplateRegistry.js +0 -17
- package/dist/domain/model/TemplateRegistry.js.map +0 -1
- package/dist/domain/port/AssetServer.d.ts +0 -21
- package/dist/domain/port/AssetServer.d.ts.map +0 -1
- package/dist/domain/port/AssetServer.js +0 -2
- package/dist/domain/port/AssetServer.js.map +0 -1
- package/dist/domain/service/AbsoluteUrl.d.ts +0 -6
- package/dist/domain/service/AbsoluteUrl.d.ts.map +0 -1
- package/dist/domain/service/AbsoluteUrl.js +0 -33
- package/dist/domain/service/AbsoluteUrl.js.map +0 -1
- package/dist/domain/service/HtmlEscaping.d.ts +0 -2
- package/dist/domain/service/HtmlEscaping.d.ts.map +0 -1
- package/dist/domain/service/HtmlEscaping.js +0 -9
- package/dist/domain/service/HtmlEscaping.js.map +0 -1
- package/dist/domain/service/HtmlRenderer.d.ts +0 -36
- package/dist/domain/service/HtmlRenderer.d.ts.map +0 -1
- package/dist/domain/service/HtmlRenderer.js +0 -73
- package/dist/domain/service/HtmlRenderer.js.map +0 -1
- package/dist/domain/service/MarkdownSerializer.d.ts +0 -48
- package/dist/domain/service/MarkdownSerializer.d.ts.map +0 -1
- package/dist/domain/service/MarkdownSerializer.js +0 -109
- package/dist/domain/service/MarkdownSerializer.js.map +0 -1
- package/dist/domain/service/McpToolNaming.d.ts +0 -31
- package/dist/domain/service/McpToolNaming.d.ts.map +0 -1
- package/dist/domain/service/McpToolNaming.js +0 -48
- package/dist/domain/service/McpToolNaming.js.map +0 -1
- package/dist/domain/service/PreviewBanner.d.ts +0 -10
- package/dist/domain/service/PreviewBanner.d.ts.map +0 -1
- package/dist/domain/service/PreviewBanner.js +0 -30
- package/dist/domain/service/PreviewBanner.js.map +0 -1
- package/dist/domain/service/PublicPathResolver.d.ts +0 -46
- package/dist/domain/service/PublicPathResolver.d.ts.map +0 -1
- package/dist/domain/service/PublicPathResolver.js +0 -36
- package/dist/domain/service/PublicPathResolver.js.map +0 -1
- package/dist/domain/service/SeoMetaComposer.d.ts +0 -47
- package/dist/domain/service/SeoMetaComposer.d.ts.map +0 -1
- package/dist/domain/service/SeoMetaComposer.js +0 -164
- package/dist/domain/service/SeoMetaComposer.js.map +0 -1
- package/dist/domain/service/SitemapSerializer.d.ts +0 -19
- package/dist/domain/service/SitemapSerializer.d.ts.map +0 -1
- package/dist/domain/service/SitemapSerializer.js +0 -27
- package/dist/domain/service/SitemapSerializer.js.map +0 -1
- package/dist/domain/service/ViewSqlCompiler.d.ts.map +0 -1
- package/dist/domain/service/ViewSqlCompiler.js +0 -198
- package/dist/domain/service/ViewSqlCompiler.js.map +0 -1
- package/dist/domain/service/io/MediaAssetReferences.d.ts +0 -13
- package/dist/domain/service/io/MediaAssetReferences.d.ts.map +0 -1
- package/dist/domain/service/io/MediaAssetReferences.js +0 -48
- package/dist/domain/service/io/MediaAssetReferences.js.map +0 -1
- package/dist/runtime.d.ts +0 -141
- package/dist/runtime.d.ts.map +0 -1
- package/dist/runtime.js +0 -177
- package/dist/runtime.js.map +0 -1
- package/dist/usecase/dto/render/ComposeEntrySeoMetaRequest.d.ts +0 -14
- package/dist/usecase/dto/render/ComposeEntrySeoMetaRequest.d.ts.map +0 -1
- package/dist/usecase/dto/render/ComposeEntrySeoMetaRequest.js +0 -2
- package/dist/usecase/dto/render/ComposeEntrySeoMetaRequest.js.map +0 -1
- package/dist/usecase/dto/render/ComposeLlmsTxtRequest.d.ts +0 -8
- package/dist/usecase/dto/render/ComposeLlmsTxtRequest.d.ts.map +0 -1
- package/dist/usecase/dto/render/ComposeLlmsTxtRequest.js +0 -2
- package/dist/usecase/dto/render/ComposeLlmsTxtRequest.js.map +0 -1
- package/dist/usecase/dto/render/ComposeSitemapRequest.d.ts +0 -11
- package/dist/usecase/dto/render/ComposeSitemapRequest.d.ts.map +0 -1
- package/dist/usecase/dto/render/ComposeSitemapRequest.js +0 -2
- package/dist/usecase/dto/render/ComposeSitemapRequest.js.map +0 -1
- package/dist/usecase/dto/render/PreviewEntryRequest.d.ts +0 -13
- package/dist/usecase/dto/render/PreviewEntryRequest.d.ts.map +0 -1
- package/dist/usecase/dto/render/PreviewEntryRequest.js +0 -2
- package/dist/usecase/dto/render/PreviewEntryRequest.js.map +0 -1
- package/dist/usecase/dto/render/RenderEntryLiveRequest.d.ts +0 -14
- package/dist/usecase/dto/render/RenderEntryLiveRequest.d.ts.map +0 -1
- package/dist/usecase/dto/render/RenderEntryLiveRequest.js +0 -2
- package/dist/usecase/dto/render/RenderEntryLiveRequest.js.map +0 -1
- package/dist/usecase/dto/render/RenderListLiveRequest.d.ts +0 -11
- package/dist/usecase/dto/render/RenderListLiveRequest.d.ts.map +0 -1
- package/dist/usecase/dto/render/RenderListLiveRequest.js +0 -2
- package/dist/usecase/dto/render/RenderListLiveRequest.js.map +0 -1
- package/dist/usecase/dto/render/index.d.ts +0 -7
- package/dist/usecase/dto/render/index.d.ts.map +0 -1
- package/dist/usecase/dto/render/index.js +0 -7
- package/dist/usecase/dto/render/index.js.map +0 -1
- package/dist/usecase/render/ComposeEntrySeoMetaUseCase.d.ts +0 -28
- package/dist/usecase/render/ComposeEntrySeoMetaUseCase.d.ts.map +0 -1
- package/dist/usecase/render/ComposeEntrySeoMetaUseCase.js +0 -59
- package/dist/usecase/render/ComposeEntrySeoMetaUseCase.js.map +0 -1
- package/dist/usecase/render/ComposeLlmsTxtUseCase.d.ts +0 -16
- package/dist/usecase/render/ComposeLlmsTxtUseCase.d.ts.map +0 -1
- package/dist/usecase/render/ComposeLlmsTxtUseCase.js +0 -36
- package/dist/usecase/render/ComposeLlmsTxtUseCase.js.map +0 -1
- package/dist/usecase/render/ComposeSitemapUseCase.d.ts +0 -15
- package/dist/usecase/render/ComposeSitemapUseCase.d.ts.map +0 -1
- package/dist/usecase/render/ComposeSitemapUseCase.js +0 -28
- package/dist/usecase/render/ComposeSitemapUseCase.js.map +0 -1
- package/dist/usecase/render/PreviewEntryUseCase.d.ts +0 -28
- package/dist/usecase/render/PreviewEntryUseCase.d.ts.map +0 -1
- package/dist/usecase/render/PreviewEntryUseCase.js +0 -72
- package/dist/usecase/render/PreviewEntryUseCase.js.map +0 -1
- package/dist/usecase/render/RenderEntryLiveUseCase.d.ts +0 -36
- package/dist/usecase/render/RenderEntryLiveUseCase.d.ts.map +0 -1
- package/dist/usecase/render/RenderEntryLiveUseCase.js +0 -62
- package/dist/usecase/render/RenderEntryLiveUseCase.js.map +0 -1
- package/dist/usecase/render/RenderListLiveUseCase.d.ts +0 -25
- package/dist/usecase/render/RenderListLiveUseCase.d.ts.map +0 -1
- package/dist/usecase/render/RenderListLiveUseCase.js +0 -45
- package/dist/usecase/render/RenderListLiveUseCase.js.map +0 -1
- package/dist/usecase/render/index.d.ts +0 -7
- package/dist/usecase/render/index.d.ts.map +0 -1
- package/dist/usecase/render/index.js +0 -7
- package/dist/usecase/render/index.js.map +0 -1
|
@@ -1,23 +1,15 @@
|
|
|
1
|
-
import { type Diagnostic
|
|
2
|
-
import type {
|
|
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
|
-
*
|
|
8
|
-
*
|
|
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
|
|
27
|
+
private readonly queries;
|
|
36
28
|
private readonly invokeGuard?;
|
|
37
|
-
private readonly
|
|
29
|
+
private readonly views;
|
|
38
30
|
private readonly paramsCache;
|
|
39
|
-
constructor(
|
|
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,
|
|
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
|
-
|
|
4
|
+
queries;
|
|
6
5
|
invokeGuard;
|
|
7
|
-
|
|
6
|
+
views;
|
|
8
7
|
paramsCache = new Map();
|
|
9
|
-
constructor(
|
|
10
|
-
this.
|
|
8
|
+
constructor(queries, invokeGuard, views = Object.create(null)) {
|
|
9
|
+
this.queries = queries;
|
|
11
10
|
this.invokeGuard = invokeGuard;
|
|
12
|
-
this.
|
|
11
|
+
this.views = views;
|
|
13
12
|
}
|
|
14
13
|
async execute(request) {
|
|
15
|
-
const
|
|
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 =
|
|
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 (
|
|
42
|
-
let validator = this.paramsCache.get(
|
|
42
|
+
if (view.spec.params) {
|
|
43
|
+
let validator = this.paramsCache.get(view.metadata.name);
|
|
43
44
|
if (!validator) {
|
|
44
|
-
validator = jsonSchemaToZod(
|
|
45
|
-
this.paramsCache.set(
|
|
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
|
-
|
|
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
|
-
}
|
|
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: "
|
|
147
|
-
message: `View
|
|
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":"AAAA,OAAO,EACL,0BAA0B,EAC1B,eAAe,EACf,cAAc,EACd,eAAe,EACf,iBAAiB,
|
|
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,
|
|
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,
|
|
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,
|
|
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.
|
|
4
|
-
"description": "
|
|
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.
|
|
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.
|
|
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 +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 +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 +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 +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"}
|