@aotter/mantle-runtime 0.0.11-alpha.13 → 0.0.11-alpha.15
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/dist/domain/model/TemplateRegistry.d.ts +3 -0
- package/dist/domain/model/TemplateRegistry.d.ts.map +1 -1
- package/dist/domain/model/TemplateRegistry.js.map +1 -1
- package/dist/domain/port/MediaAssetRepository.d.ts +34 -0
- package/dist/domain/port/MediaAssetRepository.d.ts.map +1 -0
- package/dist/domain/port/MediaAssetRepository.js +2 -0
- package/dist/domain/port/MediaAssetRepository.js.map +1 -0
- package/dist/domain/port/MediaStorage.d.ts +159 -44
- package/dist/domain/port/MediaStorage.d.ts.map +1 -1
- package/dist/domain/port/MediaStorage.js +12 -1
- package/dist/domain/port/MediaStorage.js.map +1 -1
- package/dist/domain/port/SiteConfigRepository.d.ts +2 -2
- package/dist/domain/port/SiteConfigRepository.d.ts.map +1 -1
- package/dist/domain/port/index.d.ts +3 -1
- package/dist/domain/port/index.d.ts.map +1 -1
- package/dist/domain/port/index.js +1 -0
- package/dist/domain/port/index.js.map +1 -1
- package/dist/domain/service/HtmlRenderer.d.ts +3 -0
- package/dist/domain/service/HtmlRenderer.d.ts.map +1 -1
- package/dist/domain/service/HtmlRenderer.js +7 -1
- package/dist/domain/service/HtmlRenderer.js.map +1 -1
- package/dist/domain/service/io/MediaAssetReferences.d.ts +13 -0
- package/dist/domain/service/io/MediaAssetReferences.d.ts.map +1 -0
- package/dist/domain/service/io/MediaAssetReferences.js +48 -0
- package/dist/domain/service/io/MediaAssetReferences.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/boot/canonicalMigrations.d.ts.map +1 -1
- package/dist/infrastructure/boot/canonicalMigrations.js +17 -0
- package/dist/infrastructure/boot/canonicalMigrations.js.map +1 -1
- package/dist/infrastructure/mcp/McpJsonRpcDispatcher.d.ts +9 -5
- package/dist/infrastructure/mcp/McpJsonRpcDispatcher.d.ts.map +1 -1
- package/dist/infrastructure/mcp/McpJsonRpcDispatcher.js +84 -11
- package/dist/infrastructure/mcp/McpJsonRpcDispatcher.js.map +1 -1
- package/dist/infrastructure/mcp/McpToolCatalog.d.ts +8 -4
- package/dist/infrastructure/mcp/McpToolCatalog.d.ts.map +1 -1
- package/dist/infrastructure/mcp/McpToolCatalog.js +108 -24
- package/dist/infrastructure/mcp/McpToolCatalog.js.map +1 -1
- package/dist/infrastructure/persistence/DatabaseMediaAssetRepository.d.ts +27 -0
- package/dist/infrastructure/persistence/DatabaseMediaAssetRepository.d.ts.map +1 -0
- package/dist/infrastructure/persistence/DatabaseMediaAssetRepository.js +80 -0
- package/dist/infrastructure/persistence/DatabaseMediaAssetRepository.js.map +1 -0
- package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.d.ts +2 -2
- package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.d.ts.map +1 -1
- package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.js +24 -3
- package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.js.map +1 -1
- package/dist/infrastructure/persistence/index.d.ts +1 -0
- package/dist/infrastructure/persistence/index.d.ts.map +1 -1
- package/dist/infrastructure/persistence/index.js +1 -0
- package/dist/infrastructure/persistence/index.js.map +1 -1
- package/dist/infrastructure/render/HtmlPublishOrchestrator.d.ts +3 -1
- package/dist/infrastructure/render/HtmlPublishOrchestrator.d.ts.map +1 -1
- package/dist/infrastructure/render/HtmlPublishOrchestrator.js +8 -2
- package/dist/infrastructure/render/HtmlPublishOrchestrator.js.map +1 -1
- package/dist/runtime.d.ts +12 -4
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +12 -7
- package/dist/runtime.js.map +1 -1
- package/dist/usecase/dto/media/index.d.ts +42 -15
- package/dist/usecase/dto/media/index.d.ts.map +1 -1
- package/dist/usecase/dto/media/index.js +10 -3
- package/dist/usecase/dto/media/index.js.map +1 -1
- package/dist/usecase/media/CommitMediaUploadUseCase.d.ts +14 -4
- package/dist/usecase/media/CommitMediaUploadUseCase.d.ts.map +1 -1
- package/dist/usecase/media/CommitMediaUploadUseCase.js +30 -19
- package/dist/usecase/media/CommitMediaUploadUseCase.js.map +1 -1
- package/dist/usecase/media/CreateMediaUploadUseCase.d.ts +34 -2
- package/dist/usecase/media/CreateMediaUploadUseCase.d.ts.map +1 -1
- package/dist/usecase/media/CreateMediaUploadUseCase.js +184 -41
- package/dist/usecase/media/CreateMediaUploadUseCase.js.map +1 -1
- package/dist/usecase/media/PendingUploadRecord.d.ts +29 -10
- package/dist/usecase/media/PendingUploadRecord.d.ts.map +1 -1
- package/dist/usecase/media/UploadMediaVariantUseCase.d.ts +35 -0
- package/dist/usecase/media/UploadMediaVariantUseCase.d.ts.map +1 -0
- package/dist/usecase/media/UploadMediaVariantUseCase.js +75 -0
- package/dist/usecase/media/UploadMediaVariantUseCase.js.map +1 -0
- package/dist/usecase/media/diagnostics.d.ts +19 -2
- package/dist/usecase/media/diagnostics.d.ts.map +1 -1
- package/dist/usecase/media/diagnostics.js +66 -7
- package/dist/usecase/media/diagnostics.js.map +1 -1
- package/dist/usecase/media/index.d.ts +1 -0
- package/dist/usecase/media/index.d.ts.map +1 -1
- package/dist/usecase/media/index.js +1 -0
- package/dist/usecase/media/index.js.map +1 -1
- package/dist/usecase/media/mediaAllowlist.d.ts +1 -1
- package/dist/usecase/media/mediaAllowlist.d.ts.map +1 -1
- package/dist/usecase/media/mediaAllowlist.js +3 -0
- package/dist/usecase/media/mediaAllowlist.js.map +1 -1
- package/dist/usecase/render/PreviewEntryUseCase.d.ts +3 -1
- package/dist/usecase/render/PreviewEntryUseCase.d.ts.map +1 -1
- package/dist/usecase/render/PreviewEntryUseCase.js +6 -1
- package/dist/usecase/render/PreviewEntryUseCase.js.map +1 -1
- package/dist/usecase/render/RenderEntryLiveUseCase.d.ts +3 -1
- package/dist/usecase/render/RenderEntryLiveUseCase.d.ts.map +1 -1
- package/dist/usecase/render/RenderEntryLiveUseCase.js +6 -1
- package/dist/usecase/render/RenderEntryLiveUseCase.js.map +1 -1
- package/dist/usecase/render/RenderListLiveUseCase.d.ts +3 -1
- package/dist/usecase/render/RenderListLiveUseCase.d.ts.map +1 -1
- package/dist/usecase/render/RenderListLiveUseCase.js +6 -1
- package/dist/usecase/render/RenderListLiveUseCase.js.map +1 -1
- package/package.json +4 -4
|
@@ -17,7 +17,7 @@ export function mediaMimeRejectedDiagnostic(opPath, mime) {
|
|
|
17
17
|
severity: "error",
|
|
18
18
|
path: opPath,
|
|
19
19
|
value: mime,
|
|
20
|
-
expected: "one of: image/png, image/jpeg, image/webp, image/gif",
|
|
20
|
+
expected: "one of: image/png, image/jpeg, image/webp, image/avif, image/gif",
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
23
|
export function mediaSvgRejectedDiagnostic(opPath) {
|
|
@@ -41,26 +41,26 @@ export function mediaSizeExceededDiagnostic(opPath, byteSize, maxBytes) {
|
|
|
41
41
|
expected: `byteSize <= ${maxBytes}`,
|
|
42
42
|
});
|
|
43
43
|
}
|
|
44
|
-
export function mediaUploadExpiredDiagnostic(opPath,
|
|
44
|
+
export function mediaUploadExpiredDiagnostic(opPath, uploadGroupId) {
|
|
45
45
|
return makeDiagnostic({
|
|
46
46
|
code: "MEDIA_UPLOAD_EXPIRED",
|
|
47
47
|
phase: PHASE,
|
|
48
48
|
severity: "error",
|
|
49
49
|
path: opPath,
|
|
50
|
-
value:
|
|
50
|
+
value: uploadGroupId,
|
|
51
51
|
expected: "an active upload capability (TTL elapsed or never created)",
|
|
52
52
|
suggestion: "call create_media_upload again to get a fresh capability",
|
|
53
53
|
});
|
|
54
54
|
}
|
|
55
|
-
export function mediaObjectNotFoundDiagnostic(opPath,
|
|
55
|
+
export function mediaObjectNotFoundDiagnostic(opPath, uploadGroupId) {
|
|
56
56
|
return makeDiagnostic({
|
|
57
57
|
code: "MEDIA_OBJECT_NOT_FOUND",
|
|
58
58
|
phase: PHASE,
|
|
59
59
|
severity: "error",
|
|
60
60
|
path: opPath,
|
|
61
|
-
value:
|
|
62
|
-
expected: "
|
|
63
|
-
suggestion: "PUT
|
|
61
|
+
value: uploadGroupId,
|
|
62
|
+
expected: "every variant object PUT to the storage backend before commit",
|
|
63
|
+
suggestion: "PUT every variant's bytes to its uploadUrl before calling commit_media_upload",
|
|
64
64
|
});
|
|
65
65
|
}
|
|
66
66
|
/** Caller supplied a `purpose` that this deployment did not declare in
|
|
@@ -85,4 +85,63 @@ export function mediaPurposeRejectedDiagnostic(opPath, purpose, declared) {
|
|
|
85
85
|
: "add `media.purposes` to `siteDefaults` in mantleConfig.ts to enable uploads",
|
|
86
86
|
});
|
|
87
87
|
}
|
|
88
|
+
/** Caller's variants manifest is missing one or more mimes the
|
|
89
|
+
* purpose policy declares as required. The expected field carries
|
|
90
|
+
* the declared required set + the supplied set so the agent script
|
|
91
|
+
* can self-correct without another round trip. */
|
|
92
|
+
export function mediaVariantsIncompleteDiagnostic(opPath, purpose, required, supplied) {
|
|
93
|
+
const missing = required.filter((m) => !supplied.includes(m));
|
|
94
|
+
return makeDiagnostic({
|
|
95
|
+
code: "MEDIA_VARIANTS_INCOMPLETE",
|
|
96
|
+
phase: PHASE,
|
|
97
|
+
severity: "error",
|
|
98
|
+
path: opPath,
|
|
99
|
+
value: supplied,
|
|
100
|
+
expected: `variants covering every required mime for purpose '${purpose}': ` +
|
|
101
|
+
`${required.join(", ")}`,
|
|
102
|
+
suggestion: `add the missing variant(s): ${missing.join(", ")}`,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
export function mediaVariantSizeExceededDiagnostic(opPath, mime, byteSize, maxBytes) {
|
|
106
|
+
return makeDiagnostic({
|
|
107
|
+
code: "MEDIA_VARIANT_SIZE_EXCEEDED",
|
|
108
|
+
phase: PHASE,
|
|
109
|
+
severity: "error",
|
|
110
|
+
path: opPath,
|
|
111
|
+
value: { mimeType: mime, byteSize },
|
|
112
|
+
expected: `${mime} byteSize <= ${maxBytes}`,
|
|
113
|
+
suggestion: "re-encode this variant with a smaller target size (sharp / libvips quality knob)",
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Variant byte sizes don't match the format hierarchy the uploader
|
|
118
|
+
* promised — typically avif > webp > jpeg (each modern format
|
|
119
|
+
* smaller). When the upload manifest claims a modern format that's
|
|
120
|
+
* larger than the universal-fallback (e.g. `avif` weighing more than
|
|
121
|
+
* `jpeg`), the uploader almost certainly skipped optimization for
|
|
122
|
+
* that variant. Fail hard rather than emit a `<picture>` that's
|
|
123
|
+
* slower than the bare `<img>` fallback.
|
|
124
|
+
*/
|
|
125
|
+
export function mediaVariantsSuspiciousSizeDiagnostic(opPath, detail) {
|
|
126
|
+
return makeDiagnostic({
|
|
127
|
+
code: "MEDIA_VARIANTS_SUSPICIOUS_SIZE",
|
|
128
|
+
phase: PHASE,
|
|
129
|
+
severity: "error",
|
|
130
|
+
path: opPath,
|
|
131
|
+
expected: "modern formats no larger than their fallback (e.g. avif <= jpeg, webp <= jpeg)",
|
|
132
|
+
value: detail,
|
|
133
|
+
suggestion: "run @aotter/mantle-media-tools' optimize step before upload — the modern variant looks unprocessed",
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
export function mediaAssetNotFoundDiagnostic(opPath, id) {
|
|
137
|
+
return makeDiagnostic({
|
|
138
|
+
code: "MEDIA_ASSET_NOT_FOUND",
|
|
139
|
+
phase: PHASE,
|
|
140
|
+
severity: "error",
|
|
141
|
+
path: opPath,
|
|
142
|
+
value: id,
|
|
143
|
+
expected: "a row in media_assets matching this id",
|
|
144
|
+
suggestion: "verify the asset id matches a successful commit_media_upload response, and that the asset hasn't been deleted",
|
|
145
|
+
});
|
|
146
|
+
}
|
|
88
147
|
//# sourceMappingURL=diagnostics.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../../src/usecase/media/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAmB,MAAM,qBAAqB,CAAC;AAEtE,MAAM,KAAK,GAAG,SAAkB,CAAC;AAEjC,MAAM,UAAU,4BAA4B,CAAC,MAAc;IACzD,OAAO,cAAc,CAAC;QACpB,IAAI,EAAE,sBAAsB;QAC5B,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,wCAAwC;QAClD,OAAO,EACL,kHAAkH;KACrH,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAAc,EAAE,IAAY;IACtE,OAAO,cAAc,CAAC;QACpB,IAAI,EAAE,qBAAqB;QAC3B,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../../src/usecase/media/diagnostics.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { CreateMediaUploadUseCase } from "./CreateMediaUploadUseCase.js";
|
|
2
2
|
export { CommitMediaUploadUseCase } from "./CommitMediaUploadUseCase.js";
|
|
3
|
+
export { UploadMediaVariantUseCase } from "./UploadMediaVariantUseCase.js";
|
|
3
4
|
export { DEFAULT_MAX_BYTES, MEDIA_MIME_ALLOWLIST, MEDIA_SVG_MIME, PENDING_UPLOAD_KV_PREFIX, PENDING_UPLOAD_KV_TTL_SECONDS, UPLOAD_URL_TTL_SECONDS, extensionForMime, isAllowedMime, type MediaMimeType, } from "./mediaAllowlist.js";
|
|
4
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/usecase/media/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,wBAAwB,EACxB,6BAA6B,EAC7B,sBAAsB,EACtB,gBAAgB,EAChB,aAAa,EACb,KAAK,aAAa,GACnB,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/usecase/media/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,wBAAwB,EACxB,6BAA6B,EAC7B,sBAAsB,EACtB,gBAAgB,EAChB,aAAa,EACb,KAAK,aAAa,GACnB,MAAM,qBAAqB,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { CreateMediaUploadUseCase } from "./CreateMediaUploadUseCase.js";
|
|
2
2
|
export { CommitMediaUploadUseCase } from "./CommitMediaUploadUseCase.js";
|
|
3
|
+
export { UploadMediaVariantUseCase } from "./UploadMediaVariantUseCase.js";
|
|
3
4
|
export { DEFAULT_MAX_BYTES, MEDIA_MIME_ALLOWLIST, MEDIA_SVG_MIME, PENDING_UPLOAD_KV_PREFIX, PENDING_UPLOAD_KV_TTL_SECONDS, UPLOAD_URL_TTL_SECONDS, extensionForMime, isAllowedMime, } from "./mediaAllowlist.js";
|
|
4
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/usecase/media/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,wBAAwB,EACxB,6BAA6B,EAC7B,sBAAsB,EACtB,gBAAgB,EAChB,aAAa,GAEd,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/usecase/media/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,wBAAwB,EACxB,6BAA6B,EAC7B,sBAAsB,EACtB,gBAAgB,EAChB,aAAa,GAEd,MAAM,qBAAqB,CAAC"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* uploads are only accepted when the adapter wires the use case with
|
|
8
8
|
* `allowSvg: true`, typically from a `MEDIA_ALLOW_SVG=1` env opt-in.
|
|
9
9
|
*/
|
|
10
|
-
export declare const MEDIA_MIME_ALLOWLIST: readonly ["image/png", "image/jpeg", "image/webp", "image/gif"];
|
|
10
|
+
export declare const MEDIA_MIME_ALLOWLIST: readonly ["image/png", "image/jpeg", "image/webp", "image/avif", "image/gif"];
|
|
11
11
|
export declare const MEDIA_SVG_MIME: "image/svg+xml";
|
|
12
12
|
export type MediaMimeType = (typeof MEDIA_MIME_ALLOWLIST)[number] | typeof MEDIA_SVG_MIME;
|
|
13
13
|
export declare function isAllowedMime(mime: string, allowSvg: boolean): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mediaAllowlist.d.ts","sourceRoot":"","sources":["../../../src/usecase/media/mediaAllowlist.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"mediaAllowlist.d.ts","sourceRoot":"","sources":["../../../src/usecase/media/mediaAllowlist.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,+EAMvB,CAAC;AAEX,eAAO,MAAM,cAAc,EAAG,eAAwB,CAAC;AAEvD,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,cAAc,CAAC;AAE1F,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAGtE;AAED;;;sDAGsD;AACtD,eAAO,MAAM,iBAAiB,QAAmB,CAAC;AAElD,oEAAoE;AACpE,eAAO,MAAM,sBAAsB,QAAU,CAAC;AAE9C;;kBAEkB;AAClB,eAAO,MAAM,6BAA6B,QAAU,CAAC;AAErD,eAAO,MAAM,wBAAwB,mBAAmB,CAAC;AAEzD;;sDAEsD;AACtD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAiBrD"}
|
|
@@ -11,6 +11,7 @@ export const MEDIA_MIME_ALLOWLIST = [
|
|
|
11
11
|
"image/png",
|
|
12
12
|
"image/jpeg",
|
|
13
13
|
"image/webp",
|
|
14
|
+
"image/avif",
|
|
14
15
|
"image/gif",
|
|
15
16
|
];
|
|
16
17
|
export const MEDIA_SVG_MIME = "image/svg+xml";
|
|
@@ -42,6 +43,8 @@ export function extensionForMime(mime) {
|
|
|
42
43
|
return "jpg";
|
|
43
44
|
case "image/webp":
|
|
44
45
|
return "webp";
|
|
46
|
+
case "image/avif":
|
|
47
|
+
return "avif";
|
|
45
48
|
case "image/gif":
|
|
46
49
|
return "gif";
|
|
47
50
|
case MEDIA_SVG_MIME:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mediaAllowlist.js","sourceRoot":"","sources":["../../../src/usecase/media/mediaAllowlist.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,WAAW;CACH,CAAC;AAEX,MAAM,CAAC,MAAM,cAAc,GAAG,eAAwB,CAAC;AAIvD,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,QAAiB;IAC3D,IAAI,IAAI,KAAK,cAAc;QAAE,OAAO,QAAQ,CAAC;IAC7C,OAAQ,oBAA0C,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACpE,CAAC;AAED;;;sDAGsD;AACtD,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAElD,oEAAoE;AACpE,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,GAAG,EAAE,CAAC;AAE9C;;kBAEkB;AAClB,MAAM,CAAC,MAAM,6BAA6B,GAAG,EAAE,GAAG,EAAE,CAAC;AAErD,MAAM,CAAC,MAAM,wBAAwB,GAAG,gBAAgB,CAAC;AAEzD;;sDAEsD;AACtD,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,WAAW;YACd,OAAO,KAAK,CAAC;QACf,KAAK,YAAY;YACf,OAAO,KAAK,CAAC;QACf,KAAK,YAAY;YACf,OAAO,MAAM,CAAC;QAChB,KAAK,WAAW;YACd,OAAO,KAAK,CAAC;QACf,KAAK,cAAc;YACjB,OAAO,KAAK,CAAC;QACf;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"mediaAllowlist.js","sourceRoot":"","sources":["../../../src/usecase/media/mediaAllowlist.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,WAAW;CACH,CAAC;AAEX,MAAM,CAAC,MAAM,cAAc,GAAG,eAAwB,CAAC;AAIvD,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,QAAiB;IAC3D,IAAI,IAAI,KAAK,cAAc;QAAE,OAAO,QAAQ,CAAC;IAC7C,OAAQ,oBAA0C,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACpE,CAAC;AAED;;;sDAGsD;AACtD,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAElD,oEAAoE;AACpE,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,GAAG,EAAE,CAAC;AAE9C;;kBAEkB;AAClB,MAAM,CAAC,MAAM,6BAA6B,GAAG,EAAE,GAAG,EAAE,CAAC;AAErD,MAAM,CAAC,MAAM,wBAAwB,GAAG,gBAAgB,CAAC;AAEzD;;sDAEsD;AACtD,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,WAAW;YACd,OAAO,KAAK,CAAC;QACf,KAAK,YAAY;YACf,OAAO,KAAK,CAAC;QACf,KAAK,YAAY;YACf,OAAO,MAAM,CAAC;QAChB,KAAK,YAAY;YACf,OAAO,MAAM,CAAC;QAChB,KAAK,WAAW;YACd,OAAO,KAAK,CAAC;QACf,KAAK,cAAc;YACjB,OAAO,KAAK,CAAC;QACf;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { SchemaManifest } from "@aotter/mantle-spec";
|
|
2
2
|
import type { DatabaseDriver } from "../../domain/port/DatabaseDriver.js";
|
|
3
|
+
import type { MediaAssetRepository } from "../../domain/port/MediaAssetRepository.js";
|
|
3
4
|
import type { TemplateRegistry } from "../../domain/model/TemplateRegistry.js";
|
|
4
5
|
import type { PublicPathResolver } from "../../domain/service/PublicPathResolver.js";
|
|
5
6
|
import type { PreviewEntryRequest } from "../dto/render/PreviewEntryRequest.js";
|
|
@@ -20,7 +21,8 @@ export declare class PreviewEntryUseCase {
|
|
|
20
21
|
private readonly paths;
|
|
21
22
|
private readonly composeSeo;
|
|
22
23
|
private readonly schemas;
|
|
23
|
-
|
|
24
|
+
private readonly mediaAssets;
|
|
25
|
+
constructor(db: DatabaseDriver, templates: TemplateRegistry, paths: PublicPathResolver | null, composeSeo: SeoComposer, schemas: ReadonlyMap<string, SchemaManifest>, mediaAssets?: MediaAssetRepository | null);
|
|
24
26
|
execute(request: PreviewEntryRequest): Promise<string | null>;
|
|
25
27
|
}
|
|
26
28
|
//# sourceMappingURL=PreviewEntryUseCase.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PreviewEntryUseCase.d.ts","sourceRoot":"","sources":["../../../src/usecase/render/PreviewEntryUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAQrF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"PreviewEntryUseCase.d.ts","sourceRoot":"","sources":["../../../src/usecase/render/PreviewEntryUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAQrF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,yCAAyC,CAAC;AAWjD;;;;;;;;;GASG;AACH,qBAAa,mBAAmB;IAE5B,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,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,EAAE,EAAE,cAAc,EAClB,SAAS,EAAE,gBAAgB,EAC3B,KAAK,EAAE,kBAAkB,GAAG,IAAI,EAChC,UAAU,EAAE,WAAW,EACvB,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,EAC5C,WAAW,GAAE,oBAAoB,GAAG,IAAW;IAG5D,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CA+BpE"}
|
|
@@ -3,6 +3,7 @@ import { joinParentIfTranslation } from "../../domain/service/io/JoinedEntryRead
|
|
|
3
3
|
import { renderEntryHtml } from "../../domain/service/HtmlRenderer.js";
|
|
4
4
|
import { defaultPreviewBanner, injectPreviewBanner, } from "../../domain/service/PreviewBanner.js";
|
|
5
5
|
import { composeSeoIfPathed, } from "../../domain/service/EntrySeoSupport.js";
|
|
6
|
+
import { resolveMediaAssetsForEntries } from "../../domain/service/io/MediaAssetReferences.js";
|
|
6
7
|
/** Default fallback: prefer drafts, fall back to published, then
|
|
7
8
|
* archived. Authors typically open `?preview=1` to see WIP. */
|
|
8
9
|
const DEFAULT_PREVIEW_STATUS_ORDER = [
|
|
@@ -26,12 +27,14 @@ export class PreviewEntryUseCase {
|
|
|
26
27
|
paths;
|
|
27
28
|
composeSeo;
|
|
28
29
|
schemas;
|
|
29
|
-
|
|
30
|
+
mediaAssets;
|
|
31
|
+
constructor(db, templates, paths, composeSeo, schemas, mediaAssets = null) {
|
|
30
32
|
this.db = db;
|
|
31
33
|
this.templates = templates;
|
|
32
34
|
this.paths = paths;
|
|
33
35
|
this.composeSeo = composeSeo;
|
|
34
36
|
this.schemas = schemas;
|
|
37
|
+
this.mediaAssets = mediaAssets;
|
|
35
38
|
}
|
|
36
39
|
async execute(request) {
|
|
37
40
|
const order = request.statusOrder ?? DEFAULT_PREVIEW_STATUS_ORDER;
|
|
@@ -54,10 +57,12 @@ export class PreviewEntryUseCase {
|
|
|
54
57
|
// published-parent invariant at publish time.
|
|
55
58
|
const entry = await joinParentIfTranslation(this.db, this.schemas, raw);
|
|
56
59
|
const seo = await composeSeoIfPathed(this.composeSeo, this.paths, entry, request.site);
|
|
60
|
+
const mediaAssets = await resolveMediaAssetsForEntries(this.mediaAssets, [entry]);
|
|
57
61
|
const html = renderEntryHtml({
|
|
58
62
|
entry,
|
|
59
63
|
site: request.site,
|
|
60
64
|
templates: this.templates,
|
|
65
|
+
mediaAssets,
|
|
61
66
|
seo,
|
|
62
67
|
});
|
|
63
68
|
if (html === null)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PreviewEntryUseCase.js","sourceRoot":"","sources":["../../../src/usecase/render/PreviewEntryUseCase.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PreviewEntryUseCase.js","sourceRoot":"","sources":["../../../src/usecase/render/PreviewEntryUseCase.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EACL,kBAAkB,GAEnB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,4BAA4B,EAAE,MAAM,iDAAiD,CAAC;AAE/F;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,EAAkB,EAClB,SAA2B,EAC3B,KAAgC,EAChC,UAAuB,EACvB,OAA4C,EAC5C,cAA2C,IAAI;QAL/C,OAAE,GAAF,EAAE,CAAgB;QAClB,cAAS,GAAT,SAAS,CAAkB;QAC3B,UAAK,GAAL,KAAK,CAA2B;QAChC,eAAU,GAAV,UAAU,CAAa;QACvB,YAAO,GAAP,OAAO,CAAqC;QAC5C,gBAAW,GAAX,WAAW,CAAoC;IAC/D,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,OAA4B;QACxC,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,IAAI,4BAA4B,CAAC;QAClE,IAAI,GAAG,GAAiB,IAAI,CAAC;QAC7B,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE,CAAC;YAC3B,GAAG,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE;gBACnC,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,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,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACxE,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACvF,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,OAAO,CAAC,MAAM,IAAI,oBAAoB,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAClF,OAAO,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;CACF"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { SchemaManifest } from "@aotter/mantle-spec";
|
|
2
2
|
import type { DatabaseDriver } from "../../domain/port/DatabaseDriver.js";
|
|
3
|
+
import type { MediaAssetRepository } from "../../domain/port/MediaAssetRepository.js";
|
|
3
4
|
import type { TemplateRegistry } from "../../domain/model/TemplateRegistry.js";
|
|
4
5
|
import type { PublicPathResolver } from "../../domain/service/PublicPathResolver.js";
|
|
5
6
|
import type { RenderEntryLiveRequest } from "../dto/render/RenderEntryLiveRequest.js";
|
|
@@ -29,7 +30,8 @@ export declare class RenderEntryLiveUseCase {
|
|
|
29
30
|
private readonly paths;
|
|
30
31
|
private readonly composeSeo;
|
|
31
32
|
private readonly schemas;
|
|
32
|
-
|
|
33
|
+
private readonly mediaAssets;
|
|
34
|
+
constructor(db: DatabaseDriver, templates: TemplateRegistry, paths: PublicPathResolver | null, composeSeo: SeoComposer, schemas: ReadonlyMap<string, SchemaManifest>, mediaAssets?: MediaAssetRepository | null);
|
|
33
35
|
execute(request: RenderEntryLiveRequest): Promise<string | null>;
|
|
34
36
|
}
|
|
35
37
|
//# sourceMappingURL=RenderEntryLiveUseCase.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenderEntryLiveUseCase.d.ts","sourceRoot":"","sources":["../../../src/usecase/render/RenderEntryLiveUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAIrF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACtF,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"RenderEntryLiveUseCase.d.ts","sourceRoot":"","sources":["../../../src/usecase/render/RenderEntryLiveUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAIrF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACtF,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,yCAAyC,CAAC;AAGjD;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,sBAAsB;IAE/B,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,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,EAAE,EAAE,cAAc,EAClB,SAAS,EAAE,gBAAgB,EAC3B,KAAK,EAAE,kBAAkB,GAAG,IAAI,EAChC,UAAU,EAAE,WAAW,EACvB,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,EAC5C,WAAW,GAAE,oBAAoB,GAAG,IAAW;IAG5D,OAAO,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAsBvE"}
|
|
@@ -2,6 +2,7 @@ import { readEntryBySlug } from "../../domain/service/io/PublishedEntries.js";
|
|
|
2
2
|
import { joinParentIfTranslation } from "../../domain/service/io/JoinedEntryReader.js";
|
|
3
3
|
import { renderEntryHtml } from "../../domain/service/HtmlRenderer.js";
|
|
4
4
|
import { composeSeoIfPathed, } from "../../domain/service/EntrySeoSupport.js";
|
|
5
|
+
import { resolveMediaAssetsForEntries } from "../../domain/service/io/MediaAssetReferences.js";
|
|
5
6
|
/**
|
|
6
7
|
* Render a single entry from current DB state. Used by adapter live-
|
|
7
8
|
* dev routes (`MANTLE_LOCAL_DEV=1`) to bypass the KV cache and pick up
|
|
@@ -27,12 +28,14 @@ export class RenderEntryLiveUseCase {
|
|
|
27
28
|
paths;
|
|
28
29
|
composeSeo;
|
|
29
30
|
schemas;
|
|
30
|
-
|
|
31
|
+
mediaAssets;
|
|
32
|
+
constructor(db, templates, paths, composeSeo, schemas, mediaAssets = null) {
|
|
31
33
|
this.db = db;
|
|
32
34
|
this.templates = templates;
|
|
33
35
|
this.paths = paths;
|
|
34
36
|
this.composeSeo = composeSeo;
|
|
35
37
|
this.schemas = schemas;
|
|
38
|
+
this.mediaAssets = mediaAssets;
|
|
36
39
|
}
|
|
37
40
|
async execute(request) {
|
|
38
41
|
const status = request.status ?? "published";
|
|
@@ -48,10 +51,12 @@ export class RenderEntryLiveUseCase {
|
|
|
48
51
|
parentStatus: status,
|
|
49
52
|
});
|
|
50
53
|
const seo = await composeSeoIfPathed(this.composeSeo, this.paths, entry, request.site);
|
|
54
|
+
const mediaAssets = await resolveMediaAssetsForEntries(this.mediaAssets, [entry]);
|
|
51
55
|
return renderEntryHtml({
|
|
52
56
|
entry,
|
|
53
57
|
site: request.site,
|
|
54
58
|
templates: this.templates,
|
|
59
|
+
mediaAssets,
|
|
55
60
|
seo,
|
|
56
61
|
});
|
|
57
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenderEntryLiveUseCase.js","sourceRoot":"","sources":["../../../src/usecase/render/RenderEntryLiveUseCase.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RenderEntryLiveUseCase.js","sourceRoot":"","sources":["../../../src/usecase/render/RenderEntryLiveUseCase.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAEvE,OAAO,EACL,kBAAkB,GAEnB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,4BAA4B,EAAE,MAAM,iDAAiD,CAAC;AAE/F;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,sBAAsB;IAEd;IACA;IACA;IACA;IACA;IACA;IANnB,YACmB,EAAkB,EAClB,SAA2B,EAC3B,KAAgC,EAChC,UAAuB,EACvB,OAA4C,EAC5C,cAA2C,IAAI;QAL/C,OAAE,GAAF,EAAE,CAAgB;QAClB,cAAS,GAAT,SAAS,CAAkB;QAC3B,UAAK,GAAL,KAAK,CAA2B;QAChC,eAAU,GAAV,UAAU,CAAa;QACvB,YAAO,GAAP,OAAO,CAAqC;QAC5C,gBAAW,GAAX,WAAW,CAAoC;IAC/D,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,OAA+B;QAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,WAAW,CAAC;QAC7C,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE;YACzC,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM;SACP,CAAC,CAAC;QACH,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,MAAM,KAAK,GAAG,MAAM,uBAAuB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YACtE,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,CAAC,CAAC;QACvF,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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { SchemaManifest } from "@aotter/mantle-spec";
|
|
2
2
|
import type { DatabaseDriver } from "../../domain/port/DatabaseDriver.js";
|
|
3
|
+
import type { MediaAssetRepository } from "../../domain/port/MediaAssetRepository.js";
|
|
3
4
|
import type { TemplateRegistry } from "../../domain/model/TemplateRegistry.js";
|
|
4
5
|
import type { RenderListLiveRequest } from "../dto/render/RenderListLiveRequest.js";
|
|
5
6
|
/**
|
|
@@ -17,7 +18,8 @@ export declare class RenderListLiveUseCase {
|
|
|
17
18
|
private readonly db;
|
|
18
19
|
private readonly templates;
|
|
19
20
|
private readonly schemas;
|
|
20
|
-
|
|
21
|
+
private readonly mediaAssets;
|
|
22
|
+
constructor(db: DatabaseDriver, templates: TemplateRegistry, schemas: ReadonlyMap<string, SchemaManifest>, mediaAssets?: MediaAssetRepository | null);
|
|
21
23
|
execute(request: RenderListLiveRequest): Promise<string | null>;
|
|
22
24
|
}
|
|
23
25
|
//# sourceMappingURL=RenderListLiveUseCase.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenderListLiveUseCase.d.ts","sourceRoot":"","sources":["../../../src/usecase/render/RenderListLiveUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAI/E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"RenderListLiveUseCase.d.ts","sourceRoot":"","sources":["../../../src/usecase/render/RenderListLiveUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAI/E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAGpF;;;;;;;;;;GAUG;AACH,qBAAa,qBAAqB;IAE9B,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAHX,EAAE,EAAE,cAAc,EAClB,SAAS,EAAE,gBAAgB,EAC3B,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,EAC5C,WAAW,GAAE,oBAAoB,GAAG,IAAW;IAG5D,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAkBtE"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { readPublishedEntries } from "../../domain/service/io/PublishedEntries.js";
|
|
2
2
|
import { joinParentForList } from "../../domain/service/io/JoinedEntryReader.js";
|
|
3
3
|
import { renderListHtml } from "../../domain/service/HtmlRenderer.js";
|
|
4
|
+
import { resolveMediaAssetsForEntries } from "../../domain/service/io/MediaAssetReferences.js";
|
|
4
5
|
/**
|
|
5
6
|
* Render a collection's list page from current DB state. Sibling to
|
|
6
7
|
* `RenderEntryLiveUseCase` for the post-list / page-list surfaces.
|
|
@@ -16,10 +17,12 @@ export class RenderListLiveUseCase {
|
|
|
16
17
|
db;
|
|
17
18
|
templates;
|
|
18
19
|
schemas;
|
|
19
|
-
|
|
20
|
+
mediaAssets;
|
|
21
|
+
constructor(db, templates, schemas, mediaAssets = null) {
|
|
20
22
|
this.db = db;
|
|
21
23
|
this.templates = templates;
|
|
22
24
|
this.schemas = schemas;
|
|
25
|
+
this.mediaAssets = mediaAssets;
|
|
23
26
|
}
|
|
24
27
|
async execute(request) {
|
|
25
28
|
const raw = await readPublishedEntries(this.db, {
|
|
@@ -29,12 +32,14 @@ export class RenderListLiveUseCase {
|
|
|
29
32
|
const entries = await joinParentForList(this.db, this.schemas, raw, {
|
|
30
33
|
parentStatus: "published",
|
|
31
34
|
});
|
|
35
|
+
const mediaAssets = await resolveMediaAssetsForEntries(this.mediaAssets, entries);
|
|
32
36
|
return renderListHtml({
|
|
33
37
|
collection: request.collection,
|
|
34
38
|
locale: request.locale,
|
|
35
39
|
entries,
|
|
36
40
|
site: request.site,
|
|
37
41
|
templates: this.templates,
|
|
42
|
+
mediaAssets,
|
|
38
43
|
});
|
|
39
44
|
}
|
|
40
45
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenderListLiveUseCase.js","sourceRoot":"","sources":["../../../src/usecase/render/RenderListLiveUseCase.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RenderListLiveUseCase.js","sourceRoot":"","sources":["../../../src/usecase/render/RenderListLiveUseCase.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAEtE,OAAO,EAAE,4BAA4B,EAAE,MAAM,iDAAiD,CAAC;AAE/F;;;;;;;;;;GAUG;AACH,MAAM,OAAO,qBAAqB;IAEb;IACA;IACA;IACA;IAJnB,YACmB,EAAkB,EAClB,SAA2B,EAC3B,OAA4C,EAC5C,cAA2C,IAAI;QAH/C,OAAE,GAAF,EAAE,CAAgB;QAClB,cAAS,GAAT,SAAS,CAAkB;QAC3B,YAAO,GAAP,OAAO,CAAqC;QAC5C,gBAAW,GAAX,WAAW,CAAoC;IAC/D,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,OAA8B;QAC1C,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,EAAE,EAAE;YAC9C,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YAClE,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;SACZ,CAAC,CAAC;IACL,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aotter/mantle-runtime",
|
|
3
|
-
"version": "0.0.11-alpha.
|
|
3
|
+
"version": "0.0.11-alpha.15",
|
|
4
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.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
|
-
"homepage": "https://
|
|
6
|
+
"homepage": "https://mantle.tools/",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
9
9
|
"url": "git+https://github.com/aotter/mantle.git",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"README.md"
|
|
30
30
|
],
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@aotter/mantle-spec": "0.0.11-alpha.
|
|
32
|
+
"@aotter/mantle-spec": "0.0.11-alpha.15"
|
|
33
33
|
},
|
|
34
34
|
"peerDependencies": {
|
|
35
35
|
"zod": "^4.0.0"
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"@types/node": "^25",
|
|
39
39
|
"typescript": "^6.0.3",
|
|
40
|
-
"vitest": "^4.1.
|
|
40
|
+
"vitest": "^4.1.7",
|
|
41
41
|
"zod": "^4.4.2"
|
|
42
42
|
},
|
|
43
43
|
"scripts": {
|