@aotter/mantle-runtime 0.0.11-alpha.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +14 -0
- package/dist/domain/index.d.ts +4 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/index.js +4 -0
- package/dist/domain/index.js.map +1 -0
- package/dist/domain/model/EntryRow.d.ts +59 -0
- package/dist/domain/model/EntryRow.d.ts.map +1 -0
- package/dist/domain/model/EntryRow.js +42 -0
- package/dist/domain/model/EntryRow.js.map +1 -0
- package/dist/domain/model/HandlerContext.d.ts +65 -0
- package/dist/domain/model/HandlerContext.d.ts.map +1 -0
- package/dist/domain/model/HandlerContext.js +2 -0
- package/dist/domain/model/HandlerContext.js.map +1 -0
- package/dist/domain/model/SeoMeta.d.ts +49 -0
- package/dist/domain/model/SeoMeta.d.ts.map +1 -0
- package/dist/domain/model/SeoMeta.js +2 -0
- package/dist/domain/model/SeoMeta.js.map +1 -0
- package/dist/domain/model/TemplateRegistry.d.ts +47 -0
- package/dist/domain/model/TemplateRegistry.d.ts.map +1 -0
- package/dist/domain/model/TemplateRegistry.js +17 -0
- package/dist/domain/model/TemplateRegistry.js.map +1 -0
- package/dist/domain/model/index.d.ts +7 -0
- package/dist/domain/model/index.d.ts.map +1 -0
- package/dist/domain/model/index.js +6 -0
- package/dist/domain/model/index.js.map +1 -0
- package/dist/domain/port/AssetServer.d.ts +21 -0
- package/dist/domain/port/AssetServer.d.ts.map +1 -0
- package/dist/domain/port/AssetServer.js +2 -0
- package/dist/domain/port/AssetServer.js.map +1 -0
- package/dist/domain/port/Clock.d.ts +13 -0
- package/dist/domain/port/Clock.d.ts.map +1 -0
- package/dist/domain/port/Clock.js +2 -0
- package/dist/domain/port/Clock.js.map +1 -0
- package/dist/domain/port/DatabaseDriver.d.ts +91 -0
- package/dist/domain/port/DatabaseDriver.d.ts.map +1 -0
- package/dist/domain/port/DatabaseDriver.js +2 -0
- package/dist/domain/port/DatabaseDriver.js.map +1 -0
- package/dist/domain/port/DeferredHookDispatcher.d.ts +55 -0
- package/dist/domain/port/DeferredHookDispatcher.d.ts.map +1 -0
- package/dist/domain/port/DeferredHookDispatcher.js +16 -0
- package/dist/domain/port/DeferredHookDispatcher.js.map +1 -0
- package/dist/domain/port/EmailSender.d.ts +31 -0
- package/dist/domain/port/EmailSender.d.ts.map +1 -0
- package/dist/domain/port/EmailSender.js +2 -0
- package/dist/domain/port/EmailSender.js.map +1 -0
- package/dist/domain/port/EntryRepository.d.ts +132 -0
- package/dist/domain/port/EntryRepository.d.ts.map +1 -0
- package/dist/domain/port/EntryRepository.js +2 -0
- package/dist/domain/port/EntryRepository.js.map +1 -0
- package/dist/domain/port/HandlerRegistry.d.ts +38 -0
- package/dist/domain/port/HandlerRegistry.d.ts.map +1 -0
- package/dist/domain/port/HandlerRegistry.js +27 -0
- package/dist/domain/port/HandlerRegistry.js.map +1 -0
- package/dist/domain/port/IdGenerator.d.ts +28 -0
- package/dist/domain/port/IdGenerator.d.ts.map +1 -0
- package/dist/domain/port/IdGenerator.js +5 -0
- package/dist/domain/port/IdGenerator.js.map +1 -0
- package/dist/domain/port/KvCache.d.ts +34 -0
- package/dist/domain/port/KvCache.d.ts.map +1 -0
- package/dist/domain/port/KvCache.js +2 -0
- package/dist/domain/port/KvCache.js.map +1 -0
- package/dist/domain/port/LifecycleHookRunner.d.ts +41 -0
- package/dist/domain/port/LifecycleHookRunner.d.ts.map +1 -0
- package/dist/domain/port/LifecycleHookRunner.js +2 -0
- package/dist/domain/port/LifecycleHookRunner.js.map +1 -0
- package/dist/domain/port/MediaStorage.d.ts +102 -0
- package/dist/domain/port/MediaStorage.d.ts.map +1 -0
- package/dist/domain/port/MediaStorage.js +2 -0
- package/dist/domain/port/MediaStorage.js.map +1 -0
- package/dist/domain/port/PublishOrchestrator.d.ts +25 -0
- package/dist/domain/port/PublishOrchestrator.d.ts.map +1 -0
- package/dist/domain/port/PublishOrchestrator.js +2 -0
- package/dist/domain/port/PublishOrchestrator.js.map +1 -0
- package/dist/domain/port/SiteConfigRepository.d.ts +27 -0
- package/dist/domain/port/SiteConfigRepository.d.ts.map +1 -0
- package/dist/domain/port/SiteConfigRepository.js +2 -0
- package/dist/domain/port/SiteConfigRepository.js.map +1 -0
- package/dist/domain/port/index.d.ts +30 -0
- package/dist/domain/port/index.d.ts.map +1 -0
- package/dist/domain/port/index.js +5 -0
- package/dist/domain/port/index.js.map +1 -0
- package/dist/domain/service/AbsoluteUrl.d.ts +6 -0
- package/dist/domain/service/AbsoluteUrl.d.ts.map +1 -0
- package/dist/domain/service/AbsoluteUrl.js +33 -0
- package/dist/domain/service/AbsoluteUrl.js.map +1 -0
- package/dist/domain/service/AuthPredicateEvaluator.d.ts +29 -0
- package/dist/domain/service/AuthPredicateEvaluator.d.ts.map +1 -0
- package/dist/domain/service/AuthPredicateEvaluator.js +48 -0
- package/dist/domain/service/AuthPredicateEvaluator.js.map +1 -0
- package/dist/domain/service/BuiltinProjector.d.ts +50 -0
- package/dist/domain/service/BuiltinProjector.d.ts.map +1 -0
- package/dist/domain/service/BuiltinProjector.js +61 -0
- package/dist/domain/service/BuiltinProjector.js.map +1 -0
- package/dist/domain/service/EntrySeoSupport.d.ts +27 -0
- package/dist/domain/service/EntrySeoSupport.d.ts.map +1 -0
- package/dist/domain/service/EntrySeoSupport.js +13 -0
- package/dist/domain/service/EntrySeoSupport.js.map +1 -0
- package/dist/domain/service/HtmlRenderer.d.ts +32 -0
- package/dist/domain/service/HtmlRenderer.d.ts.map +1 -0
- package/dist/domain/service/HtmlRenderer.js +38 -0
- package/dist/domain/service/HtmlRenderer.js.map +1 -0
- package/dist/domain/service/LocaleNegotiator.d.ts +29 -0
- package/dist/domain/service/LocaleNegotiator.d.ts.map +1 -0
- package/dist/domain/service/LocaleNegotiator.js +62 -0
- package/dist/domain/service/LocaleNegotiator.js.map +1 -0
- package/dist/domain/service/MarkdownSerializer.d.ts +48 -0
- package/dist/domain/service/MarkdownSerializer.d.ts.map +1 -0
- package/dist/domain/service/MarkdownSerializer.js +109 -0
- package/dist/domain/service/MarkdownSerializer.js.map +1 -0
- package/dist/domain/service/McpToolNaming.d.ts +12 -0
- package/dist/domain/service/McpToolNaming.d.ts.map +1 -0
- package/dist/domain/service/McpToolNaming.js +14 -0
- package/dist/domain/service/McpToolNaming.js.map +1 -0
- package/dist/domain/service/Pagination.d.ts +15 -0
- package/dist/domain/service/Pagination.d.ts.map +1 -0
- package/dist/domain/service/Pagination.js +29 -0
- package/dist/domain/service/Pagination.js.map +1 -0
- package/dist/domain/service/PathMatcher.d.ts +15 -0
- package/dist/domain/service/PathMatcher.d.ts.map +1 -0
- package/dist/domain/service/PathMatcher.js +54 -0
- package/dist/domain/service/PathMatcher.js.map +1 -0
- package/dist/domain/service/PreviewBanner.d.ts +10 -0
- package/dist/domain/service/PreviewBanner.d.ts.map +1 -0
- package/dist/domain/service/PreviewBanner.js +37 -0
- package/dist/domain/service/PreviewBanner.js.map +1 -0
- package/dist/domain/service/PublicPathResolver.d.ts +41 -0
- package/dist/domain/service/PublicPathResolver.d.ts.map +1 -0
- package/dist/domain/service/PublicPathResolver.js +24 -0
- package/dist/domain/service/PublicPathResolver.js.map +1 -0
- package/dist/domain/service/PublishKeys.d.ts +42 -0
- package/dist/domain/service/PublishKeys.d.ts.map +1 -0
- package/dist/domain/service/PublishKeys.js +69 -0
- package/dist/domain/service/PublishKeys.js.map +1 -0
- package/dist/domain/service/SeoMetaComposer.d.ts +47 -0
- package/dist/domain/service/SeoMetaComposer.d.ts.map +1 -0
- package/dist/domain/service/SeoMetaComposer.js +174 -0
- package/dist/domain/service/SeoMetaComposer.js.map +1 -0
- package/dist/domain/service/SitemapSerializer.d.ts +19 -0
- package/dist/domain/service/SitemapSerializer.d.ts.map +1 -0
- package/dist/domain/service/SitemapSerializer.js +27 -0
- package/dist/domain/service/SitemapSerializer.js.map +1 -0
- package/dist/domain/service/TriggerIndex.d.ts +27 -0
- package/dist/domain/service/TriggerIndex.d.ts.map +1 -0
- package/dist/domain/service/TriggerIndex.js +52 -0
- package/dist/domain/service/TriggerIndex.js.map +1 -0
- package/dist/domain/service/ViewParamCoercer.d.ts +20 -0
- package/dist/domain/service/ViewParamCoercer.d.ts.map +1 -0
- package/dist/domain/service/ViewParamCoercer.js +82 -0
- package/dist/domain/service/ViewParamCoercer.js.map +1 -0
- package/dist/domain/service/ViewSqlCompiler.d.ts +29 -0
- package/dist/domain/service/ViewSqlCompiler.d.ts.map +1 -0
- package/dist/domain/service/ViewSqlCompiler.js +147 -0
- package/dist/domain/service/ViewSqlCompiler.js.map +1 -0
- package/dist/domain/service/index.d.ts +28 -0
- package/dist/domain/service/index.d.ts.map +1 -0
- package/dist/domain/service/index.js +28 -0
- package/dist/domain/service/index.js.map +1 -0
- package/dist/domain/service/io/EntryWriteGuard.d.ts +19 -0
- package/dist/domain/service/io/EntryWriteGuard.d.ts.map +1 -0
- package/dist/domain/service/io/EntryWriteGuard.js +109 -0
- package/dist/domain/service/io/EntryWriteGuard.js.map +1 -0
- package/dist/domain/service/io/JoinedEntryReader.d.ts +33 -0
- package/dist/domain/service/io/JoinedEntryReader.d.ts.map +1 -0
- package/dist/domain/service/io/JoinedEntryReader.js +95 -0
- package/dist/domain/service/io/JoinedEntryReader.js.map +1 -0
- package/dist/domain/service/io/PublishedEntries.d.ts +69 -0
- package/dist/domain/service/io/PublishedEntries.d.ts.map +1 -0
- package/dist/domain/service/io/PublishedEntries.js +116 -0
- package/dist/domain/service/io/PublishedEntries.js.map +1 -0
- package/dist/domain/service/io/index.d.ts +9 -0
- package/dist/domain/service/io/index.d.ts.map +1 -0
- package/dist/domain/service/io/index.js +9 -0
- package/dist/domain/service/io/index.js.map +1 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/infrastructure/boot/canonicalMigrations.d.ts +9 -0
- package/dist/infrastructure/boot/canonicalMigrations.d.ts.map +1 -0
- package/dist/infrastructure/boot/canonicalMigrations.js +162 -0
- package/dist/infrastructure/boot/canonicalMigrations.js.map +1 -0
- package/dist/infrastructure/boot/index.d.ts +2 -0
- package/dist/infrastructure/boot/index.d.ts.map +1 -0
- package/dist/infrastructure/boot/index.js +2 -0
- package/dist/infrastructure/boot/index.js.map +1 -0
- package/dist/infrastructure/http/DiagnosticResponse.d.ts +12 -0
- package/dist/infrastructure/http/DiagnosticResponse.d.ts.map +1 -0
- package/dist/infrastructure/http/DiagnosticResponse.js +14 -0
- package/dist/infrastructure/http/DiagnosticResponse.js.map +1 -0
- package/dist/infrastructure/http/index.d.ts +2 -0
- package/dist/infrastructure/http/index.d.ts.map +1 -0
- package/dist/infrastructure/http/index.js +2 -0
- package/dist/infrastructure/http/index.js.map +1 -0
- package/dist/infrastructure/index.d.ts +12 -0
- package/dist/infrastructure/index.d.ts.map +1 -0
- package/dist/infrastructure/index.js +12 -0
- package/dist/infrastructure/index.js.map +1 -0
- package/dist/infrastructure/mcp/McpJsonRpcDispatcher.d.ts +60 -0
- package/dist/infrastructure/mcp/McpJsonRpcDispatcher.d.ts.map +1 -0
- package/dist/infrastructure/mcp/McpJsonRpcDispatcher.js +281 -0
- package/dist/infrastructure/mcp/McpJsonRpcDispatcher.js.map +1 -0
- package/dist/infrastructure/mcp/McpResponses.d.ts +14 -0
- package/dist/infrastructure/mcp/McpResponses.d.ts.map +1 -0
- package/dist/infrastructure/mcp/McpResponses.js +49 -0
- package/dist/infrastructure/mcp/McpResponses.js.map +1 -0
- package/dist/infrastructure/mcp/McpToolCatalog.d.ts +68 -0
- package/dist/infrastructure/mcp/McpToolCatalog.d.ts.map +1 -0
- package/dist/infrastructure/mcp/McpToolCatalog.js +231 -0
- package/dist/infrastructure/mcp/McpToolCatalog.js.map +1 -0
- package/dist/infrastructure/mcp/index.d.ts +4 -0
- package/dist/infrastructure/mcp/index.d.ts.map +1 -0
- package/dist/infrastructure/mcp/index.js +4 -0
- package/dist/infrastructure/mcp/index.js.map +1 -0
- package/dist/infrastructure/persistence/DatabaseEntryRepository.d.ts +35 -0
- package/dist/infrastructure/persistence/DatabaseEntryRepository.d.ts.map +1 -0
- package/dist/infrastructure/persistence/DatabaseEntryRepository.js +228 -0
- package/dist/infrastructure/persistence/DatabaseEntryRepository.js.map +1 -0
- package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.d.ts +12 -0
- package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.d.ts.map +1 -0
- package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.js +101 -0
- package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.js.map +1 -0
- package/dist/infrastructure/persistence/LifecycleHookingEntryRepository.d.ts +74 -0
- package/dist/infrastructure/persistence/LifecycleHookingEntryRepository.d.ts.map +1 -0
- package/dist/infrastructure/persistence/LifecycleHookingEntryRepository.js +208 -0
- package/dist/infrastructure/persistence/LifecycleHookingEntryRepository.js.map +1 -0
- package/dist/infrastructure/persistence/index.d.ts +4 -0
- package/dist/infrastructure/persistence/index.d.ts.map +1 -0
- package/dist/infrastructure/persistence/index.js +4 -0
- package/dist/infrastructure/persistence/index.js.map +1 -0
- package/dist/infrastructure/render/HtmlPublishOrchestrator.d.ts +34 -0
- package/dist/infrastructure/render/HtmlPublishOrchestrator.d.ts.map +1 -0
- package/dist/infrastructure/render/HtmlPublishOrchestrator.js +116 -0
- package/dist/infrastructure/render/HtmlPublishOrchestrator.js.map +1 -0
- package/dist/infrastructure/render/index.d.ts +2 -0
- package/dist/infrastructure/render/index.d.ts.map +1 -0
- package/dist/infrastructure/render/index.js +2 -0
- package/dist/infrastructure/render/index.js.map +1 -0
- package/dist/runtime.d.ts +132 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +142 -0
- package/dist/runtime.js.map +1 -0
- package/dist/usecase/boot/ValidateBootUseCase.d.ts +57 -0
- package/dist/usecase/boot/ValidateBootUseCase.d.ts.map +1 -0
- package/dist/usecase/boot/ValidateBootUseCase.js +181 -0
- package/dist/usecase/boot/ValidateBootUseCase.js.map +1 -0
- package/dist/usecase/boot/index.d.ts +2 -0
- package/dist/usecase/boot/index.d.ts.map +1 -0
- package/dist/usecase/boot/index.js +2 -0
- package/dist/usecase/boot/index.js.map +1 -0
- package/dist/usecase/content/ArchiveUseCase.d.ts +20 -0
- package/dist/usecase/content/ArchiveUseCase.d.ts.map +1 -0
- package/dist/usecase/content/ArchiveUseCase.js +47 -0
- package/dist/usecase/content/ArchiveUseCase.js.map +1 -0
- package/dist/usecase/content/ContentPublishEffects.d.ts +11 -0
- package/dist/usecase/content/ContentPublishEffects.d.ts.map +1 -0
- package/dist/usecase/content/ContentPublishEffects.js +21 -0
- package/dist/usecase/content/ContentPublishEffects.js.map +1 -0
- package/dist/usecase/content/CreateDraftUseCase.d.ts +22 -0
- package/dist/usecase/content/CreateDraftUseCase.d.ts.map +1 -0
- package/dist/usecase/content/CreateDraftUseCase.js +61 -0
- package/dist/usecase/content/CreateDraftUseCase.js.map +1 -0
- package/dist/usecase/content/DeleteEntryUseCase.d.ts +20 -0
- package/dist/usecase/content/DeleteEntryUseCase.d.ts.map +1 -0
- package/dist/usecase/content/DeleteEntryUseCase.js +34 -0
- package/dist/usecase/content/DeleteEntryUseCase.js.map +1 -0
- package/dist/usecase/content/GetEntryUseCase.d.ts +13 -0
- package/dist/usecase/content/GetEntryUseCase.d.ts.map +1 -0
- package/dist/usecase/content/GetEntryUseCase.js +24 -0
- package/dist/usecase/content/GetEntryUseCase.js.map +1 -0
- package/dist/usecase/content/ListEntriesUseCase.d.ts +39 -0
- package/dist/usecase/content/ListEntriesUseCase.d.ts.map +1 -0
- package/dist/usecase/content/ListEntriesUseCase.js +58 -0
- package/dist/usecase/content/ListEntriesUseCase.js.map +1 -0
- package/dist/usecase/content/RequestPublishUseCase.d.ts +30 -0
- package/dist/usecase/content/RequestPublishUseCase.d.ts.map +1 -0
- package/dist/usecase/content/RequestPublishUseCase.js +111 -0
- package/dist/usecase/content/RequestPublishUseCase.js.map +1 -0
- package/dist/usecase/content/UnpublishUseCase.d.ts +19 -0
- package/dist/usecase/content/UnpublishUseCase.d.ts.map +1 -0
- package/dist/usecase/content/UnpublishUseCase.js +46 -0
- package/dist/usecase/content/UnpublishUseCase.js.map +1 -0
- package/dist/usecase/content/UpdateDraftUseCase.d.ts +20 -0
- package/dist/usecase/content/UpdateDraftUseCase.d.ts.map +1 -0
- package/dist/usecase/content/UpdateDraftUseCase.js +86 -0
- package/dist/usecase/content/UpdateDraftUseCase.js.map +1 -0
- package/dist/usecase/content/diagnostics.d.ts +26 -0
- package/dist/usecase/content/diagnostics.d.ts.map +1 -0
- package/dist/usecase/content/diagnostics.js +100 -0
- package/dist/usecase/content/diagnostics.js.map +1 -0
- package/dist/usecase/content/index.d.ts +15 -0
- package/dist/usecase/content/index.d.ts.map +1 -0
- package/dist/usecase/content/index.js +15 -0
- package/dist/usecase/content/index.js.map +1 -0
- package/dist/usecase/dto/content/index.d.ts +73 -0
- package/dist/usecase/dto/content/index.d.ts.map +1 -0
- package/dist/usecase/dto/content/index.js +2 -0
- package/dist/usecase/dto/content/index.js.map +1 -0
- package/dist/usecase/dto/index.d.ts +13 -0
- package/dist/usecase/dto/index.d.ts.map +1 -0
- package/dist/usecase/dto/index.js +13 -0
- package/dist/usecase/dto/index.js.map +1 -0
- package/dist/usecase/dto/lifecycle/index.d.ts +15 -0
- package/dist/usecase/dto/lifecycle/index.d.ts.map +1 -0
- package/dist/usecase/dto/lifecycle/index.js +2 -0
- package/dist/usecase/dto/lifecycle/index.js.map +1 -0
- package/dist/usecase/dto/media/index.d.ts +32 -0
- package/dist/usecase/dto/media/index.d.ts.map +1 -0
- package/dist/usecase/dto/media/index.js +8 -0
- package/dist/usecase/dto/media/index.js.map +1 -0
- package/dist/usecase/dto/procedure/index.d.ts +37 -0
- package/dist/usecase/dto/procedure/index.d.ts.map +1 -0
- package/dist/usecase/dto/procedure/index.js +2 -0
- package/dist/usecase/dto/procedure/index.js.map +1 -0
- package/dist/usecase/dto/render/ComposeEntrySeoMetaRequest.d.ts +14 -0
- package/dist/usecase/dto/render/ComposeEntrySeoMetaRequest.d.ts.map +1 -0
- package/dist/usecase/dto/render/ComposeEntrySeoMetaRequest.js +2 -0
- package/dist/usecase/dto/render/ComposeEntrySeoMetaRequest.js.map +1 -0
- package/dist/usecase/dto/render/ComposeLlmsTxtRequest.d.ts +8 -0
- package/dist/usecase/dto/render/ComposeLlmsTxtRequest.d.ts.map +1 -0
- package/dist/usecase/dto/render/ComposeLlmsTxtRequest.js +2 -0
- package/dist/usecase/dto/render/ComposeLlmsTxtRequest.js.map +1 -0
- package/dist/usecase/dto/render/ComposeSitemapRequest.d.ts +11 -0
- package/dist/usecase/dto/render/ComposeSitemapRequest.d.ts.map +1 -0
- package/dist/usecase/dto/render/ComposeSitemapRequest.js +2 -0
- package/dist/usecase/dto/render/ComposeSitemapRequest.js.map +1 -0
- package/dist/usecase/dto/render/PreviewEntryRequest.d.ts +27 -0
- package/dist/usecase/dto/render/PreviewEntryRequest.d.ts.map +1 -0
- package/dist/usecase/dto/render/PreviewEntryRequest.js +2 -0
- package/dist/usecase/dto/render/PreviewEntryRequest.js.map +1 -0
- package/dist/usecase/dto/render/RenderEntryLiveRequest.d.ts +17 -0
- package/dist/usecase/dto/render/RenderEntryLiveRequest.d.ts.map +1 -0
- package/dist/usecase/dto/render/RenderEntryLiveRequest.js +2 -0
- package/dist/usecase/dto/render/RenderEntryLiveRequest.js.map +1 -0
- package/dist/usecase/dto/render/RenderListLiveRequest.d.ts +11 -0
- package/dist/usecase/dto/render/RenderListLiveRequest.d.ts.map +1 -0
- package/dist/usecase/dto/render/RenderListLiveRequest.js +2 -0
- package/dist/usecase/dto/render/RenderListLiveRequest.js.map +1 -0
- package/dist/usecase/dto/render/index.d.ts +7 -0
- package/dist/usecase/dto/render/index.d.ts.map +1 -0
- package/dist/usecase/dto/render/index.js +7 -0
- package/dist/usecase/dto/render/index.js.map +1 -0
- package/dist/usecase/dto/view/ExecuteViewRequest.d.ts +16 -0
- package/dist/usecase/dto/view/ExecuteViewRequest.d.ts.map +1 -0
- package/dist/usecase/dto/view/ExecuteViewRequest.js +2 -0
- package/dist/usecase/dto/view/ExecuteViewRequest.js.map +1 -0
- package/dist/usecase/dto/view/index.d.ts +2 -0
- package/dist/usecase/dto/view/index.d.ts.map +1 -0
- package/dist/usecase/dto/view/index.js +2 -0
- package/dist/usecase/dto/view/index.js.map +1 -0
- package/dist/usecase/index.d.ts +16 -0
- package/dist/usecase/index.d.ts.map +1 -0
- package/dist/usecase/index.js +16 -0
- package/dist/usecase/index.js.map +1 -0
- package/dist/usecase/lifecycle/RunDeferredHookUseCase.d.ts +26 -0
- package/dist/usecase/lifecycle/RunDeferredHookUseCase.d.ts.map +1 -0
- package/dist/usecase/lifecycle/RunDeferredHookUseCase.js +44 -0
- package/dist/usecase/lifecycle/RunDeferredHookUseCase.js.map +1 -0
- package/dist/usecase/lifecycle/RunLifecycleHooksUseCase.d.ts +38 -0
- package/dist/usecase/lifecycle/RunLifecycleHooksUseCase.d.ts.map +1 -0
- package/dist/usecase/lifecycle/RunLifecycleHooksUseCase.js +67 -0
- package/dist/usecase/lifecycle/RunLifecycleHooksUseCase.js.map +1 -0
- package/dist/usecase/lifecycle/index.d.ts +3 -0
- package/dist/usecase/lifecycle/index.d.ts.map +1 -0
- package/dist/usecase/lifecycle/index.js +3 -0
- package/dist/usecase/lifecycle/index.js.map +1 -0
- package/dist/usecase/media/CommitMediaUploadUseCase.d.ts +15 -0
- package/dist/usecase/media/CommitMediaUploadUseCase.d.ts.map +1 -0
- package/dist/usecase/media/CommitMediaUploadUseCase.js +43 -0
- package/dist/usecase/media/CommitMediaUploadUseCase.js.map +1 -0
- package/dist/usecase/media/CreateMediaUploadUseCase.d.ts +18 -0
- package/dist/usecase/media/CreateMediaUploadUseCase.d.ts.map +1 -0
- package/dist/usecase/media/CreateMediaUploadUseCase.js +71 -0
- package/dist/usecase/media/CreateMediaUploadUseCase.js.map +1 -0
- package/dist/usecase/media/PendingUploadRecord.d.ts +17 -0
- package/dist/usecase/media/PendingUploadRecord.d.ts.map +1 -0
- package/dist/usecase/media/PendingUploadRecord.js +2 -0
- package/dist/usecase/media/PendingUploadRecord.js.map +1 -0
- package/dist/usecase/media/diagnostics.d.ts +15 -0
- package/dist/usecase/media/diagnostics.d.ts.map +1 -0
- package/dist/usecase/media/diagnostics.js +88 -0
- package/dist/usecase/media/diagnostics.js.map +1 -0
- package/dist/usecase/media/index.d.ts +4 -0
- package/dist/usecase/media/index.d.ts.map +1 -0
- package/dist/usecase/media/index.js +4 -0
- package/dist/usecase/media/index.js.map +1 -0
- package/dist/usecase/media/mediaAllowlist.d.ts +30 -0
- package/dist/usecase/media/mediaAllowlist.d.ts.map +1 -0
- package/dist/usecase/media/mediaAllowlist.js +53 -0
- package/dist/usecase/media/mediaAllowlist.js.map +1 -0
- package/dist/usecase/procedure/InvokeBuiltinUseCase.d.ts +43 -0
- package/dist/usecase/procedure/InvokeBuiltinUseCase.d.ts.map +1 -0
- package/dist/usecase/procedure/InvokeBuiltinUseCase.js +202 -0
- package/dist/usecase/procedure/InvokeBuiltinUseCase.js.map +1 -0
- package/dist/usecase/procedure/InvokeProcedureUseCase.d.ts +50 -0
- package/dist/usecase/procedure/InvokeProcedureUseCase.d.ts.map +1 -0
- package/dist/usecase/procedure/InvokeProcedureUseCase.js +191 -0
- package/dist/usecase/procedure/InvokeProcedureUseCase.js.map +1 -0
- package/dist/usecase/procedure/index.d.ts +3 -0
- package/dist/usecase/procedure/index.d.ts.map +1 -0
- package/dist/usecase/procedure/index.js +3 -0
- package/dist/usecase/procedure/index.js.map +1 -0
- package/dist/usecase/render/ComposeEntrySeoMetaUseCase.d.ts +25 -0
- package/dist/usecase/render/ComposeEntrySeoMetaUseCase.d.ts.map +1 -0
- package/dist/usecase/render/ComposeEntrySeoMetaUseCase.js +55 -0
- package/dist/usecase/render/ComposeEntrySeoMetaUseCase.js.map +1 -0
- package/dist/usecase/render/ComposeLlmsTxtUseCase.d.ts +19 -0
- package/dist/usecase/render/ComposeLlmsTxtUseCase.d.ts.map +1 -0
- package/dist/usecase/render/ComposeLlmsTxtUseCase.js +40 -0
- package/dist/usecase/render/ComposeLlmsTxtUseCase.js.map +1 -0
- package/dist/usecase/render/ComposeSitemapUseCase.d.ts +15 -0
- package/dist/usecase/render/ComposeSitemapUseCase.d.ts.map +1 -0
- package/dist/usecase/render/ComposeSitemapUseCase.js +29 -0
- package/dist/usecase/render/ComposeSitemapUseCase.js.map +1 -0
- package/dist/usecase/render/PreviewEntryUseCase.d.ts +26 -0
- package/dist/usecase/render/PreviewEntryUseCase.d.ts.map +1 -0
- package/dist/usecase/render/PreviewEntryUseCase.js +69 -0
- package/dist/usecase/render/PreviewEntryUseCase.js.map +1 -0
- package/dist/usecase/render/RenderEntryLiveUseCase.d.ts +35 -0
- package/dist/usecase/render/RenderEntryLiveUseCase.d.ts.map +1 -0
- package/dist/usecase/render/RenderEntryLiveUseCase.js +59 -0
- package/dist/usecase/render/RenderEntryLiveUseCase.js.map +1 -0
- package/dist/usecase/render/RenderListLiveUseCase.d.ts +23 -0
- package/dist/usecase/render/RenderListLiveUseCase.d.ts.map +1 -0
- package/dist/usecase/render/RenderListLiveUseCase.js +41 -0
- package/dist/usecase/render/RenderListLiveUseCase.js.map +1 -0
- package/dist/usecase/render/index.d.ts +7 -0
- package/dist/usecase/render/index.d.ts.map +1 -0
- package/dist/usecase/render/index.js +10 -0
- package/dist/usecase/render/index.js.map +1 -0
- package/dist/usecase/view/ExecuteViewUseCase.d.ts +31 -0
- package/dist/usecase/view/ExecuteViewUseCase.d.ts.map +1 -0
- package/dist/usecase/view/ExecuteViewUseCase.js +78 -0
- package/dist/usecase/view/ExecuteViewUseCase.js.map +1 -0
- package/dist/usecase/view/index.d.ts +2 -0
- package/dist/usecase/view/index.d.ts.map +1 -0
- package/dist/usecase/view/index.js +2 -0
- package/dist/usecase/view/index.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { assertSiteDefaultsCanonical, } from "@aotter/mantle-spec";
|
|
2
|
+
/**
|
|
3
|
+
* `site_config` row read/write. Ships the seed declared by
|
|
4
|
+
* `clam.config.ts > siteDefaults` on first deploy via INSERT … ON
|
|
5
|
+
* CONFLICT DO NOTHING so operator edits are never overwritten on
|
|
6
|
+
* subsequent deploys.
|
|
7
|
+
*
|
|
8
|
+
* The runtime calls `seed` once during bootInit; the result of `load`
|
|
9
|
+
* is what every render path and template sees.
|
|
10
|
+
*
|
|
11
|
+
* Lives in `infrastructure/persistence/` because it talks to the DB
|
|
12
|
+
* directly. Pure-domain validation (`assertSiteDefaultsCanonical`)
|
|
13
|
+
* comes from spec.
|
|
14
|
+
*/
|
|
15
|
+
const KEYS = {
|
|
16
|
+
brand: "brand",
|
|
17
|
+
title: "title",
|
|
18
|
+
description: "description",
|
|
19
|
+
origin: "origin",
|
|
20
|
+
locales: "locales",
|
|
21
|
+
faviconUrl: "faviconUrl",
|
|
22
|
+
mediaPurposes: "mediaPurposes",
|
|
23
|
+
};
|
|
24
|
+
function splitCsv(raw) {
|
|
25
|
+
if (!raw)
|
|
26
|
+
return [];
|
|
27
|
+
return raw.split(",").map((s) => s.trim()).filter((s) => s.length > 0);
|
|
28
|
+
}
|
|
29
|
+
export class DatabaseSiteConfigRepository {
|
|
30
|
+
db;
|
|
31
|
+
constructor(db) {
|
|
32
|
+
this.db = db;
|
|
33
|
+
}
|
|
34
|
+
async seed(defaults) {
|
|
35
|
+
if (!defaults)
|
|
36
|
+
return;
|
|
37
|
+
assertSiteDefaultsCanonical(defaults);
|
|
38
|
+
const stmts = [];
|
|
39
|
+
const insert = (key, value) => this.db
|
|
40
|
+
.prepare(`INSERT INTO site_config (key, value) VALUES (?, ?) ON CONFLICT(key) DO NOTHING`)
|
|
41
|
+
.bind(key, value);
|
|
42
|
+
if (defaults.brand && defaults.brand.length > 0) {
|
|
43
|
+
stmts.push(insert(KEYS.brand, defaults.brand));
|
|
44
|
+
}
|
|
45
|
+
if (defaults.title && defaults.title.length > 0) {
|
|
46
|
+
stmts.push(insert(KEYS.title, defaults.title));
|
|
47
|
+
}
|
|
48
|
+
if (defaults.description && defaults.description.length > 0) {
|
|
49
|
+
stmts.push(insert(KEYS.description, defaults.description));
|
|
50
|
+
}
|
|
51
|
+
if (defaults.origin && defaults.origin.length > 0) {
|
|
52
|
+
stmts.push(insert(KEYS.origin, defaults.origin));
|
|
53
|
+
}
|
|
54
|
+
if (defaults.faviconUrl && defaults.faviconUrl.length > 0) {
|
|
55
|
+
stmts.push(insert(KEYS.faviconUrl, defaults.faviconUrl));
|
|
56
|
+
}
|
|
57
|
+
if (defaults.locales && defaults.locales.length > 0) {
|
|
58
|
+
stmts.push(insert(KEYS.locales, defaults.locales.join(",")));
|
|
59
|
+
}
|
|
60
|
+
const purposes = defaults.media?.purposes;
|
|
61
|
+
if (purposes && purposes.length > 0) {
|
|
62
|
+
stmts.push(insert(KEYS.mediaPurposes, purposes.join(",")));
|
|
63
|
+
}
|
|
64
|
+
if (stmts.length > 0) {
|
|
65
|
+
await this.db.batch(stmts);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
async load() {
|
|
69
|
+
const rows = await this.db
|
|
70
|
+
.prepare(`SELECT key, value FROM site_config`)
|
|
71
|
+
.all();
|
|
72
|
+
const m = new Map(rows.map((r) => [r.key, r.value]));
|
|
73
|
+
const locales = splitCsv(m.get(KEYS.locales));
|
|
74
|
+
const purposes = splitCsv(m.get(KEYS.mediaPurposes));
|
|
75
|
+
return {
|
|
76
|
+
title: m.get(KEYS.title) ?? "CMS",
|
|
77
|
+
description: m.get(KEYS.description) ?? "",
|
|
78
|
+
origin: m.get(KEYS.origin) ?? "",
|
|
79
|
+
locales,
|
|
80
|
+
canonicalLocale: locales[0] ?? null,
|
|
81
|
+
brand: m.get(KEYS.brand) ?? "AotterMantle",
|
|
82
|
+
faviconUrl: m.get(KEYS.faviconUrl) || undefined,
|
|
83
|
+
media: { purposes },
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
async readLocales() {
|
|
87
|
+
const row = await this.db
|
|
88
|
+
.prepare(`SELECT value FROM site_config WHERE key = ?`)
|
|
89
|
+
.bind(KEYS.locales)
|
|
90
|
+
.first();
|
|
91
|
+
return splitCsv(row?.value);
|
|
92
|
+
}
|
|
93
|
+
async readMediaPurposes() {
|
|
94
|
+
const row = await this.db
|
|
95
|
+
.prepare(`SELECT value FROM site_config WHERE key = ?`)
|
|
96
|
+
.bind(KEYS.mediaPurposes)
|
|
97
|
+
.first();
|
|
98
|
+
return splitCsv(row?.value);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=DatabaseSiteConfigRepository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatabaseSiteConfigRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/persistence/DatabaseSiteConfigRepository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { EntryRow } from "../../domain/model/EntryRow.js";
|
|
2
|
+
import { type DeferredHookDispatcher } from "../../domain/port/DeferredHookDispatcher.js";
|
|
3
|
+
import type { ArchiveEntryArgs, CreateEntryArgs, DeleteEntryArgs, EntryRepository, FindEntryByDataFieldArgs, FindEntryByDataFieldsArgs, ListEntriesArgs, ListEntriesResult, TransitionStatusArgs, UpdateEntryArgs } from "../../domain/port/EntryRepository.js";
|
|
4
|
+
import type { LifecycleHookRunner } from "../../domain/port/LifecycleHookRunner.js";
|
|
5
|
+
import type { TriggerIndex } from "../../domain/service/TriggerIndex.js";
|
|
6
|
+
/**
|
|
7
|
+
* Decorator that wraps any `EntryRepository` and fires lifecycle
|
|
8
|
+
* Triggers around every mutation (POC ADR-0014).
|
|
9
|
+
*
|
|
10
|
+
* Symmetry rule: MCP, admin, and builtin write paths all hit the same
|
|
11
|
+
* chokepoint, so all three pay (and gain) the same hook semantics —
|
|
12
|
+
* authors don't need to remember "hooks fire on path X but not Y."
|
|
13
|
+
*
|
|
14
|
+
* Hook → mutation mapping:
|
|
15
|
+
* - `create` → `before_create` / `after_create`
|
|
16
|
+
* - `update` → `before_update` / `after_update`
|
|
17
|
+
* - `delete` → `before_delete` / `after_delete`
|
|
18
|
+
* - `archive` → `before_update` / `after_update` (status flip is
|
|
19
|
+
* a kind of update; explicit archive hooks are v0.2 if needed)
|
|
20
|
+
* - `transitionStatus({ to: 'published' })` → `before_publish` /
|
|
21
|
+
* `after_publish`; other targets fire `before_update` /
|
|
22
|
+
* `after_update`
|
|
23
|
+
*
|
|
24
|
+
* Short-circuits when no Trigger watches the row's collection — no
|
|
25
|
+
* hook runner call, no per-mutation overhead.
|
|
26
|
+
*
|
|
27
|
+
* `before_*` runs synchronously: a thrown `DiagnosticError` from the
|
|
28
|
+
* runner cancels the mutation. `after_*` runs after the inner write
|
|
29
|
+
* succeeds — fire-and-forget via `ctx.waitUntil` if the adapter
|
|
30
|
+
* populated it; otherwise inline-await.
|
|
31
|
+
*/
|
|
32
|
+
export declare class LifecycleHookingEntryRepository implements EntryRepository {
|
|
33
|
+
private readonly inner;
|
|
34
|
+
private readonly triggers;
|
|
35
|
+
private readonly hooks;
|
|
36
|
+
private readonly deferred?;
|
|
37
|
+
constructor(inner: EntryRepository, triggers: TriggerIndex, hooks: LifecycleHookRunner, deferred?: DeferredHookDispatcher | undefined);
|
|
38
|
+
create(args: CreateEntryArgs): Promise<EntryRow>;
|
|
39
|
+
get(id: string): Promise<EntryRow | null>;
|
|
40
|
+
update(args: UpdateEntryArgs): Promise<EntryRow>;
|
|
41
|
+
delete(args: DeleteEntryArgs): Promise<{
|
|
42
|
+
readonly removed: boolean;
|
|
43
|
+
}>;
|
|
44
|
+
archive(args: ArchiveEntryArgs): Promise<EntryRow>;
|
|
45
|
+
transitionStatus(args: TransitionStatusArgs): Promise<EntryRow>;
|
|
46
|
+
list(args: ListEntriesArgs): Promise<ListEntriesResult>;
|
|
47
|
+
findByDataField(args: FindEntryByDataFieldArgs): Promise<EntryRow | null>;
|
|
48
|
+
findByDataFields(args: FindEntryByDataFieldsArgs): Promise<EntryRow | null>;
|
|
49
|
+
/**
|
|
50
|
+
* After-hook execution. Tries delivery rungs in order:
|
|
51
|
+
*
|
|
52
|
+
* 1. `deferred.enqueue(envelope)` — adapter-backed deferred path
|
|
53
|
+
* (CF Workers Queues, Inngest, pg-boss, …). Survives isolate
|
|
54
|
+
* death; consume invocation rehydrates the envelope and re-fires
|
|
55
|
+
* via `CmsRuntime.runDeferredHook`. A rejection downgrades to
|
|
56
|
+
* the next rung rather than dropping the hook silently.
|
|
57
|
+
* 2. `ctx.waitUntil(promise)` — adapter-populated fire-and-forget
|
|
58
|
+
* bridge (CF Workers `ExecutionContext`). Fast but non-durable:
|
|
59
|
+
* isolate death between response and resolution loses the work.
|
|
60
|
+
* 3. inline `await promise` — non-Workers runtimes (Bun / Node /
|
|
61
|
+
* tests) where detached promises get cancelled with the request.
|
|
62
|
+
* Trades response latency for hook-fire reliability.
|
|
63
|
+
*
|
|
64
|
+
* Hook throws are surfaced via `RunLifecycleHooksUseCase`'s
|
|
65
|
+
* `errorPolicy` semantics; for `continue` the runner already
|
|
66
|
+
* `console.error`s and swallows. Anything that escapes the inline
|
|
67
|
+
* branch here is an abort-policy throw on a before_* (impossible —
|
|
68
|
+
* the parser rejects `errorPolicy: abort` on after_* hooks) or an
|
|
69
|
+
* unexpected internal error; we log and swallow so the mutation
|
|
70
|
+
* result still reaches the caller.
|
|
71
|
+
*/
|
|
72
|
+
private fireAfter;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=LifecycleHookingEntryRepository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LifecycleHookingEntryRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/persistence/LifecycleHookingEntryRepository.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAE/D,OAAO,EAEL,KAAK,sBAAsB,EAE5B,MAAM,6CAA6C,CAAC;AACrD,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,eAAe,EACf,wBAAwB,EACxB,yBAAyB,EACzB,eAAe,EACf,iBAAiB,EAEjB,oBAAoB,EACpB,eAAe,EAChB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAIzE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,+BAAgC,YAAW,eAAe;IAEnE,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAHT,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,mBAAmB,EAC1B,QAAQ,CAAC,EAAE,sBAAsB,YAAA;IAG9C,MAAM,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC;IAiBtD,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAInC,MAAM,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC;IAmBhD,MAAM,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC;QAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAqBrE,OAAO,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAmBlD,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAsBrE,IAAI,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIvD,eAAe,CAAC,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAIzE,gBAAgB,CAAC,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAI3E;;;;;;;;;;;;;;;;;;;;;;OAsBG;YACW,SAAS;CAuCxB"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { ctxSnapshotFrom, } from "../../domain/port/DeferredHookDispatcher.js";
|
|
2
|
+
const ANON_CTX = { user: null, staff: null, env: {} };
|
|
3
|
+
/**
|
|
4
|
+
* Decorator that wraps any `EntryRepository` and fires lifecycle
|
|
5
|
+
* Triggers around every mutation (POC ADR-0014).
|
|
6
|
+
*
|
|
7
|
+
* Symmetry rule: MCP, admin, and builtin write paths all hit the same
|
|
8
|
+
* chokepoint, so all three pay (and gain) the same hook semantics —
|
|
9
|
+
* authors don't need to remember "hooks fire on path X but not Y."
|
|
10
|
+
*
|
|
11
|
+
* Hook → mutation mapping:
|
|
12
|
+
* - `create` → `before_create` / `after_create`
|
|
13
|
+
* - `update` → `before_update` / `after_update`
|
|
14
|
+
* - `delete` → `before_delete` / `after_delete`
|
|
15
|
+
* - `archive` → `before_update` / `after_update` (status flip is
|
|
16
|
+
* a kind of update; explicit archive hooks are v0.2 if needed)
|
|
17
|
+
* - `transitionStatus({ to: 'published' })` → `before_publish` /
|
|
18
|
+
* `after_publish`; other targets fire `before_update` /
|
|
19
|
+
* `after_update`
|
|
20
|
+
*
|
|
21
|
+
* Short-circuits when no Trigger watches the row's collection — no
|
|
22
|
+
* hook runner call, no per-mutation overhead.
|
|
23
|
+
*
|
|
24
|
+
* `before_*` runs synchronously: a thrown `DiagnosticError` from the
|
|
25
|
+
* runner cancels the mutation. `after_*` runs after the inner write
|
|
26
|
+
* succeeds — fire-and-forget via `ctx.waitUntil` if the adapter
|
|
27
|
+
* populated it; otherwise inline-await.
|
|
28
|
+
*/
|
|
29
|
+
export class LifecycleHookingEntryRepository {
|
|
30
|
+
inner;
|
|
31
|
+
triggers;
|
|
32
|
+
hooks;
|
|
33
|
+
deferred;
|
|
34
|
+
constructor(inner, triggers, hooks, deferred) {
|
|
35
|
+
this.inner = inner;
|
|
36
|
+
this.triggers = triggers;
|
|
37
|
+
this.hooks = hooks;
|
|
38
|
+
this.deferred = deferred;
|
|
39
|
+
}
|
|
40
|
+
async create(args) {
|
|
41
|
+
const ctx = ctxOf(args);
|
|
42
|
+
if (!this.triggers.hasAny(args.collection)) {
|
|
43
|
+
return this.inner.create(args);
|
|
44
|
+
}
|
|
45
|
+
await this.hooks.run({
|
|
46
|
+
hook: "before_create",
|
|
47
|
+
schema: args.collection,
|
|
48
|
+
entry: null,
|
|
49
|
+
ctx,
|
|
50
|
+
originalInput: args.originalInput,
|
|
51
|
+
});
|
|
52
|
+
const row = await this.inner.create(args);
|
|
53
|
+
await this.fireAfter("after_create", row, ctx, args);
|
|
54
|
+
return row;
|
|
55
|
+
}
|
|
56
|
+
get(id) {
|
|
57
|
+
return this.inner.get(id);
|
|
58
|
+
}
|
|
59
|
+
async update(args) {
|
|
60
|
+
if (!this.triggers.hasAny(args.collection)) {
|
|
61
|
+
return this.inner.update(args);
|
|
62
|
+
}
|
|
63
|
+
const existing = await this.inner.get(args.id);
|
|
64
|
+
if (!existing)
|
|
65
|
+
return this.inner.update(args);
|
|
66
|
+
const ctx = ctxOf(args);
|
|
67
|
+
await this.hooks.run({
|
|
68
|
+
hook: "before_update",
|
|
69
|
+
schema: args.collection,
|
|
70
|
+
entry: existing,
|
|
71
|
+
ctx,
|
|
72
|
+
originalInput: args.originalInput,
|
|
73
|
+
});
|
|
74
|
+
const row = await this.inner.update(args);
|
|
75
|
+
await this.fireAfter("after_update", row, ctx, args);
|
|
76
|
+
return row;
|
|
77
|
+
}
|
|
78
|
+
async delete(args) {
|
|
79
|
+
if (!this.triggers.hasAny(args.collection)) {
|
|
80
|
+
return this.inner.delete(args);
|
|
81
|
+
}
|
|
82
|
+
const existing = await this.inner.get(args.id);
|
|
83
|
+
if (!existing)
|
|
84
|
+
return this.inner.delete(args);
|
|
85
|
+
const ctx = ctxOf(args);
|
|
86
|
+
await this.hooks.run({
|
|
87
|
+
hook: "before_delete",
|
|
88
|
+
schema: args.collection,
|
|
89
|
+
entry: existing,
|
|
90
|
+
ctx,
|
|
91
|
+
originalInput: args.originalInput,
|
|
92
|
+
});
|
|
93
|
+
const result = await this.inner.delete(args);
|
|
94
|
+
if (result.removed) {
|
|
95
|
+
await this.fireAfter("after_delete", existing, ctx, args);
|
|
96
|
+
}
|
|
97
|
+
return result;
|
|
98
|
+
}
|
|
99
|
+
async archive(args) {
|
|
100
|
+
if (!this.triggers.hasAny(args.collection)) {
|
|
101
|
+
return this.inner.archive(args);
|
|
102
|
+
}
|
|
103
|
+
const existing = await this.inner.get(args.id);
|
|
104
|
+
if (!existing)
|
|
105
|
+
return this.inner.archive(args);
|
|
106
|
+
const ctx = ctxOf(args);
|
|
107
|
+
await this.hooks.run({
|
|
108
|
+
hook: "before_update",
|
|
109
|
+
schema: args.collection,
|
|
110
|
+
entry: existing,
|
|
111
|
+
ctx,
|
|
112
|
+
originalInput: args.originalInput,
|
|
113
|
+
});
|
|
114
|
+
const row = await this.inner.archive(args);
|
|
115
|
+
await this.fireAfter("after_update", row, ctx, args);
|
|
116
|
+
return row;
|
|
117
|
+
}
|
|
118
|
+
async transitionStatus(args) {
|
|
119
|
+
if (!this.triggers.hasAny(args.collection)) {
|
|
120
|
+
return this.inner.transitionStatus(args);
|
|
121
|
+
}
|
|
122
|
+
const isPublish = args.to === "published";
|
|
123
|
+
const beforeHook = isPublish ? "before_publish" : "before_update";
|
|
124
|
+
const afterHook = isPublish ? "after_publish" : "after_update";
|
|
125
|
+
const existing = await this.inner.get(args.id);
|
|
126
|
+
if (!existing)
|
|
127
|
+
return this.inner.transitionStatus(args);
|
|
128
|
+
const ctx = ctxOf(args);
|
|
129
|
+
await this.hooks.run({
|
|
130
|
+
hook: beforeHook,
|
|
131
|
+
schema: args.collection,
|
|
132
|
+
entry: existing,
|
|
133
|
+
ctx,
|
|
134
|
+
originalInput: args.originalInput,
|
|
135
|
+
});
|
|
136
|
+
const row = await this.inner.transitionStatus(args);
|
|
137
|
+
await this.fireAfter(afterHook, row, ctx, args);
|
|
138
|
+
return row;
|
|
139
|
+
}
|
|
140
|
+
list(args) {
|
|
141
|
+
return this.inner.list(args);
|
|
142
|
+
}
|
|
143
|
+
findByDataField(args) {
|
|
144
|
+
return this.inner.findByDataField(args);
|
|
145
|
+
}
|
|
146
|
+
findByDataFields(args) {
|
|
147
|
+
return this.inner.findByDataFields(args);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* After-hook execution. Tries delivery rungs in order:
|
|
151
|
+
*
|
|
152
|
+
* 1. `deferred.enqueue(envelope)` — adapter-backed deferred path
|
|
153
|
+
* (CF Workers Queues, Inngest, pg-boss, …). Survives isolate
|
|
154
|
+
* death; consume invocation rehydrates the envelope and re-fires
|
|
155
|
+
* via `CmsRuntime.runDeferredHook`. A rejection downgrades to
|
|
156
|
+
* the next rung rather than dropping the hook silently.
|
|
157
|
+
* 2. `ctx.waitUntil(promise)` — adapter-populated fire-and-forget
|
|
158
|
+
* bridge (CF Workers `ExecutionContext`). Fast but non-durable:
|
|
159
|
+
* isolate death between response and resolution loses the work.
|
|
160
|
+
* 3. inline `await promise` — non-Workers runtimes (Bun / Node /
|
|
161
|
+
* tests) where detached promises get cancelled with the request.
|
|
162
|
+
* Trades response latency for hook-fire reliability.
|
|
163
|
+
*
|
|
164
|
+
* Hook throws are surfaced via `RunLifecycleHooksUseCase`'s
|
|
165
|
+
* `errorPolicy` semantics; for `continue` the runner already
|
|
166
|
+
* `console.error`s and swallows. Anything that escapes the inline
|
|
167
|
+
* branch here is an abort-policy throw on a before_* (impossible —
|
|
168
|
+
* the parser rejects `errorPolicy: abort` on after_* hooks) or an
|
|
169
|
+
* unexpected internal error; we log and swallow so the mutation
|
|
170
|
+
* result still reaches the caller.
|
|
171
|
+
*/
|
|
172
|
+
async fireAfter(hook, entry, ctx, args) {
|
|
173
|
+
if (this.deferred && this.triggers.forHook(entry.collection, hook).length > 0) {
|
|
174
|
+
const envelope = {
|
|
175
|
+
hook,
|
|
176
|
+
schema: entry.collection,
|
|
177
|
+
entry,
|
|
178
|
+
originalInput: args.originalInput,
|
|
179
|
+
ctxSnapshot: ctxSnapshotFrom(ctx),
|
|
180
|
+
};
|
|
181
|
+
try {
|
|
182
|
+
await this.deferred.enqueue(envelope);
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
catch (err) {
|
|
186
|
+
console.error(`[lifecycle] deferred enqueue for ${hook} on ${entry.collection}/${entry.id} failed; falling back`, err);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
const promise = this.hooks.run({
|
|
190
|
+
hook,
|
|
191
|
+
schema: entry.collection,
|
|
192
|
+
entry,
|
|
193
|
+
ctx,
|
|
194
|
+
originalInput: args.originalInput,
|
|
195
|
+
}).catch((err) => {
|
|
196
|
+
console.error(`[lifecycle] ${hook} on ${entry.collection}/${entry.id} failed`, err);
|
|
197
|
+
});
|
|
198
|
+
if (ctx.waitUntil) {
|
|
199
|
+
ctx.waitUntil(promise);
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
await promise;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
function ctxOf(args) {
|
|
206
|
+
return args.hookContext ?? ANON_CTX;
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=LifecycleHookingEntryRepository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LifecycleHookingEntryRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/persistence/LifecycleHookingEntryRepository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { DatabaseEntryRepository } from "./DatabaseEntryRepository.js";
|
|
2
|
+
export { DatabaseSiteConfigRepository } from "./DatabaseSiteConfigRepository.js";
|
|
3
|
+
export { LifecycleHookingEntryRepository } from "./LifecycleHookingEntryRepository.js";
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/persistence/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { DatabaseEntryRepository } from "./DatabaseEntryRepository.js";
|
|
2
|
+
export { DatabaseSiteConfigRepository } from "./DatabaseSiteConfigRepository.js";
|
|
3
|
+
export { LifecycleHookingEntryRepository } from "./LifecycleHookingEntryRepository.js";
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/infrastructure/persistence/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type SchemaManifest, type SiteConfig } from "@aotter/mantle-spec";
|
|
2
|
+
import type { DatabaseDriver } from "../../domain/port/DatabaseDriver.js";
|
|
3
|
+
import type { KvCache } from "../../domain/port/KvCache.js";
|
|
4
|
+
import type { PublishEntryRequest, PublishOrchestrator } from "../../domain/port/PublishOrchestrator.js";
|
|
5
|
+
import type { PublicPathResolver } from "../../domain/service/PublicPathResolver.js";
|
|
6
|
+
import { type SeoComposer } from "../../domain/service/EntrySeoSupport.js";
|
|
7
|
+
/**
|
|
8
|
+
* Structural contract of the llms.txt composer the orchestrator
|
|
9
|
+
* accepts. Kept here (vs. importing the concrete use-case class) so
|
|
10
|
+
* infrastructure doesn't cross the `infrastructure→usecase` boundary
|
|
11
|
+
* — the runtime assembly root wires in `ComposeLlmsTxtUseCase`,
|
|
12
|
+
* which satisfies this shape.
|
|
13
|
+
*/
|
|
14
|
+
export interface LlmsTxtComposer {
|
|
15
|
+
execute(args: {
|
|
16
|
+
readonly site: SiteConfig;
|
|
17
|
+
readonly locale: string | null;
|
|
18
|
+
}): Promise<string>;
|
|
19
|
+
}
|
|
20
|
+
export declare class HtmlPublishOrchestrator implements PublishOrchestrator {
|
|
21
|
+
private readonly db;
|
|
22
|
+
private readonly kv;
|
|
23
|
+
private readonly paths;
|
|
24
|
+
private readonly composeSeo;
|
|
25
|
+
private readonly composeLlmsTxt;
|
|
26
|
+
private readonly schemas;
|
|
27
|
+
constructor(db: DatabaseDriver, kv: KvCache, paths: PublicPathResolver | null, composeSeo: SeoComposer, composeLlmsTxt: LlmsTxtComposer, schemas: ReadonlyMap<string, SchemaManifest>);
|
|
28
|
+
publish(request: PublishEntryRequest): Promise<void>;
|
|
29
|
+
unpublish(request: PublishEntryRequest): Promise<void>;
|
|
30
|
+
private renderEntry;
|
|
31
|
+
private renderList;
|
|
32
|
+
private renderLlmsTxt;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=HtmlPublishOrchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HtmlPublishOrchestrator.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/render/HtmlPublishOrchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,cAAc,EACnB,KAAK,UAAU,EAChB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,0CAA0C,CAAC;AAoBlD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AACrF,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,yCAAyC,CAAC;AAEjD;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,IAAI,EAAE;QACZ,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;QAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;KAChC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACrB;AAgBD,qBAAa,uBAAwB,YAAW,mBAAmB;IAE/D,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO;gBALP,EAAE,EAAE,cAAc,EAClB,EAAE,EAAE,OAAO,EACX,KAAK,EAAE,kBAAkB,GAAG,IAAI,EAChC,UAAU,EAAE,WAAW,EACvB,cAAc,EAAE,eAAe,EAC/B,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC;IAGzD,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BpD,SAAS,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;YAyB9C,WAAW;YAiBX,UAAU;YAwBV,aAAa;CAI5B"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { DiagnosticError, runtimeDiagnostic, } from "@aotter/mantle-spec";
|
|
2
|
+
import { entryHtmlKey, entryMarkdownKey, listHtmlKey, llmsTxtKey, } from "../../domain/service/PublishKeys.js";
|
|
3
|
+
import { readEntryById, readPublishedEntries, } from "../../domain/service/io/PublishedEntries.js";
|
|
4
|
+
import { joinParentForList, joinParentIfTranslation, } from "../../domain/service/io/JoinedEntryReader.js";
|
|
5
|
+
import { serializeEntryAsMarkdown } from "../../domain/service/MarkdownSerializer.js";
|
|
6
|
+
import { renderEntryHtml, renderListHtml, } from "../../domain/service/HtmlRenderer.js";
|
|
7
|
+
import { composeSeoIfPathed, } from "../../domain/service/EntrySeoSupport.js";
|
|
8
|
+
/**
|
|
9
|
+
* `HtmlPublishOrchestrator` — the publish pipeline. Renders + writes
|
|
10
|
+
* to `KvCache`:
|
|
11
|
+
* 1. Entry HTML (if a template is registered for the collection)
|
|
12
|
+
* 2. Entry `.md` mirror (if the entry has a `content` field)
|
|
13
|
+
* 3. Collection list HTML for the entry's locale
|
|
14
|
+
* 4. `/llms.txt` for the entry's locale (composed by ComposeLlmsTxtUseCase)
|
|
15
|
+
*
|
|
16
|
+
* Idempotent — invoking twice with the same entry id is safe; KV
|
|
17
|
+
* writes overwrite. Non-localized entries publish under empty-string
|
|
18
|
+
* locale.
|
|
19
|
+
*/
|
|
20
|
+
const DEFAULT_DOCTYPE = "<!DOCTYPE html>\n";
|
|
21
|
+
export class HtmlPublishOrchestrator {
|
|
22
|
+
db;
|
|
23
|
+
kv;
|
|
24
|
+
paths;
|
|
25
|
+
composeSeo;
|
|
26
|
+
composeLlmsTxt;
|
|
27
|
+
schemas;
|
|
28
|
+
constructor(db, kv, paths, composeSeo, composeLlmsTxt, schemas) {
|
|
29
|
+
this.db = db;
|
|
30
|
+
this.kv = kv;
|
|
31
|
+
this.paths = paths;
|
|
32
|
+
this.composeSeo = composeSeo;
|
|
33
|
+
this.composeLlmsTxt = composeLlmsTxt;
|
|
34
|
+
this.schemas = schemas;
|
|
35
|
+
}
|
|
36
|
+
async publish(request) {
|
|
37
|
+
const raw = await readEntryById(this.db, request.entryId);
|
|
38
|
+
if (!raw) {
|
|
39
|
+
throw new DiagnosticError(runtimeDiagnostic({
|
|
40
|
+
code: "NOT_FOUND",
|
|
41
|
+
severity: "error",
|
|
42
|
+
path: `usecase/PublishEntry/${request.entryId}`,
|
|
43
|
+
value: request.entryId,
|
|
44
|
+
expected: "id of an existing entry",
|
|
45
|
+
message: `Entry not found: ${request.entryId}.`,
|
|
46
|
+
}));
|
|
47
|
+
}
|
|
48
|
+
// Materialize parent fields into the translation's data before
|
|
49
|
+
// rendering (ADR-0010). RequestPublishUseCase has already asserted
|
|
50
|
+
// the parent is published, so a status filter is safe here.
|
|
51
|
+
const entry = await joinParentIfTranslation(this.db, this.schemas, raw, {
|
|
52
|
+
parentStatus: "published",
|
|
53
|
+
});
|
|
54
|
+
const indexLocale = entry.locale ?? null;
|
|
55
|
+
const doctype = request.htmlDoctype ?? DEFAULT_DOCTYPE;
|
|
56
|
+
await Promise.all([
|
|
57
|
+
this.renderEntry(entry, request.site, request.templates, doctype),
|
|
58
|
+
this.renderList(entry.collection, indexLocale, request.site, request.templates, doctype),
|
|
59
|
+
this.renderLlmsTxt(indexLocale, request.site),
|
|
60
|
+
]);
|
|
61
|
+
}
|
|
62
|
+
async unpublish(request) {
|
|
63
|
+
const entry = await readEntryById(this.db, request.entryId);
|
|
64
|
+
if (!entry) {
|
|
65
|
+
throw new DiagnosticError(runtimeDiagnostic({
|
|
66
|
+
code: "NOT_FOUND",
|
|
67
|
+
severity: "error",
|
|
68
|
+
path: `usecase/UnpublishEntryCache/${request.entryId}`,
|
|
69
|
+
value: request.entryId,
|
|
70
|
+
expected: "id of an existing entry",
|
|
71
|
+
message: `Entry not found: ${request.entryId}.`,
|
|
72
|
+
}));
|
|
73
|
+
}
|
|
74
|
+
const indexLocale = entry.locale ?? null;
|
|
75
|
+
const doctype = request.htmlDoctype ?? DEFAULT_DOCTYPE;
|
|
76
|
+
await Promise.all([
|
|
77
|
+
this.kv.delete(entryHtmlKey(entry)),
|
|
78
|
+
this.kv.delete(entryMarkdownKey(entry)),
|
|
79
|
+
this.renderList(entry.collection, indexLocale, request.site, request.templates, doctype),
|
|
80
|
+
this.renderLlmsTxt(indexLocale, request.site),
|
|
81
|
+
]);
|
|
82
|
+
}
|
|
83
|
+
async renderEntry(entry, site, templates, doctype) {
|
|
84
|
+
const seo = await composeSeoIfPathed(this.composeSeo, this.paths, entry, site);
|
|
85
|
+
const html = renderEntryHtml({ entry, site, templates, doctype, seo });
|
|
86
|
+
if (html !== null) {
|
|
87
|
+
await this.kv.put(entryHtmlKey(entry), html);
|
|
88
|
+
}
|
|
89
|
+
const md = serializeEntryAsMarkdown(entry);
|
|
90
|
+
if (md) {
|
|
91
|
+
await this.kv.put(entryMarkdownKey(entry), md);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
async renderList(collection, locale, site, templates, doctype) {
|
|
95
|
+
const raw = await readPublishedEntries(this.db, { locale, collection });
|
|
96
|
+
const entries = await joinParentForList(this.db, this.schemas, raw, {
|
|
97
|
+
parentStatus: "published",
|
|
98
|
+
});
|
|
99
|
+
const html = renderListHtml({
|
|
100
|
+
collection,
|
|
101
|
+
locale: locale ?? "",
|
|
102
|
+
entries,
|
|
103
|
+
site,
|
|
104
|
+
templates,
|
|
105
|
+
doctype,
|
|
106
|
+
});
|
|
107
|
+
if (html !== null) {
|
|
108
|
+
await this.kv.put(listHtmlKey(collection, locale ?? ""), html);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
async renderLlmsTxt(locale, site) {
|
|
112
|
+
const body = await this.composeLlmsTxt.execute({ site, locale });
|
|
113
|
+
await this.kv.put(llmsTxtKey(locale ?? ""), body);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=HtmlPublishOrchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HtmlPublishOrchestrator.js","sourceRoot":"","sources":["../../../src/infrastructure/render/HtmlPublishOrchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,iBAAiB,GAIlB,MAAM,qBAAqB,CAAC;AAQ7B,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,UAAU,GACX,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,aAAa,EACb,oBAAoB,GACrB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EACL,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AACtF,OAAO,EACL,eAAe,EACf,cAAc,GACf,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EACL,kBAAkB,GAEnB,MAAM,yCAAyC,CAAC;AAgBjD;;;;;;;;;;;GAWG;AACH,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAE5C,MAAM,OAAO,uBAAuB;IAEf;IACA;IACA;IACA;IACA;IACA;IANnB,YACmB,EAAkB,EAClB,EAAW,EACX,KAAgC,EAChC,UAAuB,EACvB,cAA+B,EAC/B,OAA4C;QAL5C,OAAE,GAAF,EAAE,CAAgB;QAClB,OAAE,GAAF,EAAE,CAAS;QACX,UAAK,GAAL,KAAK,CAA2B;QAChC,eAAU,GAAV,UAAU,CAAa;QACvB,mBAAc,GAAd,cAAc,CAAiB;QAC/B,YAAO,GAAP,OAAO,CAAqC;IAC5D,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,OAA4B;QACxC,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,eAAe,CACvB,iBAAiB,CAAC;gBAChB,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,wBAAwB,OAAO,CAAC,OAAO,EAAE;gBAC/C,KAAK,EAAE,OAAO,CAAC,OAAO;gBACtB,QAAQ,EAAE,yBAAyB;gBACnC,OAAO,EAAE,oBAAoB,OAAO,CAAC,OAAO,GAAG;aAChD,CAAC,CACH,CAAC;QACJ,CAAC;QACD,+DAA+D;QAC/D,mEAAmE;QACnE,4DAA4D;QAC5D,MAAM,KAAK,GAAG,MAAM,uBAAuB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YACtE,YAAY,EAAE,WAAW;SAC1B,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC;QACzC,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,IAAI,eAAe,CAAC;QAEvD,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC;YACjE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC;YACxF,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC;SAC9C,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAA4B;QAC1C,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,eAAe,CACvB,iBAAiB,CAAC;gBAChB,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,+BAA+B,OAAO,CAAC,OAAO,EAAE;gBACtD,KAAK,EAAE,OAAO,CAAC,OAAO;gBACtB,QAAQ,EAAE,yBAAyB;gBACnC,OAAO,EAAE,oBAAoB,OAAO,CAAC,OAAO,GAAG;aAChD,CAAC,CACH,CAAC;QACJ,CAAC;QACD,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC;QACzC,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,IAAI,eAAe,CAAC;QAEvD,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACvC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC;YACxF,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC;SAC9C,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,KAAY,EACZ,IAAgB,EAChB,SAA2B,EAC3B,OAAe;QAEf,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC/E,MAAM,IAAI,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;QACvE,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,EAAE,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,EAAE,EAAE,CAAC;YACP,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,UAAU,CACtB,UAAkB,EAClB,MAAqB,EACrB,IAAgB,EAChB,SAA2B,EAC3B,OAAe;QAEf,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QACxE,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,IAAI,GAAG,cAAc,CAAC;YAC1B,UAAU;YACV,MAAM,EAAE,MAAM,IAAI,EAAE;YACpB,OAAO;YACP,IAAI;YACJ,SAAS;YACT,OAAO;SACR,CAAC,CAAC;QACH,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,MAAqB,EAAE,IAAgB;QACjE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACjE,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/infrastructure/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC"}
|