@kywi-software/core 0.14.0 → 0.15.1
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/AGENT-PATTERNS.md +200 -17
- package/README.md +38 -12
- package/dist/admin/audience-editor.d.ts +2 -0
- package/dist/admin/audience-editor.d.ts.map +1 -1
- package/dist/admin/audience-editor.js +4 -2
- package/dist/admin/audience-editor.js.map +1 -1
- package/dist/admin/chrome.d.ts.map +1 -1
- package/dist/admin/chrome.js +6 -7
- package/dist/admin/chrome.js.map +1 -1
- package/dist/admin/condition-builder.d.ts.map +1 -1
- package/dist/admin/condition-builder.js +16 -3
- package/dist/admin/condition-builder.js.map +1 -1
- package/dist/admin/field-components.d.ts.map +1 -1
- package/dist/admin/field-components.js +27 -1
- package/dist/admin/field-components.js.map +1 -1
- package/dist/admin/form-helpers.d.ts.map +1 -1
- package/dist/admin/form-helpers.js +6 -1
- package/dist/admin/form-helpers.js.map +1 -1
- package/dist/admin/layout-editor/chrome-env.d.ts +35 -0
- package/dist/admin/layout-editor/chrome-env.d.ts.map +1 -0
- package/dist/admin/layout-editor/chrome-env.js +13 -0
- package/dist/admin/layout-editor/chrome-env.js.map +1 -0
- package/dist/admin/layout-editor/component-actions.d.ts +58 -7
- package/dist/admin/layout-editor/component-actions.d.ts.map +1 -1
- package/dist/admin/layout-editor/component-actions.js +131 -5
- package/dist/admin/layout-editor/component-actions.js.map +1 -1
- package/dist/admin/layout-editor/component-fork.d.ts +4 -4
- package/dist/admin/layout-editor/component-fork.d.ts.map +1 -1
- package/dist/admin/layout-editor/component-fork.js +76 -10
- package/dist/admin/layout-editor/component-fork.js.map +1 -1
- package/dist/admin/layout-editor/component-picker-field.d.ts +17 -3
- package/dist/admin/layout-editor/component-picker-field.d.ts.map +1 -1
- package/dist/admin/layout-editor/component-picker-field.js +5 -2
- package/dist/admin/layout-editor/component-picker-field.js.map +1 -1
- package/dist/admin/layout-editor/drag-feedback.d.ts +25 -1
- package/dist/admin/layout-editor/drag-feedback.d.ts.map +1 -1
- package/dist/admin/layout-editor/drag-feedback.js +9 -0
- package/dist/admin/layout-editor/drag-feedback.js.map +1 -1
- package/dist/admin/layout-editor/drag-utils.d.ts +103 -5
- package/dist/admin/layout-editor/drag-utils.d.ts.map +1 -1
- package/dist/admin/layout-editor/drag-utils.js +131 -4
- package/dist/admin/layout-editor/drag-utils.js.map +1 -1
- package/dist/admin/layout-editor/editor-canvas.d.ts +11 -0
- package/dist/admin/layout-editor/editor-canvas.d.ts.map +1 -1
- package/dist/admin/layout-editor/editor-canvas.js +134 -20
- package/dist/admin/layout-editor/editor-canvas.js.map +1 -1
- package/dist/admin/layout-editor/editor-dialog.d.ts +58 -3
- package/dist/admin/layout-editor/editor-dialog.d.ts.map +1 -1
- package/dist/admin/layout-editor/editor-dialog.js +71 -9
- package/dist/admin/layout-editor/editor-dialog.js.map +1 -1
- package/dist/admin/layout-editor/editor-state.d.ts +119 -0
- package/dist/admin/layout-editor/editor-state.d.ts.map +1 -1
- package/dist/admin/layout-editor/editor-state.js +188 -6
- package/dist/admin/layout-editor/editor-state.js.map +1 -1
- package/dist/admin/layout-editor/editor-toolbar.d.ts +10 -1
- package/dist/admin/layout-editor/editor-toolbar.d.ts.map +1 -1
- package/dist/admin/layout-editor/editor-toolbar.js +2 -2
- package/dist/admin/layout-editor/editor-toolbar.js.map +1 -1
- package/dist/admin/layout-editor/editor.css +216 -8
- package/dist/admin/layout-editor/inline-text.d.ts +15 -1
- package/dist/admin/layout-editor/inline-text.d.ts.map +1 -1
- package/dist/admin/layout-editor/inline-text.js +30 -2
- package/dist/admin/layout-editor/inline-text.js.map +1 -1
- package/dist/admin/layout-editor/layout-editor.d.ts +21 -16
- package/dist/admin/layout-editor/layout-editor.d.ts.map +1 -1
- package/dist/admin/layout-editor/layout-editor.js +40 -17
- package/dist/admin/layout-editor/layout-editor.js.map +1 -1
- package/dist/admin/layout-editor/linked-component-notes.d.ts +88 -0
- package/dist/admin/layout-editor/linked-component-notes.d.ts.map +1 -0
- package/dist/admin/layout-editor/linked-component-notes.js +88 -0
- package/dist/admin/layout-editor/linked-component-notes.js.map +1 -0
- package/dist/admin/layout-editor/module-overlay.d.ts +23 -4
- package/dist/admin/layout-editor/module-overlay.d.ts.map +1 -1
- package/dist/admin/layout-editor/module-overlay.js +56 -10
- package/dist/admin/layout-editor/module-overlay.js.map +1 -1
- package/dist/admin/layout-editor/module-variant-container-config.d.ts.map +1 -1
- package/dist/admin/layout-editor/module-variant-container-config.js +9 -2
- package/dist/admin/layout-editor/module-variant-container-config.js.map +1 -1
- package/dist/admin/layout-editor/module-variant-container-panel.d.ts +75 -0
- package/dist/admin/layout-editor/module-variant-container-panel.d.ts.map +1 -0
- package/dist/admin/layout-editor/module-variant-container-panel.js +29 -0
- package/dist/admin/layout-editor/module-variant-container-panel.js.map +1 -0
- package/dist/admin/layout-editor/node-lookup.d.ts.map +1 -1
- package/dist/admin/layout-editor/node-lookup.js +33 -3
- package/dist/admin/layout-editor/node-lookup.js.map +1 -1
- package/dist/admin/layout-editor/overlay-shell.d.ts.map +1 -1
- package/dist/admin/layout-editor/overlay-shell.js +19 -4
- package/dist/admin/layout-editor/overlay-shell.js.map +1 -1
- package/dist/admin/layout-editor/props-panel.d.ts +28 -11
- package/dist/admin/layout-editor/props-panel.d.ts.map +1 -1
- package/dist/admin/layout-editor/props-panel.js +75 -125
- package/dist/admin/layout-editor/props-panel.js.map +1 -1
- package/dist/admin/layout-editor/section-variant-container-config.d.ts.map +1 -1
- package/dist/admin/layout-editor/section-variant-container-config.js +11 -2
- package/dist/admin/layout-editor/section-variant-container-config.js.map +1 -1
- package/dist/admin/layout-editor/use-chrome-flip.d.ts +99 -11
- package/dist/admin/layout-editor/use-chrome-flip.d.ts.map +1 -1
- package/dist/admin/layout-editor/use-chrome-flip.js +268 -97
- package/dist/admin/layout-editor/use-chrome-flip.js.map +1 -1
- package/dist/admin/layout-editor/use-component-connect.d.ts +13 -0
- package/dist/admin/layout-editor/use-component-connect.d.ts.map +1 -1
- package/dist/admin/layout-editor/use-component-connect.js +116 -20
- package/dist/admin/layout-editor/use-component-connect.js.map +1 -1
- package/dist/admin/layout-editor/use-component-fork.d.ts +49 -19
- package/dist/admin/layout-editor/use-component-fork.d.ts.map +1 -1
- package/dist/admin/layout-editor/use-component-fork.js +28 -19
- package/dist/admin/layout-editor/use-component-fork.js.map +1 -1
- package/dist/admin/layout-editor/use-component-library.d.ts +4 -4
- package/dist/admin/layout-editor/use-component-library.d.ts.map +1 -1
- package/dist/admin/layout-editor/use-component-library.js +1 -1
- package/dist/admin/layout-editor/use-component-library.js.map +1 -1
- package/dist/admin/layout-editor/use-editor-dnd.d.ts +10 -0
- package/dist/admin/layout-editor/use-editor-dnd.d.ts.map +1 -1
- package/dist/admin/layout-editor/use-editor-dnd.js +234 -14
- package/dist/admin/layout-editor/use-editor-dnd.js.map +1 -1
- package/dist/admin/layout-editor/variant-container-config.d.ts.map +1 -1
- package/dist/admin/layout-editor/variant-container-config.js +1 -1
- package/dist/admin/layout-editor/variant-container-config.js.map +1 -1
- package/dist/admin/layout-editor/variant-editor.d.ts +16 -15
- package/dist/admin/layout-editor/variant-editor.d.ts.map +1 -1
- package/dist/admin/layout-editor/variant-editor.js +16 -5
- package/dist/admin/layout-editor/variant-editor.js.map +1 -1
- package/dist/admin/primitives.d.ts.map +1 -1
- package/dist/admin/primitives.js +1 -1
- package/dist/admin/primitives.js.map +1 -1
- package/dist/admin/registry.d.ts +12 -0
- package/dist/admin/registry.d.ts.map +1 -1
- package/dist/admin/registry.js +12 -0
- package/dist/admin/registry.js.map +1 -1
- package/dist/admin/rule-tester.d.ts +1 -0
- package/dist/admin/rule-tester.d.ts.map +1 -1
- package/dist/admin/rule-tester.js +7 -4
- package/dist/admin/rule-tester.js.map +1 -1
- package/dist/admin/server.d.ts +10 -1
- package/dist/admin/server.d.ts.map +1 -1
- package/dist/admin/server.js +4 -1
- package/dist/admin/server.js.map +1 -1
- package/dist/admin/signal-options.d.ts +17 -0
- package/dist/admin/signal-options.d.ts.map +1 -1
- package/dist/admin/signal-options.js +28 -0
- package/dist/admin/signal-options.js.map +1 -1
- package/dist/admin/site-switcher.d.ts +16 -3
- package/dist/admin/site-switcher.d.ts.map +1 -1
- package/dist/admin/site-switcher.js +18 -3
- package/dist/admin/site-switcher.js.map +1 -1
- package/dist/admin/styles/admin.css +0 -3
- package/dist/admin/surface-matcher.d.ts +6 -2
- package/dist/admin/surface-matcher.d.ts.map +1 -1
- package/dist/admin/surface-matcher.js +42 -5
- package/dist/admin/surface-matcher.js.map +1 -1
- package/dist/admin/surfaces/audiences/audiences-data.d.ts +5 -0
- package/dist/admin/surfaces/audiences/audiences-data.d.ts.map +1 -1
- package/dist/admin/surfaces/audiences/audiences-data.js +3 -0
- package/dist/admin/surfaces/audiences/audiences-data.js.map +1 -1
- package/dist/admin/surfaces/components/components-data.d.ts +31 -11
- package/dist/admin/surfaces/components/components-data.d.ts.map +1 -1
- package/dist/admin/surfaces/components/components-data.js +17 -4
- package/dist/admin/surfaces/components/components-data.js.map +1 -1
- package/dist/admin/surfaces/components/components-list.d.ts.map +1 -1
- package/dist/admin/surfaces/components/components-list.js +20 -7
- package/dist/admin/surfaces/components/components-list.js.map +1 -1
- package/dist/admin/surfaces/components/definition-canvas.d.ts +11 -3
- package/dist/admin/surfaces/components/definition-canvas.d.ts.map +1 -1
- package/dist/admin/surfaces/components/definition-canvas.js +138 -17
- package/dist/admin/surfaces/components/definition-canvas.js.map +1 -1
- package/dist/admin/surfaces/dashboard/dashboard-index.d.ts.map +1 -1
- package/dist/admin/surfaces/dashboard/dashboard-index.js +2 -2
- package/dist/admin/surfaces/dashboard/dashboard-index.js.map +1 -1
- package/dist/admin/surfaces/layouts/layout-editor-client.d.ts.map +1 -1
- package/dist/admin/surfaces/layouts/layout-editor-client.js +12 -11
- package/dist/admin/surfaces/layouts/layout-editor-client.js.map +1 -1
- package/dist/admin/surfaces/menus/menu-editor.d.ts.map +1 -1
- package/dist/admin/surfaces/menus/menu-editor.js +17 -4
- package/dist/admin/surfaces/menus/menu-editor.js.map +1 -1
- package/dist/admin/surfaces/menus/menu-tree.d.ts +18 -4
- package/dist/admin/surfaces/menus/menu-tree.d.ts.map +1 -1
- package/dist/admin/surfaces/menus/menu-tree.js +18 -3
- package/dist/admin/surfaces/menus/menu-tree.js.map +1 -1
- package/dist/admin/surfaces/menus/menus-data.d.ts +18 -0
- package/dist/admin/surfaces/menus/menus-data.d.ts.map +1 -1
- package/dist/admin/surfaces/menus/menus-data.js +4 -0
- package/dist/admin/surfaces/menus/menus-data.js.map +1 -1
- package/dist/admin/surfaces/menus/menus-list.d.ts.map +1 -1
- package/dist/admin/surfaces/menus/menus-list.js +2 -12
- package/dist/admin/surfaces/menus/menus-list.js.map +1 -1
- package/dist/admin/surfaces/users/users-data.d.ts +14 -0
- package/dist/admin/surfaces/users/users-data.d.ts.map +1 -1
- package/dist/admin/surfaces/users/users-data.js +19 -0
- package/dist/admin/surfaces/users/users-data.js.map +1 -1
- package/dist/admin/surfaces/users/users-detail.d.ts.map +1 -1
- package/dist/admin/surfaces/users/users-detail.js +40 -4
- package/dist/admin/surfaces/users/users-detail.js.map +1 -1
- package/dist/admin/surfaces/users/users-new.d.ts.map +1 -1
- package/dist/admin/surfaces/users/users-new.js +8 -5
- package/dist/admin/surfaces/users/users-new.js.map +1 -1
- package/dist/admin/user-form.d.ts +10 -1
- package/dist/admin/user-form.d.ts.map +1 -1
- package/dist/admin/user-form.js +2 -2
- package/dist/admin/user-form.js.map +1 -1
- package/dist/api/admin-features-routes.js +2 -2
- package/dist/api/admin-features-routes.js.map +1 -1
- package/dist/api/api-key-routes.js +2 -2
- package/dist/api/api-key-routes.js.map +1 -1
- package/dist/api/audience-preview-routes.d.ts +7 -0
- package/dist/api/audience-preview-routes.d.ts.map +1 -1
- package/dist/api/audience-preview-routes.js +4 -4
- package/dist/api/audience-preview-routes.js.map +1 -1
- package/dist/api/audience-routes.d.ts +7 -0
- package/dist/api/audience-routes.d.ts.map +1 -1
- package/dist/api/audience-routes.js +31 -19
- package/dist/api/audience-routes.js.map +1 -1
- package/dist/api/audience-runtime-routes.d.ts +23 -0
- package/dist/api/audience-runtime-routes.d.ts.map +1 -1
- package/dist/api/audience-runtime-routes.js +511 -25
- package/dist/api/audience-runtime-routes.js.map +1 -1
- package/dist/api/auth-routes.d.ts.map +1 -1
- package/dist/api/auth-routes.js +10 -4
- package/dist/api/auth-routes.js.map +1 -1
- package/dist/api/auth.d.ts +1 -0
- package/dist/api/auth.d.ts.map +1 -1
- package/dist/api/auth.js +43 -3
- package/dist/api/auth.js.map +1 -1
- package/dist/api/ax-routes.d.ts.map +1 -1
- package/dist/api/ax-routes.js +7 -3
- package/dist/api/ax-routes.js.map +1 -1
- package/dist/api/bulk-routes.d.ts.map +1 -1
- package/dist/api/bulk-routes.js +7 -7
- package/dist/api/bulk-routes.js.map +1 -1
- package/dist/api/category-routes.js +6 -6
- package/dist/api/category-routes.js.map +1 -1
- package/dist/api/changeset-routes.js +2 -2
- package/dist/api/changeset-routes.js.map +1 -1
- package/dist/api/comment-routes.js +12 -12
- package/dist/api/comment-routes.js.map +1 -1
- package/dist/api/component-routes.d.ts +25 -0
- package/dist/api/component-routes.d.ts.map +1 -1
- package/dist/api/component-routes.js +44 -19
- package/dist/api/component-routes.js.map +1 -1
- package/dist/api/config-routes.js +4 -4
- package/dist/api/config-routes.js.map +1 -1
- package/dist/api/content-permission-routes.js +2 -2
- package/dist/api/content-permission-routes.js.map +1 -1
- package/dist/api/content-routes.d.ts.map +1 -1
- package/dist/api/content-routes.js +21 -16
- package/dist/api/content-routes.js.map +1 -1
- package/dist/api/content-type-routes.js +3 -3
- package/dist/api/content-type-routes.js.map +1 -1
- package/dist/api/dashboard-routes.js +1 -1
- package/dist/api/dashboard-routes.js.map +1 -1
- package/dist/api/experiment-routes.d.ts +7 -0
- package/dist/api/experiment-routes.d.ts.map +1 -1
- package/dist/api/experiment-routes.js +10 -10
- package/dist/api/experiment-routes.js.map +1 -1
- package/dist/api/experiment-runtime-routes.d.ts +6 -0
- package/dist/api/experiment-runtime-routes.d.ts.map +1 -1
- package/dist/api/experiment-runtime-routes.js +47 -11
- package/dist/api/experiment-runtime-routes.js.map +1 -1
- package/dist/api/extension-routes.js +4 -4
- package/dist/api/extension-routes.js.map +1 -1
- package/dist/api/feed-routes.d.ts +2 -2
- package/dist/api/feed-routes.js +5 -5
- package/dist/api/feed-routes.js.map +1 -1
- package/dist/api/form-routes.js +6 -6
- package/dist/api/form-routes.js.map +1 -1
- package/dist/api/graphql/resolvers.d.ts +1 -1
- package/dist/api/graphql/resolvers.d.ts.map +1 -1
- package/dist/api/graphql/resolvers.js +68 -33
- package/dist/api/graphql/resolvers.js.map +1 -1
- package/dist/api/group-routes.js +9 -9
- package/dist/api/group-routes.js.map +1 -1
- package/dist/api/index.d.ts +1 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +43 -7
- package/dist/api/index.js.map +1 -1
- package/dist/api/layout-routes.d.ts +19 -1
- package/dist/api/layout-routes.d.ts.map +1 -1
- package/dist/api/layout-routes.js +92 -8
- package/dist/api/layout-routes.js.map +1 -1
- package/dist/api/layout-write-guard.d.ts +3 -2
- package/dist/api/layout-write-guard.d.ts.map +1 -1
- package/dist/api/layout-write-guard.js +12 -4
- package/dist/api/layout-write-guard.js.map +1 -1
- package/dist/api/media-routes.d.ts.map +1 -1
- package/dist/api/media-routes.js +100 -35
- package/dist/api/media-routes.js.map +1 -1
- package/dist/api/menu-routes.d.ts +9 -1
- package/dist/api/menu-routes.d.ts.map +1 -1
- package/dist/api/menu-routes.js +46 -12
- package/dist/api/menu-routes.js.map +1 -1
- package/dist/api/nav-routes.d.ts +6 -0
- package/dist/api/nav-routes.d.ts.map +1 -1
- package/dist/api/nav-routes.js +25 -4
- package/dist/api/nav-routes.js.map +1 -1
- package/dist/api/oauth-routes.js +2 -2
- package/dist/api/oauth-routes.js.map +1 -1
- package/dist/api/openapi.d.ts.map +1 -1
- package/dist/api/openapi.js +82 -34
- package/dist/api/openapi.js.map +1 -1
- package/dist/api/pagination.d.ts +10 -0
- package/dist/api/pagination.d.ts.map +1 -1
- package/dist/api/pagination.js +7 -1
- package/dist/api/pagination.js.map +1 -1
- package/dist/api/response.d.ts +29 -0
- package/dist/api/response.d.ts.map +1 -1
- package/dist/api/response.js +23 -3
- package/dist/api/response.js.map +1 -1
- package/dist/api/search-routes.d.ts.map +1 -1
- package/dist/api/search-routes.js +19 -5
- package/dist/api/search-routes.js.map +1 -1
- package/dist/api/section-template-routes.d.ts.map +1 -1
- package/dist/api/section-template-routes.js +37 -20
- package/dist/api/section-template-routes.js.map +1 -1
- package/dist/api/site-admin-routes.d.ts +10 -1
- package/dist/api/site-admin-routes.d.ts.map +1 -1
- package/dist/api/site-admin-routes.js +21 -1
- package/dist/api/site-admin-routes.js.map +1 -1
- package/dist/api/site-context.d.ts +35 -5
- package/dist/api/site-context.d.ts.map +1 -1
- package/dist/api/site-context.js +21 -6
- package/dist/api/site-context.js.map +1 -1
- package/dist/api/site-routes.js +2 -2
- package/dist/api/site-routes.js.map +1 -1
- package/dist/api/tag-routes.d.ts.map +1 -1
- package/dist/api/tag-routes.js +5 -5
- package/dist/api/tag-routes.js.map +1 -1
- package/dist/api/translation-routes.js +5 -5
- package/dist/api/translation-routes.js.map +1 -1
- package/dist/api/user-routes.d.ts.map +1 -1
- package/dist/api/user-routes.js +136 -21
- package/dist/api/user-routes.js.map +1 -1
- package/dist/api/version-routes.js +2 -2
- package/dist/api/version-routes.js.map +1 -1
- package/dist/api/webhook-routes.js +8 -8
- package/dist/api/webhook-routes.js.map +1 -1
- package/dist/api/workflow-routes.d.ts.map +1 -1
- package/dist/api/workflow-routes.js +23 -14
- package/dist/api/workflow-routes.js.map +1 -1
- package/dist/audiences/collectors/identity.d.ts +14 -1
- package/dist/audiences/collectors/identity.d.ts.map +1 -1
- package/dist/audiences/collectors/identity.js +16 -3
- package/dist/audiences/collectors/identity.js.map +1 -1
- package/dist/audiences/collectors/index.d.ts +16 -2
- package/dist/audiences/collectors/index.d.ts.map +1 -1
- package/dist/audiences/collectors/index.js +29 -5
- package/dist/audiences/collectors/index.js.map +1 -1
- package/dist/audiences/collectors/pinned-audience.d.ts +28 -2
- package/dist/audiences/collectors/pinned-audience.d.ts.map +1 -1
- package/dist/audiences/collectors/pinned-audience.js +35 -5
- package/dist/audiences/collectors/pinned-audience.js.map +1 -1
- package/dist/audiences/collectors/selfid.d.ts +25 -0
- package/dist/audiences/collectors/selfid.d.ts.map +1 -0
- package/dist/audiences/collectors/selfid.js +46 -0
- package/dist/audiences/collectors/selfid.js.map +1 -0
- package/dist/audiences/collectors/session.d.ts +41 -0
- package/dist/audiences/collectors/session.d.ts.map +1 -0
- package/dist/audiences/collectors/session.js +50 -0
- package/dist/audiences/collectors/session.js.map +1 -0
- package/dist/audiences/collectors/utm.d.ts +15 -1
- package/dist/audiences/collectors/utm.d.ts.map +1 -1
- package/dist/audiences/collectors/utm.js +16 -2
- package/dist/audiences/collectors/utm.js.map +1 -1
- package/dist/audiences/consent-config.d.ts +21 -0
- package/dist/audiences/consent-config.d.ts.map +1 -0
- package/dist/audiences/consent-config.js +15 -0
- package/dist/audiences/consent-config.js.map +1 -0
- package/dist/audiences/consent-startup.d.ts +39 -0
- package/dist/audiences/consent-startup.d.ts.map +1 -0
- package/dist/audiences/consent-startup.js +105 -0
- package/dist/audiences/consent-startup.js.map +1 -0
- package/dist/audiences/consent.d.ts +205 -0
- package/dist/audiences/consent.d.ts.map +1 -0
- package/dist/audiences/consent.js +335 -0
- package/dist/audiences/consent.js.map +1 -0
- package/dist/audiences/cookies.d.ts +21 -0
- package/dist/audiences/cookies.d.ts.map +1 -1
- package/dist/audiences/cookies.js +26 -0
- package/dist/audiences/cookies.js.map +1 -1
- package/dist/audiences/engine.d.ts +7 -0
- package/dist/audiences/engine.d.ts.map +1 -1
- package/dist/audiences/engine.js +7 -2
- package/dist/audiences/engine.js.map +1 -1
- package/dist/audiences/entry-page.d.ts +89 -0
- package/dist/audiences/entry-page.d.ts.map +1 -0
- package/dist/audiences/entry-page.js +116 -0
- package/dist/audiences/entry-page.js.map +1 -0
- package/dist/audiences/evaluator/instant-match.d.ts.map +1 -1
- package/dist/audiences/evaluator/instant-match.js +7 -0
- package/dist/audiences/evaluator/instant-match.js.map +1 -1
- package/dist/audiences/index.d.ts +6 -2
- package/dist/audiences/index.d.ts.map +1 -1
- package/dist/audiences/index.js +12 -2
- package/dist/audiences/index.js.map +1 -1
- package/dist/audiences/queries.d.ts +16 -0
- package/dist/audiences/queries.d.ts.map +1 -1
- package/dist/audiences/queries.js +28 -1
- package/dist/audiences/queries.js.map +1 -1
- package/dist/audiences/schema.d.ts +17 -0
- package/dist/audiences/schema.d.ts.map +1 -1
- package/dist/audiences/schema.js +7 -0
- package/dist/audiences/schema.js.map +1 -1
- package/dist/audiences/server-eval.d.ts +32 -1
- package/dist/audiences/server-eval.d.ts.map +1 -1
- package/dist/audiences/server-eval.js +35 -3
- package/dist/audiences/server-eval.js.map +1 -1
- package/dist/audiences/ssr.d.ts +18 -1
- package/dist/audiences/ssr.d.ts.map +1 -1
- package/dist/audiences/ssr.js +18 -1
- package/dist/audiences/ssr.js.map +1 -1
- package/dist/audiences/types.d.ts +22 -1
- package/dist/audiences/types.d.ts.map +1 -1
- package/dist/audiences/types.js +1 -0
- package/dist/audiences/types.js.map +1 -1
- package/dist/audiences/utm-persistence.d.ts +20 -7
- package/dist/audiences/utm-persistence.d.ts.map +1 -1
- package/dist/audiences/utm-persistence.js +20 -7
- package/dist/audiences/utm-persistence.js.map +1 -1
- package/dist/auth/roles.d.ts +11 -0
- package/dist/auth/roles.d.ts.map +1 -1
- package/dist/auth/roles.js +13 -0
- package/dist/auth/roles.js.map +1 -1
- package/dist/auth/tokens.d.ts +7 -0
- package/dist/auth/tokens.d.ts.map +1 -1
- package/dist/auth/tokens.js +24 -2
- package/dist/auth/tokens.js.map +1 -1
- package/dist/ax/content-source.d.ts +10 -2
- package/dist/ax/content-source.d.ts.map +1 -1
- package/dist/ax/content-source.js +81 -5
- package/dist/ax/content-source.js.map +1 -1
- package/dist/ax/effective-body.d.ts +28 -0
- package/dist/ax/effective-body.d.ts.map +1 -0
- package/dist/ax/effective-body.js +47 -0
- package/dist/ax/effective-body.js.map +1 -0
- package/dist/ax/index.d.ts +3 -1
- package/dist/ax/index.d.ts.map +1 -1
- package/dist/ax/index.js +2 -0
- package/dist/ax/index.js.map +1 -1
- package/dist/ax/jsonld.d.ts +31 -1
- package/dist/ax/jsonld.d.ts.map +1 -1
- package/dist/ax/jsonld.js +35 -22
- package/dist/ax/jsonld.js.map +1 -1
- package/dist/ax/layout-to-html.d.ts +127 -0
- package/dist/ax/layout-to-html.d.ts.map +1 -0
- package/dist/ax/layout-to-html.js +545 -0
- package/dist/ax/layout-to-html.js.map +1 -0
- package/dist/ax/llms-full-txt.d.ts +3 -1
- package/dist/ax/llms-full-txt.d.ts.map +1 -1
- package/dist/ax/llms-full-txt.js +5 -2
- package/dist/ax/llms-full-txt.js.map +1 -1
- package/dist/ax/page-markdown.d.ts +10 -2
- package/dist/ax/page-markdown.d.ts.map +1 -1
- package/dist/ax/page-markdown.js +16 -3
- package/dist/ax/page-markdown.js.map +1 -1
- package/dist/ax/summary.d.ts +4 -0
- package/dist/ax/summary.d.ts.map +1 -1
- package/dist/ax/summary.js +6 -1
- package/dist/ax/summary.js.map +1 -1
- package/dist/ax/types.d.ts +24 -0
- package/dist/ax/types.d.ts.map +1 -1
- package/dist/cache/content-invalidation.d.ts.map +1 -1
- package/dist/cache/content-invalidation.js +11 -0
- package/dist/cache/content-invalidation.js.map +1 -1
- package/dist/config/types.d.ts +43 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js.map +1 -1
- package/dist/config/validate.d.ts.map +1 -1
- package/dist/config/validate.js +3 -0
- package/dist/config/validate.js.map +1 -1
- package/dist/db/apply-snapshot.d.ts +25 -0
- package/dist/db/apply-snapshot.d.ts.map +1 -1
- package/dist/db/apply-snapshot.js +48 -16
- package/dist/db/apply-snapshot.js.map +1 -1
- package/dist/db/ax-queries.d.ts +6 -0
- package/dist/db/ax-queries.d.ts.map +1 -1
- package/dist/db/ax-queries.js +6 -0
- package/dist/db/ax-queries.js.map +1 -1
- package/dist/db/component-instance-queries.d.ts +79 -19
- package/dist/db/component-instance-queries.d.ts.map +1 -1
- package/dist/db/component-instance-queries.js +266 -83
- package/dist/db/component-instance-queries.js.map +1 -1
- package/dist/db/component-queries.d.ts +1 -16
- package/dist/db/component-queries.d.ts.map +1 -1
- package/dist/db/component-queries.js +7 -56
- package/dist/db/component-queries.js.map +1 -1
- package/dist/db/content-queries.d.ts.map +1 -1
- package/dist/db/content-queries.js +9 -2
- package/dist/db/content-queries.js.map +1 -1
- package/dist/db/extension-queries.d.ts +2 -2
- package/dist/db/feed-queries.d.ts +3 -3
- package/dist/db/index.d.ts +1 -0
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +1 -0
- package/dist/db/index.js.map +1 -1
- package/dist/db/layout-queries.d.ts +21 -3
- package/dist/db/layout-queries.d.ts.map +1 -1
- package/dist/db/layout-queries.js +14 -6
- package/dist/db/layout-queries.js.map +1 -1
- package/dist/db/menu-queries.d.ts +69 -5
- package/dist/db/menu-queries.d.ts.map +1 -1
- package/dist/db/menu-queries.js +120 -13
- package/dist/db/menu-queries.js.map +1 -1
- package/dist/db/search-queries.d.ts.map +1 -1
- package/dist/db/search-queries.js +24 -1
- package/dist/db/search-queries.js.map +1 -1
- package/dist/db/section-template-queries.d.ts +62 -0
- package/dist/db/section-template-queries.d.ts.map +1 -0
- package/dist/db/section-template-queries.js +178 -0
- package/dist/db/section-template-queries.js.map +1 -0
- package/dist/db/site-plugin-queries.d.ts +2 -2
- package/dist/db/tree-queries.d.ts.map +1 -1
- package/dist/db/tree-queries.js +5 -0
- package/dist/db/tree-queries.js.map +1 -1
- package/dist/db/webhook-queries.d.ts +3 -3
- package/dist/db/workflow-queries.d.ts.map +1 -1
- package/dist/db/workflow-queries.js +5 -20
- package/dist/db/workflow-queries.js.map +1 -1
- package/dist/experiments/runtime.d.ts +21 -3
- package/dist/experiments/runtime.d.ts.map +1 -1
- package/dist/experiments/runtime.js +21 -3
- package/dist/experiments/runtime.js.map +1 -1
- package/dist/hooks/ax-invalidation.d.ts.map +1 -1
- package/dist/hooks/ax-invalidation.js +4 -0
- package/dist/hooks/ax-invalidation.js.map +1 -1
- package/dist/layout/component-refs.d.ts +90 -2
- package/dist/layout/component-refs.d.ts.map +1 -1
- package/dist/layout/component-refs.js +293 -16
- package/dist/layout/component-refs.js.map +1 -1
- package/dist/layout/index.d.ts +7 -4
- package/dist/layout/index.d.ts.map +1 -1
- package/dist/layout/index.js +6 -3
- package/dist/layout/index.js.map +1 -1
- package/dist/layout/legacy-variant-container.d.ts +123 -0
- package/dist/layout/legacy-variant-container.d.ts.map +1 -0
- package/dist/layout/legacy-variant-container.js +397 -0
- package/dist/layout/legacy-variant-container.js.map +1 -0
- package/dist/layout/module-permissions.d.ts.map +1 -1
- package/dist/layout/module-permissions.js +26 -38
- package/dist/layout/module-permissions.js.map +1 -1
- package/dist/layout/modules-extended.d.ts +28 -1
- package/dist/layout/modules-extended.d.ts.map +1 -1
- package/dist/layout/modules-extended.js +73 -1
- package/dist/layout/modules-extended.js.map +1 -1
- package/dist/layout/modules.d.ts.map +1 -1
- package/dist/layout/modules.js +9 -1
- package/dist/layout/modules.js.map +1 -1
- package/dist/layout/personalization.d.ts +83 -0
- package/dist/layout/personalization.d.ts.map +1 -1
- package/dist/layout/personalization.js +250 -4
- package/dist/layout/personalization.js.map +1 -1
- package/dist/layout/registry.d.ts.map +1 -1
- package/dist/layout/registry.js +20 -0
- package/dist/layout/registry.js.map +1 -1
- package/dist/layout/renderer.d.ts +29 -2
- package/dist/layout/renderer.d.ts.map +1 -1
- package/dist/layout/renderer.js +23 -6
- package/dist/layout/renderer.js.map +1 -1
- package/dist/layout/seed-defaults.d.ts +45 -0
- package/dist/layout/seed-defaults.d.ts.map +1 -0
- package/dist/layout/seed-defaults.js +75 -0
- package/dist/layout/seed-defaults.js.map +1 -0
- package/dist/layout/types.d.ts +17 -0
- package/dist/layout/types.d.ts.map +1 -1
- package/dist/layout/types.js +7 -0
- package/dist/layout/types.js.map +1 -1
- package/dist/layout/walk.d.ts +14 -0
- package/dist/layout/walk.d.ts.map +1 -0
- package/dist/layout/walk.js +49 -0
- package/dist/layout/walk.js.map +1 -0
- package/dist/media/index.d.ts +1 -1
- package/dist/media/index.d.ts.map +1 -1
- package/dist/media/index.js +1 -1
- package/dist/media/index.js.map +1 -1
- package/dist/media/inline-risk.d.ts +26 -0
- package/dist/media/inline-risk.d.ts.map +1 -0
- package/dist/media/inline-risk.js +142 -0
- package/dist/media/inline-risk.js.map +1 -0
- package/dist/media/upload-allowlist.d.ts +23 -0
- package/dist/media/upload-allowlist.d.ts.map +1 -1
- package/dist/media/upload-allowlist.js +29 -0
- package/dist/media/upload-allowlist.js.map +1 -1
- package/dist/nav/builder.d.ts.map +1 -1
- package/dist/nav/builder.js +15 -3
- package/dist/nav/builder.js.map +1 -1
- package/dist/nav/index.d.ts +1 -1
- package/dist/nav/index.d.ts.map +1 -1
- package/dist/nav/index.js +1 -1
- package/dist/nav/index.js.map +1 -1
- package/dist/nav/menu-resolver.d.ts +11 -0
- package/dist/nav/menu-resolver.d.ts.map +1 -1
- package/dist/nav/menu-resolver.js +49 -9
- package/dist/nav/menu-resolver.js.map +1 -1
- package/dist/nav/paths.d.ts +37 -0
- package/dist/nav/paths.d.ts.map +1 -0
- package/dist/nav/paths.js +48 -0
- package/dist/nav/paths.js.map +1 -0
- package/dist/nav/types.d.ts +6 -0
- package/dist/nav/types.d.ts.map +1 -1
- package/dist/nav/url-resolver.d.ts +1 -5
- package/dist/nav/url-resolver.d.ts.map +1 -1
- package/dist/nav/url-resolver.js +6 -12
- package/dist/nav/url-resolver.js.map +1 -1
- package/dist/schema/base.d.ts +24 -4
- package/dist/schema/base.d.ts.map +1 -1
- package/dist/schema/base.js +17 -4
- package/dist/schema/base.js.map +1 -1
- package/dist/schema/components.d.ts +90 -9
- package/dist/schema/components.d.ts.map +1 -1
- package/dist/schema/components.js +113 -22
- package/dist/schema/components.js.map +1 -1
- package/dist/schema/mysql-tables.d.ts +5775 -48
- package/dist/schema/mysql-tables.d.ts.map +1 -1
- package/dist/schema/mysql-tables.js +622 -46
- package/dist/schema/mysql-tables.js.map +1 -1
- package/dist/scope/jsonld.d.ts +18 -3
- package/dist/scope/jsonld.d.ts.map +1 -1
- package/dist/scope/jsonld.js +6 -4
- package/dist/scope/jsonld.js.map +1 -1
- package/dist/scope/kywi-form.d.ts +11 -0
- package/dist/scope/kywi-form.d.ts.map +1 -1
- package/dist/scope/kywi-form.js +11 -1
- package/dist/scope/kywi-form.js.map +1 -1
- package/dist/scope/kywi-wizard-form.d.ts.map +1 -1
- package/dist/scope/kywi-wizard-form.js +76 -2
- package/dist/scope/kywi-wizard-form.js.map +1 -1
- package/dist/scope/sticky-offset.d.ts +34 -13
- package/dist/scope/sticky-offset.d.ts.map +1 -1
- package/dist/scope/sticky-offset.js +236 -43
- package/dist/scope/sticky-offset.js.map +1 -1
- package/dist/site/styles.css +61 -15
- package/dist/versioning/scheduler.d.ts +28 -0
- package/dist/versioning/scheduler.d.ts.map +1 -1
- package/dist/versioning/scheduler.js +50 -3
- package/dist/versioning/scheduler.js.map +1 -1
- package/package.json +12 -2
|
@@ -0,0 +1,545 @@
|
|
|
1
|
+
import { sanitizeHtml } from '../util/sanitize.js';
|
|
2
|
+
import { createModuleRegistry } from '../layout/registry.js';
|
|
3
|
+
import { resolveComponentPlacements } from '../layout/component-refs.js';
|
|
4
|
+
import { isModuleVariantContainer } from '../layout/types.js';
|
|
5
|
+
import { selectVariantArm } from '../layout/variant-selection.js';
|
|
6
|
+
/**
|
|
7
|
+
* Serialize a stored layout document to semantic HTML in reading order.
|
|
8
|
+
* Returns `''` for a null/empty/unrecognizable document.
|
|
9
|
+
*/
|
|
10
|
+
export function layoutToHtml(layout, opts = {}) {
|
|
11
|
+
const doc = asLayoutDocument(layout);
|
|
12
|
+
if (!doc)
|
|
13
|
+
return '';
|
|
14
|
+
const resolver = opts.resolveComponent;
|
|
15
|
+
// Pre-resolve linked placements exactly as the renderer does, so the
|
|
16
|
+
// projection reads the definition rather than a placement's fallback copy.
|
|
17
|
+
// A malformed subtree (or a resolver that throws) degrades to the UNRESOLVED
|
|
18
|
+
// document rather than to no output at all — the inline fallback copy a
|
|
19
|
+
// placement carries is still the page's copy.
|
|
20
|
+
let resolved = doc;
|
|
21
|
+
if (resolver) {
|
|
22
|
+
try {
|
|
23
|
+
resolved = resolveComponentPlacements(doc, (componentId) => resolver({ componentId }));
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
resolved = doc;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const ctx = {
|
|
30
|
+
registry: opts.modules ?? builtInRegistry(),
|
|
31
|
+
...(resolver ? { resolveComponent: resolver } : {}),
|
|
32
|
+
visitedComponents: new Set(),
|
|
33
|
+
depth: 0,
|
|
34
|
+
};
|
|
35
|
+
const sink = createSink();
|
|
36
|
+
if (isRecord(resolved.regions)) {
|
|
37
|
+
for (const nodes of Object.values(resolved.regions)) {
|
|
38
|
+
for (const node of asArray(nodes))
|
|
39
|
+
emitRegionNode(node, ctx, sink);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return sink.blocks.join('\n');
|
|
43
|
+
}
|
|
44
|
+
// ─── Output sink (the budget lives here) ─────────────────────────────────────
|
|
45
|
+
/**
|
|
46
|
+
* Total characters one projection may emit. Generous for any real page (a long
|
|
47
|
+
* article body is a few tens of KB) and small enough that a pathological
|
|
48
|
+
* document — a deep diamond of components, a machine-generated layout — cannot
|
|
49
|
+
* turn one uncached `/search` hit into a memory event.
|
|
50
|
+
*/
|
|
51
|
+
const MAX_OUTPUT_CHARS = 262_144;
|
|
52
|
+
function createSink() {
|
|
53
|
+
const blocks = [];
|
|
54
|
+
let used = 0;
|
|
55
|
+
return {
|
|
56
|
+
blocks,
|
|
57
|
+
push(html) {
|
|
58
|
+
if (used >= MAX_OUTPUT_CHARS)
|
|
59
|
+
return;
|
|
60
|
+
blocks.push(html);
|
|
61
|
+
used += html.length + 1;
|
|
62
|
+
},
|
|
63
|
+
full() {
|
|
64
|
+
return used >= MAX_OUTPUT_CHARS;
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
// ─── Walking ──────────────────────────────────────────────────────────────────
|
|
69
|
+
/** How many component expansions may nest before the walk gives up. */
|
|
70
|
+
const MAX_COMPONENT_DEPTH = 10;
|
|
71
|
+
function emitRegionNode(node, ctx, out) {
|
|
72
|
+
if (!isRecord(node) || out.full())
|
|
73
|
+
return;
|
|
74
|
+
if (node.type === 'section') {
|
|
75
|
+
emitSection(node, ctx, out);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (node.type === 'variantContainer') {
|
|
79
|
+
for (const section of servedSections(node)) {
|
|
80
|
+
emitSection(section, ctx, out);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* The sections a section-level container serves an anonymous visitor: the
|
|
86
|
+
* locked winner's arm for an `ab_test`, otherwise Default. `selectVariantArm` is
|
|
87
|
+
* the renderer's own precedence — one implementation, so the corpus and the page
|
|
88
|
+
* cannot disagree about which arm is public.
|
|
89
|
+
*/
|
|
90
|
+
function servedSections(container) {
|
|
91
|
+
const arms = asArray(container.variants);
|
|
92
|
+
const arm = selectVariantArm(arms, container, null);
|
|
93
|
+
return arm ? asArray(arm.sections) : asArray(container.defaultSections);
|
|
94
|
+
}
|
|
95
|
+
/** {@link servedSections} for a MODULE-level container: one module, not sections. */
|
|
96
|
+
function servedModule(container) {
|
|
97
|
+
const arms = asArray(container.variants);
|
|
98
|
+
const arm = selectVariantArm(arms, container, null);
|
|
99
|
+
return arm ? arm.module : container.defaultModule;
|
|
100
|
+
}
|
|
101
|
+
function emitSection(section, ctx, out) {
|
|
102
|
+
if (!isRecord(section) || out.full())
|
|
103
|
+
return;
|
|
104
|
+
for (const column of asArray(section.columns)) {
|
|
105
|
+
if (!isRecord(column))
|
|
106
|
+
continue;
|
|
107
|
+
for (const node of asArray(column['nodes']))
|
|
108
|
+
emitColumnNode(node, ctx, out);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
function emitColumnNode(node, ctx, out) {
|
|
112
|
+
if (!isRecord(node) || out.full())
|
|
113
|
+
return;
|
|
114
|
+
if (isModuleVariantContainer(node)) {
|
|
115
|
+
emitModule(servedModule(node), ctx, out);
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
emitModule(node, ctx, out);
|
|
119
|
+
}
|
|
120
|
+
function emitModule(node, ctx, out) {
|
|
121
|
+
if (!isRecord(node) || typeof node.type !== 'string' || out.full())
|
|
122
|
+
return;
|
|
123
|
+
const props = isRecord(node.props) ? node.props : {};
|
|
124
|
+
if (node.type === 'component') {
|
|
125
|
+
emitComponentPlacement(props, ctx, out);
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
emitModuleOfType(node.type, props, ctx, out);
|
|
129
|
+
}
|
|
130
|
+
function emitModuleOfType(type, props, ctx, out) {
|
|
131
|
+
const entry = ctx.registry.get(type);
|
|
132
|
+
// A host that OVERRIDES a built-in name owns its prop shape, so the built-in
|
|
133
|
+
// emitter would be reading props that no longer exist. Its declared schema is
|
|
134
|
+
// the only trustworthy description of it.
|
|
135
|
+
//
|
|
136
|
+
// This runs BEFORE the skip list on purpose: the skip list describes KYWI's
|
|
137
|
+
// built-ins, and a host that registers its own `video` (with a transcript) or
|
|
138
|
+
// `carousel` (with slide copy) under that name has authored real content the
|
|
139
|
+
// built-in never carried.
|
|
140
|
+
if (entry && !entry.isBuiltIn) {
|
|
141
|
+
emitFromPropSchema(entry.props, props, out);
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
if (SKIPPED_MODULES.has(type))
|
|
145
|
+
return;
|
|
146
|
+
const emitter = BUILT_IN_EMITTERS[type];
|
|
147
|
+
if (emitter) {
|
|
148
|
+
emitter(props, out);
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
// Unregistered → skip silently. Registered but with no emitter (a built-in
|
|
152
|
+
// that carries copy in plain props) → read its schema.
|
|
153
|
+
if (entry)
|
|
154
|
+
emitFromPropSchema(entry.props, props, out);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* A `component` MODULE placement (the "Saved → Component" palette entry), whose
|
|
158
|
+
* target lives in `props`, not in a node-level `componentId`.
|
|
159
|
+
*/
|
|
160
|
+
function emitComponentPlacement(props, ctx, out) {
|
|
161
|
+
// A host that already hydrated the placement wins: that HTML is what rendered.
|
|
162
|
+
const content = str(props['content']);
|
|
163
|
+
if (content) {
|
|
164
|
+
pushHtml(content, out);
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
const resolve = ctx.resolveComponent;
|
|
168
|
+
if (!resolve)
|
|
169
|
+
return;
|
|
170
|
+
const componentId = str(props['componentId']);
|
|
171
|
+
const slug = str(props['slug']);
|
|
172
|
+
if (!componentId && !slug)
|
|
173
|
+
return;
|
|
174
|
+
const key = componentId || `slug:${slug}`;
|
|
175
|
+
// The visited set catches a definition that points back at ITSELF; the depth
|
|
176
|
+
// cap catches a chain that never repeats a key (A→B→C→…), which a visited set
|
|
177
|
+
// alone cannot bound.
|
|
178
|
+
if (ctx.visitedComponents.has(key) || ctx.depth >= MAX_COMPONENT_DEPTH)
|
|
179
|
+
return;
|
|
180
|
+
ctx.visitedComponents.add(key);
|
|
181
|
+
ctx.depth += 1;
|
|
182
|
+
try {
|
|
183
|
+
const source = resolve({
|
|
184
|
+
...(componentId ? { componentId } : {}),
|
|
185
|
+
...(slug ? { slug } : {}),
|
|
186
|
+
});
|
|
187
|
+
if (!source)
|
|
188
|
+
return;
|
|
189
|
+
emitComponentSource(source, ctx, out);
|
|
190
|
+
}
|
|
191
|
+
finally {
|
|
192
|
+
ctx.depth -= 1;
|
|
193
|
+
ctx.visitedComponents.delete(key);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
function emitComponentSource(source, ctx, out) {
|
|
197
|
+
switch (source.kind) {
|
|
198
|
+
case 'module':
|
|
199
|
+
emitModuleOfType(source.moduleType, isRecord(source.props) ? source.props : {}, ctx, out);
|
|
200
|
+
return;
|
|
201
|
+
case 'section':
|
|
202
|
+
emitSection(source.section, ctx, out);
|
|
203
|
+
return;
|
|
204
|
+
case 'variantContainer':
|
|
205
|
+
if (!isRecord(source.container))
|
|
206
|
+
return;
|
|
207
|
+
for (const section of servedSections(source.container))
|
|
208
|
+
emitSection(section, ctx, out);
|
|
209
|
+
return;
|
|
210
|
+
case 'moduleVariantContainer':
|
|
211
|
+
if (!isRecord(source.container))
|
|
212
|
+
return;
|
|
213
|
+
emitModule(servedModule(source.container), ctx, out);
|
|
214
|
+
return;
|
|
215
|
+
default:
|
|
216
|
+
// 'unresolvable' — the renderer shows the placement's own (empty) props.
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
// ─── Prop-schema projection (custom modules + schema-only built-ins) ──────────
|
|
221
|
+
function emitFromPropSchema(schema, props, out) {
|
|
222
|
+
if (!schema)
|
|
223
|
+
return;
|
|
224
|
+
let headingUsed = false;
|
|
225
|
+
for (const [key, def] of Object.entries(schema)) {
|
|
226
|
+
const value = str(props[key]);
|
|
227
|
+
if (!value)
|
|
228
|
+
continue;
|
|
229
|
+
if (def.type === 'richText') {
|
|
230
|
+
pushHtml(value, out);
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
if (def.type !== 'text' && def.type !== 'textarea')
|
|
234
|
+
continue;
|
|
235
|
+
if (isReferenceProp(key))
|
|
236
|
+
continue;
|
|
237
|
+
// A textarea prop is also how the palette stores JSON item lists; a serialized
|
|
238
|
+
// array is data, not copy.
|
|
239
|
+
if (looksLikeJson(value) || looksLikeLinkTarget(value))
|
|
240
|
+
continue;
|
|
241
|
+
if (!headingUsed && def.type === 'text') {
|
|
242
|
+
headingUsed = true;
|
|
243
|
+
out.push(`<h2>${esc(value)}</h2>`);
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
out.push(`<p>${esc(value)}</p>`);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
const HEADING_LEVELS = new Set(['h1', 'h2', 'h3', 'h4', 'h5', 'h6']);
|
|
251
|
+
const BUILT_IN_EMITTERS = {
|
|
252
|
+
heading(props, out) {
|
|
253
|
+
const text = str(props['text']);
|
|
254
|
+
if (!text)
|
|
255
|
+
return;
|
|
256
|
+
const level = str(props['level']);
|
|
257
|
+
const tag = HEADING_LEVELS.has(level) ? level : 'h2';
|
|
258
|
+
out.push(`<${tag}>${esc(text)}</${tag}>`);
|
|
259
|
+
},
|
|
260
|
+
richText(props, out) {
|
|
261
|
+
pushHtml(str(props['content']), out);
|
|
262
|
+
},
|
|
263
|
+
text(props, out) {
|
|
264
|
+
pushParagraph(str(props['content']), out);
|
|
265
|
+
},
|
|
266
|
+
button(props, out) {
|
|
267
|
+
pushLinkParagraph(str(props['label']), str(props['href']), out);
|
|
268
|
+
},
|
|
269
|
+
image(props, out) {
|
|
270
|
+
const alt = str(props['alt']);
|
|
271
|
+
if (alt)
|
|
272
|
+
out.push(`<p><em>${esc(alt)}</em></p>`);
|
|
273
|
+
pushParagraph(str(props['caption']), out);
|
|
274
|
+
},
|
|
275
|
+
card(props, out) {
|
|
276
|
+
const title = str(props['title']);
|
|
277
|
+
const href = safeHref(str(props['href']));
|
|
278
|
+
if (title) {
|
|
279
|
+
out.push(href ? `<h3><a href="${escAttr(href)}">${esc(title)}</a></h3>` : `<h3>${esc(title)}</h3>`);
|
|
280
|
+
}
|
|
281
|
+
pushParagraph(str(props['body']), out);
|
|
282
|
+
pushParagraph(str(props['footer']), out);
|
|
283
|
+
},
|
|
284
|
+
cta(props, out) {
|
|
285
|
+
pushHeading(2, str(props['headline']), out);
|
|
286
|
+
pushParagraph(str(props['subtext']), out);
|
|
287
|
+
pushLinkParagraph(str(props['buttonLabel']), str(props['buttonHref']), out);
|
|
288
|
+
},
|
|
289
|
+
hero(props, out) {
|
|
290
|
+
// h1 to match what HeroModule renders.
|
|
291
|
+
pushHeading(1, str(props['headline']), out);
|
|
292
|
+
pushParagraph(str(props['subtext']), out);
|
|
293
|
+
pushLinkParagraph(str(props['buttonLabel']), str(props['buttonHref']), out);
|
|
294
|
+
},
|
|
295
|
+
testimonial(props, out) {
|
|
296
|
+
pushQuote(str(props['quote']), out);
|
|
297
|
+
const author = str(props['author']);
|
|
298
|
+
const role = str(props['role']);
|
|
299
|
+
if (author)
|
|
300
|
+
pushParagraph(role ? `${author}, ${role}` : author, out);
|
|
301
|
+
},
|
|
302
|
+
blockquote(props, out) {
|
|
303
|
+
pushQuote(str(props['content']), out);
|
|
304
|
+
pushParagraph(str(props['author']), out);
|
|
305
|
+
},
|
|
306
|
+
faq(props, out) {
|
|
307
|
+
pushHeading(3, str(props['question']), out);
|
|
308
|
+
pushHtml(str(props['answer']), out);
|
|
309
|
+
},
|
|
310
|
+
accordion(props, out) {
|
|
311
|
+
pushHeading(3, str(props['title']), out);
|
|
312
|
+
pushHtml(str(props['content']), out);
|
|
313
|
+
},
|
|
314
|
+
pricing(props, out) {
|
|
315
|
+
pushHeading(3, str(props['planName']), out);
|
|
316
|
+
const price = str(props['price']);
|
|
317
|
+
const period = str(props['period']);
|
|
318
|
+
if (price)
|
|
319
|
+
pushParagraph(period ? `${price}/${period}` : price, out);
|
|
320
|
+
const features = parseJsonArray(props['features']).map(str).filter(Boolean);
|
|
321
|
+
if (features.length > 0) {
|
|
322
|
+
out.push(`<ul>${features.map(f => `<li>${esc(f)}</li>`).join('')}</ul>`);
|
|
323
|
+
}
|
|
324
|
+
pushLinkParagraph(str(props['buttonLabel']), str(props['buttonHref']), out);
|
|
325
|
+
},
|
|
326
|
+
alert(props, out) {
|
|
327
|
+
pushParagraph(str(props['message']), out);
|
|
328
|
+
},
|
|
329
|
+
badge(props, out) {
|
|
330
|
+
const label = str(props['label']);
|
|
331
|
+
if (!label)
|
|
332
|
+
return;
|
|
333
|
+
const href = str(props['href']);
|
|
334
|
+
if (href)
|
|
335
|
+
pushLinkParagraph(label, href, out);
|
|
336
|
+
else
|
|
337
|
+
pushParagraph(label, out);
|
|
338
|
+
},
|
|
339
|
+
tabs(props, out) {
|
|
340
|
+
for (const raw of parseJsonArray(props['tabs'])) {
|
|
341
|
+
if (!isRecord(raw))
|
|
342
|
+
continue;
|
|
343
|
+
pushHeading(3, str(raw['label']), out);
|
|
344
|
+
pushHtml(str(raw['content']), out);
|
|
345
|
+
}
|
|
346
|
+
},
|
|
347
|
+
feedDisplay(props, out) {
|
|
348
|
+
// Items are other published nodes — they enter the corpus on their own.
|
|
349
|
+
pushHeading(2, str(props['heading']) || str(props['title']), out);
|
|
350
|
+
},
|
|
351
|
+
};
|
|
352
|
+
/**
|
|
353
|
+
* Modules that carry no standalone authored copy, or whose copy is site chrome
|
|
354
|
+
* repeated on every page. See the module docblock for the reasoning per group.
|
|
355
|
+
*/
|
|
356
|
+
const SKIPPED_MODULES = new Set([
|
|
357
|
+
// Layout scaffolding
|
|
358
|
+
'section', 'container', 'columns', 'spacer', 'divider',
|
|
359
|
+
// Arbitrary markup / embeds
|
|
360
|
+
'html', 'embed', 'video',
|
|
361
|
+
// Interaction
|
|
362
|
+
'form', 'formEmbed', 'comments',
|
|
363
|
+
// Navigation + search chrome
|
|
364
|
+
'breadcrumbs', 'navMenu', 'navigation', 'siteMap', 'searchBox', 'search',
|
|
365
|
+
// Compliance chrome
|
|
366
|
+
'cookieConsent',
|
|
367
|
+
// Decorative / structured-data-only
|
|
368
|
+
'icon', 'map', 'socialShare', 'countdown', 'carousel', 'tagCloud', 'categoryList',
|
|
369
|
+
// Personalization chrome + the retired container MODULE (the real container is
|
|
370
|
+
// a layout NODE, handled in the walk above).
|
|
371
|
+
'personalizationBadge', 'variantContainer',
|
|
372
|
+
]);
|
|
373
|
+
// ─── Emit helpers ─────────────────────────────────────────────────────────────
|
|
374
|
+
function pushHeading(level, text, out) {
|
|
375
|
+
if (!text)
|
|
376
|
+
return;
|
|
377
|
+
out.push(`<h${level}>${esc(text)}</h${level}>`);
|
|
378
|
+
}
|
|
379
|
+
function pushParagraph(text, out) {
|
|
380
|
+
if (!text)
|
|
381
|
+
return;
|
|
382
|
+
out.push(`<p>${esc(text)}</p>`);
|
|
383
|
+
}
|
|
384
|
+
function pushLinkParagraph(label, rawHref, out) {
|
|
385
|
+
if (!label)
|
|
386
|
+
return;
|
|
387
|
+
const href = safeHref(rawHref);
|
|
388
|
+
out.push(href ? `<p><a href="${escAttr(href)}">${esc(label)}</a></p>` : `<p>${esc(label)}</p>`);
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* The href allowlist for links this module ASSEMBLES.
|
|
392
|
+
*
|
|
393
|
+
* Rich text goes through `sanitizeHtml`, which enforces its own scheme list, but
|
|
394
|
+
* a `button`/`cta`/`card` href is interpolated straight into markup built here.
|
|
395
|
+
* A stored `javascript:` or `data:` href is inert in an agent corpus and live in
|
|
396
|
+
* anything that renders this HTML, and there is no reason for a projection to
|
|
397
|
+
* carry one. Relative targets (`/`, `#`, `?`, `.`, a bare path) pass; an
|
|
398
|
+
* absolute one must be http(s)/mailto/tel. Dropped → the label still emits as
|
|
399
|
+
* plain copy, since the words are the content.
|
|
400
|
+
*/
|
|
401
|
+
const SAFE_SCHEME = /^(https?|mailto|tel):/i;
|
|
402
|
+
const HAS_SCHEME = /^[a-z][a-z0-9+.-]*:/i;
|
|
403
|
+
function safeHref(href) {
|
|
404
|
+
if (!href)
|
|
405
|
+
return '';
|
|
406
|
+
// Control characters are how `java\0script:` style bypasses are written.
|
|
407
|
+
const cleaned = href.replace(/[\u0000-\u001f\u007f]/g, '');
|
|
408
|
+
if (!cleaned)
|
|
409
|
+
return '';
|
|
410
|
+
if (!HAS_SCHEME.test(cleaned))
|
|
411
|
+
return cleaned;
|
|
412
|
+
return SAFE_SCHEME.test(cleaned) ? cleaned : '';
|
|
413
|
+
}
|
|
414
|
+
function pushQuote(text, out) {
|
|
415
|
+
if (!text)
|
|
416
|
+
return;
|
|
417
|
+
out.push(`<blockquote><p>${esc(text)}</p></blockquote>`);
|
|
418
|
+
}
|
|
419
|
+
/** Stored rich text is CMS-authored HTML: sanitize it exactly as the renderer does. */
|
|
420
|
+
function pushHtml(html, out) {
|
|
421
|
+
if (!html)
|
|
422
|
+
return;
|
|
423
|
+
const clean = sanitizeHtml(html).trim();
|
|
424
|
+
if (clean)
|
|
425
|
+
out.push(clean);
|
|
426
|
+
}
|
|
427
|
+
// ─── Small pure helpers ───────────────────────────────────────────────────────
|
|
428
|
+
let cachedBuiltInRegistry = null;
|
|
429
|
+
/** The built-ins-only registry, built once (it is immutable and stateless). */
|
|
430
|
+
function builtInRegistry() {
|
|
431
|
+
cachedBuiltInRegistry ??= createModuleRegistry([]);
|
|
432
|
+
return cachedBuiltInRegistry;
|
|
433
|
+
}
|
|
434
|
+
const registryByModules = new WeakMap();
|
|
435
|
+
/**
|
|
436
|
+
* The module registry for a config's `modules`, memoised on the array itself.
|
|
437
|
+
*
|
|
438
|
+
* The per-NODE surfaces — `/<path>.md`, per-page JSON-LD — are handed a node by
|
|
439
|
+
* the host rather than by the AX content source, so nothing precomputed their
|
|
440
|
+
* layout projection and they must build the registry themselves. Doing it
|
|
441
|
+
* unmemoised would rebuild a ~45-entry map on every request; the config's
|
|
442
|
+
* `modules` array is a stable object for the process's lifetime, so it keys the
|
|
443
|
+
* cache exactly.
|
|
444
|
+
*
|
|
445
|
+
* NOTE what this deliberately does NOT carry: a component resolver. Resolving a
|
|
446
|
+
* saved component is a database read, and these two surfaces are synchronous and
|
|
447
|
+
* DB-free by contract. A linked placement on a node that did not come through
|
|
448
|
+
* the content source therefore contributes its inline fallback copy — the same
|
|
449
|
+
* copy the renderer falls back to when a link cannot be resolved.
|
|
450
|
+
*/
|
|
451
|
+
export function registryForModules(modules) {
|
|
452
|
+
if (!Array.isArray(modules) || modules.length === 0)
|
|
453
|
+
return builtInRegistry();
|
|
454
|
+
const hit = registryByModules.get(modules);
|
|
455
|
+
if (hit)
|
|
456
|
+
return hit;
|
|
457
|
+
const built = createModuleRegistry(modules);
|
|
458
|
+
registryByModules.set(modules, built);
|
|
459
|
+
return built;
|
|
460
|
+
}
|
|
461
|
+
function asLayoutDocument(value) {
|
|
462
|
+
if (!isRecord(value))
|
|
463
|
+
return null;
|
|
464
|
+
const regions = value['regions'];
|
|
465
|
+
if (!isRecord(regions))
|
|
466
|
+
return null;
|
|
467
|
+
return value;
|
|
468
|
+
}
|
|
469
|
+
function isRecord(value) {
|
|
470
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
471
|
+
}
|
|
472
|
+
/**
|
|
473
|
+
* THE guard for every walk site. A stored layout is raw JSONB that
|
|
474
|
+
* `setContentLayout` never validated, so any of `regions.main`, `columns`,
|
|
475
|
+
* `nodes`, `defaultSections` and `variants` may be an object, a string, or
|
|
476
|
+
* absent. `for (const x of somethingNotIterable)` is a TypeError, and these
|
|
477
|
+
* projections run on public routes.
|
|
478
|
+
*/
|
|
479
|
+
function asArray(value) {
|
|
480
|
+
return Array.isArray(value) ? value : [];
|
|
481
|
+
}
|
|
482
|
+
function str(value) {
|
|
483
|
+
return typeof value === 'string' ? value.trim() : '';
|
|
484
|
+
}
|
|
485
|
+
/**
|
|
486
|
+
* Structured data stored in a `textarea` prop (the palette's item lists). The
|
|
487
|
+
* `JSON.parse` is not decoration: prose legitimately opens with a brace
|
|
488
|
+
* ("{curly} quotes", "[draft] title"), and dropping it would silently lose real
|
|
489
|
+
* copy.
|
|
490
|
+
*/
|
|
491
|
+
function looksLikeJson(value) {
|
|
492
|
+
const first = value[0];
|
|
493
|
+
if (first !== '[' && first !== '{')
|
|
494
|
+
return false;
|
|
495
|
+
try {
|
|
496
|
+
JSON.parse(value);
|
|
497
|
+
return true;
|
|
498
|
+
}
|
|
499
|
+
catch {
|
|
500
|
+
return false;
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
/**
|
|
504
|
+
* A prop that NAMES something rather than saying something: a link target, an
|
|
505
|
+
* id, a slug, a CSS class.
|
|
506
|
+
*
|
|
507
|
+
* The palette has no "reference" prop type, so a custom module's `ctaHref`,
|
|
508
|
+
* `experimentId` or `videoSrc` is declared `text` alongside its `headline`. Emitting those as
|
|
509
|
+
* paragraphs fills an agent corpus with bare paths and UUIDs, and the schema
|
|
510
|
+
* path is the only projection that cannot tell them apart from copy (a built-in
|
|
511
|
+
* emitter names the props it reads). Matching on the name is the cheap, stable
|
|
512
|
+
* half of that; {@link looksLikeLinkTarget} catches the rest by value.
|
|
513
|
+
*/
|
|
514
|
+
function isReferenceProp(name) {
|
|
515
|
+
// Whole name, or a camelCase suffix. The camelCase half must require the
|
|
516
|
+
// capital: a plain `/id$/i` would also swallow `valid`, `grid` and `hybrid`.
|
|
517
|
+
return (/^(href|url|uri|id|slug|class|classname|link|path|route|target|src)$/i.test(name) ||
|
|
518
|
+
/[a-z](Href|Url|Uri|Id|Slug|Class|ClassName|Link|Path|Route|Target|Src)$/.test(name));
|
|
519
|
+
}
|
|
520
|
+
/** A bare path, anchor, or absolute URL — a destination, not a sentence. */
|
|
521
|
+
function looksLikeLinkTarget(value) {
|
|
522
|
+
if (/\s/.test(value))
|
|
523
|
+
return false;
|
|
524
|
+
return /^(\/|#|https?:\/\/|mailto:|tel:)/i.test(value);
|
|
525
|
+
}
|
|
526
|
+
function parseJsonArray(raw) {
|
|
527
|
+
if (Array.isArray(raw))
|
|
528
|
+
return raw;
|
|
529
|
+
if (typeof raw !== 'string')
|
|
530
|
+
return [];
|
|
531
|
+
try {
|
|
532
|
+
const parsed = JSON.parse(raw);
|
|
533
|
+
return Array.isArray(parsed) ? parsed : [];
|
|
534
|
+
}
|
|
535
|
+
catch {
|
|
536
|
+
return [];
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
function esc(text) {
|
|
540
|
+
return text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
|
541
|
+
}
|
|
542
|
+
function escAttr(text) {
|
|
543
|
+
return esc(text).replace(/"/g, '"');
|
|
544
|
+
}
|
|
545
|
+
//# sourceMappingURL=layout-to-html.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout-to-html.js","sourceRoot":"","sources":["../../src/ax/layout-to-html.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { AxContentSource, AxRenderContext } from './types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Generate `llms-full.txt` — the full-text agent corpus: a deterministic
|
|
4
|
-
* HTML→Markdown projection of every AX-eligible published node's
|
|
4
|
+
* HTML→Markdown projection of every AX-eligible published node's effective body
|
|
5
|
+
* (its stored `body`, or its LAYOUT serialized to HTML when that is empty —
|
|
6
|
+
* kywi-cms#195).
|
|
5
7
|
*
|
|
6
8
|
* Preamble matches the llms.txt header, then one `## {title}` section per node
|
|
7
9
|
* (ordered by path), each with a URL/Type/Updated header line and the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llms-full-txt.d.ts","sourceRoot":"","sources":["../../src/ax/llms-full-txt.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"llms-full-txt.d.ts","sourceRoot":"","sources":["../../src/ax/llms-full-txt.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAiB,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjF;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BxG"}
|
package/dist/ax/llms-full-txt.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { resolveAxConfig } from '../config/define.js';
|
|
2
2
|
import { absoluteUrl } from './url.js';
|
|
3
3
|
import { htmlToMarkdown } from './html-to-markdown.js';
|
|
4
|
+
import { effectiveBodyHtml } from './effective-body.js';
|
|
4
5
|
import { isAxEligible } from './filters.js';
|
|
5
6
|
/**
|
|
6
7
|
* Generate `llms-full.txt` — the full-text agent corpus: a deterministic
|
|
7
|
-
* HTML→Markdown projection of every AX-eligible published node's
|
|
8
|
+
* HTML→Markdown projection of every AX-eligible published node's effective body
|
|
9
|
+
* (its stored `body`, or its LAYOUT serialized to HTML when that is empty —
|
|
10
|
+
* kywi-cms#195).
|
|
8
11
|
*
|
|
9
12
|
* Preamble matches the llms.txt header, then one `## {title}` section per node
|
|
10
13
|
* (ordered by path), each with a URL/Type/Updated header line and the
|
|
@@ -44,7 +47,7 @@ function section(node, baseUrl) {
|
|
|
44
47
|
`URL: ${url}`,
|
|
45
48
|
`Type: ${node.contentTypeName}${updated ? ` Updated: ${updated}` : ''}`,
|
|
46
49
|
].join('\n');
|
|
47
|
-
const bodySource =
|
|
50
|
+
const bodySource = effectiveBodyHtml(node) || strOrEmpty(node.summary);
|
|
48
51
|
const markdown = htmlToMarkdown(bodySource);
|
|
49
52
|
return markdown ? `${header}\n\n${markdown}` : header;
|
|
50
53
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llms-full-txt.js","sourceRoot":"","sources":["../../src/ax/llms-full-txt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAG3C
|
|
1
|
+
{"version":3,"file":"llms-full-txt.js","sourceRoot":"","sources":["../../src/ax/llms-full-txt.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
import type { AxContentNode, AxRenderContext } from './types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Single-node Markdown projection for content negotiation (`.md` /
|
|
4
|
-
* `Accept: text/markdown`). Deterministic HTML→Markdown of the
|
|
5
|
-
*
|
|
4
|
+
* `Accept: text/markdown`). Deterministic HTML→Markdown of the node's effective
|
|
5
|
+
* body — its stored `body`, or its LAYOUT serialized to HTML when that column is
|
|
6
|
+
* empty (kywi-cms#195) — the same converter as llms-full.txt, no language model.
|
|
7
|
+
*
|
|
8
|
+
* PROJECTING THE STORED LAYOUT IS CORRECT HERE, unlike in per-page JSON-LD.
|
|
9
|
+
* `/ax/md/slug/*` reads no cookie and resolves no audience — it is the same
|
|
10
|
+
* anonymous surface llms-full.txt is — so `layoutToHtml`'s own answer (Default,
|
|
11
|
+
* or a locked A/B winner, never a targeted arm) IS what this surface serves.
|
|
12
|
+
* JSON-LD differs because it renders inside a personalized page; see
|
|
13
|
+
* `generateJsonLd`'s docblock for that contract.
|
|
6
14
|
*/
|
|
7
15
|
export declare function generatePageMarkdown(node: AxContentNode, ctx: AxRenderContext): string;
|
|
8
16
|
//# sourceMappingURL=page-markdown.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-markdown.d.ts","sourceRoot":"","sources":["../../src/ax/page-markdown.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"page-markdown.d.ts","sourceRoot":"","sources":["../../src/ax/page-markdown.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEhE;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,eAAe,GAAG,MAAM,CAetF"}
|