@ccslabs/xtend 0.1.0-rc.1 → 0.1.2
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/CHANGELOG.md +2 -0
- package/README.md +4 -0
- package/catalog/component-catalog-coverage.js +2 -0
- package/catalog/epic13-package-export-lock.js +11 -1
- package/catalog/epic13-rmt-production-readiness.js +0 -1
- package/catalog/epic18-rmt-action-effect-runtime.d.ts +36 -0
- package/catalog/epic18-rmt-action-effect-runtime.js +249 -0
- package/catalog/epic18-rmt-app-platform-authoring.d.ts +39 -0
- package/catalog/epic18-rmt-app-platform-authoring.js +319 -0
- package/catalog/epic18-rmt-app-platform-fixture.d.ts +33 -0
- package/catalog/epic18-rmt-app-platform-fixture.js +221 -0
- package/catalog/epic18-rmt-app-platform-release-handoff.d.ts +30 -0
- package/catalog/epic18-rmt-app-platform-release-handoff.js +231 -0
- package/catalog/epic18-rmt-app-platform-tooling.d.ts +38 -0
- package/catalog/epic18-rmt-app-platform-tooling.js +242 -0
- package/catalog/epic18-rmt-component-template-primitives.d.ts +33 -0
- package/catalog/epic18-rmt-component-template-primitives.js +240 -0
- package/catalog/epic18-rmt-dom-descriptor-renderer.d.ts +35 -0
- package/catalog/epic18-rmt-dom-descriptor-renderer.js +232 -0
- package/catalog/epic18-rmt-event-routing-runtime.d.ts +35 -0
- package/catalog/epic18-rmt-event-routing-runtime.js +234 -0
- package/catalog/epic18-rmt-state-selector-runtime.d.ts +34 -0
- package/catalog/epic18-rmt-state-selector-runtime.js +216 -0
- package/catalog/epic18-rmt-surface-resource-graph-runtime.d.ts +36 -0
- package/catalog/epic18-rmt-surface-resource-graph-runtime.js +256 -0
- package/catalog/surface-manager-controller.js +5 -1
- package/catalog/surface-manager-materialization.js +7 -1
- package/catalog/surface-manager-overlay-bridge.js +41 -6
- package/catalog/surface-manager-workbench-fixture.js +1 -1
- package/catalog/surface-type-capability-matrix.d.ts +61 -0
- package/catalog/surface-type-capability-matrix.js +183 -0
- package/catalog/type-exports-rmt.js +37 -1
- package/catalog/type-exports.js +3 -3
- package/components/icon-packs/lucide.js +4 -0
- package/components/manifest.json +2 -0
- package/components/prism-rmt.d.ts +34 -0
- package/components/prism-rmt.js +130 -0
- package/components/xcards.js +15 -0
- package/components/xcode.d.ts +36 -1
- package/components/xcode.js +215 -20
- package/components/xfooter.js +17 -0
- package/components/xheader.js +14 -0
- package/components/xhero.js +16 -1
- package/components/xlink.js +97 -14
- package/components/xmasonry.js +15 -0
- package/components/xplayer.d.ts +44 -2
- package/components/xplayer.js +242 -15
- package/components/xrouter.js +27 -2
- package/components/xsection.js +15 -0
- package/components/xsidepanel.js +10 -2
- package/components/xsurfacemanager-controller.d.ts +2 -1
- package/components/xsurfacemanager-controller.js +27 -3
- package/components/xsurfacemanager.d.ts +2 -0
- package/components/xsurfacemanager.js +20 -8
- package/components/xsurfaceoverlay-bridge.d.ts +20 -5
- package/components/xsurfaceoverlay-bridge.js +114 -18
- package/components/xsurfaceportal.d.ts +29 -0
- package/components/xsurfaceportal.js +122 -0
- package/components/xsurfaceregion.d.ts +50 -0
- package/components/xsurfaceregion.js +285 -0
- package/components/xsurfacewindow.js +2 -1
- package/components/xtooltip.js +89 -23
- package/docs/README.md +222 -298
- package/docs/changelog.md +107 -0
- package/docs/component-catalog-coverage.md +9 -9
- package/docs/component-platform.md +19 -1
- package/docs/component-ux-app-authoring.md +56 -63
- package/docs/components/xcode.md +83 -53
- package/docs/components/xsurfaceportal.md +32 -0
- package/docs/components/xsurfaceregion.md +37 -0
- package/docs/components.md +105 -69
- package/docs/de/README.md +264 -0
- package/docs/de/XTend-ADR.md +221 -0
- package/docs/de/a11y-keyboard-smokes.md +62 -0
- package/docs/de/about.md +18 -0
- package/docs/de/api.md +157 -0
- package/docs/de/best-practices.md +76 -0
- package/docs/de/changelog.md +107 -0
- package/docs/de/component-catalog-coverage.md +58 -0
- package/docs/de/component-lab.md +103 -0
- package/docs/de/component-long-tail-migration.md +41 -0
- package/docs/de/component-platform.md +177 -0
- package/docs/de/component-ux-app-authoring.md +123 -0
- package/docs/de/component-ux-authoring.md +96 -0
- package/docs/de/component-ux-gates.md +45 -0
- package/docs/de/components/x-rmt-lifecycle-demo-build.md +60 -0
- package/docs/de/components/xalert.md +81 -0
- package/docs/de/components/xbutton.md +103 -0
- package/docs/de/components/xcalendar.md +82 -0
- package/docs/de/components/xcards.md +128 -0
- package/docs/de/components/xcheckbox.md +102 -0
- package/docs/de/components/xcode.md +156 -0
- package/docs/de/components/xdialog.md +92 -0
- package/docs/de/components/xdrawer.md +84 -0
- package/docs/de/components/xfooter.md +126 -0
- package/docs/de/components/xform.md +128 -0
- package/docs/de/components/xheader.md +308 -0
- package/docs/de/components/xhero.md +142 -0
- package/docs/de/components/xicon.md +125 -0
- package/docs/de/components/xinput.md +129 -0
- package/docs/de/components/xlightbox.md +98 -0
- package/docs/de/components/xlink.md +109 -0
- package/docs/de/components/xmasonry.md +124 -0
- package/docs/de/components/xmenu.md +158 -0
- package/docs/de/components/xmodal.md +82 -0
- package/docs/de/components/xplayer.md +104 -0
- package/docs/de/components/xpopover.md +67 -0
- package/docs/de/components/xprogress.md +56 -0
- package/docs/de/components/xradio.md +103 -0
- package/docs/de/components/xrouter.md +260 -0
- package/docs/de/components/xsection.md +125 -0
- package/docs/de/components/xselect.md +105 -0
- package/docs/de/components/xsidepanel.md +30 -0
- package/docs/de/components/xspinner.md +102 -0
- package/docs/de/components/xstate.md +148 -0
- package/docs/de/components/xstatus.md +55 -0
- package/docs/de/components/xsummary.md +78 -0
- package/docs/de/components/xsurfacemanager.md +27 -0
- package/docs/de/components/xsurfacewindow.md +21 -0
- package/docs/de/components/xtabs.md +160 -0
- package/docs/de/components/xtextarea.md +98 -0
- package/docs/de/components/xtheme.md +167 -0
- package/docs/de/components/xtoast.md +62 -0
- package/docs/de/components/xtooltip.md +66 -0
- package/docs/de/components/xtype.md +82 -0
- package/docs/de/components/xutils.md +144 -0
- package/docs/de/components/xwriter.md +94 -0
- package/docs/de/components.md +153 -0
- package/docs/de/conditional-network-evidence-ci.md +38 -0
- package/docs/de/conditional-network-evidence.md +50 -0
- package/docs/de/core-migration-guide.md +110 -0
- package/docs/de/design-tokens.md +116 -0
- package/docs/de/docs-rmt-production-hardening.md +31 -0
- package/docs/de/enterprise-adoption.md +413 -0
- package/docs/de/enterprise-component-flex-release-handoff.md +129 -0
- package/docs/de/epic10-platform-gates.md +62 -0
- package/docs/de/epic10-release-handoff.md +81 -0
- package/docs/de/epic11-enterprise-ux-handoff.md +70 -0
- package/docs/de/epic12-rc0-handoff.md +61 -0
- package/docs/de/epic18-media-manager-vendor-upstream.md +318 -0
- package/docs/de/epic18-rmt-app-platform-release-handoff.md +67 -0
- package/docs/de/epic18-vendor-bugfixes.md +34 -0
- package/docs/de/existing-component-metadata.md +67 -0
- package/docs/de/hydration-performance-closure.md +34 -0
- package/docs/de/hydration-policies.md +71 -0
- package/docs/de/known-residual-triage.md +22 -0
- package/docs/de/manifest-import-policy.md +79 -0
- package/docs/de/manifest.md +112 -0
- package/docs/de/motion-contrast.md +67 -0
- package/docs/de/package-export-lock.md +44 -0
- package/docs/de/performance-measurements.md +106 -0
- package/docs/de/performance-regression.md +89 -0
- package/docs/de/performance.md +94 -0
- package/docs/de/previews/README.md +17 -0
- package/docs/de/prod-browser-csp-smokes.md +40 -0
- package/docs/de/public-component-types.md +79 -0
- package/docs/de/quick-start-guide.md +220 -0
- package/docs/de/rc0-adoption-guide.md +102 -0
- package/docs/de/rc0-gate-matrix.md +58 -0
- package/docs/de/rc1-gate-matrix-ci-handoff.md +56 -0
- package/docs/de/rc1-migration-notes.md +69 -0
- package/docs/de/rc1-readiness.md +46 -0
- package/docs/de/release-owner-acceptance.md +56 -0
- package/docs/de/release-report-pack-dry-run-evidence.md +39 -0
- package/docs/de/rmt-action-effect-runtime.md +81 -0
- package/docs/de/rmt-app-platform-authoring.md +54 -0
- package/docs/de/rmt-app-platform-fixture.md +46 -0
- package/docs/de/rmt-app-platform-migration-guide.md +88 -0
- package/docs/de/rmt-app-platform-tooling.md +79 -0
- package/docs/de/rmt-component-template-primitives.md +57 -0
- package/docs/de/rmt-dom-descriptor-renderer.md +64 -0
- package/docs/de/rmt-dsl-authoring-polish.md +145 -0
- package/docs/de/rmt-event-routing-runtime.md +81 -0
- package/docs/de/rmt-first-demo-app.md +77 -0
- package/docs/de/rmt-first-xtend-apps.md +129 -0
- package/docs/de/rmt-kernel-panic-recovery-incident-handoff.md +61 -0
- package/docs/de/rmt-kernel-security-hardening-migration.md +50 -0
- package/docs/de/rmt-kernel-trusted-output-authoring.md +69 -0
- package/docs/de/rmt-language-server.md +234 -0
- package/docs/de/rmt-lifecycle-demo.md +24 -0
- package/docs/de/rmt-linter.md +140 -0
- package/docs/de/rmt-node-ssr-adapter.md +100 -0
- package/docs/de/rmt-php-ssr-adapter.md +120 -0
- package/docs/de/rmt-production-readiness.md +63 -0
- package/docs/de/rmt-state-selector-runtime.md +47 -0
- package/docs/de/rmt-surface-resource-graph-runtime.md +92 -0
- package/docs/de/rmt-tooling-release-gates.md +77 -0
- package/docs/de/rmt-vnext-authoring.md +170 -0
- package/docs/de/rmt-vnext-component-primitives.md +188 -0
- package/docs/de/rmt-vnext-cross-surface-events.md +68 -0
- package/docs/de/rmt-vnext-enterprise-mfe-handoff.md +70 -0
- package/docs/de/rmt-vnext-fabric-bridge-evidence.md +81 -0
- package/docs/de/rmt-vnext-migration-notes.md +62 -0
- package/docs/de/rmt-vnext-primitive-authoring-tooling.md +247 -0
- package/docs/de/rmt-vnext-primitive-grammar-design.md +289 -0
- package/docs/de/rmt-vnext-primitive-lowering.md +108 -0
- package/docs/de/rmt-vnext-primitive-migration.md +119 -0
- package/docs/de/rmt-vnext-primitive-parser-ast.md +76 -0
- package/docs/de/rmt-vnext-primitive-semantic-graph.md +118 -0
- package/docs/de/rmt-vnext-primitives-compiler-backlog.md +739 -0
- package/docs/de/rmt-vnext-release-handoff.md +83 -0
- package/docs/de/rmt-vnext-remote-surfaces.md +90 -0
- package/docs/de/rmt-vnext-source-to-sea-gate.md +612 -0
- package/docs/de/rmt-vnext-surface-registry-enterprise.md +76 -0
- package/docs/de/screenreader-signals.md +56 -0
- package/docs/de/supply-chain-gates.md +100 -0
- package/docs/de/surface-manager-authoring-guide.md +94 -0
- package/docs/de/surface-manager-browser-lab.md +45 -0
- package/docs/de/surface-manager-component-lab.md +43 -0
- package/docs/de/surface-manager-controller.md +66 -0
- package/docs/de/surface-manager-layout-engines.md +32 -0
- package/docs/de/surface-manager-lazy-hydration.md +63 -0
- package/docs/de/surface-manager-migration-guide.md +122 -0
- package/docs/de/surface-manager-native-rmt-surfaces.md +38 -0
- package/docs/de/surface-manager-overlay-bridge.md +53 -0
- package/docs/de/surface-manager-persistence.md +30 -0
- package/docs/de/surface-manager-quality-gates.md +51 -0
- package/docs/de/surface-manager-release-handoff.md +68 -0
- package/docs/de/surface-manager-remote-policy.md +54 -0
- package/docs/de/surface-manager-rmt-authoring.md +102 -0
- package/docs/de/surface-manager-route-lifecycle.md +59 -0
- package/docs/de/surface-manager-runtime-release-handoff.md +69 -0
- package/docs/de/surface-manager-side-panel-runtime.md +36 -0
- package/docs/de/surface-manager-stack-policy.md +39 -0
- package/docs/de/surface-manager-window-runtime.md +47 -0
- package/docs/de/surface-manager-workbench-fixture.md +43 -0
- package/docs/de/third-party-design-authoring.md +406 -0
- package/docs/de/trusted-dom-boundary-browser-proof.md +32 -0
- package/docs/de/trusted-dom-sanitizing.md +110 -0
- package/docs/de/type-exports.md +61 -0
- package/docs/de/typescript-components.md +63 -0
- package/docs/de/visual-browser-regression.md +83 -0
- package/docs/de/visual-owner-artifacts.md +46 -0
- package/docs/de/visual-snapshot-automation.md +87 -0
- package/docs/de/xtend-api-types.md +55 -0
- package/docs/de/xtend-builder-types.md +55 -0
- package/docs/de/xtend-catalog-types.md +44 -0
- package/docs/de/xtend-fabric-rmt-lane-mapping.md +143 -0
- package/docs/de/xtend-fabric.md +474 -0
- package/docs/de/xtend-loader-types.md +58 -0
- package/docs/de/xtend-loader.md +265 -0
- package/docs/de/xtend-policy-types.md +38 -0
- package/docs/de/xtend-rmt-types.md +40 -0
- package/docs/de/xtend-vendor-types.md +36 -0
- package/docs/de/xtendrmt-app-dsl.md +334 -0
- package/docs/de/xtendrmt-migration-guide.md +266 -0
- package/docs/de/xtendrmt-native-authoring.md +333 -0
- package/docs/de/xtendrmt-overview.md +109 -0
- package/docs/de/xtendrmt-parsedown-scheduling.md +301 -0
- package/docs/de/xtendrmt-runtime-bridge.md +155 -0
- package/docs/en/README.md +163 -0
- package/docs/en/XTend-ADR.md +221 -0
- package/docs/en/a11y-keyboard-smokes.md +68 -0
- package/docs/en/about.md +25 -0
- package/docs/en/api.md +171 -0
- package/docs/en/best-practices.md +125 -0
- package/docs/en/changelog.md +104 -0
- package/docs/en/component-catalog-coverage.md +104 -0
- package/docs/en/component-lab.md +103 -0
- package/docs/en/component-long-tail-migration.md +41 -0
- package/docs/en/component-platform.md +243 -0
- package/docs/en/component-ux-app-authoring.md +118 -0
- package/docs/en/component-ux-authoring.md +96 -0
- package/docs/en/component-ux-gates.md +45 -0
- package/docs/en/components/x-rmt-lifecycle-demo-build.md +75 -0
- package/docs/en/components/xalert.md +94 -0
- package/docs/en/components/xbutton.md +118 -0
- package/docs/en/components/xcalendar.md +95 -0
- package/docs/en/components/xcards.md +139 -0
- package/docs/en/components/xcheckbox.md +118 -0
- package/docs/en/components/xcode.md +153 -0
- package/docs/en/components/xdialog.md +108 -0
- package/docs/en/components/xdrawer.md +110 -0
- package/docs/en/components/xfooter.md +138 -0
- package/docs/en/components/xform.md +147 -0
- package/docs/en/components/xheader.md +308 -0
- package/docs/en/components/xhero.md +157 -0
- package/docs/en/components/xicon.md +149 -0
- package/docs/en/components/xinput.md +147 -0
- package/docs/en/components/xlightbox.md +113 -0
- package/docs/en/components/xlink.md +130 -0
- package/docs/en/components/xmasonry.md +136 -0
- package/docs/en/components/xmenu.md +185 -0
- package/docs/en/components/xmodal.md +102 -0
- package/docs/en/components/xplayer.md +114 -0
- package/docs/en/components/xpopover.md +87 -0
- package/docs/en/components/xprogress.md +73 -0
- package/docs/en/components/xradio.md +119 -0
- package/docs/en/components/xrouter.md +260 -0
- package/docs/en/components/xsection.md +136 -0
- package/docs/en/components/xselect.md +122 -0
- package/docs/en/components/xsidepanel.md +48 -0
- package/docs/en/components/xspinner.md +118 -0
- package/docs/en/components/xstate.md +163 -0
- package/docs/en/components/xstatus.md +71 -0
- package/docs/en/components/xsummary.md +90 -0
- package/docs/en/components/xsurfacemanager.md +42 -0
- package/docs/en/components/xsurfacewindow.md +31 -0
- package/docs/en/components/xtabs.md +187 -0
- package/docs/en/components/xtextarea.md +115 -0
- package/docs/en/components/xtheme.md +203 -0
- package/docs/en/components/xtoast.md +78 -0
- package/docs/en/components/xtooltip.md +85 -0
- package/docs/en/components/xtype.md +91 -0
- package/docs/en/components/xutils.md +161 -0
- package/docs/en/components/xwriter.md +106 -0
- package/docs/en/components.md +151 -0
- package/docs/en/conditional-network-evidence-ci.md +38 -0
- package/docs/en/conditional-network-evidence.md +50 -0
- package/docs/en/core-migration-guide.md +110 -0
- package/docs/en/design-tokens.md +137 -0
- package/docs/en/docs-rmt-production-hardening.md +31 -0
- package/docs/en/enterprise-adoption.md +413 -0
- package/docs/en/enterprise-component-flex-release-handoff.md +129 -0
- package/docs/en/epic10-platform-gates.md +62 -0
- package/docs/en/epic10-release-handoff.md +81 -0
- package/docs/en/epic11-enterprise-ux-handoff.md +70 -0
- package/docs/en/epic12-rc0-handoff.md +61 -0
- package/docs/en/epic18-media-manager-vendor-upstream.md +232 -0
- package/docs/en/epic18-rmt-app-platform-release-handoff.md +60 -0
- package/docs/en/epic18-vendor-bugfixes.md +29 -0
- package/docs/en/existing-component-metadata.md +67 -0
- package/docs/en/hydration-performance-closure.md +34 -0
- package/docs/en/hydration-policies.md +75 -0
- package/docs/en/known-residual-triage.md +22 -0
- package/docs/en/manifest-import-policy.md +81 -0
- package/docs/en/manifest.md +135 -0
- package/docs/en/motion-contrast.md +67 -0
- package/docs/en/package-export-lock.md +44 -0
- package/docs/en/performance-measurements.md +106 -0
- package/docs/en/performance-regression.md +89 -0
- package/docs/en/performance.md +132 -0
- package/docs/en/previews/README.md +17 -0
- package/docs/en/prod-browser-csp-smokes.md +40 -0
- package/docs/en/public-component-types.md +79 -0
- package/docs/en/quick-start-guide.md +189 -0
- package/docs/en/rc0-adoption-guide.md +102 -0
- package/docs/en/rc0-gate-matrix.md +58 -0
- package/docs/en/rc1-gate-matrix-ci-handoff.md +56 -0
- package/docs/en/rc1-migration-notes.md +69 -0
- package/docs/en/rc1-readiness.md +46 -0
- package/docs/en/release-owner-acceptance.md +56 -0
- package/docs/en/release-report-pack-dry-run-evidence.md +39 -0
- package/docs/en/rmt-action-effect-runtime.md +101 -0
- package/docs/en/rmt-app-platform-authoring.md +47 -0
- package/docs/en/rmt-app-platform-fixture.md +35 -0
- package/docs/en/rmt-app-platform-migration-guide.md +75 -0
- package/docs/en/rmt-app-platform-tooling.md +58 -0
- package/docs/en/rmt-component-template-primitives.md +49 -0
- package/docs/en/rmt-dom-descriptor-renderer.md +54 -0
- package/docs/en/rmt-dsl-authoring-polish.md +143 -0
- package/docs/en/rmt-event-routing-runtime.md +98 -0
- package/docs/en/rmt-first-demo-app.md +87 -0
- package/docs/en/rmt-first-xtend-apps.md +127 -0
- package/docs/en/rmt-kernel-panic-recovery-incident-handoff.md +60 -0
- package/docs/en/rmt-kernel-security-hardening-migration.md +49 -0
- package/docs/en/rmt-kernel-trusted-output-authoring.md +68 -0
- package/docs/en/rmt-language-server.md +243 -0
- package/docs/en/rmt-lifecycle-demo.md +23 -0
- package/docs/en/rmt-linter.md +146 -0
- package/docs/en/rmt-node-ssr-adapter.md +99 -0
- package/docs/en/rmt-php-ssr-adapter.md +118 -0
- package/docs/en/rmt-production-readiness.md +63 -0
- package/docs/en/rmt-state-selector-runtime.md +34 -0
- package/docs/en/rmt-surface-resource-graph-runtime.md +68 -0
- package/docs/en/rmt-tooling-release-gates.md +77 -0
- package/docs/en/rmt-vnext-authoring.md +102 -0
- package/docs/en/rmt-vnext-component-primitives.md +185 -0
- package/docs/en/rmt-vnext-cross-surface-events.md +59 -0
- package/docs/en/rmt-vnext-enterprise-mfe-handoff.md +62 -0
- package/docs/en/rmt-vnext-fabric-bridge-evidence.md +64 -0
- package/docs/en/rmt-vnext-migration-notes.md +62 -0
- package/docs/en/rmt-vnext-primitive-authoring-tooling.md +174 -0
- package/docs/en/rmt-vnext-primitive-grammar-design.md +268 -0
- package/docs/en/rmt-vnext-primitive-lowering.md +91 -0
- package/docs/en/rmt-vnext-primitive-migration.md +93 -0
- package/docs/en/rmt-vnext-primitive-parser-ast.md +59 -0
- package/docs/en/rmt-vnext-primitive-semantic-graph.md +103 -0
- package/docs/en/rmt-vnext-primitives-compiler-backlog.md +327 -0
- package/docs/en/rmt-vnext-release-handoff.md +83 -0
- package/docs/en/rmt-vnext-remote-surfaces.md +81 -0
- package/docs/en/rmt-vnext-source-to-sea-gate.md +482 -0
- package/docs/en/rmt-vnext-surface-registry-enterprise.md +68 -0
- package/docs/en/screenreader-signals.md +56 -0
- package/docs/en/supply-chain-gates.md +106 -0
- package/docs/en/surface-manager-authoring-guide.md +94 -0
- package/docs/en/surface-manager-browser-lab.md +45 -0
- package/docs/en/surface-manager-component-lab.md +43 -0
- package/docs/en/surface-manager-controller.md +66 -0
- package/docs/en/surface-manager-layout-engines.md +32 -0
- package/docs/en/surface-manager-lazy-hydration.md +63 -0
- package/docs/en/surface-manager-migration-guide.md +113 -0
- package/docs/en/surface-manager-native-rmt-surfaces.md +38 -0
- package/docs/en/surface-manager-overlay-bridge.md +53 -0
- package/docs/en/surface-manager-persistence.md +30 -0
- package/docs/en/surface-manager-quality-gates.md +51 -0
- package/docs/en/surface-manager-release-handoff.md +68 -0
- package/docs/en/surface-manager-remote-policy.md +54 -0
- package/docs/en/surface-manager-rmt-authoring.md +89 -0
- package/docs/en/surface-manager-route-lifecycle.md +59 -0
- package/docs/en/surface-manager-runtime-release-handoff.md +69 -0
- package/docs/en/surface-manager-side-panel-runtime.md +36 -0
- package/docs/en/surface-manager-stack-policy.md +39 -0
- package/docs/en/surface-manager-window-runtime.md +47 -0
- package/docs/en/surface-manager-workbench-fixture.md +43 -0
- package/docs/en/third-party-design-authoring.md +406 -0
- package/docs/en/trusted-dom-boundary-browser-proof.md +32 -0
- package/docs/en/trusted-dom-sanitizing.md +124 -0
- package/docs/en/type-exports.md +61 -0
- package/docs/en/typescript-components.md +63 -0
- package/docs/en/visual-browser-regression.md +83 -0
- package/docs/en/visual-owner-artifacts.md +46 -0
- package/docs/en/visual-snapshot-automation.md +87 -0
- package/docs/en/xtend-api-types.md +55 -0
- package/docs/en/xtend-builder-types.md +55 -0
- package/docs/en/xtend-catalog-types.md +44 -0
- package/docs/en/xtend-fabric-rmt-lane-mapping.md +143 -0
- package/docs/en/xtend-fabric.md +474 -0
- package/docs/en/xtend-loader-types.md +58 -0
- package/docs/en/xtend-loader.md +265 -0
- package/docs/en/xtend-policy-types.md +38 -0
- package/docs/en/xtend-rmt-types.md +40 -0
- package/docs/en/xtend-vendor-types.md +36 -0
- package/docs/en/xtendrmt-app-dsl.md +331 -0
- package/docs/en/xtendrmt-migration-guide.md +256 -0
- package/docs/en/xtendrmt-native-authoring.md +336 -0
- package/docs/en/xtendrmt-overview.md +63 -0
- package/docs/en/xtendrmt-parsedown-scheduling.md +301 -0
- package/docs/en/xtendrmt-runtime-bridge.md +155 -0
- package/docs/enterprise-adoption.md +4 -2
- package/docs/epic18-media-manager-vendor-upstream.md +318 -0
- package/docs/epic18-rmt-app-platform-release-handoff.md +67 -0
- package/docs/epic18-vendor-bugfixes.md +34 -0
- package/docs/index.php +1056 -109
- package/docs/manifest.md +8 -2
- package/docs/menu.json +986 -133
- package/docs/package-export-lock.md +2 -2
- package/docs/public-component-types.md +2 -2
- package/docs/quick-start-guide.md +126 -58
- package/docs/rmt-action-effect-runtime.md +101 -0
- package/docs/rmt-app-platform-authoring.md +54 -0
- package/docs/rmt-app-platform-fixture.md +46 -0
- package/docs/rmt-app-platform-migration-guide.md +88 -0
- package/docs/rmt-app-platform-tooling.md +79 -0
- package/docs/rmt-component-template-primitives.md +57 -0
- package/docs/rmt-dom-descriptor-renderer.md +64 -0
- package/docs/rmt-dsl-authoring-polish.md +67 -44
- package/docs/rmt-event-routing-runtime.md +98 -0
- package/docs/rmt-first-demo-app.md +2 -2
- package/docs/rmt-first-xtend-apps.md +70 -46
- package/docs/rmt-language-server.md +61 -4
- package/docs/rmt-lifecycle-demo.md +1 -2
- package/docs/rmt-node-ssr-adapter.md +144 -0
- package/docs/rmt-php-ssr-adapter.md +158 -0
- package/docs/rmt-state-selector-runtime.md +47 -0
- package/docs/rmt-surface-resource-graph-runtime.md +92 -0
- package/docs/rmt-vnext-authoring.md +128 -18
- package/docs/rmt-vnext-component-primitives.md +188 -0
- package/docs/rmt-vnext-fabric-bridge-evidence.md +81 -0
- package/docs/rmt-vnext-primitive-authoring-tooling.md +247 -0
- package/docs/rmt-vnext-primitive-grammar-design.md +289 -0
- package/docs/rmt-vnext-primitive-lowering.md +108 -0
- package/docs/rmt-vnext-primitive-migration.md +119 -0
- package/docs/rmt-vnext-primitive-parser-ast.md +76 -0
- package/docs/rmt-vnext-primitive-semantic-graph.md +118 -0
- package/docs/rmt-vnext-primitives-compiler-backlog.md +742 -0
- package/docs/rmt-vnext-release-handoff.md +14 -0
- package/docs/rmt-vnext-source-to-sea-gate.md +629 -0
- package/docs/surface-manager-migration-guide.md +34 -6
- package/docs/surface-manager-overlay-bridge.md +9 -4
- package/docs/surface-manager-rmt-authoring.md +50 -34
- package/docs/surface-manager-workbench-fixture.md +1 -2
- package/docs/third-party-design-authoring.md +1 -1
- package/docs/type-exports.md +3 -3
- package/docs/utils/pageloader.js +811 -62
- package/docs/visual-browser-regression.md +1 -1
- package/docs/xtend-rmt-types.md +3 -2
- package/docs/xtendrmt-app-dsl.md +187 -122
- package/docs/xtendrmt-docs-shell-vnext.rmt +165 -0
- package/docs/xtendrmt-migration-guide.md +48 -17
- package/docs/xtendrmt-native-authoring.md +213 -217
- package/docs/xtendrmt-overview.md +81 -61
- package/docs/xtendrmt-parsedown-scheduling.md +23 -8
- package/fabric/package.json +1 -1
- package/package.json +684 -21
- package/tools/package.json +5 -1
- package/tools/rmt-editor/vscode/README.md +72 -5
- package/tools/rmt-editor/vscode/XTend-Logo.png +0 -0
- package/tools/rmt-editor/vscode/extension.d.ts +33 -0
- package/tools/rmt-editor/vscode/extension.js +1816 -7
- package/tools/rmt-editor/vscode/language-configuration.json +2 -1
- package/tools/rmt-editor/vscode/package.json +193 -2
- package/tools/rmt-editor/vscode/snippets/rmt.code-snippets +41 -0
- package/tools/rmt-editor/vscode/syntaxes/rmt.tmLanguage.json +103 -1
- package/tools/rmt-editor/vscode/templates/launch.json +70 -0
- package/tools/rmt-editor/vscode/templates/tasks.json +172 -0
- package/tools/rmt-editor/vscode/xtend-rmt-language-0.0.0-enterprise-readiness.vsix +0 -0
- package/tools/rmt-language/app-platform-tooling.d.ts +128 -0
- package/tools/rmt-language/app-platform-tooling.js +677 -0
- package/tools/rmt-language/completions.d.ts +5 -0
- package/tools/rmt-language/completions.js +185 -3
- package/tools/rmt-language/diagnostics.js +54 -0
- package/tools/rmt-language/hover.js +36 -0
- package/tools/rmt-language/rmt-tooling-public-types.d.ts +7 -0
- package/tools/rmt-language/rules/app-platform-policy.js +39 -0
- package/tools/rmt-language/rules/index.js +5 -1
- package/tools/rmt-language/semantic-graph.d.ts +6 -0
- package/tools/rmt-language/semantic-graph.js +928 -0
- package/tools/rmt-language/snippets/index.js +44 -0
- package/tools/rmt-language/snippets/rmt.code-snippets +41 -0
- package/tools/rmt-language/vnext-compatibility.d.ts +10 -0
- package/tools/rmt-language/vnext-compatibility.js +642 -0
- package/tools/rmt-language/vnext-compiler.d.ts +5 -0
- package/tools/rmt-language/vnext-compiler.js +863 -17
- package/tools/rmt-language/vnext-parser.js +725 -9
- package/tools/rmt-language/vnext-release.d.ts +1 -0
- package/tools/rmt-language/vnext-release.js +20 -0
- package/tools/rmt-language/vnext-source-to-sea.d.ts +33 -0
- package/tools/rmt-language/vnext-source-to-sea.js +2227 -0
- package/tools/rmt-language/vnext-surfaces.js +111 -52
- package/tools/rmt-language/vnext-tooling.d.ts +19 -1
- package/tools/rmt-language/vnext-tooling.js +1247 -5
- package/tools/rmt-language-server/protocol.js +3 -0
- package/tools/rmt-language-server/server.d.ts +2 -0
- package/tools/rmt-language-server/server.js +176 -22
- package/tools/rmt-linter/cli.d.ts +2 -0
- package/tools/rmt-linter/cli.js +62 -0
- package/xtend-builder/generators/registry.js +11 -0
- package/xtend-builder/generators/rmt-app-platform.js +239 -0
- package/xtend-builder/generators/rmt-lifecycle-demo.js +3 -11
- package/xtend-builder/lib/cli.js +38 -0
- package/xtend-builder/package.json +3 -3
- package/xtend-builder/scaffold.config.js +29 -2
- package/xtend.css +49 -2
- package/xtendrmt/package.json +49 -1
- package/xtendrmt/rmt-action-effect-runtime.d.ts +126 -0
- package/xtendrmt/rmt-action-effect-runtime.js +494 -0
- package/xtendrmt/rmt-component-capability-registry.d.ts +180 -0
- package/xtendrmt/rmt-component-capability-registry.js +636 -0
- package/xtendrmt/rmt-core.d.ts +6 -0
- package/xtendrmt/rmt-core.esm.js +32 -6
- package/xtendrmt/rmt-dom-descriptor-renderer.d.ts +107 -0
- package/xtendrmt/rmt-dom-descriptor-renderer.js +1066 -0
- package/xtendrmt/rmt-event-routing-runtime.d.ts +144 -0
- package/xtendrmt/rmt-event-routing-runtime.js +666 -0
- package/xtendrmt/rmt-lifecycle-demo.app.js +2 -2
- package/xtendrmt/rmt-lifecycle-demo.core.json +4 -0
- package/xtendrmt/rmt-lifecycle-demo.rmt-build.app.js +1 -1
- package/xtendrmt/rmt-lifecycle-demo.rmt-build.scaffold.json +2 -2
- package/xtendrmt/rmt-lifecycle-demo.scaffold.json +4 -4
- package/xtendrmt/rmt-native-shell-runtime.d.ts +77 -0
- package/xtendrmt/rmt-native-shell-runtime.js +309 -0
- package/xtendrmt/rmt-node-ssr-adapter.d.ts +197 -0
- package/xtendrmt/rmt-node-ssr-adapter.js +1006 -0
- package/xtendrmt/rmt-php-ssr-adapter.php +976 -0
- package/xtendrmt/rmt-runtime.browser.js +32 -6
- package/xtendrmt/rmt-runtime.esm.js +32 -6
- package/xtendrmt/rmt-state-selector-runtime.d.ts +166 -0
- package/xtendrmt/rmt-state-selector-runtime.js +866 -0
- package/xtendrmt/rmt-surface-resource-graph-runtime.d.ts +224 -0
- package/xtendrmt/rmt-surface-resource-graph-runtime.js +932 -0
- package/xtendrmt/rmt-vnext-enterprise-mfe-demo.core.json +3 -0
- package/xtendrmt/rmt-vnext-reference-demo.core.json +3 -0
- package/xtendrmt/xtendrmt-bestcase-demo.core.json +3420 -372
- package/xtendrmt/xtendrmt-bestcase-demo.js +424 -8
- package/xtendrmt/xtendrmt-bestcase-demo.rmt +214 -6
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# RMT Kernel Panic Recovery Incident Handoff
|
|
2
|
+
|
|
3
|
+
- Contract: `xtend.rmt.kernel-migration-authoring-incident-handoff.v1`
|
|
4
|
+
- Workpackage: `RKSH-WP-11`
|
|
5
|
+
- Local gate: `node scripts/run_xtend_tests.js rmt-kernel-handoff-docs --json`
|
|
6
|
+
|
|
7
|
+
This handoff describes how host teams evaluate panic and recovery diagnostics when the kernel trust layer blocks faulty outputs or starts recovery.
|
|
8
|
+
|
|
9
|
+
## Diagnostics Channels
|
|
10
|
+
|
|
11
|
+
| Channel | Purpose |
|
|
12
|
+
|---------|---------|
|
|
13
|
+
| `rmt.kernel.panic` | panic state, trigger, severity, scope and blocked commits |
|
|
14
|
+
| `rmt.kernel.recovery` | recovery outcome, snapshot use, fallback and quarantine |
|
|
15
|
+
| `rmt.kernel.escalation` | escalation envelope from diagnostics hub or command bus |
|
|
16
|
+
| `rmt.kernel.scheduler_failure` | `failed`, `aborted`, `panic_blocked` and backpressure failure for jobs |
|
|
17
|
+
|
|
18
|
+
## Minimum Fields for Incident Review
|
|
19
|
+
|
|
20
|
+
- `panicId`
|
|
21
|
+
- `correlationId`
|
|
22
|
+
- `state`
|
|
23
|
+
- `severity`
|
|
24
|
+
- `scope`
|
|
25
|
+
- `trigger`
|
|
26
|
+
- `blockedCommitCount`
|
|
27
|
+
- `recoveryAction`
|
|
28
|
+
- `quarantined`
|
|
29
|
+
- `hostNotified`
|
|
30
|
+
- `affectedJobs`
|
|
31
|
+
- `firstSeenAt`
|
|
32
|
+
- `lastSeenAt`
|
|
33
|
+
|
|
34
|
+
## Incident Severity
|
|
35
|
+
|
|
36
|
+
| Severity | Meaning | Expected response |
|
|
37
|
+
|----------|---------|-------------------|
|
|
38
|
+
| `warning` | output was corrected or sanitized | observe verdicts, no escalation required |
|
|
39
|
+
| `degraded` | output was blocked, UI remains usable with safe fallback | host team checks authoring or remote source |
|
|
40
|
+
| `critical` | surface, template or binding was quarantined | open incident, track `correlationId` and `panicId` |
|
|
41
|
+
| `fatal` | recovery failed or several kernel-scope errors correlate | stop release/traffic and restore last safe state |
|
|
42
|
+
|
|
43
|
+
## Recovery Actions
|
|
44
|
+
|
|
45
|
+
| `recoveryAction` | Meaning | Host handoff |
|
|
46
|
+
|------------------|---------|--------------|
|
|
47
|
+
| `rollback-last-safe-snapshot` | the kernel restores the last safe snapshot | preserve snapshot ID and surface scope |
|
|
48
|
+
| `render-safe-fallback` | a checked fallback replaces unsafe output | check fallback markup and reason code |
|
|
49
|
+
| `quarantine-surface` | affected surface accepts no new commits | disable remote source or adapter |
|
|
50
|
+
| `abort-scope-jobs` | scheduler jobs in the affected scope are aborted | check `rmt.kernel.scheduler_failure` with `panic_blocked` |
|
|
51
|
+
| `notify-host` | host adapter is actively informed about recovery | confirm `hostNotified` and host-log correlation |
|
|
52
|
+
|
|
53
|
+
## Triage Flow
|
|
54
|
+
|
|
55
|
+
1. Filter `rmt.kernel.panic` by `panicId`, `correlationId`, `scope`, `trigger` and `blockedCommitCount`.
|
|
56
|
+
2. Connect `rmt.kernel.recovery` with the same `correlationId` and evaluate `recoveryAction`, `quarantined` and `hostNotified`.
|
|
57
|
+
3. Check `rmt.kernel.escalation` if diagnostics subscribers or command handlers were involved.
|
|
58
|
+
4. Check `rmt.kernel.scheduler_failure` if jobs are `failed`, `aborted` or `panic_blocked`.
|
|
59
|
+
5. Correct authoring using [RMT Kernel Trusted Output Authoring](./rmt-kernel-trusted-output-authoring.md).
|
|
60
|
+
6. Secure migration and regression with [RMT Kernel Security Hardening Migration](./rmt-kernel-security-hardening-migration.md) and `node scripts/run_xtend_tests.js rmt-kernel-security-regression --json`.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# RMT Kernel Security Hardening Migration
|
|
2
|
+
|
|
3
|
+
- Contract: `xtend.rmt.kernel-migration-authoring-incident-handoff.v1`
|
|
4
|
+
- Workpackage: `RKSH-WP-11`
|
|
5
|
+
- Status: `completed`
|
|
6
|
+
- Local gate: `node scripts/run_xtend_tests.js rmt-kernel-handoff-docs --json`
|
|
7
|
+
|
|
8
|
+
This document describes the migration for hosts and RMT authoring that previously used implicitly allowed runtime outputs. Since the kernel hardening, HTML, attributes, properties and remote outputs are committed only after the trust layer has produced an `RmtKernelRuntimeTrustVerdict`.
|
|
9
|
+
|
|
10
|
+
## When a Trust Boundary Is Required
|
|
11
|
+
|
|
12
|
+
| Output | Trust boundary | Migration |
|
|
13
|
+
|--------|----------------|-----------|
|
|
14
|
+
| `slot.html`, `prerender.html`, `fallback.html` | HTML must be evaluated before every DOM commit. | Use `commitTrustedHtml` with `sanitize html`, `html_fragment` and `safeFallbackHtml`. |
|
|
15
|
+
| Direct DOM HTML sinks such as `innerHTML`, `insertAdjacentHTML` and `template.innerHTML` | These sinks remain privileged Trusted DOM sinks. | Remove direct writes and use the runtime trust-sink adapter. |
|
|
16
|
+
| Attributes such as `href`, `src`, `srcset`, `action`, `formaction` and `srcdoc` | URL and sandbox policy decides before commit. | Use `commitTrustedAttribute` and block dangerous protocols such as `javascript:`. |
|
|
17
|
+
| Event-close attributes such as `onclick`, `onload` or `onerror` | Event attributes are not allowed markup outputs. | Use commands or registered event handlers instead of HTML attributes. |
|
|
18
|
+
| Style and DOM property writes such as `style`, `innerHTML`, `outerHTML`, `srcdoc` | Property policy evaluates side effects and DOM-clobbering risk. | Use `commitTrustedProperty` only for explicitly allowed properties. |
|
|
19
|
+
| Remote outputs and adapter outputs | Remote surface boundaries need scope, origin, capability and integrity context. | Pass remote outputs as `remote-surface` or `adapter-output` scope into the trust authority. |
|
|
20
|
+
|
|
21
|
+
## Replace Legacy Paths
|
|
22
|
+
|
|
23
|
+
1. Remove direct HTML commits from components, adapters and host bridges. The kernel may reach `innerHTML`, `insertAdjacentHTML` or template HTML only through `commitTrustedHtml`.
|
|
24
|
+
2. Mark HTML that should remain allowed as `html_fragment` and pass it through `sanitize html`. The sanitizer must remove or block `script`, `iframe`, `srcdoc`, `on*`, `javascript:` and comparable dangerous patterns.
|
|
25
|
+
3. Write pure text as text: `textContent` is the preferred path for labels, status, error messages and user content.
|
|
26
|
+
4. Separate attributes: `data-*` and `aria-*` remain normal structured attributes, while URL attributes go through `commitTrustedAttribute`.
|
|
27
|
+
5. Separate properties: only explicitly allowed properties go through `commitTrustedProperty`; HTML-close properties remain blocked.
|
|
28
|
+
6. Do not privilege fallbacks such as `fallback.html`. Recovery fallbacks must satisfy the same policy as normal outputs and must have `safeFallbackHtml`.
|
|
29
|
+
7. Check diagnostics and regression: `listTrustVerdicts()`, `rmt.kernel.panic`, `rmt.kernel.recovery` and `node scripts/run_xtend_tests.js rmt-kernel-security-regression --json` must remain green after the migration.
|
|
30
|
+
|
|
31
|
+
## SemVer Impact
|
|
32
|
+
|
|
33
|
+
Blocked legacy outputs can be a breaking change if published hosts previously rendered intentionally unsafe markup and this behavior was part of the documented integration surface.
|
|
34
|
+
|
|
35
|
+
| Change | SemVer |
|
|
36
|
+
|--------|--------|
|
|
37
|
+
| Unsafe HTML, URL or event attributes are newly blocked and existing apps can lose visible content because of that. | `major` |
|
|
38
|
+
| Unsafe paths receive warnings, diagnostics or opt-in fallbacks, but previously safe output remains visible. | `minor` |
|
|
39
|
+
| Only docs, tests, report fields or stricter diagnostics are added without output changes. | `patch` |
|
|
40
|
+
|
|
41
|
+
Release notes for behavior-changing blocks must at least name the affected sinks, the reason code, the recovery path and the recommended migration.
|
|
42
|
+
|
|
43
|
+
## Verification
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
node scripts/run_xtend_tests.js rmt-kernel-handoff-docs --json
|
|
47
|
+
node scripts/run_xtend_tests.js rmt-kernel-security-regression --json
|
|
48
|
+
node scripts/verify_xtendrmt_artifact_parity.js --json
|
|
49
|
+
```
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# RMT Kernel Trusted Output Authoring
|
|
2
|
+
|
|
3
|
+
- Contract: `xtend.rmt.kernel-migration-authoring-incident-handoff.v1`
|
|
4
|
+
- Workpackage: `RKSH-WP-11`
|
|
5
|
+
- Package script: `npm run test:rmt-kernel-handoff-docs`
|
|
6
|
+
|
|
7
|
+
RMT authoring must not assume a string is safe just because it comes from a template, remote surface or adapter. Every output-close authoring path needs a clear trust boundary and a safe fallback.
|
|
8
|
+
|
|
9
|
+
## Authoring Rules
|
|
10
|
+
|
|
11
|
+
- Text remains text: author labels, status, user content and error messages as `textContent` or structured text fields.
|
|
12
|
+
- Author HTML only intentionally: use `html_fragment` with `sanitize html` and explicit scope.
|
|
13
|
+
- Keep attributes small: `data-*` and `aria-*` are preferred; URL attributes go through `commitTrustedAttribute`.
|
|
14
|
+
- Use properties only for allowed runtime targets: do not use DOM HTML properties as shortcuts.
|
|
15
|
+
- Fallbacks are not privileged: `safeFallbackHtml` itself must be sanitizable and not interactively dangerous.
|
|
16
|
+
- Remote surface outputs need scope, capability, origin and integrity context before they enter the kernel.
|
|
17
|
+
|
|
18
|
+
## Safe Patterns
|
|
19
|
+
|
|
20
|
+
```js
|
|
21
|
+
runtime.commitTrustedHtml(slotTarget, {
|
|
22
|
+
scope: 'slot',
|
|
23
|
+
source: 'slot.html',
|
|
24
|
+
html: model.safeSummaryHtml,
|
|
25
|
+
policy: {
|
|
26
|
+
transform: 'sanitize html',
|
|
27
|
+
output: 'html_fragment'
|
|
28
|
+
},
|
|
29
|
+
safeFallbackHtml: '<p data-rmt-fallback="safe">Content unavailable.</p>'
|
|
30
|
+
});
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
```js
|
|
34
|
+
runtime.commitTrustedAttribute(linkTarget, {
|
|
35
|
+
scope: 'binding',
|
|
36
|
+
name: 'href',
|
|
37
|
+
value: model.href,
|
|
38
|
+
allowedProtocols: ['https:', 'mailto:']
|
|
39
|
+
});
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
```js
|
|
43
|
+
runtime.commitTrustedProperty(inputTarget, {
|
|
44
|
+
scope: 'binding',
|
|
45
|
+
name: 'value',
|
|
46
|
+
value: model.value,
|
|
47
|
+
policy: 'form-control-value'
|
|
48
|
+
});
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Authoring Checklist
|
|
52
|
+
|
|
53
|
+
| Question | Safe answer |
|
|
54
|
+
|----------|-------------|
|
|
55
|
+
| Does the output contain markup? | `html_fragment` plus `sanitize html` and `commitTrustedHtml`. |
|
|
56
|
+
| Is it only text? | `textContent` or a structured text record. |
|
|
57
|
+
| Is it a URL attribute? | `commitTrustedAttribute` with protocol allowlist. |
|
|
58
|
+
| Is it `data-*` or `aria-*`? | Structured attribute commit, no HTML interpolation. |
|
|
59
|
+
| Is it a fallback? | `safeFallbackHtml` with the same policy as normal HTML outputs. |
|
|
60
|
+
| Does it come from remote or adapter code? | Trust scope `remote-surface` or `adapter-output`, capability and diagnostics correlation. |
|
|
61
|
+
|
|
62
|
+
## No-Go Patterns
|
|
63
|
+
|
|
64
|
+
- Forward markup from remote sources directly into `slot.html`, `prerender.html` or `fallback.html`.
|
|
65
|
+
- Transport event attributes such as `onclick` as data.
|
|
66
|
+
- Use `style` or HTML-close properties as an escape hatch.
|
|
67
|
+
- Build `safeFallbackHtml` from the same unsafe source as the blocked output.
|
|
68
|
+
- Ignore diagnostics when a verdict reports `blocked` or `panic`.
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
# RMT Language Server and Editor Setup
|
|
2
|
+
|
|
3
|
+
- Status: productively prepared since `WP-E14-14`
|
|
4
|
+
- Contract: `xtend.rmt.editor-packaging.v1`
|
|
5
|
+
- Language Server: `xtend.rmt.language-server.v1`
|
|
6
|
+
- Snippet Catalog: `xtend.rmt.snippet-catalog.v1`
|
|
7
|
+
- Epic 14 Handoff: `xtend.epic14.lsp-handoff.v1`
|
|
8
|
+
- Primary file type: `.rmt`
|
|
9
|
+
- Local gates:
|
|
10
|
+
- `node scripts/run_xtend_tests.js rmt-editor-packaging --json`
|
|
11
|
+
- `node scripts/run_xtend_tests.js rmt-tooling-docs --json`
|
|
12
|
+
- `node scripts/run_xtend_tests.js epic14-lsp-handoff --json`
|
|
13
|
+
|
|
14
|
+
## Goal
|
|
15
|
+
|
|
16
|
+
RMT tooling is editor-agnostic. The domain source of truth lives in:
|
|
17
|
+
|
|
18
|
+
- `tools/rmt-language`
|
|
19
|
+
- `tools/rmt-linter`
|
|
20
|
+
- `tools/rmt-language-server`
|
|
21
|
+
|
|
22
|
+
Editor packages may provide snippets, syntax highlighting, and launch commands
|
|
23
|
+
for the LSP. They must not implement a second RMT semantics layer.
|
|
24
|
+
|
|
25
|
+
## Start the Language Server
|
|
26
|
+
|
|
27
|
+
The server speaks stdio JSON-RPC:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
node tools/rmt-language-server/server.js
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The server currently provides:
|
|
34
|
+
|
|
35
|
+
- Diagnostics
|
|
36
|
+
- Completion
|
|
37
|
+
- Hover
|
|
38
|
+
- Document Symbols
|
|
39
|
+
- Definition
|
|
40
|
+
- Code Actions
|
|
41
|
+
|
|
42
|
+
The LSP uses the same diagnostic core as `xt rmt lint`. Editor integrations
|
|
43
|
+
should therefore not maintain their own RMT rules.
|
|
44
|
+
|
|
45
|
+
## LSP Capability Matrix
|
|
46
|
+
|
|
47
|
+
| Capability | Protocol / Surface | Status | Source of Truth | Gate |
|
|
48
|
+
|------------|--------------------|--------|-----------------|------|
|
|
49
|
+
| Diagnostics | `textDocument/publishDiagnostics` | implemented | `xtend.rmt.linter.rule-engine.v1` | `rmt-linter-rules` |
|
|
50
|
+
| Completion | `textDocument/completion` | implemented | `xtend.rmt.completion-provider.v1` | `rmt-completions` |
|
|
51
|
+
| Hover | `textDocument/hover` | implemented | `xtend.rmt.hover-provider.v1` | `rmt-navigation` |
|
|
52
|
+
| Document Symbols | `textDocument/documentSymbol` | implemented | `xtend.rmt.document-symbols-provider.v1` | `rmt-navigation` |
|
|
53
|
+
| Definition | `textDocument/definition` | implemented | `xtend.rmt.definition-provider.v1` | `rmt-navigation` |
|
|
54
|
+
| Code Actions | `textDocument/codeAction` | implemented | `xtend.rmt.code-action-provider.v1` | `rmt-code-actions` |
|
|
55
|
+
| Agent Repair Report | `xt rmt lint --agent` | implemented | `xtend.rmt.ai-agent-repair-report.v1` | `rmt-agent-report` |
|
|
56
|
+
| Snippets | Editor Packaging | implemented | `xtend.rmt.snippet-catalog.v1` | `rmt-editor-packaging` |
|
|
57
|
+
| Workspace Symbols | `workspace/symbol` | planned | Project Index follow-up | future |
|
|
58
|
+
| Rename | `textDocument/rename` | planned | Safe Refactor follow-up | future |
|
|
59
|
+
| References | `textDocument/references` | planned | Project Index follow-up | future |
|
|
60
|
+
| Semantic Tokens | `textDocument/semanticTokens` | planned | Syntax Highlighting follow-up | future |
|
|
61
|
+
| Formatting | `textDocument/formatting` | planned | Formatter follow-up | future |
|
|
62
|
+
|
|
63
|
+
## Known Limitations
|
|
64
|
+
|
|
65
|
+
- The current authoring MVP is still JSON-based. A friendlier DSL syntax is
|
|
66
|
+
follow-up work.
|
|
67
|
+
- `textDocument/formatting` is planned but not productively released.
|
|
68
|
+
- `workspace/symbol`, `textDocument/rename`, and `textDocument/references`
|
|
69
|
+
need a project-wide index and intentionally remain outside the MVP.
|
|
70
|
+
- Marketplace packaging for individual editors is not part of Epic 14. The
|
|
71
|
+
generic LSP setup remains the current integration path.
|
|
72
|
+
- The Language Server does not execute XTend components, start XRouter, or
|
|
73
|
+
materialize DOM.
|
|
74
|
+
- `.rmt.json` remains readable, but is treated as a fallback and should not be
|
|
75
|
+
the normal path in new projects.
|
|
76
|
+
|
|
77
|
+
## Snippets
|
|
78
|
+
|
|
79
|
+
The editor-agnostic snippet catalog lives in:
|
|
80
|
+
|
|
81
|
+
```text
|
|
82
|
+
tools/rmt-language/snippets/index.js
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
The VS Code-compatible export format lives in:
|
|
86
|
+
|
|
87
|
+
```text
|
|
88
|
+
tools/rmt-language/snippets/rmt.code-snippets
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
All snippets create native `.rmt` authoring structures. `.rmt.json` remains
|
|
92
|
+
only a parser/linter fallback and should not be used in new snippets.
|
|
93
|
+
|
|
94
|
+
Important prefixes:
|
|
95
|
+
|
|
96
|
+
| Prefix | Purpose |
|
|
97
|
+
|--------|---------|
|
|
98
|
+
| `rmt-app` | minimal native app shell |
|
|
99
|
+
| `rmt-component` | XTend component record |
|
|
100
|
+
| `rmt-route` | XRouter route record |
|
|
101
|
+
| `rmt-schedule` | schedule policy |
|
|
102
|
+
| `rmt-template-dom` | safe `dom_descriptor` template |
|
|
103
|
+
| `rmt-template-html` | `html_fragment` with Trusted DOM boundary |
|
|
104
|
+
|
|
105
|
+
## VS Code
|
|
106
|
+
|
|
107
|
+
The VS Code integration lives in:
|
|
108
|
+
|
|
109
|
+
```text
|
|
110
|
+
tools/rmt-editor/vscode
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
It registers:
|
|
114
|
+
|
|
115
|
+
- Language ID `rmt`
|
|
116
|
+
- File extension `.rmt`
|
|
117
|
+
- RMT vNext-aware TextMate grammar with a legacy JSON fallback
|
|
118
|
+
- RMT snippets
|
|
119
|
+
- `vscode-languageclient` for the local RMT Language Server
|
|
120
|
+
- `$xtend-rmt-lint` problem matcher
|
|
121
|
+
- XTend CLI tasks and Debug Console launch configurations
|
|
122
|
+
- Command `XTendRMT: Show Language Server Command`
|
|
123
|
+
- Command `XTendRMT: Start/Restart Language Server`
|
|
124
|
+
- Command `XTendRMT: Run Active RMT Lint`
|
|
125
|
+
- Command `XTendRMT: Run Workspace RMT Lint`
|
|
126
|
+
- Command `XTendRMT: Run RMT Build Check`
|
|
127
|
+
- Command `XTendRMT: Run Scaffold Verify`
|
|
128
|
+
- Command `XTendRMT: Debug Language Server`
|
|
129
|
+
- Command `XTendRMT: Debug Active RMT Lint`
|
|
130
|
+
- Command `XTendRMT: Debug Active RMT Build`
|
|
131
|
+
- Command `XTendRMT: Open XTend CLI Terminal`
|
|
132
|
+
- Command `XTendRMT: Run XTend CLI Command...`
|
|
133
|
+
- Command `XTendRMT: Run Agent Repair Report`
|
|
134
|
+
- Command `XTendRMT: Run RMT Build Write`
|
|
135
|
+
- Command `XTendRMT: Open VS Code Tasks Template`
|
|
136
|
+
- Command `XTendRMT: Open VS Code Launch Template`
|
|
137
|
+
- Command `XTendRMT: Show vNext Primitive Apply Experience`
|
|
138
|
+
- Command `XTendRMT: Show vNext Primitive Code Action Preview`
|
|
139
|
+
- Command `XTendRMT: Show vNext Primitive Command Handoff`
|
|
140
|
+
|
|
141
|
+
The packaged LanguageClient starts the server through stdio:
|
|
142
|
+
|
|
143
|
+
```json
|
|
144
|
+
{
|
|
145
|
+
"command": "node",
|
|
146
|
+
"args": ["tools/rmt-language-server/server.js"]
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Terminal tasks use the XTend CLI as their orchestrator and do not maintain a
|
|
151
|
+
second RMT semantics layer. The extension resolves the CLI from the workspace
|
|
152
|
+
first at `xtend-builder/scaffold.js`, then `node_modules/.bin/xt`, and then
|
|
153
|
+
`node_modules/@ccslabs/xtend-cli/scaffold.js`. If a project uses another
|
|
154
|
+
layout, `xtendRmt.xtendCli.path` can point to an executable or `scaffold.js`.
|
|
155
|
+
The versioned template lives at:
|
|
156
|
+
|
|
157
|
+
```text
|
|
158
|
+
tools/rmt-editor/vscode/templates/tasks.json
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
The problem matcher consumes the stable linter output:
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
xt rmt lint app.rmt --format problem-matcher --fail-on warning
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
The Debug Console launch template lives at:
|
|
168
|
+
|
|
169
|
+
```text
|
|
170
|
+
tools/rmt-editor/vscode/templates/launch.json
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
It contains debug starts for the Language Server, active RMT lint, active RMT
|
|
174
|
+
build and scaffold verify. This is tool debugging for authoring workflows; a
|
|
175
|
+
custom debug adapter for runtime RMT UI breakpoints remains outside this slice.
|
|
176
|
+
|
|
177
|
+
The vNext primitive commands read CodeAction reports or individual actions from
|
|
178
|
+
the RMT vNext tooling layer and show the three apply paths separately in the
|
|
179
|
+
Output Channel:
|
|
180
|
+
|
|
181
|
+
- safe individual quick fixes;
|
|
182
|
+
- `source.fixAll.rmt.vnext.primitives` for all safe WorkspaceEdits;
|
|
183
|
+
- manual `xtend.rmt.vnext.extractKernelImport` handoffs for Kernel/Fabric
|
|
184
|
+
boundary violations without an automatic WorkspaceEdit.
|
|
185
|
+
|
|
186
|
+
## JetBrains
|
|
187
|
+
|
|
188
|
+
JetBrains IDEs can be connected through a generic LSP client or a local file
|
|
189
|
+
watcher/external tool setup.
|
|
190
|
+
|
|
191
|
+
Recommended values:
|
|
192
|
+
|
|
193
|
+
- Language ID: `rmt`
|
|
194
|
+
- Extension: `.rmt`
|
|
195
|
+
- Command: `node`
|
|
196
|
+
- Args: `tools/rmt-language-server/server.js`
|
|
197
|
+
|
|
198
|
+
## Neovim
|
|
199
|
+
|
|
200
|
+
Minimal `nvim-lspconfig`-compatible starting point:
|
|
201
|
+
|
|
202
|
+
```lua
|
|
203
|
+
local lspconfig = require('lspconfig')
|
|
204
|
+
local configs = require('lspconfig.configs')
|
|
205
|
+
|
|
206
|
+
configs.xtendrmt = {
|
|
207
|
+
default_config = {
|
|
208
|
+
cmd = { 'node', 'tools/rmt-language-server/server.js' },
|
|
209
|
+
filetypes = { 'rmt' },
|
|
210
|
+
root_dir = lspconfig.util.root_pattern('package.json', '.git')
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
lspconfig.xtendrmt.setup({})
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
## Helix
|
|
218
|
+
|
|
219
|
+
Example for `languages.toml`:
|
|
220
|
+
|
|
221
|
+
```toml
|
|
222
|
+
[[language]]
|
|
223
|
+
name = "rmt"
|
|
224
|
+
scope = "source.rmt"
|
|
225
|
+
file-types = ["rmt"]
|
|
226
|
+
language-servers = ["xtendrmt"]
|
|
227
|
+
|
|
228
|
+
[language-server.xtendrmt]
|
|
229
|
+
command = "node"
|
|
230
|
+
args = ["tools/rmt-language-server/server.js"]
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
## Boundary
|
|
234
|
+
|
|
235
|
+
Editor packaging must not execute XTend components, start XRouter, or create
|
|
236
|
+
DOM side effects. It only starts the LSP and provides static snippets.
|
|
237
|
+
|
|
238
|
+
## Related Guides
|
|
239
|
+
|
|
240
|
+
- [RMT Linter and AI-Agent Repair Report](./rmt-linter.md)
|
|
241
|
+
- [XTendRMT Native Authoring Guide](./xtendrmt-native-authoring.md)
|
|
242
|
+
- [Quick Start Guide](./quick-start-guide.md)
|
|
243
|
+
- [Epic 14 Completion and LSP Handoff](../development/XTendRMT-Epic14-Abschluss-und-LSP-Handoff.md)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# RMT Lifecycle Demo
|
|
2
|
+
|
|
3
|
+
Contract: `xtend.rmt.lifecycle-demo.v1`
|
|
4
|
+
|
|
5
|
+
The lifecycle demo shows the complete path from RMT authoring to an openable XTend app:
|
|
6
|
+
|
|
7
|
+
1. `xtendrmt/rmt-lifecycle-demo.rmt` is the RMT vNext template.
|
|
8
|
+
2. `node xtend-builder/scaffold.js rmt-lifecycle-demo --write --json` compiles
|
|
9
|
+
the template into `xtendrmt/rmt-lifecycle-demo.core.json`.
|
|
10
|
+
3. The same scaffold build writes the generated artifacts:
|
|
11
|
+
`components/x-rmt-lifecycle-demo.js`,
|
|
12
|
+
`xtendrmt/rmt-lifecycle-demo.app.js`,
|
|
13
|
+
`tests/browser/fixtures/rmt-lifecycle-demo-smoke.html`.
|
|
14
|
+
4. The app can be opened through the local HTTP server:
|
|
15
|
+
`node scripts/serve_xtend_dev.js --default tests/browser/fixtures/rmt-lifecycle-demo-smoke.html`.
|
|
16
|
+
|
|
17
|
+
The build report is stored at `xtendrmt/rmt-lifecycle-demo.scaffold.json`. It
|
|
18
|
+
connects source, core output, generated XTend app, browser smoke and the local
|
|
19
|
+
gate `node scripts/run_xtend_tests.js rmt-lifecycle-demo --json`.
|
|
20
|
+
|
|
21
|
+
The generated files are intentionally marked with `@generated by XTend Scaffold RMT
|
|
22
|
+
lifecycle build`. Changes should be made in the vNext template or scaffold
|
|
23
|
+
generator, not directly in the generated artifacts.
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# RMT Linter and AI-Agent Repair Report
|
|
2
|
+
|
|
3
|
+
- Status: productively prepared since `WP-E14-14`
|
|
4
|
+
- Contract: `xtend.rmt.tooling-docs.v1`
|
|
5
|
+
- Linter Report: `xtend.rmt.linter.report.v1`
|
|
6
|
+
- Agent Report: `xtend.rmt.ai-agent-repair-report.v1`
|
|
7
|
+
- Primary file type: `.rmt`
|
|
8
|
+
- Local gate: `node scripts/run_xtend_tests.js rmt-tooling-docs --json`
|
|
9
|
+
|
|
10
|
+
## Purpose
|
|
11
|
+
|
|
12
|
+
The RMT Linter makes native `.rmt` documents verifiable locally, in CI, and for
|
|
13
|
+
AI agents. It uses the same language layer as the RMT Language Server:
|
|
14
|
+
|
|
15
|
+
- Source Model
|
|
16
|
+
- Parser and Format Adapter
|
|
17
|
+
- Semantic Graph
|
|
18
|
+
- Linter Rules
|
|
19
|
+
- Code Actions
|
|
20
|
+
- Agent Repair Report
|
|
21
|
+
|
|
22
|
+
The linter does not execute XTend components, start XRouter, or materialize DOM.
|
|
23
|
+
It analyzes RMT as a language.
|
|
24
|
+
|
|
25
|
+
## Default Command
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
xt rmt lint app.rmt
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
The long command path remains valid as well:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
xtend rmt lint app.rmt
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Directory targets and simple glob targets are supported:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
xt rmt lint tests/rmt-language/fixtures
|
|
41
|
+
xt rmt lint "tests/rmt-language/fixtures/*.rmt" --json
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## JSON Report
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
xt rmt lint app.rmt --json
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
The report is intended for CI and other tools:
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"schema": "xtend.rmt.linter.report.v1",
|
|
55
|
+
"status": "failed",
|
|
56
|
+
"files": 1,
|
|
57
|
+
"diagnostics": []
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Fail Policy
|
|
62
|
+
|
|
63
|
+
The default is `--fail-on error`. Warnings do not break the local run in that
|
|
64
|
+
mode.
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
xt rmt lint app.rmt --fail-on warning
|
|
68
|
+
xt rmt lint app.rmt --fail-on info
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
CI can therefore run stricter checks than local authoring loops.
|
|
72
|
+
|
|
73
|
+
## Agent Report
|
|
74
|
+
|
|
75
|
+
AI agents use the repair report:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
xt rmt lint app.rmt --agent
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
`--agent` implies JSON and returns:
|
|
82
|
+
|
|
83
|
+
- `diagnostics`
|
|
84
|
+
- `repairPlan`
|
|
85
|
+
- `fixOrder`
|
|
86
|
+
- `noOps`
|
|
87
|
+
- `confidence`
|
|
88
|
+
- `impact`
|
|
89
|
+
- `relatedDiagnostics`
|
|
90
|
+
|
|
91
|
+
Diagnostics that cannot be safely automated are intentionally explained as
|
|
92
|
+
no-ops. Examples include syntax recovery, inline-script removal, or component
|
|
93
|
+
stubs that need authoring context.
|
|
94
|
+
|
|
95
|
+
## Diagnostic Codes
|
|
96
|
+
|
|
97
|
+
Important codes:
|
|
98
|
+
|
|
99
|
+
| Code | Meaning |
|
|
100
|
+
|------|---------|
|
|
101
|
+
| `rmt.syntax.invalid-json` | the document cannot be parsed syntactically |
|
|
102
|
+
| `rmt.document.extension.fallback-used` | `.rmt.json` or `.json` is used only as a fallback |
|
|
103
|
+
| `rmt.document.kind.missing` | `kind: "rmt_document"` is missing |
|
|
104
|
+
| `rmt.adapter.unknown` | adapter reference is not defined |
|
|
105
|
+
| `rmt.ref.component.unresolved` | component reference cannot be resolved |
|
|
106
|
+
| `rmt.ref.template.unresolved` | template reference cannot be resolved |
|
|
107
|
+
| `rmt.ref.schedule.unresolved` | schedule reference cannot be resolved |
|
|
108
|
+
| `rmt.ref.route.duplicate-path` | route path is defined more than once |
|
|
109
|
+
| `rmt.fabric.lane.unknown` | Fabric/RMT lane is unknown |
|
|
110
|
+
| `rmt.template.inline-script.refused` | inline script violates the Trusted DOM/kernel boundary |
|
|
111
|
+
|
|
112
|
+
## Quick Fixes
|
|
113
|
+
|
|
114
|
+
Safe repairs come from `xtend.rmt.code-action-provider.v1`.
|
|
115
|
+
|
|
116
|
+
The MVP supports:
|
|
117
|
+
|
|
118
|
+
- creating missing schedules
|
|
119
|
+
- creating missing templates as `dom_descriptor` stubs
|
|
120
|
+
- changing unknown Fabric lanes to `visible`
|
|
121
|
+
- changing unknown hydration policies to `runtime_render`
|
|
122
|
+
- adding missing route `documentTitle`
|
|
123
|
+
- adding missing schedule `endpointName`
|
|
124
|
+
- renaming `.rmt.json` to `.rmt` via command
|
|
125
|
+
|
|
126
|
+
## Regression Gate
|
|
127
|
+
|
|
128
|
+
The tooling matrix lives in:
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
node scripts/run_xtend_tests.js rmt-language-regression --json
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
This gate checks valid, broken, legacy, and larger RMT documents across parser,
|
|
135
|
+
linter, CLI, LSP, and agent report.
|
|
136
|
+
|
|
137
|
+
## Editor Workflow
|
|
138
|
+
|
|
139
|
+
For IDEs, see [RMT Language Server and Editor Setup](./rmt-language-server.md).
|
|
140
|
+
|
|
141
|
+
Recommended flow:
|
|
142
|
+
|
|
143
|
+
1. Create a new document with the `rmt-app` snippet.
|
|
144
|
+
2. Use diagnostics and completion in the IDE.
|
|
145
|
+
3. Check locally with `xt rmt lint app.rmt`.
|
|
146
|
+
4. Use `xt rmt lint app.rmt --agent` for agents or CI.
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# RMT Node SSR Adapter
|
|
2
|
+
|
|
3
|
+
The Node SSR Adapter is the lightweight server-side API for XTendRMT. It emits
|
|
4
|
+
Light DOM HTML for XTend Custom Elements, RenderMan-compatible hydration
|
|
5
|
+
payloads, and optional JSONL streaming for incremental UI components.
|
|
6
|
+
|
|
7
|
+
Schema: `xtend.rmt.node-ssr-adapter.v1`
|
|
8
|
+
|
|
9
|
+
```js
|
|
10
|
+
import {
|
|
11
|
+
createRmtNodeSsrAdapter
|
|
12
|
+
} from '@ccslabs/xtend/rmt/node-ssr-adapter';
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
The runtime package exposes the same API via
|
|
16
|
+
`@ccslabs/xtend-rmt/node-ssr-adapter`.
|
|
17
|
+
|
|
18
|
+
For PHP/Laravel hosts, the
|
|
19
|
+
[RMT PHP/Laravel SSR Adapter](./rmt-php-ssr-adapter.md) provides the same
|
|
20
|
+
client wire contract: HTML, hydration, RenderMan chunks, and JSONL frames stay
|
|
21
|
+
compatible.
|
|
22
|
+
|
|
23
|
+
## Architecture
|
|
24
|
+
|
|
25
|
+
The adapter is a host layer, not a second renderer. RMT vNext describes source,
|
|
26
|
+
state, selectors, actions, events, surfaces, and streams. The compiler emits
|
|
27
|
+
Core and Kernel records. The Component Capability Registry describes XTend UI
|
|
28
|
+
generically. The Node adapter serializes that into safe server-side startup
|
|
29
|
+
output.
|
|
30
|
+
|
|
31
|
+
It does not instantiate Custom Elements on the server, does not access private
|
|
32
|
+
component internals, does not start an HTTP server, and does not perform
|
|
33
|
+
implicit global network calls.
|
|
34
|
+
|
|
35
|
+
## API
|
|
36
|
+
|
|
37
|
+
```js
|
|
38
|
+
const adapter = createRmtNodeSsrAdapter({
|
|
39
|
+
manifest,
|
|
40
|
+
sourceTexts,
|
|
41
|
+
endpointHandlers: {
|
|
42
|
+
'ssr.hero': () => ({
|
|
43
|
+
html: '<x-hero>Hero</x-hero>',
|
|
44
|
+
trustBoundary: 'xtend.security.sanitizing-boundary.v1'
|
|
45
|
+
})
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
const result = await adapter.render({
|
|
50
|
+
source,
|
|
51
|
+
filePath: 'app.rmt'
|
|
52
|
+
});
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
`render` accepts RMT source, Core Documents, Prepared Templates, and DOM
|
|
56
|
+
Descriptors. In the full package, source compilation is wired through the
|
|
57
|
+
existing vNext compiler. Runtime-only hosts inject `compileRmtVNextSource`; if
|
|
58
|
+
that function is missing, the adapter reports `rmt.node_ssr.compiler_required`.
|
|
59
|
+
|
|
60
|
+
## Output
|
|
61
|
+
|
|
62
|
+
`xtend.rmt.node-ssr-render-result.v1` contains:
|
|
63
|
+
|
|
64
|
+
- `html`
|
|
65
|
+
- `head.preloads`
|
|
66
|
+
- `renderman_template_chunk`
|
|
67
|
+
- `server_prerender_hydrate` hydration data
|
|
68
|
+
- `xtend.rmt.vnext-streaming-contract.v1`
|
|
69
|
+
- Component Capability markers
|
|
70
|
+
- diagnostics
|
|
71
|
+
|
|
72
|
+
## JSONL Streaming
|
|
73
|
+
|
|
74
|
+
`streamJsonl` yields frames with
|
|
75
|
+
`xtend.rmt.node-ssr-jsonl-frame.v1`. Important frame types are `start`,
|
|
76
|
+
`component`, `html`, `hydration`, `diagnostic`, `complete`, and `error`.
|
|
77
|
+
|
|
78
|
+
The streaming capabilities stay compatible with RMT vNext:
|
|
79
|
+
|
|
80
|
+
- `stream.ssr.incremental`
|
|
81
|
+
- `stream.hydration.chunked`
|
|
82
|
+
|
|
83
|
+
## Data Sources and Security
|
|
84
|
+
|
|
85
|
+
Data sources are resolved only through explicit host hooks:
|
|
86
|
+
`resolveDataSource`, `endpointHandlers`, `staticDataSources`, `fixtures`, or
|
|
87
|
+
`fetchAdapter`. Missing resolvers report `rmt.node_ssr.datasource_missing`.
|
|
88
|
+
|
|
89
|
+
HTML fragments need a trust boundary such as
|
|
90
|
+
`xtend.security.sanitizing-boundary.v1` or
|
|
91
|
+
`xtend.security.streaming-boundary.v1`. Unsafe URLs, event attributes, `srcdoc`,
|
|
92
|
+
and blocked tags are diagnosed and cleaned.
|
|
93
|
+
|
|
94
|
+
## Gate
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
npm run test:rmt-node-ssr-adapter
|
|
98
|
+
node scripts/run_xtend_tests.js rmt-node-ssr-adapter --json
|
|
99
|
+
```
|