@aotter/mantle-runtime 0.0.11-alpha.62 → 0.0.11-alpha.63

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 (158) hide show
  1. package/README.md +4 -0
  2. package/dist/domain/model/EntryRow.d.ts +4 -1
  3. package/dist/domain/model/EntryRow.d.ts.map +1 -1
  4. package/dist/domain/model/EntryRow.js +14 -0
  5. package/dist/domain/model/EntryRow.js.map +1 -1
  6. package/dist/domain/model/PendingUploadRecord.d.ts +19 -0
  7. package/dist/domain/model/PendingUploadRecord.d.ts.map +1 -0
  8. package/dist/domain/model/PendingUploadRecord.js.map +1 -0
  9. package/dist/domain/model/index.d.ts +1 -0
  10. package/dist/domain/model/index.d.ts.map +1 -1
  11. package/dist/domain/model/index.js.map +1 -1
  12. package/dist/domain/port/EntryReader.d.ts +49 -0
  13. package/dist/domain/port/EntryReader.d.ts.map +1 -0
  14. package/dist/domain/port/EntryReader.js +2 -0
  15. package/dist/domain/port/EntryReader.js.map +1 -0
  16. package/dist/domain/port/PendingUploadRepository.d.ts +8 -0
  17. package/dist/domain/port/PendingUploadRepository.d.ts.map +1 -0
  18. package/dist/domain/port/PendingUploadRepository.js +2 -0
  19. package/dist/domain/port/PendingUploadRepository.js.map +1 -0
  20. package/dist/domain/port/PublishOrchestrator.d.ts +2 -0
  21. package/dist/domain/port/PublishOrchestrator.d.ts.map +1 -1
  22. package/dist/domain/port/SiteConfigRepository.d.ts +13 -0
  23. package/dist/domain/port/SiteConfigRepository.d.ts.map +1 -1
  24. package/dist/domain/port/index.d.ts +3 -1
  25. package/dist/domain/port/index.d.ts.map +1 -1
  26. package/dist/domain/port/index.js.map +1 -1
  27. package/dist/domain/service/index.d.ts +1 -2
  28. package/dist/domain/service/index.d.ts.map +1 -1
  29. package/dist/domain/service/index.js +1 -2
  30. package/dist/domain/service/index.js.map +1 -1
  31. package/dist/domain/service/io/JoinedEntryReader.d.ts +3 -3
  32. package/dist/domain/service/io/JoinedEntryReader.d.ts.map +1 -1
  33. package/dist/domain/service/io/JoinedEntryReader.js +4 -5
  34. package/dist/domain/service/io/JoinedEntryReader.js.map +1 -1
  35. package/dist/domain/service/io/index.d.ts +1 -6
  36. package/dist/domain/service/io/index.d.ts.map +1 -1
  37. package/dist/domain/service/io/index.js +1 -6
  38. package/dist/domain/service/io/index.js.map +1 -1
  39. package/dist/index.d.ts +2 -1
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +1 -1
  42. package/dist/index.js.map +1 -1
  43. package/dist/infrastructure/boot/canonicalMigrations.d.ts.map +1 -1
  44. package/dist/infrastructure/boot/canonicalMigrations.js +35 -0
  45. package/dist/infrastructure/boot/canonicalMigrations.js.map +1 -1
  46. package/dist/infrastructure/persistence/DatabaseEntryRepository.d.ts +13 -2
  47. package/dist/infrastructure/persistence/DatabaseEntryRepository.d.ts.map +1 -1
  48. package/dist/infrastructure/persistence/DatabaseEntryRepository.js +175 -13
  49. package/dist/infrastructure/persistence/DatabaseEntryRepository.js.map +1 -1
  50. package/dist/infrastructure/persistence/DatabasePendingUploadRepository.d.ts +13 -0
  51. package/dist/infrastructure/persistence/DatabasePendingUploadRepository.d.ts.map +1 -0
  52. package/dist/infrastructure/persistence/DatabasePendingUploadRepository.js +36 -0
  53. package/dist/infrastructure/persistence/DatabasePendingUploadRepository.js.map +1 -0
  54. package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.d.ts +5 -1
  55. package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.d.ts.map +1 -1
  56. package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.js +37 -5
  57. package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.js.map +1 -1
  58. package/dist/infrastructure/persistence/index.d.ts +1 -0
  59. package/dist/infrastructure/persistence/index.d.ts.map +1 -1
  60. package/dist/infrastructure/persistence/index.js +1 -0
  61. package/dist/infrastructure/persistence/index.js.map +1 -1
  62. package/dist/infrastructure/render/HtmlPublishOrchestrator.d.ts +5 -3
  63. package/dist/infrastructure/render/HtmlPublishOrchestrator.d.ts.map +1 -1
  64. package/dist/infrastructure/render/HtmlPublishOrchestrator.js +25 -11
  65. package/dist/infrastructure/render/HtmlPublishOrchestrator.js.map +1 -1
  66. package/dist/infrastructure/testing/HttpBenchmarkHarness.d.ts +41 -0
  67. package/dist/infrastructure/testing/HttpBenchmarkHarness.d.ts.map +1 -0
  68. package/dist/infrastructure/testing/HttpBenchmarkHarness.js +88 -0
  69. package/dist/infrastructure/testing/HttpBenchmarkHarness.js.map +1 -0
  70. package/dist/infrastructure/testing/IndexCoverageHarness.d.ts +42 -0
  71. package/dist/infrastructure/testing/IndexCoverageHarness.d.ts.map +1 -0
  72. package/dist/infrastructure/testing/IndexCoverageHarness.js +222 -0
  73. package/dist/infrastructure/testing/IndexCoverageHarness.js.map +1 -0
  74. package/dist/infrastructure/testing/index.d.ts +3 -0
  75. package/dist/infrastructure/testing/index.d.ts.map +1 -0
  76. package/dist/infrastructure/testing/index.js +3 -0
  77. package/dist/infrastructure/testing/index.js.map +1 -0
  78. package/dist/runtime.d.ts +10 -2
  79. package/dist/runtime.d.ts.map +1 -1
  80. package/dist/runtime.js +16 -9
  81. package/dist/runtime.js.map +1 -1
  82. package/dist/testing.d.ts +3 -0
  83. package/dist/testing.d.ts.map +1 -0
  84. package/dist/testing.js +3 -0
  85. package/dist/testing.js.map +1 -0
  86. package/dist/usecase/dto/index.d.ts +1 -0
  87. package/dist/usecase/dto/index.d.ts.map +1 -1
  88. package/dist/usecase/dto/index.js +1 -0
  89. package/dist/usecase/dto/index.js.map +1 -1
  90. package/dist/usecase/dto/site/UpdateSiteSettingsRequest.d.ts +3 -0
  91. package/dist/usecase/dto/site/UpdateSiteSettingsRequest.d.ts.map +1 -0
  92. package/dist/usecase/dto/site/UpdateSiteSettingsRequest.js +2 -0
  93. package/dist/usecase/dto/site/UpdateSiteSettingsRequest.js.map +1 -0
  94. package/dist/usecase/dto/site/index.d.ts +2 -0
  95. package/dist/usecase/dto/site/index.d.ts.map +1 -0
  96. package/dist/usecase/dto/site/index.js +2 -0
  97. package/dist/usecase/dto/site/index.js.map +1 -0
  98. package/dist/usecase/index.d.ts +1 -0
  99. package/dist/usecase/index.d.ts.map +1 -1
  100. package/dist/usecase/index.js +1 -0
  101. package/dist/usecase/index.js.map +1 -1
  102. package/dist/usecase/media/CommitMediaUploadUseCase.d.ts +4 -4
  103. package/dist/usecase/media/CommitMediaUploadUseCase.d.ts.map +1 -1
  104. package/dist/usecase/media/CommitMediaUploadUseCase.js +9 -11
  105. package/dist/usecase/media/CommitMediaUploadUseCase.js.map +1 -1
  106. package/dist/usecase/media/CreateMediaUploadUseCase.d.ts +3 -3
  107. package/dist/usecase/media/CreateMediaUploadUseCase.d.ts.map +1 -1
  108. package/dist/usecase/media/CreateMediaUploadUseCase.js +5 -5
  109. package/dist/usecase/media/CreateMediaUploadUseCase.js.map +1 -1
  110. package/dist/usecase/media/index.d.ts +1 -1
  111. package/dist/usecase/media/index.d.ts.map +1 -1
  112. package/dist/usecase/media/index.js +1 -1
  113. package/dist/usecase/media/index.js.map +1 -1
  114. package/dist/usecase/media/mediaAllowlist.d.ts +0 -5
  115. package/dist/usecase/media/mediaAllowlist.d.ts.map +1 -1
  116. package/dist/usecase/media/mediaAllowlist.js +0 -5
  117. package/dist/usecase/media/mediaAllowlist.js.map +1 -1
  118. package/dist/usecase/render/ComposeEntrySeoMetaUseCase.d.ts +3 -3
  119. package/dist/usecase/render/ComposeEntrySeoMetaUseCase.d.ts.map +1 -1
  120. package/dist/usecase/render/ComposeEntrySeoMetaUseCase.js +6 -7
  121. package/dist/usecase/render/ComposeEntrySeoMetaUseCase.js.map +1 -1
  122. package/dist/usecase/render/ComposeLlmsTxtUseCase.d.ts +3 -3
  123. package/dist/usecase/render/ComposeLlmsTxtUseCase.d.ts.map +1 -1
  124. package/dist/usecase/render/ComposeLlmsTxtUseCase.js +4 -5
  125. package/dist/usecase/render/ComposeLlmsTxtUseCase.js.map +1 -1
  126. package/dist/usecase/render/ComposeSitemapUseCase.d.ts +3 -3
  127. package/dist/usecase/render/ComposeSitemapUseCase.d.ts.map +1 -1
  128. package/dist/usecase/render/ComposeSitemapUseCase.js +4 -5
  129. package/dist/usecase/render/ComposeSitemapUseCase.js.map +1 -1
  130. package/dist/usecase/render/PreviewEntryUseCase.d.ts +3 -3
  131. package/dist/usecase/render/PreviewEntryUseCase.d.ts.map +1 -1
  132. package/dist/usecase/render/PreviewEntryUseCase.js +5 -6
  133. package/dist/usecase/render/PreviewEntryUseCase.js.map +1 -1
  134. package/dist/usecase/render/RenderEntryLiveUseCase.d.ts +3 -3
  135. package/dist/usecase/render/RenderEntryLiveUseCase.d.ts.map +1 -1
  136. package/dist/usecase/render/RenderEntryLiveUseCase.js +5 -6
  137. package/dist/usecase/render/RenderEntryLiveUseCase.js.map +1 -1
  138. package/dist/usecase/render/RenderListLiveUseCase.d.ts +3 -3
  139. package/dist/usecase/render/RenderListLiveUseCase.d.ts.map +1 -1
  140. package/dist/usecase/render/RenderListLiveUseCase.js +5 -6
  141. package/dist/usecase/render/RenderListLiveUseCase.js.map +1 -1
  142. package/dist/usecase/site/UpdateSiteSettingsUseCase.d.ts +12 -0
  143. package/dist/usecase/site/UpdateSiteSettingsUseCase.d.ts.map +1 -0
  144. package/dist/usecase/site/UpdateSiteSettingsUseCase.js +18 -0
  145. package/dist/usecase/site/UpdateSiteSettingsUseCase.js.map +1 -0
  146. package/dist/usecase/site/index.d.ts +2 -0
  147. package/dist/usecase/site/index.d.ts.map +1 -0
  148. package/dist/usecase/site/index.js +2 -0
  149. package/dist/usecase/site/index.js.map +1 -0
  150. package/package.json +6 -2
  151. package/dist/domain/service/io/PublishedEntries.d.ts +0 -69
  152. package/dist/domain/service/io/PublishedEntries.d.ts.map +0 -1
  153. package/dist/domain/service/io/PublishedEntries.js +0 -116
  154. package/dist/domain/service/io/PublishedEntries.js.map +0 -1
  155. package/dist/usecase/media/PendingUploadRecord.d.ts +0 -36
  156. package/dist/usecase/media/PendingUploadRecord.d.ts.map +0 -1
  157. package/dist/usecase/media/PendingUploadRecord.js.map +0 -1
  158. /package/dist/{usecase/media → domain/model}/PendingUploadRecord.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ComposeLlmsTxtUseCase.d.ts","sourceRoot":"","sources":["../../../src/usecase/render/ComposeLlmsTxtUseCase.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAG1E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAEpF;;;;;;;;;;GAUG;AACH,qBAAa,qBAAqB;IACpB,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,cAAc;IAEzC,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC;CAS/D"}
1
+ {"version":3,"file":"ComposeLlmsTxtUseCase.d.ts","sourceRoot":"","sources":["../../../src/usecase/render/ComposeLlmsTxtUseCase.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAEpE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAEpF;;;;;;;;;;GAUG;AACH,qBAAa,qBAAqB;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,WAAW;IAE1C,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC;CAS/D"}
@@ -1,4 +1,3 @@
1
- import { readPublishedEntries } from "../../domain/service/io/PublishedEntries.js";
2
1
  import { serializeLlmsTxt } from "../../domain/service/MarkdownSerializer.js";
3
2
  /**
4
3
  * Compose a `/llms.txt` body from currently-published entries.
@@ -12,12 +11,12 @@ import { serializeLlmsTxt } from "../../domain/service/MarkdownSerializer.js";
12
11
  * site.locales themselves and concat.
13
12
  */
14
13
  export class ComposeLlmsTxtUseCase {
15
- db;
16
- constructor(db) {
17
- this.db = db;
14
+ reader;
15
+ constructor(reader) {
16
+ this.reader = reader;
18
17
  }
19
18
  async execute(request) {
20
- const entries = await readPublishedEntries(this.db, { locale: request.locale });
19
+ const entries = await this.reader.readPublished({ locale: request.locale });
21
20
  const grouped = groupByCollection(entries);
22
21
  return serializeLlmsTxt({
23
22
  site: request.site,
@@ -1 +1 @@
1
- {"version":3,"file":"ComposeLlmsTxtUseCase.js","sourceRoot":"","sources":["../../../src/usecase/render/ComposeLlmsTxtUseCase.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAG9E;;;;;;;;;;GAUG;AACH,MAAM,OAAO,qBAAqB;IACH;IAA7B,YAA6B,EAAkB;QAAlB,OAAE,GAAF,EAAE,CAAgB;IAAG,CAAC;IAEnD,KAAK,CAAC,OAAO,CAAC,OAA8B;QAC1C,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAChF,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;SAC7B,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"}
1
+ {"version":3,"file":"ComposeLlmsTxtUseCase.js","sourceRoot":"","sources":["../../../src/usecase/render/ComposeLlmsTxtUseCase.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAG9E;;;;;;;;;;GAUG;AACH,MAAM,OAAO,qBAAqB;IACH;IAA7B,YAA6B,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;IAAG,CAAC;IAEpD,KAAK,CAAC,OAAO,CAAC,OAA8B;QAC1C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5E,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;SAC7B,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"}
@@ -1,4 +1,4 @@
1
- import type { DatabaseDriver } from "../../domain/port/DatabaseDriver.js";
1
+ import type { EntryReader } from "../../domain/port/EntryReader.js";
2
2
  import type { ComposeSitemapRequest } from "../dto/render/ComposeSitemapRequest.js";
3
3
  /**
4
4
  * Compose `sitemap.xml` from every published entry across all
@@ -8,8 +8,8 @@ import type { ComposeSitemapRequest } from "../dto/render/ComposeSitemapRequest.
8
8
  */
9
9
  export declare const SITEMAP_MAX_URLS_DEFAULT = 50000;
10
10
  export declare class ComposeSitemapUseCase {
11
- private readonly db;
12
- constructor(db: DatabaseDriver);
11
+ private readonly reader;
12
+ constructor(reader: EntryReader);
13
13
  execute(request: ComposeSitemapRequest): Promise<string>;
14
14
  }
15
15
  //# sourceMappingURL=ComposeSitemapUseCase.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ComposeSitemapUseCase.d.ts","sourceRoot":"","sources":["../../../src/usecase/render/ComposeSitemapUseCase.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAI1E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAEpF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,QAAQ,CAAC;AAE9C,qBAAa,qBAAqB;IACpB,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,cAAc;IAEzC,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC;CAW/D"}
1
+ {"version":3,"file":"ComposeSitemapUseCase.d.ts","sourceRoot":"","sources":["../../../src/usecase/render/ComposeSitemapUseCase.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAGpE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAEpF;;;;;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;CAW/D"}
@@ -1,4 +1,3 @@
1
- import { readPublishedEntries } from "../../domain/service/io/PublishedEntries.js";
2
1
  import { entryPublicPath } from "../../domain/service/PublishKeys.js";
3
2
  import { serializeSitemap } from "../../domain/service/SitemapSerializer.js";
4
3
  /**
@@ -9,13 +8,13 @@ import { serializeSitemap } from "../../domain/service/SitemapSerializer.js";
9
8
  */
10
9
  export const SITEMAP_MAX_URLS_DEFAULT = 50000;
11
10
  export class ComposeSitemapUseCase {
12
- db;
13
- constructor(db) {
14
- this.db = db;
11
+ reader;
12
+ constructor(reader) {
13
+ this.reader = reader;
15
14
  }
16
15
  async execute(request) {
17
16
  const cap = request.maxUrls ?? SITEMAP_MAX_URLS_DEFAULT;
18
- const all = await readPublishedEntries(this.db, { limit: cap });
17
+ const all = await this.reader.readPublished({ limit: cap });
19
18
  const mapper = request.pathFor ?? entryPublicPath;
20
19
  const entries = [];
21
20
  for (const e of all) {
@@ -1 +1 @@
1
- {"version":3,"file":"ComposeSitemapUseCase.js","sourceRoot":"","sources":["../../../src/usecase/render/ComposeSitemapUseCase.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAG7E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAE9C,MAAM,OAAO,qBAAqB;IACH;IAA7B,YAA6B,EAAkB;QAAlB,OAAE,GAAF,EAAE,CAAgB;IAAG,CAAC;IAEnD,KAAK,CAAC,OAAO,CAAC,OAA8B;QAC1C,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,IAAI,wBAAwB,CAAC;QACxD,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,IAAI,eAAe,CAAC;QAClD,MAAM,OAAO,GAAqC,EAAE,CAAC;QACrD,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;YACpB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAC3D,CAAC;CACF"}
1
+ {"version":3,"file":"ComposeSitemapUseCase.js","sourceRoot":"","sources":["../../../src/usecase/render/ComposeSitemapUseCase.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAG7E;;;;;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,GAAqC,EAAE,CAAC;QACrD,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;YACpB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAC3D,CAAC;CACF"}
@@ -1,5 +1,5 @@
1
1
  import type { SchemaManifest } from "@aotter/mantle-spec";
2
- import type { DatabaseDriver } from "../../domain/port/DatabaseDriver.js";
2
+ import type { EntryReader } from "../../domain/port/EntryReader.js";
3
3
  import type { MediaAssetRepository } from "../../domain/port/MediaAssetRepository.js";
4
4
  import type { TemplateRegistry } from "../../domain/model/TemplateRegistry.js";
5
5
  import type { PublicPathResolver } from "../../domain/service/PublicPathResolver.js";
@@ -16,13 +16,13 @@ import { type ComposeEntrySeoMetaUseCase } from "./ComposeEntrySeoMetaUseCase.js
16
16
  * version would carry, so authors see real shape during review.
17
17
  */
18
18
  export declare class PreviewEntryUseCase {
19
- private readonly db;
19
+ private readonly reader;
20
20
  private readonly templates;
21
21
  private readonly paths;
22
22
  private readonly composeSeo;
23
23
  private readonly schemas;
24
24
  private readonly mediaAssets;
25
- constructor(db: DatabaseDriver, templates: TemplateRegistry, paths: PublicPathResolver | null, composeSeo: Pick<ComposeEntrySeoMetaUseCase, "execute">, schemas: ReadonlyMap<string, SchemaManifest>, mediaAssets?: MediaAssetRepository | null);
25
+ constructor(reader: EntryReader, templates: TemplateRegistry, paths: PublicPathResolver | null, composeSeo: Pick<ComposeEntrySeoMetaUseCase, "execute">, schemas: ReadonlyMap<string, SchemaManifest>, mediaAssets?: MediaAssetRepository | null);
26
26
  execute(request: PreviewEntryRequest): Promise<string | null>;
27
27
  }
28
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,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,0BAA0B,EAChC,MAAM,iCAAiC,CAAC;AAWzC;;;;;;;;;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,IAAI,CAAC,0BAA0B,EAAE,SAAS,CAAC,EACvD,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;CA8BpE"}
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,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,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;AAOrF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,iCAAiC,CAAC;AAWzC;;;;;;;;;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,oBAAoB,GAAG,IAAW;IAG5D,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CA8BpE"}
@@ -1,4 +1,3 @@
1
- import { readEntryBySlug } from "../../domain/service/io/PublishedEntries.js";
2
1
  import { joinParentIfTranslation } from "../../domain/service/io/JoinedEntryReader.js";
3
2
  import { renderEntryHtml } from "../../domain/service/HtmlRenderer.js";
4
3
  import { defaultPreviewBanner, injectPreviewBanner, } from "../../domain/service/PreviewBanner.js";
@@ -22,14 +21,14 @@ const DEFAULT_PREVIEW_STATUS_ORDER = [
22
21
  * version would carry, so authors see real shape during review.
23
22
  */
24
23
  export class PreviewEntryUseCase {
25
- db;
24
+ reader;
26
25
  templates;
27
26
  paths;
28
27
  composeSeo;
29
28
  schemas;
30
29
  mediaAssets;
31
- constructor(db, templates, paths, composeSeo, schemas, mediaAssets = null) {
32
- this.db = db;
30
+ constructor(reader, templates, paths, composeSeo, schemas, mediaAssets = null) {
31
+ this.reader = reader;
33
32
  this.templates = templates;
34
33
  this.paths = paths;
35
34
  this.composeSeo = composeSeo;
@@ -39,7 +38,7 @@ export class PreviewEntryUseCase {
39
38
  async execute(request) {
40
39
  let raw = null;
41
40
  for (const status of DEFAULT_PREVIEW_STATUS_ORDER) {
42
- raw = await readEntryBySlug(this.db, {
41
+ raw = await this.reader.readBySlug({
43
42
  collection: request.collection,
44
43
  slug: request.slug,
45
44
  locale: request.locale,
@@ -54,7 +53,7 @@ export class PreviewEntryUseCase {
54
53
  // filter so a draft translation can still preview against its
55
54
  // already-published parent. RequestPublishUseCase enforces the
56
55
  // published-parent invariant at publish time.
57
- const entry = await joinParentIfTranslation(this.db, this.schemas, raw);
56
+ const entry = await joinParentIfTranslation(this.reader, this.schemas, raw);
58
57
  const seo = await composeSeoIfPathed(this.composeSeo, this.paths, entry, request.site);
59
58
  const mediaAssets = await resolveMediaAssetsForEntries(this.mediaAssets, [entry]);
60
59
  const html = renderEntryHtml({
@@ -1 +1 @@
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,iCAAiC,CAAC;AACzC,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,UAAuD,EACvD,OAA4C,EAC5C,cAA2C,IAAI;QAL/C,OAAE,GAAF,EAAE,CAAgB;QAClB,cAAS,GAAT,SAAS,CAAkB;QAC3B,UAAK,GAAL,KAAK,CAA2B;QAChC,eAAU,GAAV,UAAU,CAA6C;QACvD,YAAO,GAAP,OAAO,CAAqC;QAC5C,gBAAW,GAAX,WAAW,CAAoC;IAC/D,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,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,oBAAoB,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAChE,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,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,iCAAiC,CAAC;AACzC,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,MAAmB,EACnB,SAA2B,EAC3B,KAAgC,EAChC,UAAuD,EACvD,OAA4C,EAC5C,cAA2C,IAAI;QAL/C,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,CAAoC;IAC/D,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,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,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,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,oBAAoB,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAChE,OAAO,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;CACF"}
@@ -1,5 +1,5 @@
1
1
  import type { SchemaManifest } from "@aotter/mantle-spec";
2
- import type { DatabaseDriver } from "../../domain/port/DatabaseDriver.js";
2
+ import type { EntryReader } from "../../domain/port/EntryReader.js";
3
3
  import type { MediaAssetRepository } from "../../domain/port/MediaAssetRepository.js";
4
4
  import type { TemplateRegistry } from "../../domain/model/TemplateRegistry.js";
5
5
  import type { PublicPathResolver } from "../../domain/service/PublicPathResolver.js";
@@ -25,13 +25,13 @@ import { type ComposeEntrySeoMetaUseCase } from "./ComposeEntrySeoMetaUseCase.js
25
25
  * Adapters map `null` to a 404 response.
26
26
  */
27
27
  export declare class RenderEntryLiveUseCase {
28
- private readonly db;
28
+ private readonly reader;
29
29
  private readonly templates;
30
30
  private readonly paths;
31
31
  private readonly composeSeo;
32
32
  private readonly schemas;
33
33
  private readonly mediaAssets;
34
- constructor(db: DatabaseDriver, templates: TemplateRegistry, paths: PublicPathResolver | null, composeSeo: Pick<ComposeEntrySeoMetaUseCase, "execute">, schemas: ReadonlyMap<string, SchemaManifest>, mediaAssets?: MediaAssetRepository | null);
34
+ constructor(reader: EntryReader, templates: TemplateRegistry, paths: PublicPathResolver | null, composeSeo: Pick<ComposeEntrySeoMetaUseCase, "execute">, schemas: ReadonlyMap<string, SchemaManifest>, mediaAssets?: MediaAssetRepository | null);
35
35
  execute(request: RenderEntryLiveRequest): Promise<string | null>;
36
36
  }
37
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,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,0BAA0B,EAChC,MAAM,iCAAiC,CAAC;AAGzC;;;;;;;;;;;;;;;;;;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,IAAI,CAAC,0BAA0B,EAAE,SAAS,CAAC,EACvD,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"}
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,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,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;AAGrF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACtF,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,iCAAiC,CAAC;AAGzC;;;;;;;;;;;;;;;;;;GAkBG;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,oBAAoB,GAAG,IAAW;IAG5D,OAAO,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAsBvE"}
@@ -1,4 +1,3 @@
1
- import { readEntryBySlug } from "../../domain/service/io/PublishedEntries.js";
2
1
  import { joinParentIfTranslation } from "../../domain/service/io/JoinedEntryReader.js";
3
2
  import { renderEntryHtml } from "../../domain/service/HtmlRenderer.js";
4
3
  import { composeSeoIfPathed, } from "./ComposeEntrySeoMetaUseCase.js";
@@ -23,14 +22,14 @@ import { resolveMediaAssetsForEntries } from "../../domain/service/io/MediaAsset
23
22
  * Adapters map `null` to a 404 response.
24
23
  */
25
24
  export class RenderEntryLiveUseCase {
26
- db;
25
+ reader;
27
26
  templates;
28
27
  paths;
29
28
  composeSeo;
30
29
  schemas;
31
30
  mediaAssets;
32
- constructor(db, templates, paths, composeSeo, schemas, mediaAssets = null) {
33
- this.db = db;
31
+ constructor(reader, templates, paths, composeSeo, schemas, mediaAssets = null) {
32
+ this.reader = reader;
34
33
  this.templates = templates;
35
34
  this.paths = paths;
36
35
  this.composeSeo = composeSeo;
@@ -39,7 +38,7 @@ export class RenderEntryLiveUseCase {
39
38
  }
40
39
  async execute(request) {
41
40
  const status = "published";
42
- const raw = await readEntryBySlug(this.db, {
41
+ const raw = await this.reader.readBySlug({
43
42
  collection: request.collection,
44
43
  slug: request.slug,
45
44
  locale: request.locale,
@@ -47,7 +46,7 @@ export class RenderEntryLiveUseCase {
47
46
  });
48
47
  if (!raw)
49
48
  return null;
50
- const entry = await joinParentIfTranslation(this.db, this.schemas, raw, {
49
+ const entry = await joinParentIfTranslation(this.reader, this.schemas, raw, {
51
50
  parentStatus: status,
52
51
  });
53
52
  const seo = await composeSeoIfPathed(this.composeSeo, this.paths, entry, request.site);
@@ -1 +1 @@
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,iCAAiC,CAAC;AACzC,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,UAAuD,EACvD,OAA4C,EAC5C,cAA2C,IAAI;QAL/C,OAAE,GAAF,EAAE,CAAgB;QAClB,cAAS,GAAT,SAAS,CAAkB;QAC3B,UAAK,GAAL,KAAK,CAA2B;QAChC,eAAU,GAAV,UAAU,CAA6C;QACvD,YAAO,GAAP,OAAO,CAAqC;QAC5C,gBAAW,GAAX,WAAW,CAAoC;IAC/D,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,OAA+B;QAC3C,MAAM,MAAM,GAAG,WAAW,CAAC;QAC3B,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
+ {"version":3,"file":"RenderEntryLiveUseCase.js","sourceRoot":"","sources":["../../../src/usecase/render/RenderEntryLiveUseCase.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAEvE,OAAO,EACL,kBAAkB,GAEnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,4BAA4B,EAAE,MAAM,iDAAiD,CAAC;AAE/F;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,sBAAsB;IAEd;IACA;IACA;IACA;IACA;IACA;IANnB,YACmB,MAAmB,EACnB,SAA2B,EAC3B,KAAgC,EAChC,UAAuD,EACvD,OAA4C,EAC5C,cAA2C,IAAI;QAL/C,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,CAAoC;IAC/D,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,MAAM;YACtB,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,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,5 @@
1
1
  import type { SchemaManifest } from "@aotter/mantle-spec";
2
- import type { DatabaseDriver } from "../../domain/port/DatabaseDriver.js";
2
+ import type { EntryReader } from "../../domain/port/EntryReader.js";
3
3
  import type { MediaAssetRepository } from "../../domain/port/MediaAssetRepository.js";
4
4
  import type { TemplateRegistry } from "../../domain/model/TemplateRegistry.js";
5
5
  import type { RenderListLiveRequest } from "../dto/render/RenderListLiveRequest.js";
@@ -15,11 +15,11 @@ import type { RenderListLiveRequest } from "../dto/render/RenderListLiveRequest.
15
15
  * template the same way they do on the entry detail page.
16
16
  */
17
17
  export declare class RenderListLiveUseCase {
18
- private readonly db;
18
+ private readonly reader;
19
19
  private readonly templates;
20
20
  private readonly schemas;
21
21
  private readonly mediaAssets;
22
- constructor(db: DatabaseDriver, templates: TemplateRegistry, schemas: ReadonlyMap<string, SchemaManifest>, mediaAssets?: MediaAssetRepository | null);
22
+ constructor(reader: EntryReader, templates: TemplateRegistry, schemas: ReadonlyMap<string, SchemaManifest>, mediaAssets?: MediaAssetRepository | null);
23
23
  execute(request: RenderListLiveRequest): Promise<string | null>;
24
24
  }
25
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,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
+ {"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,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAG/E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAGpF;;;;;;;;;;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,oBAAoB,GAAG,IAAW;IAG5D,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAkBtE"}
@@ -1,4 +1,3 @@
1
- import { readPublishedEntries } from "../../domain/service/io/PublishedEntries.js";
2
1
  import { joinParentForList } from "../../domain/service/io/JoinedEntryReader.js";
3
2
  import { renderListHtml } from "../../domain/service/HtmlRenderer.js";
4
3
  import { resolveMediaAssetsForEntries } from "../../domain/service/io/MediaAssetReferences.js";
@@ -14,22 +13,22 @@ import { resolveMediaAssetsForEntries } from "../../domain/service/io/MediaAsset
14
13
  * template the same way they do on the entry detail page.
15
14
  */
16
15
  export class RenderListLiveUseCase {
17
- db;
16
+ reader;
18
17
  templates;
19
18
  schemas;
20
19
  mediaAssets;
21
- constructor(db, templates, schemas, mediaAssets = null) {
22
- this.db = db;
20
+ constructor(reader, templates, schemas, mediaAssets = null) {
21
+ this.reader = reader;
23
22
  this.templates = templates;
24
23
  this.schemas = schemas;
25
24
  this.mediaAssets = mediaAssets;
26
25
  }
27
26
  async execute(request) {
28
- const raw = await readPublishedEntries(this.db, {
27
+ const raw = await this.reader.readPublished({
29
28
  collection: request.collection,
30
29
  locale: request.locale,
31
30
  });
32
- const entries = await joinParentForList(this.db, this.schemas, raw, {
31
+ const entries = await joinParentForList(this.reader, this.schemas, raw, {
33
32
  parentStatus: "published",
34
33
  });
35
34
  const mediaAssets = await resolveMediaAssetsForEntries(this.mediaAssets, entries);
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"RenderListLiveUseCase.js","sourceRoot":"","sources":["../../../src/usecase/render/RenderListLiveUseCase.ts"],"names":[],"mappings":"AAIA,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,MAAmB,EACnB,SAA2B,EAC3B,OAA4C,EAC5C,cAA2C,IAAI;QAH/C,WAAM,GAAN,MAAM,CAAa;QACnB,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,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;YAC1C,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,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;SACZ,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ import type { SiteConfig } from "@aotter/mantle-spec";
2
+ import type { PublishOrchestrator } from "../../domain/port/PublishOrchestrator.js";
3
+ import type { SiteConfigRepository } from "../../domain/port/SiteConfigRepository.js";
4
+ import type { UpdateSiteSettingsRequest } from "../dto/site/index.js";
5
+ /** Persist editable settings and invalidate their derivative public artifacts. */
6
+ export declare class UpdateSiteSettingsUseCase {
7
+ private readonly siteConfig;
8
+ private readonly artifacts;
9
+ constructor(siteConfig: SiteConfigRepository, artifacts: PublishOrchestrator);
10
+ execute(request: UpdateSiteSettingsRequest): Promise<SiteConfig>;
11
+ }
12
+ //# sourceMappingURL=UpdateSiteSettingsUseCase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UpdateSiteSettingsUseCase.d.ts","sourceRoot":"","sources":["../../../src/usecase/site/UpdateSiteSettingsUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEtE,kFAAkF;AAClF,qBAAa,yBAAyB;IAElC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS;gBADT,UAAU,EAAE,oBAAoB,EAChC,SAAS,EAAE,mBAAmB;IAG3C,OAAO,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,UAAU,CAAC;CAQvE"}
@@ -0,0 +1,18 @@
1
+ /** Persist editable settings and invalidate their derivative public artifacts. */
2
+ export class UpdateSiteSettingsUseCase {
3
+ siteConfig;
4
+ artifacts;
5
+ constructor(siteConfig, artifacts) {
6
+ this.siteConfig = siteConfig;
7
+ this.artifacts = artifacts;
8
+ }
9
+ async execute(request) {
10
+ if (!this.siteConfig.updateEditable) {
11
+ throw new Error("SiteConfigRepository.updateEditable is unavailable");
12
+ }
13
+ await this.siteConfig.updateEditable(request);
14
+ await this.artifacts.invalidateAll();
15
+ return this.siteConfig.load();
16
+ }
17
+ }
18
+ //# sourceMappingURL=UpdateSiteSettingsUseCase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UpdateSiteSettingsUseCase.js","sourceRoot":"","sources":["../../../src/usecase/site/UpdateSiteSettingsUseCase.ts"],"names":[],"mappings":"AAKA,kFAAkF;AAClF,MAAM,OAAO,yBAAyB;IAEjB;IACA;IAFnB,YACmB,UAAgC,EAChC,SAA8B;QAD9B,eAAU,GAAV,UAAU,CAAsB;QAChC,cAAS,GAAT,SAAS,CAAqB;IAC9C,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,OAAkC;QAC9C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QACD,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IAChC,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export { UpdateSiteSettingsUseCase } from "./UpdateSiteSettingsUseCase.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/usecase/site/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { UpdateSiteSettingsUseCase } from "./UpdateSiteSettingsUseCase.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/usecase/site/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aotter/mantle-runtime",
3
- "version": "0.0.11-alpha.62",
3
+ "version": "0.0.11-alpha.63",
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
6
  "homepage": "https://mantle.tools/",
@@ -22,6 +22,10 @@
22
22
  ".": {
23
23
  "types": "./dist/index.d.ts",
24
24
  "import": "./dist/index.js"
25
+ },
26
+ "./testing": {
27
+ "types": "./dist/testing.d.ts",
28
+ "import": "./dist/testing.js"
25
29
  }
26
30
  },
27
31
  "files": [
@@ -29,7 +33,7 @@
29
33
  "README.md"
30
34
  ],
31
35
  "dependencies": {
32
- "@aotter/mantle-spec": "0.0.11-alpha.62"
36
+ "@aotter/mantle-spec": "0.0.11-alpha.63"
33
37
  },
34
38
  "peerDependencies": {
35
39
  "zod": "^4.0.0"
@@ -1,69 +0,0 @@
1
- import { type ContentState, type Entry } from "@aotter/mantle-spec";
2
- import type { DatabaseDriver } from "../../port/DatabaseDriver.js";
3
- /**
4
- * Cross-collection scan of `status='published'` entries. Pure read,
5
- * no rendering. Used by every renderer that crosses Schema boundaries
6
- * (`HtmlPublishOrchestrator`, `ComposeLlmsTxtUseCase`,
7
- * `ComposeSitemapUseCase`). Distinguishes the three locale modes:
8
- *
9
- * - locale: string — only entries where `data.locale = locale`
10
- * - locale: null — only non-localized entries (`data.locale IS NULL`)
11
- * - omitted — every locale + non-localized
12
- *
13
- * The locale=null case matters for publish: writing a non-localized
14
- * entry must not overwrite per-locale indexes with cross-locale soup.
15
- */
16
- export interface PublishedEntriesFilter {
17
- readonly locale?: string | null;
18
- readonly collection?: string;
19
- /** Optional `LIMIT N` on the SQL query — caps both D1 read and JS
20
- * memory. Sitemap composition uses this; publish pipeline omits
21
- * (one entry-locale-collection scan is naturally small). */
22
- readonly limit?: number;
23
- }
24
- export declare function readPublishedEntries(db: DatabaseDriver, filter?: PublishedEntriesFilter): Promise<Entry[]>;
25
- /** Single-entry lookup by id. Used by the publish pipeline to load
26
- * the entry it's about to render; lifted into the domain service so
27
- * the orchestrator stops owning row-to-domain mapping. */
28
- export declare function readEntryById(db: DatabaseDriver, id: string): Promise<Entry | null>;
29
- /** Lookup an entry by (collection, slug[, locale][, status]). Used by
30
- * request-time render paths (preview, live-dev) that route by URL
31
- * slug — not the publish pipeline's flow which already holds the
32
- * entry id. Returns the most-recently-updated row if multiple
33
- * match. */
34
- export interface ReadEntryBySlugArgs {
35
- readonly collection: string;
36
- readonly slug: string;
37
- /** `string` filters to that locale; `null` filters to non-localized
38
- * entries (data.locale IS NULL); omitted = no locale filter. */
39
- readonly locale?: string | null;
40
- readonly status?: ContentState;
41
- }
42
- export declare function readEntryBySlug(db: DatabaseDriver, args: ReadEntryBySlugArgs): Promise<Entry | null>;
43
- /** Lookup an entry by an arbitrary `data.<field>` value. Generalizes
44
- * `readEntryBySlug` for the parent-join code path: `translates.on`
45
- * is conventionally "slug" but the grammar permits other field names,
46
- * so the join reader must not hard-code `$.slug`. */
47
- export interface ReadEntryByDataFieldArgs {
48
- readonly collection: string;
49
- readonly field: string;
50
- readonly value: string;
51
- readonly locale?: string | null;
52
- readonly status?: ContentState;
53
- }
54
- export declare function readEntryByDataField(db: DatabaseDriver, args: ReadEntryByDataFieldArgs): Promise<Entry | null>;
55
- /** Batch sibling to `readEntryByDataField`. Issues a single
56
- * `... WHERE data.<field> IN (?, ?, ...)` query, returning one row per
57
- * distinct value (most-recently-updated when multiple rows share the
58
- * same value). Used by the list-render parent-join to avoid N+1 reads
59
- * when a list of translations shares parents on a small set of join
60
- * values. */
61
- export interface ReadEntriesByDataFieldInArgs {
62
- readonly collection: string;
63
- readonly field: string;
64
- readonly values: readonly string[];
65
- readonly locale?: string | null;
66
- readonly status?: ContentState;
67
- }
68
- export declare function readEntriesByDataFieldIn(db: DatabaseDriver, args: ReadEntriesByDataFieldInArgs): Promise<Entry[]>;
69
- //# sourceMappingURL=PublishedEntries.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PublishedEntries.d.ts","sourceRoot":"","sources":["../../../../src/domain/service/io/PublishedEntries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;iEAE6D;IAC7D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAYD,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,cAAc,EAClB,MAAM,GAAE,sBAA2B,GAClC,OAAO,CAAC,KAAK,EAAE,CAAC,CAqBlB;AAED;;2DAE2D;AAC3D,wBAAsB,aAAa,CACjC,EAAE,EAAE,cAAc,EAClB,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CASvB;AAED;;;;aAIa;AACb,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;qEACiE;IACjE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC;CAChC;AAED,wBAAsB,eAAe,CACnC,EAAE,EAAE,cAAc,EAClB,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAQvB;AAED;;;sDAGsD;AACtD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC;CAChC;AAgBD,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,cAAc,EAClB,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAsBvB;AAED;;;;;cAKc;AACd,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC;CAChC;AAED,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,cAAc,EAClB,IAAI,EAAE,4BAA4B,GACjC,OAAO,CAAC,KAAK,EAAE,CAAC,CAwBlB"}
@@ -1,116 +0,0 @@
1
- export async function readPublishedEntries(db, filter = {}) {
2
- const conditions = ["status = 'published'"];
3
- const binds = [];
4
- if (filter.locale === null) {
5
- conditions.push(`json_extract(data, '$.locale') IS NULL`);
6
- }
7
- else if (typeof filter.locale === "string") {
8
- conditions.push(`json_extract(data, '$.locale') = ?`);
9
- binds.push(filter.locale);
10
- }
11
- if (filter.collection) {
12
- conditions.push("collection = ?");
13
- binds.push(filter.collection);
14
- }
15
- let sql = `SELECT id, collection, status, version, data, created_at, updated_at` +
16
- ` FROM entries WHERE ${conditions.join(" AND ")} ORDER BY updated_at DESC`;
17
- if (typeof filter.limit === "number" && Number.isFinite(filter.limit) && filter.limit > 0) {
18
- sql += ` LIMIT ${Math.floor(filter.limit)}`;
19
- }
20
- const rows = await db.prepare(sql).bind(...binds).all();
21
- return rows.map(rowToEntry);
22
- }
23
- /** Single-entry lookup by id. Used by the publish pipeline to load
24
- * the entry it's about to render; lifted into the domain service so
25
- * the orchestrator stops owning row-to-domain mapping. */
26
- export async function readEntryById(db, id) {
27
- const row = await db
28
- .prepare(`SELECT id, collection, status, version, data, created_at, updated_at` +
29
- ` FROM entries WHERE id = ?`)
30
- .bind(id)
31
- .first();
32
- return row ? rowToEntry(row) : null;
33
- }
34
- export async function readEntryBySlug(db, args) {
35
- return readEntryByDataField(db, {
36
- collection: args.collection,
37
- field: "slug",
38
- value: args.slug,
39
- locale: args.locale,
40
- status: args.status,
41
- });
42
- }
43
- // Single-segment allowlist (no dots). Deliberately stricter than
44
- // ViewSqlCompiler.SAFE_FIELD_NAME (which accepts dotted JSON paths
45
- // like `foo.bar` for multi-segment view projections). Both regexes
46
- // exist on purpose; keep them in sync conceptually but distinct.
47
- const SAFE_FIELD_RE = /^[A-Za-z_][A-Za-z0-9_]*$/;
48
- function assertSafeField(field) {
49
- if (!SAFE_FIELD_RE.test(field)) {
50
- throw new Error(`field name ${JSON.stringify(field)} fails ${SAFE_FIELD_RE} — schema field names must be plain identifiers (SQL-injection backstop for json_extract path interpolation)`);
51
- }
52
- }
53
- export async function readEntryByDataField(db, args) {
54
- assertSafeField(args.field);
55
- const conditions = [
56
- "collection = ?",
57
- `json_extract(data, '$.${args.field}') = ?`,
58
- ];
59
- const binds = [args.collection, args.value];
60
- if (args.locale === null) {
61
- conditions.push(`json_extract(data, '$.locale') IS NULL`);
62
- }
63
- else if (typeof args.locale === "string") {
64
- conditions.push(`json_extract(data, '$.locale') = ?`);
65
- binds.push(args.locale);
66
- }
67
- if (args.status) {
68
- conditions.push("status = ?");
69
- binds.push(args.status);
70
- }
71
- const sql = `SELECT id, collection, status, version, data, created_at, updated_at` +
72
- ` FROM entries WHERE ${conditions.join(" AND ")} ORDER BY updated_at DESC LIMIT 1`;
73
- const row = await db.prepare(sql).bind(...binds).first();
74
- return row ? rowToEntry(row) : null;
75
- }
76
- export async function readEntriesByDataFieldIn(db, args) {
77
- if (args.values.length === 0)
78
- return [];
79
- assertSafeField(args.field);
80
- const placeholders = args.values.map(() => "?").join(", ");
81
- const conditions = [
82
- "collection = ?",
83
- `json_extract(data, '$.${args.field}') IN (${placeholders})`,
84
- ];
85
- const binds = [args.collection, ...args.values];
86
- if (args.locale === null) {
87
- conditions.push(`json_extract(data, '$.locale') IS NULL`);
88
- }
89
- else if (typeof args.locale === "string") {
90
- conditions.push(`json_extract(data, '$.locale') = ?`);
91
- binds.push(args.locale);
92
- }
93
- if (args.status) {
94
- conditions.push("status = ?");
95
- binds.push(args.status);
96
- }
97
- const sql = `SELECT id, collection, status, version, data, created_at, updated_at` +
98
- ` FROM entries WHERE ${conditions.join(" AND ")} ORDER BY updated_at DESC`;
99
- const rows = await db.prepare(sql).bind(...binds).all();
100
- return rows.map(rowToEntry);
101
- }
102
- function rowToEntry(row) {
103
- const data = JSON.parse(row.data);
104
- const dataLocale = data["locale"];
105
- return {
106
- id: row.id,
107
- collection: row.collection,
108
- locale: typeof dataLocale === "string" ? dataLocale : undefined,
109
- status: row.status,
110
- version: row.version,
111
- data,
112
- createdAt: row.created_at,
113
- updatedAt: row.updated_at,
114
- };
115
- }
116
- //# sourceMappingURL=PublishedEntries.js.map