@aotter/mantle-web 0.1.0-alpha.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +25 -0
- package/dist/MantleWeb.d.ts +23 -0
- package/dist/MantleWeb.d.ts.map +1 -0
- package/dist/MantleWeb.js +19 -0
- package/dist/MantleWeb.js.map +1 -0
- package/dist/dto/ComposeEntrySeoMetaRequest.d.ts +19 -0
- package/dist/dto/ComposeEntrySeoMetaRequest.d.ts.map +1 -0
- package/dist/dto/ComposeEntrySeoMetaRequest.js +2 -0
- package/dist/dto/ComposeEntrySeoMetaRequest.js.map +1 -0
- package/dist/dto/ComposeLlmsTxtRequest.d.ts +14 -0
- package/dist/dto/ComposeLlmsTxtRequest.d.ts.map +1 -0
- package/dist/dto/ComposeLlmsTxtRequest.js +2 -0
- package/dist/dto/ComposeLlmsTxtRequest.js.map +1 -0
- package/dist/dto/ComposeSitemapRequest.d.ts +14 -0
- package/dist/dto/ComposeSitemapRequest.d.ts.map +1 -0
- package/dist/dto/ComposeSitemapRequest.js +2 -0
- package/dist/dto/ComposeSitemapRequest.js.map +1 -0
- package/dist/dto/PreviewEntryRequest.d.ts +18 -0
- package/dist/dto/PreviewEntryRequest.d.ts.map +1 -0
- package/dist/dto/PreviewEntryRequest.js +2 -0
- package/dist/dto/PreviewEntryRequest.js.map +1 -0
- package/dist/dto/RenderEntryLiveRequest.d.ts +19 -0
- package/dist/dto/RenderEntryLiveRequest.d.ts.map +1 -0
- package/dist/dto/RenderEntryLiveRequest.js +2 -0
- package/dist/dto/RenderEntryLiveRequest.js.map +1 -0
- package/dist/dto/RenderListLiveRequest.d.ts +15 -0
- package/dist/dto/RenderListLiveRequest.d.ts.map +1 -0
- package/dist/dto/RenderListLiveRequest.js +2 -0
- package/dist/dto/RenderListLiveRequest.js.map +1 -0
- package/dist/dto/index.d.ts +7 -0
- package/dist/dto/index.d.ts.map +1 -0
- package/dist/dto/index.js +7 -0
- package/dist/dto/index.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/model/SeoMeta.d.ts +47 -0
- package/dist/model/SeoMeta.d.ts.map +1 -0
- package/dist/model/SeoMeta.js +2 -0
- package/dist/model/SeoMeta.js.map +1 -0
- package/dist/model/TemplateRegistry.d.ts +50 -0
- package/dist/model/TemplateRegistry.d.ts.map +1 -0
- package/dist/model/TemplateRegistry.js +17 -0
- package/dist/model/TemplateRegistry.js.map +1 -0
- package/dist/model/WebSiteConfig.d.ts +4 -0
- package/dist/model/WebSiteConfig.d.ts.map +1 -0
- package/dist/model/WebSiteConfig.js +2 -0
- package/dist/model/WebSiteConfig.js.map +1 -0
- package/dist/service/AbsoluteUrl.d.ts +6 -0
- package/dist/service/AbsoluteUrl.d.ts.map +1 -0
- package/dist/service/AbsoluteUrl.js +33 -0
- package/dist/service/AbsoluteUrl.js.map +1 -0
- package/dist/service/HtmlEscaping.d.ts +2 -0
- package/dist/service/HtmlEscaping.d.ts.map +1 -0
- package/dist/service/HtmlEscaping.js +9 -0
- package/dist/service/HtmlEscaping.js.map +1 -0
- package/dist/service/HtmlRenderer.d.ts +39 -0
- package/dist/service/HtmlRenderer.d.ts.map +1 -0
- package/dist/service/HtmlRenderer.js +73 -0
- package/dist/service/HtmlRenderer.js.map +1 -0
- package/dist/service/MarkdownSerializer.d.ts +46 -0
- package/dist/service/MarkdownSerializer.d.ts.map +1 -0
- package/dist/service/MarkdownSerializer.js +154 -0
- package/dist/service/MarkdownSerializer.js.map +1 -0
- package/dist/service/PreviewBanner.d.ts +10 -0
- package/dist/service/PreviewBanner.d.ts.map +1 -0
- package/dist/service/PreviewBanner.js +30 -0
- package/dist/service/PreviewBanner.js.map +1 -0
- package/dist/service/PublicPathResolver.d.ts +46 -0
- package/dist/service/PublicPathResolver.d.ts.map +1 -0
- package/dist/service/PublicPathResolver.js +36 -0
- package/dist/service/PublicPathResolver.js.map +1 -0
- package/dist/service/SeoMetaComposer.d.ts +61 -0
- package/dist/service/SeoMetaComposer.d.ts.map +1 -0
- package/dist/service/SeoMetaComposer.js +213 -0
- package/dist/service/SeoMetaComposer.js.map +1 -0
- package/dist/service/SitemapSerializer.d.ts +20 -0
- package/dist/service/SitemapSerializer.d.ts.map +1 -0
- package/dist/service/SitemapSerializer.js +27 -0
- package/dist/service/SitemapSerializer.js.map +1 -0
- package/dist/service/io/MediaAssetReferences.d.ts +15 -0
- package/dist/service/io/MediaAssetReferences.d.ts.map +1 -0
- package/dist/service/io/MediaAssetReferences.js +48 -0
- package/dist/service/io/MediaAssetReferences.js.map +1 -0
- package/dist/usecase/ComposeEntrySeoMetaUseCase.d.ts +29 -0
- package/dist/usecase/ComposeEntrySeoMetaUseCase.d.ts.map +1 -0
- package/dist/usecase/ComposeEntrySeoMetaUseCase.js +66 -0
- package/dist/usecase/ComposeEntrySeoMetaUseCase.js.map +1 -0
- package/dist/usecase/ComposeLlmsTxtUseCase.d.ts +18 -0
- package/dist/usecase/ComposeLlmsTxtUseCase.d.ts.map +1 -0
- package/dist/usecase/ComposeLlmsTxtUseCase.js +47 -0
- package/dist/usecase/ComposeLlmsTxtUseCase.js.map +1 -0
- package/dist/usecase/ComposeSitemapUseCase.d.ts +15 -0
- package/dist/usecase/ComposeSitemapUseCase.d.ts.map +1 -0
- package/dist/usecase/ComposeSitemapUseCase.js +38 -0
- package/dist/usecase/ComposeSitemapUseCase.js.map +1 -0
- package/dist/usecase/PreviewEntryUseCase.d.ts +28 -0
- package/dist/usecase/PreviewEntryUseCase.d.ts.map +1 -0
- package/dist/usecase/PreviewEntryUseCase.js +72 -0
- package/dist/usecase/PreviewEntryUseCase.js.map +1 -0
- package/dist/usecase/RenderEntryLiveUseCase.d.ts +36 -0
- package/dist/usecase/RenderEntryLiveUseCase.d.ts.map +1 -0
- package/dist/usecase/RenderEntryLiveUseCase.js +62 -0
- package/dist/usecase/RenderEntryLiveUseCase.js.map +1 -0
- package/dist/usecase/RenderListLiveUseCase.d.ts +25 -0
- package/dist/usecase/RenderListLiveUseCase.d.ts.map +1 -0
- package/dist/usecase/RenderListLiveUseCase.js +46 -0
- package/dist/usecase/RenderListLiveUseCase.js.map +1 -0
- package/dist/usecase/index.d.ts +7 -0
- package/dist/usecase/index.d.ts.map +1 -0
- package/dist/usecase/index.js +7 -0
- package/dist/usecase/index.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComposeLlmsTxtUseCase.js","sourceRoot":"","sources":["../../src/usecase/ComposeLlmsTxtUseCase.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAGpE;;;;;;;GAOG;AACH,MAAM,OAAO,qBAAqB;IAEb;IACA;IAFnB,YACmB,MAAmB,EACnB,KAAgC;QADhC,WAAM,GAAN,MAAM,CAAa;QACnB,UAAK,GAAL,KAAK,CAA2B;IAChD,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,OAA8B;QAC1C,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAC7B,MAAM,KAAK,GAAG,CAAC,MAAqB,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;YACjE,MAAM;YACN,UAAU,EAAE,OAAO,CAAC,UAAU;SAC/B,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC,kBAAkB;YACnE,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;YAClE,CAAC,CAAC,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAChC,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC3C,OAAO,gBAAgB,CAAC;YACtB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;YAC5B,mBAAmB,EAAE,OAAO;YAC5B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SACrE,CAAC,CAAC;IACL,CAAC;CACF;AAED,SAAS,iBAAiB,CAAC,OAAyB;IAClD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAmB,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAClC,IAAI,GAAG;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;YAChB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { EntryReader } from "@aotter/mantle-runtime";
|
|
2
|
+
import type { ComposeSitemapRequest } from "../dto/ComposeSitemapRequest.js";
|
|
3
|
+
/**
|
|
4
|
+
* Compose `sitemap.xml` from every published entry across all
|
|
5
|
+
* collections + locales. Result is XML text; consumer routes it as
|
|
6
|
+
* `application/xml`. See ComposeSitemapRequest for the pathFor +
|
|
7
|
+
* maxUrls knobs.
|
|
8
|
+
*/
|
|
9
|
+
export declare const SITEMAP_MAX_URLS_DEFAULT = 50000;
|
|
10
|
+
export declare class ComposeSitemapUseCase {
|
|
11
|
+
private readonly reader;
|
|
12
|
+
constructor(reader: EntryReader);
|
|
13
|
+
execute(request: ComposeSitemapRequest): Promise<string>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=ComposeSitemapUseCase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComposeSitemapUseCase.d.ts","sourceRoot":"","sources":["../../src/usecase/ComposeSitemapUseCase.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAE7E;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,QAAQ,CAAC;AAE9C,qBAAa,qBAAqB;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,WAAW;IAE1C,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC;CAoB/D"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { entryPublicPath } from "../service/PublicPathResolver.js";
|
|
2
|
+
import { serializeSitemap } from "../service/SitemapSerializer.js";
|
|
3
|
+
/**
|
|
4
|
+
* Compose `sitemap.xml` from every published entry across all
|
|
5
|
+
* collections + locales. Result is XML text; consumer routes it as
|
|
6
|
+
* `application/xml`. See ComposeSitemapRequest for the pathFor +
|
|
7
|
+
* maxUrls knobs.
|
|
8
|
+
*/
|
|
9
|
+
export const SITEMAP_MAX_URLS_DEFAULT = 50000;
|
|
10
|
+
export class ComposeSitemapUseCase {
|
|
11
|
+
reader;
|
|
12
|
+
constructor(reader) {
|
|
13
|
+
this.reader = reader;
|
|
14
|
+
}
|
|
15
|
+
async execute(request) {
|
|
16
|
+
const cap = request.maxUrls ?? SITEMAP_MAX_URLS_DEFAULT;
|
|
17
|
+
const all = await this.reader.readPublished({ limit: cap });
|
|
18
|
+
const mapper = request.pathFor ?? entryPublicPath;
|
|
19
|
+
const entries = [];
|
|
20
|
+
const seen = new Set();
|
|
21
|
+
const push = (path, entry) => {
|
|
22
|
+
if (seen.has(path))
|
|
23
|
+
return;
|
|
24
|
+
seen.add(path);
|
|
25
|
+
entries.push(entry ? { entry, path } : { path });
|
|
26
|
+
};
|
|
27
|
+
for (const path of request.additionalPaths ?? [])
|
|
28
|
+
push(path);
|
|
29
|
+
for (const e of all) {
|
|
30
|
+
const mapped = mapper(e);
|
|
31
|
+
for (const path of mapped === null ? [] : typeof mapped === "string" ? [mapped] : mapped) {
|
|
32
|
+
push(path, e);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return serializeSitemap({ site: request.site, entries });
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=ComposeSitemapUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComposeSitemapUseCase.js","sourceRoot":"","sources":["../../src/usecase/ComposeSitemapUseCase.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAGnE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAE9C,MAAM,OAAO,qBAAqB;IACH;IAA7B,YAA6B,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;IAAG,CAAC;IAEpD,KAAK,CAAC,OAAO,CAAC,OAA8B;QAC1C,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,IAAI,wBAAwB,CAAC;QACxD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,IAAI,eAAe,CAAC;QAClD,MAAM,OAAO,GAAsC,EAAE,CAAC;QACtD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,KAAa,EAAQ,EAAE;YACjD,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO;YAC3B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,eAAe,IAAI,EAAE;YAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACzB,KAAK,MAAM,IAAI,IAAI,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;gBACzF,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAChB,CAAC;QACH,CAAC;QACD,OAAO,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAC3D,CAAC;CACF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { SchemaManifest } from "@aotter/mantle-spec";
|
|
2
|
+
import { type EntryReader } from "@aotter/mantle-runtime";
|
|
3
|
+
import type { TemplateRegistry } from "../model/TemplateRegistry.js";
|
|
4
|
+
import type { PublicPathResolver } from "../service/PublicPathResolver.js";
|
|
5
|
+
import type { PreviewEntryRequest } from "../dto/PreviewEntryRequest.js";
|
|
6
|
+
import { type ComposeEntrySeoMetaUseCase } from "./ComposeEntrySeoMetaUseCase.js";
|
|
7
|
+
import { type MediaAssetResolver } from "../service/io/MediaAssetReferences.js";
|
|
8
|
+
/**
|
|
9
|
+
* Render an entry with a preview banner. Walks the default status order until a
|
|
10
|
+
* matching row is found, renders via the registered template, then
|
|
11
|
+
* injects the banner just inside `<body>`. Returns `null` when no
|
|
12
|
+
* matching row exists or no template is registered.
|
|
13
|
+
*
|
|
14
|
+
* Composes SEO/AEO meta when the runtime was built with a
|
|
15
|
+
* `publicPathResolver` — preview pages match the meta the published
|
|
16
|
+
* version would carry, so authors see real shape during review.
|
|
17
|
+
*/
|
|
18
|
+
export declare class PreviewEntryUseCase {
|
|
19
|
+
private readonly reader;
|
|
20
|
+
private readonly templates;
|
|
21
|
+
private readonly paths;
|
|
22
|
+
private readonly composeSeo;
|
|
23
|
+
private readonly schemas;
|
|
24
|
+
private readonly mediaAssets;
|
|
25
|
+
constructor(reader: EntryReader, templates: TemplateRegistry, paths: PublicPathResolver | null, composeSeo: Pick<ComposeEntrySeoMetaUseCase, "execute">, schemas: ReadonlyMap<string, SchemaManifest>, mediaAssets?: MediaAssetResolver | null);
|
|
26
|
+
execute(request: PreviewEntryRequest): Promise<string | null>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=PreviewEntryUseCase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PreviewEntryUseCase.d.ts","sourceRoot":"","sources":["../../src/usecase/PreviewEntryUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAM3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,uCAAuC,CAAC;AAU/C;;;;;;;;;GASG;AACH,qBAAa,mBAAmB;IAE5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBALX,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,gBAAgB,EAC3B,KAAK,EAAE,kBAAkB,GAAG,IAAI,EAChC,UAAU,EAAE,IAAI,CAAC,0BAA0B,EAAE,SAAS,CAAC,EACvD,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,EAC5C,WAAW,GAAE,kBAAkB,GAAG,IAAW;IAG1D,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CA8BpE"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { joinParentIfTranslation, } from "@aotter/mantle-runtime";
|
|
2
|
+
import { renderEntryHtml } from "../service/HtmlRenderer.js";
|
|
3
|
+
import { defaultPreviewBanner, injectPreviewBanner, } from "../service/PreviewBanner.js";
|
|
4
|
+
import { composeSeoIfPathed, } from "./ComposeEntrySeoMetaUseCase.js";
|
|
5
|
+
import { resolveMediaAssetsForEntries, } from "../service/io/MediaAssetReferences.js";
|
|
6
|
+
/** Default fallback: prefer drafts, fall back to published, then
|
|
7
|
+
* archived. Authors typically open `?preview=1` to see WIP. */
|
|
8
|
+
const DEFAULT_PREVIEW_STATUS_ORDER = [
|
|
9
|
+
"draft",
|
|
10
|
+
"published",
|
|
11
|
+
"archived",
|
|
12
|
+
];
|
|
13
|
+
/**
|
|
14
|
+
* Render an entry with a preview banner. Walks the default status order until a
|
|
15
|
+
* matching row is found, renders via the registered template, then
|
|
16
|
+
* injects the banner just inside `<body>`. Returns `null` when no
|
|
17
|
+
* matching row exists or no template is registered.
|
|
18
|
+
*
|
|
19
|
+
* Composes SEO/AEO meta when the runtime was built with a
|
|
20
|
+
* `publicPathResolver` — preview pages match the meta the published
|
|
21
|
+
* version would carry, so authors see real shape during review.
|
|
22
|
+
*/
|
|
23
|
+
export class PreviewEntryUseCase {
|
|
24
|
+
reader;
|
|
25
|
+
templates;
|
|
26
|
+
paths;
|
|
27
|
+
composeSeo;
|
|
28
|
+
schemas;
|
|
29
|
+
mediaAssets;
|
|
30
|
+
constructor(reader, templates, paths, composeSeo, schemas, mediaAssets = null) {
|
|
31
|
+
this.reader = reader;
|
|
32
|
+
this.templates = templates;
|
|
33
|
+
this.paths = paths;
|
|
34
|
+
this.composeSeo = composeSeo;
|
|
35
|
+
this.schemas = schemas;
|
|
36
|
+
this.mediaAssets = mediaAssets;
|
|
37
|
+
}
|
|
38
|
+
async execute(request) {
|
|
39
|
+
let raw = null;
|
|
40
|
+
for (const status of DEFAULT_PREVIEW_STATUS_ORDER) {
|
|
41
|
+
raw = await this.reader.readBySlug({
|
|
42
|
+
collection: request.collection,
|
|
43
|
+
slug: request.slug,
|
|
44
|
+
locale: request.contentLocale === undefined ? request.locale : request.contentLocale,
|
|
45
|
+
status,
|
|
46
|
+
});
|
|
47
|
+
if (raw)
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
if (!raw)
|
|
51
|
+
return null;
|
|
52
|
+
// Preview can show drafts; parent lookup intentionally omits status
|
|
53
|
+
// filter so a draft translation can still preview against its
|
|
54
|
+
// already-published parent. RequestPublishUseCase enforces the
|
|
55
|
+
// published-parent invariant at publish time.
|
|
56
|
+
const entry = await joinParentIfTranslation(this.reader, this.schemas, raw);
|
|
57
|
+
const seo = await composeSeoIfPathed(this.composeSeo, this.paths, entry, request.site, request);
|
|
58
|
+
const mediaAssets = await resolveMediaAssetsForEntries(this.mediaAssets, [entry]);
|
|
59
|
+
const html = renderEntryHtml({
|
|
60
|
+
entry,
|
|
61
|
+
site: request.site,
|
|
62
|
+
templates: this.templates,
|
|
63
|
+
mediaAssets,
|
|
64
|
+
seo,
|
|
65
|
+
});
|
|
66
|
+
if (html === null)
|
|
67
|
+
return null;
|
|
68
|
+
const banner = defaultPreviewBanner(entry.status, request.slug);
|
|
69
|
+
return injectPreviewBanner(html, banner);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=PreviewEntryUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PreviewEntryUseCase.js","sourceRoot":"","sources":["../../src/usecase/PreviewEntryUseCase.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,GAExB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,kBAAkB,GAEnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,4BAA4B,GAE7B,MAAM,uCAAuC,CAAC;AAE/C;gEACgE;AAChE,MAAM,4BAA4B,GAAgC;IAChE,OAAO;IACP,WAAW;IACX,UAAU;CACX,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,OAAO,mBAAmB;IAEX;IACA;IACA;IACA;IACA;IACA;IANnB,YACmB,MAAmB,EACnB,SAA2B,EAC3B,KAAgC,EAChC,UAAuD,EACvD,OAA4C,EAC5C,cAAyC,IAAI;QAL7C,WAAM,GAAN,MAAM,CAAa;QACnB,cAAS,GAAT,SAAS,CAAkB;QAC3B,UAAK,GAAL,KAAK,CAA2B;QAChC,eAAU,GAAV,UAAU,CAA6C;QACvD,YAAO,GAAP,OAAO,CAAqC;QAC5C,gBAAW,GAAX,WAAW,CAAkC;IAC7D,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,OAA4B;QACxC,IAAI,GAAG,GAAiB,IAAI,CAAC;QAC7B,KAAK,MAAM,MAAM,IAAI,4BAA4B,EAAE,CAAC;YAClD,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;gBACjC,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,OAAO,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa;gBACpF,MAAM;aACP,CAAC,CAAC;YACH,IAAI,GAAG;gBAAE,MAAM;QACjB,CAAC;QACD,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,oEAAoE;QACpE,8DAA8D;QAC9D,+DAA+D;QAC/D,8CAA8C;QAC9C,MAAM,KAAK,GAAG,MAAM,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC5E,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAChG,MAAM,WAAW,GAAG,MAAM,4BAA4B,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QAClF,MAAM,IAAI,GAAG,eAAe,CAAC;YAC3B,KAAK;YACL,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW;YACX,GAAG;SACJ,CAAC,CAAC;QACH,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC/B,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAChE,OAAO,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;CACF"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { SchemaManifest } from "@aotter/mantle-spec";
|
|
2
|
+
import { type EntryReader } from "@aotter/mantle-runtime";
|
|
3
|
+
import type { TemplateRegistry } from "../model/TemplateRegistry.js";
|
|
4
|
+
import type { PublicPathResolver } from "../service/PublicPathResolver.js";
|
|
5
|
+
import type { RenderEntryLiveRequest } from "../dto/RenderEntryLiveRequest.js";
|
|
6
|
+
import { type ComposeEntrySeoMetaUseCase } from "./ComposeEntrySeoMetaUseCase.js";
|
|
7
|
+
import { type MediaAssetResolver } from "../service/io/MediaAssetReferences.js";
|
|
8
|
+
/**
|
|
9
|
+
* Render a single entry from current canonical DB state. Public and
|
|
10
|
+
* live-dev routes share this path; adapters decide the HTTP cache policy.
|
|
11
|
+
*
|
|
12
|
+
* When the runtime was built with a `publicPathResolver`, the SEO/AEO
|
|
13
|
+
* meta block is composed and threaded into `EntryContext.seo` — so
|
|
14
|
+
* rendered HTML includes canonical and sibling metadata.
|
|
15
|
+
*
|
|
16
|
+
* When the entry belongs to a collection with `translates.parent`,
|
|
17
|
+
* the parent's data is merged into the translation's data (ADR-0010)
|
|
18
|
+
* before rendering, so template fields living on the parent
|
|
19
|
+
* (`coverUrl`, `authorId`, `publishedAt`) reach the template.
|
|
20
|
+
*
|
|
21
|
+
* Returns the full HTML document, or `null` when:
|
|
22
|
+
* - no entry matches `(collection, slug, locale, status)`
|
|
23
|
+
* - the collection has no registered entry template
|
|
24
|
+
* Adapters map `null` to a 404 response.
|
|
25
|
+
*/
|
|
26
|
+
export declare class RenderEntryLiveUseCase {
|
|
27
|
+
private readonly reader;
|
|
28
|
+
private readonly templates;
|
|
29
|
+
private readonly paths;
|
|
30
|
+
private readonly composeSeo;
|
|
31
|
+
private readonly schemas;
|
|
32
|
+
private readonly mediaAssets;
|
|
33
|
+
constructor(reader: EntryReader, templates: TemplateRegistry, paths: PublicPathResolver | null, composeSeo: Pick<ComposeEntrySeoMetaUseCase, "execute">, schemas: ReadonlyMap<string, SchemaManifest>, mediaAssets?: MediaAssetResolver | null);
|
|
34
|
+
execute(request: RenderEntryLiveRequest): Promise<string | null>;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=RenderEntryLiveUseCase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RenderEntryLiveUseCase.d.ts","sourceRoot":"","sources":["../../src/usecase/RenderEntryLiveUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAE3E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,uCAAuC,CAAC;AAE/C;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,sBAAsB;IAE/B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBALX,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,gBAAgB,EAC3B,KAAK,EAAE,kBAAkB,GAAG,IAAI,EAChC,UAAU,EAAE,IAAI,CAAC,0BAA0B,EAAE,SAAS,CAAC,EACvD,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,EAC5C,WAAW,GAAE,kBAAkB,GAAG,IAAW;IAG1D,OAAO,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAsBvE"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { joinParentIfTranslation, } from "@aotter/mantle-runtime";
|
|
2
|
+
import { renderEntryHtml } from "../service/HtmlRenderer.js";
|
|
3
|
+
import { composeSeoIfPathed, } from "./ComposeEntrySeoMetaUseCase.js";
|
|
4
|
+
import { resolveMediaAssetsForEntries, } from "../service/io/MediaAssetReferences.js";
|
|
5
|
+
/**
|
|
6
|
+
* Render a single entry from current canonical DB state. Public and
|
|
7
|
+
* live-dev routes share this path; adapters decide the HTTP cache policy.
|
|
8
|
+
*
|
|
9
|
+
* When the runtime was built with a `publicPathResolver`, the SEO/AEO
|
|
10
|
+
* meta block is composed and threaded into `EntryContext.seo` — so
|
|
11
|
+
* rendered HTML includes canonical and sibling metadata.
|
|
12
|
+
*
|
|
13
|
+
* When the entry belongs to a collection with `translates.parent`,
|
|
14
|
+
* the parent's data is merged into the translation's data (ADR-0010)
|
|
15
|
+
* before rendering, so template fields living on the parent
|
|
16
|
+
* (`coverUrl`, `authorId`, `publishedAt`) reach the template.
|
|
17
|
+
*
|
|
18
|
+
* Returns the full HTML document, or `null` when:
|
|
19
|
+
* - no entry matches `(collection, slug, locale, status)`
|
|
20
|
+
* - the collection has no registered entry template
|
|
21
|
+
* Adapters map `null` to a 404 response.
|
|
22
|
+
*/
|
|
23
|
+
export class RenderEntryLiveUseCase {
|
|
24
|
+
reader;
|
|
25
|
+
templates;
|
|
26
|
+
paths;
|
|
27
|
+
composeSeo;
|
|
28
|
+
schemas;
|
|
29
|
+
mediaAssets;
|
|
30
|
+
constructor(reader, templates, paths, composeSeo, schemas, mediaAssets = null) {
|
|
31
|
+
this.reader = reader;
|
|
32
|
+
this.templates = templates;
|
|
33
|
+
this.paths = paths;
|
|
34
|
+
this.composeSeo = composeSeo;
|
|
35
|
+
this.schemas = schemas;
|
|
36
|
+
this.mediaAssets = mediaAssets;
|
|
37
|
+
}
|
|
38
|
+
async execute(request) {
|
|
39
|
+
const status = "published";
|
|
40
|
+
const raw = await this.reader.readBySlug({
|
|
41
|
+
collection: request.collection,
|
|
42
|
+
slug: request.slug,
|
|
43
|
+
locale: request.contentLocale === undefined ? request.locale : request.contentLocale,
|
|
44
|
+
status,
|
|
45
|
+
});
|
|
46
|
+
if (!raw)
|
|
47
|
+
return null;
|
|
48
|
+
const entry = await joinParentIfTranslation(this.reader, this.schemas, raw, {
|
|
49
|
+
parentStatus: status,
|
|
50
|
+
});
|
|
51
|
+
const seo = await composeSeoIfPathed(this.composeSeo, this.paths, entry, request.site, request);
|
|
52
|
+
const mediaAssets = await resolveMediaAssetsForEntries(this.mediaAssets, [entry]);
|
|
53
|
+
return renderEntryHtml({
|
|
54
|
+
entry,
|
|
55
|
+
site: request.site,
|
|
56
|
+
templates: this.templates,
|
|
57
|
+
mediaAssets,
|
|
58
|
+
seo,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=RenderEntryLiveUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RenderEntryLiveUseCase.js","sourceRoot":"","sources":["../../src/usecase/RenderEntryLiveUseCase.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,GAExB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,EACL,kBAAkB,GAEnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,4BAA4B,GAE7B,MAAM,uCAAuC,CAAC;AAE/C;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,sBAAsB;IAEd;IACA;IACA;IACA;IACA;IACA;IANnB,YACmB,MAAmB,EACnB,SAA2B,EAC3B,KAAgC,EAChC,UAAuD,EACvD,OAA4C,EAC5C,cAAyC,IAAI;QAL7C,WAAM,GAAN,MAAM,CAAa;QACnB,cAAS,GAAT,SAAS,CAAkB;QAC3B,UAAK,GAAL,KAAK,CAA2B;QAChC,eAAU,GAAV,UAAU,CAA6C;QACvD,YAAO,GAAP,OAAO,CAAqC;QAC5C,gBAAW,GAAX,WAAW,CAAkC;IAC7D,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,OAA+B;QAC3C,MAAM,MAAM,GAAG,WAAW,CAAC;QAC3B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;YACvC,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,OAAO,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa;YACpF,MAAM;SACP,CAAC,CAAC;QACH,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,MAAM,KAAK,GAAG,MAAM,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YAC1E,YAAY,EAAE,MAAM;SACrB,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAChG,MAAM,WAAW,GAAG,MAAM,4BAA4B,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QAClF,OAAO,eAAe,CAAC;YACrB,KAAK;YACL,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW;YACX,GAAG;SACJ,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { SchemaManifest } from "@aotter/mantle-spec";
|
|
2
|
+
import { type EntryReader } from "@aotter/mantle-runtime";
|
|
3
|
+
import type { TemplateRegistry } from "../model/TemplateRegistry.js";
|
|
4
|
+
import type { RenderListLiveRequest } from "../dto/RenderListLiveRequest.js";
|
|
5
|
+
import { type MediaAssetResolver } from "../service/io/MediaAssetReferences.js";
|
|
6
|
+
/**
|
|
7
|
+
* Render a collection's list page from current DB state. Sibling to
|
|
8
|
+
* `RenderEntryLiveUseCase` for the post-list / page-list surfaces.
|
|
9
|
+
* Returns `null` when no list template is registered for the
|
|
10
|
+
* collection — adapters map to 404.
|
|
11
|
+
*
|
|
12
|
+
* Each entry is run through the parent-join (ADR-0010) before being
|
|
13
|
+
* passed to the list template, so list-item fields living on the
|
|
14
|
+
* parent (e.g. `posts.coverUrl` for a translations-list) reach the
|
|
15
|
+
* template the same way they do on the entry detail page.
|
|
16
|
+
*/
|
|
17
|
+
export declare class RenderListLiveUseCase {
|
|
18
|
+
private readonly reader;
|
|
19
|
+
private readonly templates;
|
|
20
|
+
private readonly schemas;
|
|
21
|
+
private readonly mediaAssets;
|
|
22
|
+
constructor(reader: EntryReader, templates: TemplateRegistry, schemas: ReadonlyMap<string, SchemaManifest>, mediaAssets?: MediaAssetResolver | null);
|
|
23
|
+
execute(request: RenderListLiveRequest): Promise<string | null>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=RenderListLiveUseCase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RenderListLiveUseCase.d.ts","sourceRoot":"","sources":["../../src/usecase/RenderListLiveUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAErE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,uCAAuC,CAAC;AAE/C;;;;;;;;;;GAUG;AACH,qBAAa,qBAAqB;IAE9B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAHX,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,gBAAgB,EAC3B,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,EAC5C,WAAW,GAAE,kBAAkB,GAAG,IAAW;IAG1D,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAmBtE"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { joinParentForList } from "@aotter/mantle-runtime";
|
|
2
|
+
import { renderListHtml } from "../service/HtmlRenderer.js";
|
|
3
|
+
import { resolveMediaAssetsForEntries, } from "../service/io/MediaAssetReferences.js";
|
|
4
|
+
/**
|
|
5
|
+
* Render a collection's list page from current DB state. Sibling to
|
|
6
|
+
* `RenderEntryLiveUseCase` for the post-list / page-list surfaces.
|
|
7
|
+
* Returns `null` when no list template is registered for the
|
|
8
|
+
* collection — adapters map to 404.
|
|
9
|
+
*
|
|
10
|
+
* Each entry is run through the parent-join (ADR-0010) before being
|
|
11
|
+
* passed to the list template, so list-item fields living on the
|
|
12
|
+
* parent (e.g. `posts.coverUrl` for a translations-list) reach the
|
|
13
|
+
* template the same way they do on the entry detail page.
|
|
14
|
+
*/
|
|
15
|
+
export class RenderListLiveUseCase {
|
|
16
|
+
reader;
|
|
17
|
+
templates;
|
|
18
|
+
schemas;
|
|
19
|
+
mediaAssets;
|
|
20
|
+
constructor(reader, templates, schemas, mediaAssets = null) {
|
|
21
|
+
this.reader = reader;
|
|
22
|
+
this.templates = templates;
|
|
23
|
+
this.schemas = schemas;
|
|
24
|
+
this.mediaAssets = mediaAssets;
|
|
25
|
+
}
|
|
26
|
+
async execute(request) {
|
|
27
|
+
const raw = await this.reader.readPublished({
|
|
28
|
+
collection: request.collection,
|
|
29
|
+
locale: request.contentLocale === undefined ? request.locale : request.contentLocale,
|
|
30
|
+
});
|
|
31
|
+
const entries = await joinParentForList(this.reader, this.schemas, raw, {
|
|
32
|
+
parentStatus: "published",
|
|
33
|
+
});
|
|
34
|
+
const mediaAssets = await resolveMediaAssetsForEntries(this.mediaAssets, entries);
|
|
35
|
+
return renderListHtml({
|
|
36
|
+
collection: request.collection,
|
|
37
|
+
locale: request.locale,
|
|
38
|
+
entries,
|
|
39
|
+
site: request.site,
|
|
40
|
+
templates: this.templates,
|
|
41
|
+
mediaAssets,
|
|
42
|
+
seo: request.seo,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=RenderListLiveUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RenderListLiveUseCase.js","sourceRoot":"","sources":["../../src/usecase/RenderListLiveUseCase.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAoB,MAAM,wBAAwB,CAAC;AAE7E,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EACL,4BAA4B,GAE7B,MAAM,uCAAuC,CAAC;AAE/C;;;;;;;;;;GAUG;AACH,MAAM,OAAO,qBAAqB;IAEb;IACA;IACA;IACA;IAJnB,YACmB,MAAmB,EACnB,SAA2B,EAC3B,OAA4C,EAC5C,cAAyC,IAAI;QAH7C,WAAM,GAAN,MAAM,CAAa;QACnB,cAAS,GAAT,SAAS,CAAkB;QAC3B,YAAO,GAAP,OAAO,CAAqC;QAC5C,gBAAW,GAAX,WAAW,CAAkC;IAC7D,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,OAA8B;QAC1C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;YAC1C,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,MAAM,EAAE,OAAO,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa;SACrF,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YACtE,YAAY,EAAE,WAAW;SAC1B,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,4BAA4B,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAClF,OAAO,cAAc,CAAC;YACpB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO;YACP,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW;YACX,GAAG,EAAE,OAAO,CAAC,GAAG;SACjB,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { ComposeLlmsTxtUseCase, } from "./ComposeLlmsTxtUseCase.js";
|
|
2
|
+
export { ComposeSitemapUseCase, SITEMAP_MAX_URLS_DEFAULT, } from "./ComposeSitemapUseCase.js";
|
|
3
|
+
export { RenderEntryLiveUseCase } from "./RenderEntryLiveUseCase.js";
|
|
4
|
+
export { RenderListLiveUseCase } from "./RenderListLiveUseCase.js";
|
|
5
|
+
export { PreviewEntryUseCase } from "./PreviewEntryUseCase.js";
|
|
6
|
+
export { ComposeEntrySeoMetaUseCase, composeSeoIfPathed, } from "./ComposeEntrySeoMetaUseCase.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/usecase/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,GACtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EACL,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,iCAAiC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { ComposeLlmsTxtUseCase, } from "./ComposeLlmsTxtUseCase.js";
|
|
2
|
+
export { ComposeSitemapUseCase, SITEMAP_MAX_URLS_DEFAULT, } from "./ComposeSitemapUseCase.js";
|
|
3
|
+
export { RenderEntryLiveUseCase } from "./RenderEntryLiveUseCase.js";
|
|
4
|
+
export { RenderListLiveUseCase } from "./RenderListLiveUseCase.js";
|
|
5
|
+
export { PreviewEntryUseCase } from "./PreviewEntryUseCase.js";
|
|
6
|
+
export { ComposeEntrySeoMetaUseCase, composeSeoIfPathed, } from "./ComposeEntrySeoMetaUseCase.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/usecase/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,GACtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EACL,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,iCAAiC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@aotter/mantle-web",
|
|
3
|
+
"version": "0.1.0-alpha.8",
|
|
4
|
+
"description": "Optional public document composition for Mantle: HTML, Markdown, llms.txt, sitemap, SEO, and preview.",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"homepage": "https://mantle.tools/",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/aotter/mantle.git",
|
|
10
|
+
"directory": "packages/mantle-web"
|
|
11
|
+
},
|
|
12
|
+
"type": "module",
|
|
13
|
+
"sideEffects": false,
|
|
14
|
+
"publishConfig": {
|
|
15
|
+
"access": "public",
|
|
16
|
+
"tag": "alpha",
|
|
17
|
+
"registry": "https://registry.npmjs.org"
|
|
18
|
+
},
|
|
19
|
+
"main": "./dist/index.js",
|
|
20
|
+
"types": "./dist/index.d.ts",
|
|
21
|
+
"exports": {
|
|
22
|
+
".": {
|
|
23
|
+
"types": "./dist/index.d.ts",
|
|
24
|
+
"import": "./dist/index.js"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"files": [
|
|
28
|
+
"dist",
|
|
29
|
+
"README.md"
|
|
30
|
+
],
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"@aotter/mantle-runtime": "0.1.0-alpha.8",
|
|
33
|
+
"@aotter/mantle-spec": "0.1.0-alpha.8"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@types/node": "^26",
|
|
37
|
+
"typescript": "^6.0.3",
|
|
38
|
+
"vitest": "^4.1.10"
|
|
39
|
+
},
|
|
40
|
+
"scripts": {
|
|
41
|
+
"prebuild": "rm -rf dist .tsbuildinfo",
|
|
42
|
+
"build": "tsc -b tsconfig.lib.json",
|
|
43
|
+
"typecheck": "tsc --noEmit -p tsconfig.lib.json",
|
|
44
|
+
"test": "vitest run"
|
|
45
|
+
}
|
|
46
|
+
}
|