@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.
Files changed (103) hide show
  1. package/dist/domain/model/TemplateRegistry.d.ts +3 -0
  2. package/dist/domain/model/TemplateRegistry.d.ts.map +1 -1
  3. package/dist/domain/model/TemplateRegistry.js.map +1 -1
  4. package/dist/domain/port/MediaAssetRepository.d.ts +34 -0
  5. package/dist/domain/port/MediaAssetRepository.d.ts.map +1 -0
  6. package/dist/domain/port/MediaAssetRepository.js +2 -0
  7. package/dist/domain/port/MediaAssetRepository.js.map +1 -0
  8. package/dist/domain/port/MediaStorage.d.ts +159 -44
  9. package/dist/domain/port/MediaStorage.d.ts.map +1 -1
  10. package/dist/domain/port/MediaStorage.js +12 -1
  11. package/dist/domain/port/MediaStorage.js.map +1 -1
  12. package/dist/domain/port/SiteConfigRepository.d.ts +2 -2
  13. package/dist/domain/port/SiteConfigRepository.d.ts.map +1 -1
  14. package/dist/domain/port/index.d.ts +3 -1
  15. package/dist/domain/port/index.d.ts.map +1 -1
  16. package/dist/domain/port/index.js +1 -0
  17. package/dist/domain/port/index.js.map +1 -1
  18. package/dist/domain/service/HtmlRenderer.d.ts +3 -0
  19. package/dist/domain/service/HtmlRenderer.d.ts.map +1 -1
  20. package/dist/domain/service/HtmlRenderer.js +7 -1
  21. package/dist/domain/service/HtmlRenderer.js.map +1 -1
  22. package/dist/domain/service/io/MediaAssetReferences.d.ts +13 -0
  23. package/dist/domain/service/io/MediaAssetReferences.d.ts.map +1 -0
  24. package/dist/domain/service/io/MediaAssetReferences.js +48 -0
  25. package/dist/domain/service/io/MediaAssetReferences.js.map +1 -0
  26. package/dist/index.d.ts +3 -1
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +1 -0
  29. package/dist/index.js.map +1 -1
  30. package/dist/infrastructure/boot/canonicalMigrations.d.ts.map +1 -1
  31. package/dist/infrastructure/boot/canonicalMigrations.js +17 -0
  32. package/dist/infrastructure/boot/canonicalMigrations.js.map +1 -1
  33. package/dist/infrastructure/mcp/McpJsonRpcDispatcher.d.ts +9 -5
  34. package/dist/infrastructure/mcp/McpJsonRpcDispatcher.d.ts.map +1 -1
  35. package/dist/infrastructure/mcp/McpJsonRpcDispatcher.js +84 -11
  36. package/dist/infrastructure/mcp/McpJsonRpcDispatcher.js.map +1 -1
  37. package/dist/infrastructure/mcp/McpToolCatalog.d.ts +8 -4
  38. package/dist/infrastructure/mcp/McpToolCatalog.d.ts.map +1 -1
  39. package/dist/infrastructure/mcp/McpToolCatalog.js +108 -24
  40. package/dist/infrastructure/mcp/McpToolCatalog.js.map +1 -1
  41. package/dist/infrastructure/persistence/DatabaseMediaAssetRepository.d.ts +27 -0
  42. package/dist/infrastructure/persistence/DatabaseMediaAssetRepository.d.ts.map +1 -0
  43. package/dist/infrastructure/persistence/DatabaseMediaAssetRepository.js +80 -0
  44. package/dist/infrastructure/persistence/DatabaseMediaAssetRepository.js.map +1 -0
  45. package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.d.ts +2 -2
  46. package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.d.ts.map +1 -1
  47. package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.js +24 -3
  48. package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.js.map +1 -1
  49. package/dist/infrastructure/persistence/index.d.ts +1 -0
  50. package/dist/infrastructure/persistence/index.d.ts.map +1 -1
  51. package/dist/infrastructure/persistence/index.js +1 -0
  52. package/dist/infrastructure/persistence/index.js.map +1 -1
  53. package/dist/infrastructure/render/HtmlPublishOrchestrator.d.ts +3 -1
  54. package/dist/infrastructure/render/HtmlPublishOrchestrator.d.ts.map +1 -1
  55. package/dist/infrastructure/render/HtmlPublishOrchestrator.js +8 -2
  56. package/dist/infrastructure/render/HtmlPublishOrchestrator.js.map +1 -1
  57. package/dist/runtime.d.ts +12 -4
  58. package/dist/runtime.d.ts.map +1 -1
  59. package/dist/runtime.js +12 -7
  60. package/dist/runtime.js.map +1 -1
  61. package/dist/usecase/dto/media/index.d.ts +42 -15
  62. package/dist/usecase/dto/media/index.d.ts.map +1 -1
  63. package/dist/usecase/dto/media/index.js +10 -3
  64. package/dist/usecase/dto/media/index.js.map +1 -1
  65. package/dist/usecase/media/CommitMediaUploadUseCase.d.ts +14 -4
  66. package/dist/usecase/media/CommitMediaUploadUseCase.d.ts.map +1 -1
  67. package/dist/usecase/media/CommitMediaUploadUseCase.js +30 -19
  68. package/dist/usecase/media/CommitMediaUploadUseCase.js.map +1 -1
  69. package/dist/usecase/media/CreateMediaUploadUseCase.d.ts +34 -2
  70. package/dist/usecase/media/CreateMediaUploadUseCase.d.ts.map +1 -1
  71. package/dist/usecase/media/CreateMediaUploadUseCase.js +184 -41
  72. package/dist/usecase/media/CreateMediaUploadUseCase.js.map +1 -1
  73. package/dist/usecase/media/PendingUploadRecord.d.ts +29 -10
  74. package/dist/usecase/media/PendingUploadRecord.d.ts.map +1 -1
  75. package/dist/usecase/media/UploadMediaVariantUseCase.d.ts +35 -0
  76. package/dist/usecase/media/UploadMediaVariantUseCase.d.ts.map +1 -0
  77. package/dist/usecase/media/UploadMediaVariantUseCase.js +75 -0
  78. package/dist/usecase/media/UploadMediaVariantUseCase.js.map +1 -0
  79. package/dist/usecase/media/diagnostics.d.ts +19 -2
  80. package/dist/usecase/media/diagnostics.d.ts.map +1 -1
  81. package/dist/usecase/media/diagnostics.js +66 -7
  82. package/dist/usecase/media/diagnostics.js.map +1 -1
  83. package/dist/usecase/media/index.d.ts +1 -0
  84. package/dist/usecase/media/index.d.ts.map +1 -1
  85. package/dist/usecase/media/index.js +1 -0
  86. package/dist/usecase/media/index.js.map +1 -1
  87. package/dist/usecase/media/mediaAllowlist.d.ts +1 -1
  88. package/dist/usecase/media/mediaAllowlist.d.ts.map +1 -1
  89. package/dist/usecase/media/mediaAllowlist.js +3 -0
  90. package/dist/usecase/media/mediaAllowlist.js.map +1 -1
  91. package/dist/usecase/render/PreviewEntryUseCase.d.ts +3 -1
  92. package/dist/usecase/render/PreviewEntryUseCase.d.ts.map +1 -1
  93. package/dist/usecase/render/PreviewEntryUseCase.js +6 -1
  94. package/dist/usecase/render/PreviewEntryUseCase.js.map +1 -1
  95. package/dist/usecase/render/RenderEntryLiveUseCase.d.ts +3 -1
  96. package/dist/usecase/render/RenderEntryLiveUseCase.d.ts.map +1 -1
  97. package/dist/usecase/render/RenderEntryLiveUseCase.js +6 -1
  98. package/dist/usecase/render/RenderEntryLiveUseCase.js.map +1 -1
  99. package/dist/usecase/render/RenderListLiveUseCase.d.ts +3 -1
  100. package/dist/usecase/render/RenderListLiveUseCase.d.ts.map +1 -1
  101. package/dist/usecase/render/RenderListLiveUseCase.js +6 -1
  102. package/dist/usecase/render/RenderListLiveUseCase.js.map +1 -1
  103. 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, uploadId) {
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: uploadId,
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, uploadId) {
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: uploadId,
62
- expected: "an object PUT to the storage backend before commit",
63
- suggestion: "PUT the file to the upload URL before calling commit_media_upload",
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,sDAAsD;KACjE,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,MAAc;IACvD,OAAO,cAAc,CAAC;QACpB,IAAI,EAAE,oBAAoB;QAC1B,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,eAAe;QACtB,QAAQ,EAAE,+DAA+D;QACzE,UAAU,EAAE,yDAAyD;KACtE,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,MAAc,EACd,QAAgB,EAChB,QAAgB;IAEhB,OAAO,cAAc,CAAC;QACpB,IAAI,EAAE,qBAAqB;QAC3B,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,QAAQ;QACf,QAAQ,EAAE,eAAe,QAAQ,EAAE;KACpC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,MAAc,EAAE,QAAgB;IAC3E,OAAO,cAAc,CAAC;QACpB,IAAI,EAAE,sBAAsB;QAC5B,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,QAAQ;QACf,QAAQ,EAAE,4DAA4D;QACtE,UAAU,EAAE,0DAA0D;KACvE,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,MAAc,EAAE,QAAgB;IAC5E,OAAO,cAAc,CAAC;QACpB,IAAI,EAAE,wBAAwB;QAC9B,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,QAAQ;QACf,QAAQ,EAAE,oDAAoD;QAC9D,UAAU,EAAE,mEAAmE;KAChF,CAAC,CAAC;AACL,CAAC;AAED;;;;;0BAK0B;AAC1B,MAAM,UAAU,8BAA8B,CAC5C,MAAc,EACd,OAA2B,EAC3B,QAA2B;IAE3B,MAAM,QAAQ,GACZ,QAAQ,CAAC,MAAM,GAAG,CAAC;QACjB,CAAC,CAAC,cAAc,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;QAC3D,CAAC,CAAC,iGAAiG,CAAC;IACxG,OAAO,cAAc,CAAC;QACpB,IAAI,EAAE,wBAAwB;QAC9B,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,OAAO,IAAI,WAAW;QAC7B,QAAQ;QACR,UAAU,EACR,QAAQ,CAAC,MAAM,GAAG,CAAC;YACjB,CAAC,CAAC,8DAA8D;YAChE,CAAC,CAAC,6EAA6E;KACpF,CAAC,CAAC;AACL,CAAC"}
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,iEAKvB,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,CAerD"}
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
- constructor(db: DatabaseDriver, templates: TemplateRegistry, paths: PublicPathResolver | null, composeSeo: SeoComposer, schemas: ReadonlyMap<string, SchemaManifest>);
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;AAUjD;;;;;;;;;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;gBAJP,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;IAGzD,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CA6BpE"}
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
- constructor(db, templates, paths, composeSeo, schemas) {
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":"AAIA,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;AAEjD;gEACgE;AAChE,MAAM,4BAA4B,GAAgC;IAChE,OAAO;IACP,WAAW;IACX,UAAU;CACX,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,OAAO,mBAAmB;IAEX;IACA;IACA;IACA;IACA;IALnB,YACmB,EAAkB,EAClB,SAA2B,EAC3B,KAAgC,EAChC,UAAuB,EACvB,OAA4C;QAJ5C,OAAE,GAAF,EAAE,CAAgB;QAClB,cAAS,GAAT,SAAS,CAAkB;QAC3B,UAAK,GAAL,KAAK,CAA2B;QAChC,eAAU,GAAV,UAAU,CAAa;QACvB,YAAO,GAAP,OAAO,CAAqC;IAC5D,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,IAAI,GAAG,eAAe,CAAC;YAC3B,KAAK;YACL,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,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
+ {"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
- constructor(db: DatabaseDriver, templates: TemplateRegistry, paths: PublicPathResolver | null, composeSeo: SeoComposer, schemas: ReadonlyMap<string, SchemaManifest>);
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;AAEjD;;;;;;;;;;;;;;;;;;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;gBAJP,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;IAGzD,OAAO,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAoBvE"}
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
- constructor(db, templates, paths, composeSeo, schemas) {
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":"AAIA,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;AAEjD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,sBAAsB;IAEd;IACA;IACA;IACA;IACA;IALnB,YACmB,EAAkB,EAClB,SAA2B,EAC3B,KAAgC,EAChC,UAAuB,EACvB,OAA4C;QAJ5C,OAAE,GAAF,EAAE,CAAgB;QAClB,cAAS,GAAT,SAAS,CAAkB;QAC3B,UAAK,GAAL,KAAK,CAA2B;QAChC,eAAU,GAAV,UAAU,CAAa;QACvB,YAAO,GAAP,OAAO,CAAqC;IAC5D,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,OAAO,eAAe,CAAC;YACrB,KAAK;YACL,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,GAAG;SACJ,CAAC,CAAC;IACL,CAAC;CACF"}
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
- constructor(db: DatabaseDriver, templates: TemplateRegistry, schemas: ReadonlyMap<string, SchemaManifest>);
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;AAEpF;;;;;;;;;;GAUG;AACH,qBAAa,qBAAqB;IAE9B,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAFP,EAAE,EAAE,cAAc,EAClB,SAAS,EAAE,gBAAgB,EAC3B,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC;IAGzD,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAgBtE"}
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
- constructor(db, templates, schemas) {
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":"AAGA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAGtE;;;;;;;;;;GAUG;AACH,MAAM,OAAO,qBAAqB;IAEb;IACA;IACA;IAHnB,YACmB,EAAkB,EAClB,SAA2B,EAC3B,OAA4C;QAF5C,OAAE,GAAF,EAAE,CAAgB;QAClB,cAAS,GAAT,SAAS,CAAkB;QAC3B,YAAO,GAAP,OAAO,CAAqC;IAC5D,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,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;SAC1B,CAAC,CAAC;IACL,CAAC;CACF"}
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.13",
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://github.com/aotter/mantle/tree/develop/packages/mantle-runtime",
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.13"
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.6",
40
+ "vitest": "^4.1.7",
41
41
  "zod": "^4.4.2"
42
42
  },
43
43
  "scripts": {