@aceshooting/lyra-ui 26.0.0 → 27.0.0
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 +63 -675
- package/README.md +281 -1130
- package/design-tokens.json +1 -1
- package/dist/ai/types.d.ts +5 -5
- package/dist/autoloader.js +1 -1
- package/dist/cli/agent-registry.mjs +1 -0
- package/dist/cli/component-inventory.mjs +1 -1
- package/dist/cli/init-agents.mjs +40 -0
- package/dist/cli/is-main-module.mjs +1 -0
- package/dist/cli/lyra-rename-ledger.mjs +1 -1
- package/dist/cli/lyra-ui.mjs +11 -0
- package/dist/cli/migrate-wa.mjs +4 -2
- package/dist/cli/migration-contract.json +1 -1
- package/dist/cli/migration-renames.mjs +1 -1
- package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.class.d.ts +1 -1
- package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.class.js +2 -2
- package/dist/components/agent-tools/approval-queue/approval-queue.class.js +1 -1
- package/dist/components/agent-tools/confirm-bar/confirm-bar.class.d.ts +2 -2
- package/dist/components/agent-tools/confirm-bar/confirm-bar.class.js +2 -2
- package/dist/components/agent-tools/connector-manager/connector-manager.class.d.ts +4 -2
- package/dist/components/agent-tools/connector-manager/connector-manager.class.js +6 -3
- package/dist/components/agent-tools/connector-manager/connector-manager.d.ts +1 -1
- package/dist/components/agent-tools/connector-manager/connector-manager.js +1 -1
- package/dist/components/agent-tools/connector-manager/connector-manager.styles.js +1 -1
- package/dist/components/agent-tools/context-inspector/context-inspector.class.d.ts +2 -2
- package/dist/components/agent-tools/context-inspector/context-inspector.class.js +6 -6
- package/dist/components/agent-tools/eval-dataset/eval-dataset.class.d.ts +8 -33
- package/dist/components/agent-tools/eval-dataset/eval-dataset.class.js +27 -4
- package/dist/components/agent-tools/eval-dataset/eval-dataset.d.ts +1 -1
- package/dist/components/agent-tools/eval-dataset/eval-dataset.js +1 -1
- package/dist/components/agent-tools/eval-dataset/eval-dataset.styles.js +1 -1
- package/dist/components/agent-tools/evaluation-run/evaluation-run.class.js +1 -1
- package/dist/components/agent-tools/permission-grant/permission-grant.class.d.ts +4 -2
- package/dist/components/agent-tools/permission-grant/permission-grant.class.js +6 -3
- package/dist/components/agent-tools/permission-grant/permission-grant.d.ts +1 -1
- package/dist/components/agent-tools/permission-grant/permission-grant.js +1 -1
- package/dist/components/agent-tools/permission-grant/permission-grant.styles.js +1 -1
- package/dist/components/agent-tools/prompt-studio/prompt-studio.class.d.ts +1 -1
- package/dist/components/agent-tools/prompt-studio/prompt-studio.class.js +2 -2
- package/dist/components/agent-tools/schema-viewer/schema-viewer.class.d.ts +3 -1
- package/dist/components/agent-tools/schema-viewer/schema-viewer.class.js +1 -1
- package/dist/components/agent-tools/stack-trace/stack-trace.class.js +1 -1
- package/dist/components/agent-tools/task-list/task-list.class.d.ts +2 -2
- package/dist/components/agent-tools/task-list/task-list.class.js +2 -2
- package/dist/components/agent-tools/terminal/terminal.class.d.ts +1 -1
- package/dist/components/agent-tools/terminal/terminal.class.js +4 -4
- package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.class.d.ts +15 -9
- package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.class.js +1 -1
- package/dist/components/agent-tools/tool-call-block/tool-call-block.class.d.ts +2 -2
- package/dist/components/agent-tools/tool-call-block/tool-call-block.class.js +1 -1
- package/dist/components/agent-tools/tool-call-block/tool-call-block.styles.js +1 -1
- package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.d.ts +2 -7
- package/dist/components/agent-tools/tool-call-chip/tool-call-chip.styles.js +1 -1
- package/dist/components/agent-tools/tool-param-form/tool-param-constraints.js +1 -1
- package/dist/components/agent-tools/tool-param-form/tool-param-form.class.d.ts +3 -5
- package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +1 -1
- package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.class.d.ts +2 -5
- package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.styles.js +1 -1
- package/dist/components/agent-tools/tool-result-view/registry.d.ts +4 -12
- package/dist/components/agent-tools/tool-result-view/tool-result-view.class.d.ts +2 -2
- package/dist/components/agent-tools/tool-result-view/tool-result-view.class.js +1 -1
- package/dist/components/agent-tools/tool-status.d.ts +7 -0
- package/dist/components/agent-tools/tool-status.styles.js +1 -0
- package/dist/components/agent-tools/tool-timeline/tool-timeline.class.js +1 -1
- package/dist/components/agent-tools/tool-timeline/tool-timeline.d.ts +1 -1
- package/dist/components/agent-tools/tool-timeline/tool-timeline.js +1 -1
- package/dist/components/agent-tools/trace-tree/trace-tree.class.js +2 -2
- package/dist/components/charts/chart/box-plot.class.d.ts +1 -1
- package/dist/components/charts/chart/box-plot.class.js +1 -1
- package/dist/components/charts/chart/box-plot.styles.js +1 -1
- package/dist/components/charts/chart/chart-surface-shared.js +1 -0
- package/dist/components/charts/chart/chart-surface.styles.js +1 -1
- package/dist/components/charts/chart/chart-table-sampling.js +1 -1
- package/dist/components/charts/chart/chart.class.d.ts +2 -2
- package/dist/components/charts/chart/chart.class.js +2 -2
- package/dist/components/charts/chart/chart.styles.js +1 -1
- package/dist/components/charts/chart/histogram.class.js +1 -1
- package/dist/components/charts/chart/lite-chart.class.d.ts +1 -1
- package/dist/components/charts/chart/lite-chart.class.js +4 -4
- package/dist/components/conversation/catalog-picker-element.d.ts +28 -13
- package/dist/components/conversation/catalog-picker-element.js +1 -1
- package/dist/components/conversation/catalog-picker-trigger.styles.js +1 -0
- package/dist/components/conversation/chat-message/chat-message.class.js +1 -1
- package/dist/components/conversation/chat-message/chat-message.styles.js +1 -1
- package/dist/components/conversation/chat-viewport/chat-viewport.class.d.ts +1 -1
- package/dist/components/conversation/chat-viewport/chat-viewport.class.js +1 -1
- package/dist/components/conversation/code-block/code-block-shared.js +1 -1
- package/dist/components/conversation/conversation-item/conversation-item.class.js +1 -1
- package/dist/components/conversation/generation-metrics/generation-metrics.class.js +2 -2
- package/dist/components/conversation/markdown/markdown-base.class.js +1 -1
- package/dist/components/conversation/markdown/markdown-code-header.js +1 -1
- package/dist/components/conversation/message-actions/message-actions.class.js +1 -1
- package/dist/components/conversation/model-select/model-select.class.d.ts +7 -34
- package/dist/components/conversation/model-select/model-select.class.js +3 -3
- package/dist/components/conversation/model-select/model-select.styles.js +1 -1
- package/dist/components/conversation/prompt-input/prompt-input.class.d.ts +7 -2
- package/dist/components/conversation/prompt-input/prompt-input.class.js +5 -2
- package/dist/components/conversation/prompt-queue/prompt-queue.class.js +1 -1
- package/dist/components/conversation/realtime-session/realtime-session.class.js +1 -1
- package/dist/components/conversation/selection-toolbar/selection-toolbar.class.js +1 -1
- package/dist/components/conversation/stream-status/stream-status.class.js +1 -1
- package/dist/components/conversation/voice-picker/voice-picker.class.d.ts +10 -27
- package/dist/components/conversation/voice-picker/voice-picker.class.js +3 -3
- package/dist/components/conversation/voice-picker/voice-picker.styles.js +1 -1
- package/dist/components/data/condition-builder/condition-builder.class.js +1 -1
- package/dist/components/data/data-grid/data-grid.class.js +1 -1
- package/dist/components/data/document-library/document-library.class.d.ts +2 -2
- package/dist/components/data/document-library/document-library.class.js +2 -2
- package/dist/components/data/graph-query-builder/graph-query-builder.class.d.ts +3 -3
- package/dist/components/data/graph-query-builder/graph-query-builder.class.js +1 -1
- package/dist/components/data/heatmap/heatmap.class.js +2 -2
- package/dist/components/data/sequence-strip/sequence-strip.class.d.ts +1 -1
- package/dist/components/data/sequence-strip/sequence-strip.class.js +1 -1
- package/dist/components/data/table/table.class.d.ts +10 -195
- package/dist/components/data/table/table.class.js +2 -2
- package/dist/components/data/table/table.styles.js +1 -1
- package/dist/components/data/timeline/timeline.class.js +1 -1
- package/dist/components/data/tree/tree.class.js +1 -1
- package/dist/components/forms/button/button.class.d.ts +3 -3
- package/dist/components/forms/button/button.class.js +1 -1
- package/dist/components/forms/catalog-picker-base.js +1 -1
- package/dist/components/forms/checkbox/checkbox.class.d.ts +13 -34
- package/dist/components/forms/checkbox/checkbox.class.js +3 -3
- package/dist/components/forms/checkbox-group/checkbox-group.class.d.ts +3 -3
- package/dist/components/forms/checkbox-group/checkbox-group.class.js +1 -1
- package/dist/components/forms/code-editor/code-editor.class.js +1 -1
- package/dist/components/forms/color-picker/color-picker.class.js +1 -1
- package/dist/components/forms/combobox/combobox.class.d.ts +6 -6
- package/dist/components/forms/combobox/combobox.class.js +3 -2
- package/dist/components/forms/combobox/option.class.d.ts +3 -0
- package/dist/components/forms/combobox/option.class.js +2 -2
- package/dist/components/forms/date-picker/date-input.class.d.ts +10 -11
- package/dist/components/forms/date-picker/date-input.class.js +4 -3
- package/dist/components/forms/date-picker/date-input.styles.js +1 -1
- package/dist/components/forms/date-picker/date-picker.class.d.ts +6 -0
- package/dist/components/forms/date-picker/date-picker.class.js +1 -1
- package/dist/components/forms/date-picker/date-picker.styles.js +1 -1
- package/dist/components/forms/emoji-picker/emoji-data-loader.js +1 -1
- package/dist/components/forms/emoji-picker/emoji-picker.class.js +1 -1
- package/dist/components/forms/input/input.styles.js +1 -1
- package/dist/components/forms/input/time-input.class.d.ts +1 -1
- package/dist/components/forms/input/time-input.class.js +1 -1
- package/dist/components/forms/input/time-input.styles.js +1 -1
- package/dist/components/forms/locale-picker/locale-picker.class.d.ts +5 -5
- package/dist/components/forms/locale-picker/locale-picker.class.js +1 -1
- package/dist/components/forms/otp-input/otp-input.class.js +1 -0
- package/dist/components/forms/phone-input/phone-input.class.d.ts +7 -9
- package/dist/components/forms/phone-input/phone-input.class.js +6 -5
- package/dist/components/forms/phone-input/phone-input.styles.js +1 -1
- package/dist/components/forms/radio/radio-group.class.d.ts +4 -4
- package/dist/components/forms/radio/radio-group.class.js +1 -1
- package/dist/components/forms/radio/radio.class.d.ts +11 -19
- package/dist/components/forms/radio/radio.class.js +2 -2
- package/dist/components/forms/rubric-form/rubric-form.class.d.ts +3 -5
- package/dist/components/forms/rubric-form/rubric-form.class.js +1 -1
- package/dist/components/forms/select/select.class.d.ts +5 -7
- package/dist/components/forms/select/select.class.js +3 -2
- package/dist/components/forms/slider/slider.class.d.ts +3 -3
- package/dist/components/forms/slider/slider.class.js +1 -1
- package/dist/components/forms/slider/slider.styles.js +1 -1
- package/dist/components/forms/swatch-picker/swatch-picker.class.js +1 -1
- package/dist/components/forms/switch/switch.class.d.ts +11 -36
- package/dist/components/forms/switch/switch.class.js +2 -2
- package/dist/components/forms/textarea/textarea.class.js +1 -0
- package/dist/components/forms/textarea/textarea.styles.js +1 -1
- package/dist/components/forms/time-range/time-range.class.d.ts +5 -3
- package/dist/components/forms/time-range/time-range.class.js +1 -1
- package/dist/components/forms/time-range/time-range.styles.js +1 -1
- package/dist/components/forms/toggle-group/toggle-group.class.d.ts +2 -2
- package/dist/components/forms/toggle-group/toggle-group.class.js +1 -1
- package/dist/components/forms/token-input/token-input.class.d.ts +3 -3
- package/dist/components/forms/token-input/token-input.class.js +1 -1
- package/dist/components/layout/app-rail/app-rail-item.class.js +1 -1
- package/dist/components/layout/app-rail/app-rail.class.d.ts +2 -2
- package/dist/components/layout/app-rail/app-rail.class.js +1 -1
- package/dist/components/layout/breadcrumb/breadcrumb-item.class.js +1 -1
- package/dist/components/layout/card/card.class.js +1 -1
- package/dist/components/layout/carousel/carousel.class.js +1 -1
- package/dist/components/layout/command-palette/command-palette.class.d.ts +6 -2
- package/dist/components/layout/command-palette/command-palette.class.js +1 -1
- package/dist/components/layout/dashboard-grid/dashboard-grid.class.js +1 -1
- package/dist/components/layout/details/accordion.class.js +1 -1
- package/dist/components/layout/dock-panel/dock-panel.class.d.ts +1 -1
- package/dist/components/layout/dock-panel/dock-panel.class.js +1 -1
- package/dist/components/layout/drilldown-panel/drilldown-panel.class.js +2 -2
- package/dist/components/layout/filter-bar/filter-bar.class.d.ts +3 -2
- package/dist/components/layout/filter-bar/filter-bar.class.js +18 -15
- package/dist/components/layout/filter-bar/filter-bar.styles.js +1 -1
- package/dist/components/layout/menu/menu.class.d.ts +1 -1
- package/dist/components/layout/menu/menu.class.js +1 -1
- package/dist/components/layout/multi-split/multi-split.class.d.ts +1 -1
- package/dist/components/layout/multi-split/multi-split.class.js +1 -1
- package/dist/components/layout/navigation-menu-item/navigation-menu-item.class.js +1 -1
- package/dist/components/layout/page/page.class.d.ts +1 -1
- package/dist/components/layout/page/page.class.js +1 -1
- package/dist/components/layout/responsive-panel/responsive-panel.class.d.ts +1 -1
- package/dist/components/layout/responsive-panel/responsive-panel.class.js +1 -1
- package/dist/components/layout/scroller/scroller.class.js +1 -1
- package/dist/components/layout/segmented/segmented.class.js +1 -1
- package/dist/components/layout/stepper/stepper.class.js +2 -2
- package/dist/components/layout/tab-group/tab-group.class.js +1 -1
- package/dist/components/layout/virtual-list/virtual-list.class.d.ts +1 -1
- package/dist/components/layout/virtual-list/virtual-list.class.js +1 -1
- package/dist/components/layout/widget/widget.class.d.ts +1 -1
- package/dist/components/layout/widget/widget.class.js +3 -3
- package/dist/components/media/drop-zone/drop-zone.class.d.ts +10 -0
- package/dist/components/media/drop-zone/drop-zone.class.js +2 -2
- package/dist/components/media/file-input/file-input.class.d.ts +3 -3
- package/dist/components/media/file-input/file-input.class.js +2 -2
- package/dist/components/media/file-input/file-intake.d.ts +5 -1
- package/dist/components/media/file-input/file-intake.js +1 -1
- package/dist/components/media/flag/flag.class.js +1 -1
- package/dist/components/media/image-viewer/image-viewer.styles.js +1 -1
- package/dist/components/media/lightbox/lightbox.class.js +1 -1
- package/dist/components/media/map/map.class.js +2 -2
- package/dist/components/media/qr-code/qr-code-loader.js +1 -1
- package/dist/components/media/qr-code/qr-code.class.js +1 -1
- package/dist/components/media/video/video.class.js +3 -3
- package/dist/components/media/video-playlist/video-playlist.class.js +1 -1
- package/dist/components/media/zoomable-frame/zoomable-frame.class.d.ts +2 -2
- package/dist/components/media/zoomable-frame/zoomable-frame.class.js +1 -1
- package/dist/components/overlays/alert/alert.class.d.ts +3 -3
- package/dist/components/overlays/alert/alert.class.js +1 -1
- package/dist/components/overlays/badge/badge.class.d.ts +2 -2
- package/dist/components/overlays/badge/badge.class.js +1 -1
- package/dist/components/overlays/badge/tag.class.d.ts +3 -1
- package/dist/components/overlays/badge/tag.class.js +3 -2
- package/dist/components/overlays/badge/tag.styles.js +1 -1
- package/dist/components/overlays/callout/callout.class.d.ts +2 -2
- package/dist/components/overlays/callout/callout.class.js +1 -1
- package/dist/components/overlays/chip/chip.class.d.ts +4 -2
- package/dist/components/overlays/chip/chip.class.js +2 -2
- package/dist/components/overlays/dialog/dialog.class.d.ts +1 -1
- package/dist/components/overlays/dialog/dialog.class.js +1 -1
- package/dist/components/overlays/overlay/overlay-shared.d.ts +9 -0
- package/dist/components/overlays/overlay/overlay-shared.js +1 -1
- package/dist/components/overlays/overlay/popover.class.d.ts +2 -2
- package/dist/components/overlays/overlay/popover.class.js +1 -1
- package/dist/components/overlays/overlay/tooltip.class.d.ts +1 -1
- package/dist/components/overlays/overlay/tooltip.class.js +1 -1
- package/dist/components/overlays/progress/progress-bar.class.d.ts +5 -22
- package/dist/components/overlays/progress/progress-bar.class.js +4 -4
- package/dist/components/overlays/progress/progress-base.d.ts +25 -0
- package/dist/components/overlays/progress/progress-base.js +1 -0
- package/dist/components/overlays/progress/progress-ring.class.d.ts +3 -24
- package/dist/components/overlays/progress/progress-ring.class.js +4 -4
- package/dist/components/overlays/rating/rating.class.d.ts +3 -3
- package/dist/components/overlays/rating/rating.class.js +1 -1
- package/dist/components/retrieval/chunk-inspector/chunk-inspector.class.d.ts +4 -2
- package/dist/components/retrieval/chunk-inspector/chunk-inspector.class.js +4 -4
- package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.js +1 -1
- package/dist/components/retrieval/entity-dossier/entity-dossier.class.d.ts +1 -1
- package/dist/components/retrieval/graph/graph-canvas.js +1 -1
- package/dist/components/retrieval/graph/graph-model.js +1 -1
- package/dist/components/retrieval/graph/graph.class.d.ts +1 -3
- package/dist/components/retrieval/graph/graph.class.js +1 -1
- package/dist/components/retrieval/grounding-summary/grounding-summary.class.d.ts +1 -1
- package/dist/components/retrieval/grounding-summary/grounding-summary.class.js +2 -2
- package/dist/components/retrieval/knowledge-base/knowledge-base.class.d.ts +1 -1
- package/dist/components/retrieval/knowledge-base/knowledge-base.class.js +2 -2
- package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.js +1 -1
- package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +1 -0
- package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +2 -1
- package/dist/components/retrieval/memory-panel/memory-panel.class.d.ts +6 -2
- package/dist/components/retrieval/memory-panel/memory-panel.class.js +2 -2
- package/dist/components/retrieval/memory-panel/memory-panel.styles.js +1 -1
- package/dist/components/retrieval/node-palette/node-palette.class.js +1 -1
- package/dist/components/retrieval/path-strip/path-strip.class.js +1 -1
- package/dist/components/retrieval/provenance-panel/provenance-panel.class.d.ts +1 -1
- package/dist/components/retrieval/research-progress/research-progress.class.d.ts +5 -1
- package/dist/components/retrieval/research-progress/research-progress.class.js +3 -3
- package/dist/components/retrieval/research-progress/research-progress.d.ts +1 -1
- package/dist/components/retrieval/research-progress/research-progress.js +1 -1
- package/dist/components/retrieval/research-progress/research-progress.styles.js +1 -1
- package/dist/components/retrieval/retrieval-compare/retrieval-compare.class.d.ts +6 -2
- package/dist/components/retrieval/retrieval-compare/retrieval-compare.class.js +2 -2
- package/dist/components/retrieval/retrieval-compare/retrieval-compare.styles.js +1 -1
- package/dist/components/retrieval/retrieval-results/retrieval-results.class.d.ts +2 -2
- package/dist/components/retrieval/retrieval-results/retrieval-results.class.js +3 -2
- package/dist/components/retrieval/retrieval-search/retrieval-search.class.js +3 -3
- package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.d.ts +6 -2
- package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.js +2 -2
- package/dist/components/retrieval/retrieval-trace/retrieval-trace.styles.js +1 -1
- package/dist/components/retrieval/source-picker/source-picker.class.js +1 -1
- package/dist/components/utility/copy-button/copy-button.class.js +1 -1
- package/dist/components/utility/diff-view/diff-view.class.js +1 -1
- package/dist/components/utility/export-button/export-button.class.d.ts +1 -1
- package/dist/components/utility/export-button/export-button.class.js +1 -1
- package/dist/components/utility/icon/dompurify-loader.js +1 -1
- package/dist/components/utility/json-viewer/json-viewer.class.js +2 -2
- package/dist/components/utility/known-date/known-date.class.js +1 -1
- package/dist/components/utility/mention-popover/mention-popover.class.js +1 -1
- package/dist/components/utility/mutation-observer/mutation-observer.class.js +1 -1
- package/dist/components/utility/random-content/random-content.class.d.ts +1 -1
- package/dist/components/utility/random-content/random-content.class.js +1 -1
- package/dist/components/utility/tour/tour.class.d.ts +1 -1
- package/dist/components/utility/tour/tour.class.js +1 -1
- package/dist/components/viewers/archive-viewer/archive-viewer.class.js +1 -1
- package/dist/components/viewers/archive-viewer/archive-viewer.styles.js +1 -1
- package/dist/components/viewers/calendar-viewer/calendar-viewer.class.d.ts +3 -1
- package/dist/components/viewers/calendar-viewer/calendar-viewer.class.js +1 -1
- package/dist/components/viewers/contact-viewer/contact-viewer.class.d.ts +3 -1
- package/dist/components/viewers/contact-viewer/contact-viewer.class.js +1 -1
- package/dist/components/viewers/csv-viewer/csv-viewer.class.d.ts +2 -2
- package/dist/components/viewers/csv-viewer/csv-viewer.class.js +4 -18
- package/dist/components/viewers/csv-viewer/csv-viewer.styles.js +1 -1
- package/dist/components/viewers/dataset-viewer/dataset-viewer.class.d.ts +2 -2
- package/dist/components/viewers/dataset-viewer/dataset-viewer.class.js +4 -18
- package/dist/components/viewers/dataset-viewer/dataset-viewer.styles.js +1 -1
- package/dist/components/viewers/document-preview/document-preview.class.d.ts +1 -1
- package/dist/components/viewers/document-preview/document-preview.class.js +3 -16
- package/dist/components/viewers/document-viewer/ooxml-part-guard.js +1 -0
- package/dist/components/viewers/docx-viewer/docx-loader.js +1 -1
- package/dist/components/viewers/docx-viewer/docx-resource-guard.js +1 -1
- package/dist/components/viewers/docx-viewer/docx-viewer.class.d.ts +3 -3
- package/dist/components/viewers/docx-viewer/docx-viewer.class.js +3 -3
- package/dist/components/viewers/ebook-viewer/ebook-loader.js +1 -1
- package/dist/components/viewers/ebook-viewer/ebook-viewer.class.d.ts +1 -1
- package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js +2 -1
- package/dist/components/viewers/ebook-viewer/epub-resource-guard.js +1 -1
- package/dist/components/viewers/email-viewer/email-viewer.class.d.ts +1 -1
- package/dist/components/viewers/email-viewer/email-viewer.class.js +2 -2
- package/dist/components/viewers/geojson-view/geojson-viewer.class.d.ts +1 -4
- package/dist/components/viewers/geojson-view/geojson-viewer.class.js +1 -1
- package/dist/components/viewers/highlight-layer/highlight-layer.class.js +1 -1
- package/dist/components/viewers/html-viewer/html-viewer.class.d.ts +3 -1
- package/dist/components/viewers/html-viewer/html-viewer.class.js +1 -1
- package/dist/components/viewers/html-viewer/html-viewer.styles.js +1 -1
- package/dist/components/viewers/notebook-viewer/dompurify-loader.js +1 -1
- package/dist/components/viewers/notebook-viewer/notebook-viewer.class.js +1 -1
- package/dist/components/viewers/page-rail/page-rail.class.js +2 -2
- package/dist/components/viewers/passive-markup.js +1 -1
- package/dist/components/viewers/pdf-viewer/pdf-loader.js +1 -1
- package/dist/components/viewers/pdf-viewer/pdf-viewer.class.d.ts +2 -2
- package/dist/components/viewers/pdf-viewer/pdf-viewer.class.js +4 -4
- package/dist/components/viewers/pptx-viewer/pptx-loader.js +1 -1
- package/dist/components/viewers/pptx-viewer/pptx-resource-guard.js +1 -1
- package/dist/components/viewers/pptx-viewer/pptx-viewer.class.js +1 -1
- package/dist/components/viewers/region-highlight-layer.js +15 -2
- package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.class.d.ts +2 -2
- package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.class.js +4 -18
- package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.styles.js +1 -1
- package/dist/components/viewers/svg-viewer/svg-viewer.class.d.ts +1 -1
- package/dist/components/viewers/svg-viewer/svg-viewer.class.js +2 -15
- package/dist/components/viewers/svg-viewer/svg-viewer.styles.js +1 -1
- package/dist/components/viewers/table-viewer-shared.js +15 -1
- package/dist/components/viewers/table-viewer-shared.styles.js +1 -0
- package/dist/events.d.ts +19 -18
- package/dist/framework-types.d.ts +1 -1
- package/dist/internal/accessibility-visibility.d.ts +3 -1
- package/dist/internal/accessibility-visibility.js +1 -1
- package/dist/internal/accessible-text-controller.js +1 -1
- package/dist/internal/active-element.d.ts +11 -0
- package/dist/internal/active-element.js +1 -1
- package/dist/internal/adjacent-runs.js +1 -1
- package/dist/internal/approval-wait-until.d.ts +7 -0
- package/dist/internal/approval-wait-until.js +1 -0
- package/dist/internal/aria-controls.js +1 -1
- package/dist/internal/catalog-picker.d.ts +2 -2
- package/dist/internal/catalog-picker.js +1 -1
- package/dist/internal/composed-tree.d.ts +18 -0
- package/dist/internal/composed-tree.js +1 -1
- package/dist/internal/copy-feedback.js +1 -0
- package/dist/internal/css-length.js +1 -1
- package/dist/internal/css-motion-time.js +1 -1
- package/dist/internal/css-number.js +1 -0
- package/dist/internal/default-strings.generated.js +1 -1
- package/dist/internal/deferred-focus-return.d.ts +33 -0
- package/dist/internal/deferred-focus-return.js +1 -1
- package/dist/internal/fixed-containing-block.js +1 -1
- package/dist/internal/form-associated.d.ts +38 -2
- package/dist/internal/form-associated.js +1 -1
- package/dist/internal/form-control-element.d.ts +13 -0
- package/dist/internal/form-control-element.js +1 -0
- package/dist/internal/form-control.styles.js +1 -1
- package/dist/internal/inherited-attribute-hub.js +1 -1
- package/dist/internal/locale-loaders.generated.js +1 -1
- package/dist/internal/localization-types.d.ts +1 -1
- package/dist/internal/localization.js +1 -1
- package/dist/internal/modal-surface-controller.js +1 -1
- package/dist/internal/object-guards.js +1 -1
- package/dist/internal/optional-peer-capabilities.d.ts +3 -1
- package/dist/internal/optional-peer-capabilities.js +1 -1
- package/dist/internal/orientation-breakpoint.js +1 -1
- package/dist/internal/overlay-manager.d.ts +6 -1
- package/dist/internal/overlay-manager.js +1 -1
- package/dist/internal/overlay-stack.d.ts +7 -3
- package/dist/internal/overlay-stack.js +1 -1
- package/dist/internal/package-metadata.js +1 -1
- package/dist/internal/persisted-restore.js +1 -1
- package/dist/internal/popup-controller.js +1 -0
- package/dist/internal/rendered-tree-traversal.d.ts +3 -1
- package/dist/internal/rendered-tree-traversal.js +1 -1
- package/dist/internal/retry-forwarder.js +1 -0
- package/dist/internal/roving-toolbar.js +1 -1
- package/dist/internal/scoped-definitions.generated.js +1 -1
- package/dist/internal/score-tiers.d.ts +4 -0
- package/dist/internal/score-tiers.js +1 -0
- package/dist/internal/semantic-variant.d.ts +7 -0
- package/dist/internal/semantic-variant.js +1 -0
- package/dist/internal/shared-unions.d.ts +1 -1
- package/dist/internal/viewer-search.js +1 -1
- package/dist/lyra.d.ts +1 -1
- package/dist/testing/happy-dom-shims.d.ts +18 -0
- package/dist/testing/happy-dom-shims.js +1 -1
- package/dist/testing/index.d.ts +1 -1
- package/dist/testing/index.js +1 -1
- package/llms/components/lr-accordion-item.md +1 -1
- package/llms/components/lr-accordion.md +1 -1
- package/llms/components/lr-alert.md +2 -2
- package/llms/components/lr-app-rail-group.md +1 -1
- package/llms/components/lr-app-rail-item.md +1 -1
- package/llms/components/lr-app-rail.md +1 -1
- package/llms/components/lr-attachment-chip.md +1 -10
- package/llms/components/lr-attachment-trigger.md +0 -10
- package/llms/components/lr-avatar.md +4 -8
- package/llms/components/lr-badge.md +16 -20
- package/llms/components/lr-box-plot.md +1 -1
- package/llms/components/lr-breadcrumb-item.md +1 -1
- package/llms/components/lr-breadcrumb.md +1 -1
- package/llms/components/lr-button-group.md +1 -1
- package/llms/components/lr-button.md +1 -1
- package/llms/components/lr-calendar.md +1 -1
- package/llms/components/lr-callout.md +3 -13
- package/llms/components/lr-card.md +1 -1
- package/llms/components/lr-carousel-item.md +1 -1
- package/llms/components/lr-carousel.md +1 -1
- package/llms/components/lr-chart.md +5 -7
- package/llms/components/lr-checkbox-group.md +1 -1
- package/llms/components/lr-checkbox.md +2 -1
- package/llms/components/lr-chip.md +3 -17
- package/llms/components/lr-chunk-inspector.md +2 -1
- package/llms/components/lr-citation-badge.md +2 -2
- package/llms/components/lr-code-block.md +0 -10
- package/llms/components/lr-code-editor.md +1 -1
- package/llms/components/lr-color-picker.md +1 -1
- package/llms/components/lr-combobox.md +6 -3
- package/llms/components/lr-command-palette.md +5 -2
- package/llms/components/lr-commit-card.md +1 -3
- package/llms/components/lr-condition-builder.md +1 -1
- package/llms/components/lr-confirm-bar.md +7 -13
- package/llms/components/lr-connector-manager.md +3 -1
- package/llms/components/lr-context-inspector.md +1 -1
- package/llms/components/lr-context-meter.md +1 -1
- package/llms/components/lr-control-group.md +1 -1
- package/llms/components/lr-copy-button.md +8 -10
- package/llms/components/lr-country-picker.md +1 -1
- package/llms/components/lr-currency-picker.md +1 -1
- package/llms/components/lr-dashboard-grid.md +1 -1
- package/llms/components/lr-data-grid.md +1 -1
- package/llms/components/lr-date-input.md +1 -1
- package/llms/components/lr-date-picker.md +11 -4
- package/llms/components/lr-details.md +1 -1
- package/llms/components/lr-dialog.md +8 -31
- package/llms/components/lr-diff-view.md +1 -1
- package/llms/components/lr-divider.md +1 -1
- package/llms/components/lr-dock-panel.md +1 -1
- package/llms/components/lr-document-library.md +1 -1
- package/llms/components/lr-drawer.md +1 -13
- package/llms/components/lr-drilldown-panel.md +1 -1
- package/llms/components/lr-drop-zone.md +4 -0
- package/llms/components/lr-dropdown-item.md +1 -1
- package/llms/components/lr-ebook-viewer.md +4 -3
- package/llms/components/lr-emoji-picker.md +1 -1
- package/llms/components/lr-entity-chip.md +2 -2
- package/llms/components/lr-env-list.md +1 -1
- package/llms/components/lr-eval-dataset.md +4 -19
- package/llms/components/lr-export-button.md +3 -3
- package/llms/components/lr-file-icon.md +0 -5
- package/llms/components/lr-file-input.md +3 -5
- package/llms/components/lr-file-tree.md +1 -1
- package/llms/components/lr-filter-bar.md +5 -1
- package/llms/components/lr-flag.md +1 -2
- package/llms/components/lr-flow-canvas.md +1 -1
- package/llms/components/lr-flow-controls.md +1 -1
- package/llms/components/lr-flow-minimap.md +2 -2
- package/llms/components/lr-flow-node.md +1 -1
- package/llms/components/lr-flow-run-status.md +1 -1
- package/llms/components/lr-format-bytes.md +2 -3
- package/llms/components/lr-format-date.md +2 -3
- package/llms/components/lr-format-number.md +1 -1
- package/llms/components/lr-funnel.md +1 -1
- package/llms/components/lr-gauge.md +1 -1
- package/llms/components/lr-generation-metrics.md +1 -1
- package/llms/components/lr-graph-query-builder.md +1 -1
- package/llms/components/lr-heatmap.md +1 -1
- package/llms/components/lr-icon-button.md +1 -1
- package/llms/components/lr-icon.md +1 -1
- package/llms/components/lr-input.md +1 -1
- package/llms/components/lr-intersection-observer.md +1 -1
- package/llms/components/lr-json-viewer.md +1 -1
- package/llms/components/lr-knowledge-graph-explorer.md +2 -2
- package/llms/components/lr-known-date.md +1 -1
- package/llms/components/lr-lite-chart.md +3 -4
- package/llms/components/lr-live-region.md +1 -1
- package/llms/components/lr-locale-picker.md +1 -1
- package/llms/components/lr-map.md +1 -3
- package/llms/components/lr-media-card.md +1 -10
- package/llms/components/lr-memory-panel.md +2 -0
- package/llms/components/lr-mention-popover.md +3 -3
- package/llms/components/lr-menu-item.md +1 -1
- package/llms/components/lr-menu-label.md +1 -1
- package/llms/components/lr-menu.md +1 -1
- package/llms/components/lr-menubar-item.md +1 -1
- package/llms/components/lr-menubar.md +1 -1
- package/llms/components/lr-message-actions.md +1 -11
- package/llms/components/lr-message-parts.md +3 -5
- package/llms/components/lr-model-select.md +2 -4
- package/llms/components/lr-multi-split.md +1 -1
- package/llms/components/lr-mutation-observer.md +2 -2
- package/llms/components/lr-native-time-input.md +1 -1
- package/llms/components/lr-navigation-menu-item.md +1 -1
- package/llms/components/lr-navigation-menu.md +1 -1
- package/llms/components/lr-number-input.md +1 -1
- package/llms/components/lr-option.md +1 -1
- package/llms/components/lr-otp-input.md +1 -1
- package/llms/components/lr-page.md +1 -1
- package/llms/components/lr-pagination.md +1 -1
- package/llms/components/lr-pan-zoom.md +1 -3
- package/llms/components/lr-permission-grant.md +3 -1
- package/llms/components/lr-phone-input.md +7 -5
- package/llms/components/lr-poll-status.md +1 -1
- package/llms/components/lr-popover.md +5 -9
- package/llms/components/lr-popup.md +1 -3
- package/llms/components/lr-progress-bar.md +2 -1
- package/llms/components/lr-progress-ring.md +4 -8
- package/llms/components/lr-prompt-input.md +3 -1
- package/llms/components/lr-prompt-studio.md +4 -4
- package/llms/components/lr-radio-button.md +2 -2
- package/llms/components/lr-radio-group.md +1 -1
- package/llms/components/lr-radio.md +3 -2
- package/llms/components/lr-random-content.md +1 -1
- package/llms/components/lr-rating.md +2 -3
- package/llms/components/lr-relative-time.md +2 -3
- package/llms/components/lr-reorder-item.md +1 -1
- package/llms/components/lr-reorder-list.md +1 -1
- package/llms/components/lr-research-progress.md +2 -0
- package/llms/components/lr-resize-observer.md +1 -1
- package/llms/components/lr-responsive-panel.md +1 -1
- package/llms/components/lr-retrieval-compare.md +2 -0
- package/llms/components/lr-retrieval-trace.md +2 -0
- package/llms/components/lr-rubric-form.md +1 -1
- package/llms/components/lr-scroller.md +1 -1
- package/llms/components/lr-segmented.md +1 -1
- package/llms/components/lr-select.md +1 -1
- package/llms/components/lr-sequence-playback.md +1 -2
- package/llms/components/lr-sequence-strip.md +1 -1
- package/llms/components/lr-signature-pad.md +1 -1
- package/llms/components/lr-skeleton.md +2 -4
- package/llms/components/lr-slider.md +1 -1
- package/llms/components/lr-sparkline.md +1 -1
- package/llms/components/lr-split-panel.md +1 -1
- package/llms/components/lr-stat.md +1 -1
- package/llms/components/lr-stepper.md +1 -1
- package/llms/components/lr-swatch-picker.md +1 -1
- package/llms/components/lr-switch.md +2 -1
- package/llms/components/lr-tab-group.md +1 -1
- package/llms/components/lr-tab-panel.md +1 -1
- package/llms/components/lr-tab.md +1 -1
- package/llms/components/lr-table.md +3 -3
- package/llms/components/lr-task-list.md +3 -3
- package/llms/components/lr-test-results.md +2 -4
- package/llms/components/lr-textarea.md +1 -1
- package/llms/components/lr-time-input.md +1 -1
- package/llms/components/lr-time-range.md +5 -4
- package/llms/components/lr-time-zone-picker.md +1 -1
- package/llms/components/lr-timeline-item.md +1 -1
- package/llms/components/lr-timeline.md +1 -1
- package/llms/components/lr-toggle-group.md +1 -1
- package/llms/components/lr-toggle.md +1 -1
- package/llms/components/lr-token-input.md +1 -1
- package/llms/components/lr-tool-approval-dialog.md +12 -10
- package/llms/components/lr-tool-call-block.md +1 -1
- package/llms/components/lr-tool-call-chip.md +1 -3
- package/llms/components/lr-tool-result-view.md +3 -3
- package/llms/components/lr-tool-timeline.md +2 -2
- package/llms/components/lr-tooltip.md +8 -11
- package/llms/components/lr-tour.md +2 -2
- package/llms/components/lr-tree-item.md +1 -1
- package/llms/components/lr-tree.md +1 -1
- package/llms/components/lr-unit-picker.md +1 -1
- package/llms/components/lr-usage-badge.md +1 -3
- package/llms/components/lr-video.md +1 -2
- package/llms/components/lr-virtual-list.md +1 -1
- package/llms/components/lr-visually-hidden.md +1 -1
- package/llms/components/lr-voice-picker.md +1 -1
- package/llms/components/lr-widget.md +1 -1
- package/llms/components/lr-word-cloud.md +1 -1
- package/llms/components/lr-zoomable-frame.md +1 -6
- package/llms/migration.md +96 -2
- package/llms/peers.md +3 -2
- package/llms/shared/ai-and-peers.md +2 -2
- package/llms/shared/events-and-types.md +4 -1
- package/llms/shared/imports-and-registration.md +2 -2
- package/llms/shared/localization-and-rtl.md +18 -18
- package/llms/shared/styles-and-tokens.md +1 -1
- package/llms/shared/testing-and-utilities.md +44 -43
- package/llms/shared.md +71 -67
- package/llms.txt +14 -12
- package/locales.json +1002 -1002
- package/package.json +16 -6879
- package/registrations.json +1 -1
- package/skills/compose-lyra-interfaces/SKILL.md +60 -0
- package/skills/compose-lyra-interfaces/agents/openai.yaml +4 -0
- package/skills/compose-lyra-interfaces/references/composition-patterns.md +77 -0
- package/skills/lyra-ui/SKILL.md +145 -0
- package/skills/lyra-ui/commands/frontend.md +37 -0
- package/skills/lyra-ui/commands/migrate.md +44 -0
- package/skills/lyra-ui/commands/new-component.md +19 -0
- package/skills/lyra-ui/commands/review.md +247 -0
- package/skills/lyra-ui/commands/update.md +30 -0
- package/skills/lyra-ui/reporting.md +137 -0
- package/custom-elements.json +0 -1
- package/dist/internal/side-effect-only.d.ts +0 -1
- package/dist/translations/am/agent-tools.js +0 -1
- package/dist/translations/am/charts.js +0 -1
- package/dist/translations/am/conversation.js +0 -1
- package/dist/translations/am/data.js +0 -1
- package/dist/translations/am/forms.js +0 -1
- package/dist/translations/am/layout.js +0 -1
- package/dist/translations/am/media.js +0 -1
- package/dist/translations/am/overlays.js +0 -1
- package/dist/translations/am/retrieval.js +0 -1
- package/dist/translations/am/shared.js +0 -1
- package/dist/translations/am/utility.js +0 -1
- package/dist/translations/am/viewers.js +0 -5
- package/dist/translations/am.js +0 -1
- package/dist/translations/ar/agent-tools.js +0 -1
- package/dist/translations/ar/charts.js +0 -1
- package/dist/translations/ar/conversation.js +0 -1
- package/dist/translations/ar/data.js +0 -1
- package/dist/translations/ar/forms.js +0 -1
- package/dist/translations/ar/layout.js +0 -1
- package/dist/translations/ar/media.js +0 -1
- package/dist/translations/ar/overlays.js +0 -1
- package/dist/translations/ar/retrieval.js +0 -1
- package/dist/translations/ar/shared.js +0 -1
- package/dist/translations/ar/utility.js +0 -1
- package/dist/translations/ar/viewers.js +0 -5
- package/dist/translations/ar.js +0 -1
- package/dist/translations/bho/agent-tools.js +0 -1
- package/dist/translations/bho/charts.js +0 -1
- package/dist/translations/bho/conversation.js +0 -1
- package/dist/translations/bho/data.js +0 -1
- package/dist/translations/bho/forms.js +0 -1
- package/dist/translations/bho/layout.js +0 -1
- package/dist/translations/bho/media.js +0 -1
- package/dist/translations/bho/overlays.js +0 -1
- package/dist/translations/bho/retrieval.js +0 -1
- package/dist/translations/bho/shared.js +0 -1
- package/dist/translations/bho/utility.js +0 -1
- package/dist/translations/bho/viewers.js +0 -5
- package/dist/translations/bho.js +0 -1
- package/dist/translations/bn/agent-tools.js +0 -1
- package/dist/translations/bn/charts.js +0 -1
- package/dist/translations/bn/conversation.js +0 -1
- package/dist/translations/bn/data.js +0 -1
- package/dist/translations/bn/forms.js +0 -1
- package/dist/translations/bn/layout.js +0 -1
- package/dist/translations/bn/media.js +0 -1
- package/dist/translations/bn/overlays.js +0 -1
- package/dist/translations/bn/retrieval.js +0 -1
- package/dist/translations/bn/shared.js +0 -1
- package/dist/translations/bn/utility.js +0 -1
- package/dist/translations/bn/viewers.js +0 -5
- package/dist/translations/bn.js +0 -1
- package/dist/translations/cs/agent-tools.js +0 -1
- package/dist/translations/cs/charts.js +0 -1
- package/dist/translations/cs/conversation.js +0 -1
- package/dist/translations/cs/data.js +0 -1
- package/dist/translations/cs/forms.js +0 -1
- package/dist/translations/cs/layout.js +0 -1
- package/dist/translations/cs/media.js +0 -1
- package/dist/translations/cs/overlays.js +0 -1
- package/dist/translations/cs/retrieval.js +0 -1
- package/dist/translations/cs/shared.js +0 -1
- package/dist/translations/cs/utility.js +0 -1
- package/dist/translations/cs/viewers.js +0 -5
- package/dist/translations/cs.js +0 -1
- package/dist/translations/da/agent-tools.js +0 -1
- package/dist/translations/da/charts.js +0 -1
- package/dist/translations/da/conversation.js +0 -1
- package/dist/translations/da/data.js +0 -1
- package/dist/translations/da/forms.js +0 -1
- package/dist/translations/da/layout.js +0 -1
- package/dist/translations/da/media.js +0 -1
- package/dist/translations/da/overlays.js +0 -1
- package/dist/translations/da/retrieval.js +0 -1
- package/dist/translations/da/shared.js +0 -1
- package/dist/translations/da/utility.js +0 -1
- package/dist/translations/da/viewers.js +0 -5
- package/dist/translations/da.js +0 -1
- package/dist/translations/de/agent-tools.js +0 -1
- package/dist/translations/de/charts.js +0 -1
- package/dist/translations/de/conversation.js +0 -1
- package/dist/translations/de/data.js +0 -1
- package/dist/translations/de/forms.js +0 -1
- package/dist/translations/de/layout.js +0 -1
- package/dist/translations/de/media.js +0 -1
- package/dist/translations/de/overlays.js +0 -1
- package/dist/translations/de/retrieval.js +0 -1
- package/dist/translations/de/shared.js +0 -1
- package/dist/translations/de/utility.js +0 -1
- package/dist/translations/de/viewers.js +0 -5
- package/dist/translations/de-CH/agent-tools.js +0 -1
- package/dist/translations/de-CH/charts.js +0 -1
- package/dist/translations/de-CH/conversation.js +0 -1
- package/dist/translations/de-CH/data.js +0 -1
- package/dist/translations/de-CH/forms.js +0 -1
- package/dist/translations/de-CH/layout.js +0 -1
- package/dist/translations/de-CH/media.js +0 -1
- package/dist/translations/de-CH/overlays.js +0 -1
- package/dist/translations/de-CH/retrieval.js +0 -1
- package/dist/translations/de-CH/shared.js +0 -1
- package/dist/translations/de-CH/utility.js +0 -1
- package/dist/translations/de-CH/viewers.js +0 -1
- package/dist/translations/de-CH.js +0 -1
- package/dist/translations/de.js +0 -1
- package/dist/translations/el/agent-tools.js +0 -1
- package/dist/translations/el/charts.js +0 -1
- package/dist/translations/el/conversation.js +0 -1
- package/dist/translations/el/data.js +0 -1
- package/dist/translations/el/forms.js +0 -1
- package/dist/translations/el/layout.js +0 -1
- package/dist/translations/el/media.js +0 -1
- package/dist/translations/el/overlays.js +0 -1
- package/dist/translations/el/retrieval.js +0 -1
- package/dist/translations/el/shared.js +0 -1
- package/dist/translations/el/utility.js +0 -1
- package/dist/translations/el/viewers.js +0 -5
- package/dist/translations/el.js +0 -1
- package/dist/translations/es/agent-tools.js +0 -1
- package/dist/translations/es/charts.js +0 -1
- package/dist/translations/es/conversation.js +0 -1
- package/dist/translations/es/data.js +0 -1
- package/dist/translations/es/forms.js +0 -1
- package/dist/translations/es/layout.js +0 -1
- package/dist/translations/es/media.js +0 -1
- package/dist/translations/es/overlays.js +0 -1
- package/dist/translations/es/retrieval.js +0 -1
- package/dist/translations/es/shared.js +0 -1
- package/dist/translations/es/utility.js +0 -1
- package/dist/translations/es/viewers.js +0 -5
- package/dist/translations/es.js +0 -1
- package/dist/translations/fa/agent-tools.js +0 -1
- package/dist/translations/fa/charts.js +0 -1
- package/dist/translations/fa/conversation.js +0 -1
- package/dist/translations/fa/data.js +0 -1
- package/dist/translations/fa/forms.js +0 -1
- package/dist/translations/fa/layout.js +0 -1
- package/dist/translations/fa/media.js +0 -1
- package/dist/translations/fa/overlays.js +0 -1
- package/dist/translations/fa/retrieval.js +0 -1
- package/dist/translations/fa/shared.js +0 -1
- package/dist/translations/fa/utility.js +0 -1
- package/dist/translations/fa/viewers.js +0 -5
- package/dist/translations/fa-AF/agent-tools.js +0 -1
- package/dist/translations/fa-AF/charts.js +0 -1
- package/dist/translations/fa-AF/conversation.js +0 -1
- package/dist/translations/fa-AF/data.js +0 -1
- package/dist/translations/fa-AF/forms.js +0 -1
- package/dist/translations/fa-AF/layout.js +0 -1
- package/dist/translations/fa-AF/media.js +0 -1
- package/dist/translations/fa-AF/overlays.js +0 -1
- package/dist/translations/fa-AF/retrieval.js +0 -1
- package/dist/translations/fa-AF/shared.js +0 -1
- package/dist/translations/fa-AF/utility.js +0 -1
- package/dist/translations/fa-AF/viewers.js +0 -5
- package/dist/translations/fa-AF.js +0 -1
- package/dist/translations/fa.js +0 -1
- package/dist/translations/fi/agent-tools.js +0 -1
- package/dist/translations/fi/charts.js +0 -1
- package/dist/translations/fi/conversation.js +0 -1
- package/dist/translations/fi/data.js +0 -1
- package/dist/translations/fi/forms.js +0 -1
- package/dist/translations/fi/layout.js +0 -1
- package/dist/translations/fi/media.js +0 -1
- package/dist/translations/fi/overlays.js +0 -1
- package/dist/translations/fi/retrieval.js +0 -1
- package/dist/translations/fi/shared.js +0 -1
- package/dist/translations/fi/utility.js +0 -1
- package/dist/translations/fi/viewers.js +0 -5
- package/dist/translations/fi.js +0 -1
- package/dist/translations/fr/agent-tools.js +0 -1
- package/dist/translations/fr/charts.js +0 -1
- package/dist/translations/fr/conversation.js +0 -1
- package/dist/translations/fr/data.js +0 -1
- package/dist/translations/fr/forms.js +0 -1
- package/dist/translations/fr/layout.js +0 -1
- package/dist/translations/fr/media.js +0 -1
- package/dist/translations/fr/overlays.js +0 -1
- package/dist/translations/fr/retrieval.js +0 -1
- package/dist/translations/fr/shared.js +0 -1
- package/dist/translations/fr/utility.js +0 -1
- package/dist/translations/fr/viewers.js +0 -5
- package/dist/translations/fr.js +0 -1
- package/dist/translations/gu/agent-tools.js +0 -1
- package/dist/translations/gu/charts.js +0 -1
- package/dist/translations/gu/conversation.js +0 -1
- package/dist/translations/gu/data.js +0 -1
- package/dist/translations/gu/forms.js +0 -1
- package/dist/translations/gu/layout.js +0 -1
- package/dist/translations/gu/media.js +0 -1
- package/dist/translations/gu/overlays.js +0 -1
- package/dist/translations/gu/retrieval.js +0 -1
- package/dist/translations/gu/shared.js +0 -1
- package/dist/translations/gu/utility.js +0 -1
- package/dist/translations/gu/viewers.js +0 -5
- package/dist/translations/gu.js +0 -1
- package/dist/translations/ha/agent-tools.js +0 -1
- package/dist/translations/ha/charts.js +0 -1
- package/dist/translations/ha/conversation.js +0 -1
- package/dist/translations/ha/data.js +0 -1
- package/dist/translations/ha/forms.js +0 -1
- package/dist/translations/ha/layout.js +0 -1
- package/dist/translations/ha/media.js +0 -1
- package/dist/translations/ha/overlays.js +0 -1
- package/dist/translations/ha/retrieval.js +0 -1
- package/dist/translations/ha/shared.js +0 -1
- package/dist/translations/ha/utility.js +0 -1
- package/dist/translations/ha/viewers.js +0 -5
- package/dist/translations/ha.js +0 -1
- package/dist/translations/he/agent-tools.js +0 -1
- package/dist/translations/he/charts.js +0 -1
- package/dist/translations/he/conversation.js +0 -1
- package/dist/translations/he/data.js +0 -1
- package/dist/translations/he/forms.js +0 -1
- package/dist/translations/he/layout.js +0 -1
- package/dist/translations/he/media.js +0 -1
- package/dist/translations/he/overlays.js +0 -1
- package/dist/translations/he/retrieval.js +0 -1
- package/dist/translations/he/shared.js +0 -1
- package/dist/translations/he/utility.js +0 -1
- package/dist/translations/he/viewers.js +0 -5
- package/dist/translations/he.js +0 -1
- package/dist/translations/hi/agent-tools.js +0 -1
- package/dist/translations/hi/charts.js +0 -1
- package/dist/translations/hi/conversation.js +0 -1
- package/dist/translations/hi/data.js +0 -1
- package/dist/translations/hi/forms.js +0 -1
- package/dist/translations/hi/layout.js +0 -1
- package/dist/translations/hi/media.js +0 -1
- package/dist/translations/hi/overlays.js +0 -1
- package/dist/translations/hi/retrieval.js +0 -1
- package/dist/translations/hi/shared.js +0 -1
- package/dist/translations/hi/utility.js +0 -1
- package/dist/translations/hi/viewers.js +0 -5
- package/dist/translations/hi.js +0 -1
- package/dist/translations/hr/agent-tools.js +0 -1
- package/dist/translations/hr/charts.js +0 -1
- package/dist/translations/hr/conversation.js +0 -1
- package/dist/translations/hr/data.js +0 -1
- package/dist/translations/hr/forms.js +0 -1
- package/dist/translations/hr/layout.js +0 -1
- package/dist/translations/hr/media.js +0 -1
- package/dist/translations/hr/overlays.js +0 -1
- package/dist/translations/hr/retrieval.js +0 -1
- package/dist/translations/hr/shared.js +0 -1
- package/dist/translations/hr/utility.js +0 -1
- package/dist/translations/hr/viewers.js +0 -5
- package/dist/translations/hr.js +0 -1
- package/dist/translations/hu/agent-tools.js +0 -1
- package/dist/translations/hu/charts.js +0 -1
- package/dist/translations/hu/conversation.js +0 -1
- package/dist/translations/hu/data.js +0 -1
- package/dist/translations/hu/forms.js +0 -1
- package/dist/translations/hu/layout.js +0 -1
- package/dist/translations/hu/media.js +0 -1
- package/dist/translations/hu/overlays.js +0 -1
- package/dist/translations/hu/retrieval.js +0 -1
- package/dist/translations/hu/shared.js +0 -1
- package/dist/translations/hu/utility.js +0 -1
- package/dist/translations/hu/viewers.js +0 -5
- package/dist/translations/hu.js +0 -1
- package/dist/translations/id/agent-tools.js +0 -1
- package/dist/translations/id/charts.js +0 -1
- package/dist/translations/id/conversation.js +0 -1
- package/dist/translations/id/data.js +0 -1
- package/dist/translations/id/forms.js +0 -1
- package/dist/translations/id/layout.js +0 -1
- package/dist/translations/id/media.js +0 -1
- package/dist/translations/id/overlays.js +0 -1
- package/dist/translations/id/retrieval.js +0 -1
- package/dist/translations/id/shared.js +0 -1
- package/dist/translations/id/utility.js +0 -1
- package/dist/translations/id/viewers.js +0 -5
- package/dist/translations/id.js +0 -1
- package/dist/translations/ig/agent-tools.js +0 -1
- package/dist/translations/ig/charts.js +0 -1
- package/dist/translations/ig/conversation.js +0 -1
- package/dist/translations/ig/data.js +0 -1
- package/dist/translations/ig/forms.js +0 -1
- package/dist/translations/ig/layout.js +0 -1
- package/dist/translations/ig/media.js +0 -1
- package/dist/translations/ig/overlays.js +0 -1
- package/dist/translations/ig/retrieval.js +0 -1
- package/dist/translations/ig/shared.js +0 -1
- package/dist/translations/ig/utility.js +0 -1
- package/dist/translations/ig/viewers.js +0 -5
- package/dist/translations/ig.js +0 -1
- package/dist/translations/it/agent-tools.js +0 -1
- package/dist/translations/it/charts.js +0 -1
- package/dist/translations/it/conversation.js +0 -1
- package/dist/translations/it/data.js +0 -1
- package/dist/translations/it/forms.js +0 -1
- package/dist/translations/it/layout.js +0 -1
- package/dist/translations/it/media.js +0 -1
- package/dist/translations/it/overlays.js +0 -1
- package/dist/translations/it/retrieval.js +0 -1
- package/dist/translations/it/shared.js +0 -1
- package/dist/translations/it/utility.js +0 -1
- package/dist/translations/it/viewers.js +0 -5
- package/dist/translations/it.js +0 -1
- package/dist/translations/ja/agent-tools.js +0 -1
- package/dist/translations/ja/charts.js +0 -1
- package/dist/translations/ja/conversation.js +0 -1
- package/dist/translations/ja/data.js +0 -1
- package/dist/translations/ja/forms.js +0 -1
- package/dist/translations/ja/layout.js +0 -1
- package/dist/translations/ja/media.js +0 -1
- package/dist/translations/ja/overlays.js +0 -1
- package/dist/translations/ja/retrieval.js +0 -1
- package/dist/translations/ja/shared.js +0 -1
- package/dist/translations/ja/utility.js +0 -1
- package/dist/translations/ja/viewers.js +0 -4
- package/dist/translations/ja.js +0 -1
- package/dist/translations/jv/agent-tools.js +0 -1
- package/dist/translations/jv/charts.js +0 -1
- package/dist/translations/jv/conversation.js +0 -1
- package/dist/translations/jv/data.js +0 -1
- package/dist/translations/jv/forms.js +0 -1
- package/dist/translations/jv/layout.js +0 -1
- package/dist/translations/jv/media.js +0 -1
- package/dist/translations/jv/overlays.js +0 -1
- package/dist/translations/jv/retrieval.js +0 -1
- package/dist/translations/jv/shared.js +0 -1
- package/dist/translations/jv/utility.js +0 -1
- package/dist/translations/jv/viewers.js +0 -5
- package/dist/translations/jv.js +0 -1
- package/dist/translations/kk/agent-tools.js +0 -1
- package/dist/translations/kk/charts.js +0 -1
- package/dist/translations/kk/conversation.js +0 -1
- package/dist/translations/kk/data.js +0 -1
- package/dist/translations/kk/forms.js +0 -1
- package/dist/translations/kk/layout.js +0 -1
- package/dist/translations/kk/media.js +0 -1
- package/dist/translations/kk/overlays.js +0 -1
- package/dist/translations/kk/retrieval.js +0 -1
- package/dist/translations/kk/shared.js +0 -1
- package/dist/translations/kk/utility.js +0 -1
- package/dist/translations/kk/viewers.js +0 -5
- package/dist/translations/kk.js +0 -1
- package/dist/translations/kn/agent-tools.js +0 -1
- package/dist/translations/kn/charts.js +0 -1
- package/dist/translations/kn/conversation.js +0 -1
- package/dist/translations/kn/data.js +0 -1
- package/dist/translations/kn/forms.js +0 -1
- package/dist/translations/kn/layout.js +0 -1
- package/dist/translations/kn/media.js +0 -1
- package/dist/translations/kn/overlays.js +0 -1
- package/dist/translations/kn/retrieval.js +0 -1
- package/dist/translations/kn/shared.js +0 -1
- package/dist/translations/kn/utility.js +0 -1
- package/dist/translations/kn/viewers.js +0 -5
- package/dist/translations/kn.js +0 -1
- package/dist/translations/ko/agent-tools.js +0 -1
- package/dist/translations/ko/charts.js +0 -1
- package/dist/translations/ko/conversation.js +0 -1
- package/dist/translations/ko/data.js +0 -1
- package/dist/translations/ko/forms.js +0 -1
- package/dist/translations/ko/layout.js +0 -1
- package/dist/translations/ko/media.js +0 -1
- package/dist/translations/ko/overlays.js +0 -1
- package/dist/translations/ko/retrieval.js +0 -1
- package/dist/translations/ko/shared.js +0 -1
- package/dist/translations/ko/utility.js +0 -1
- package/dist/translations/ko/viewers.js +0 -5
- package/dist/translations/ko.js +0 -1
- package/dist/translations/ln/agent-tools.js +0 -1
- package/dist/translations/ln/charts.js +0 -1
- package/dist/translations/ln/conversation.js +0 -1
- package/dist/translations/ln/data.js +0 -1
- package/dist/translations/ln/forms.js +0 -1
- package/dist/translations/ln/layout.js +0 -1
- package/dist/translations/ln/media.js +0 -1
- package/dist/translations/ln/overlays.js +0 -1
- package/dist/translations/ln/retrieval.js +0 -1
- package/dist/translations/ln/shared.js +0 -1
- package/dist/translations/ln/utility.js +0 -1
- package/dist/translations/ln/viewers.js +0 -5
- package/dist/translations/ln.js +0 -1
- package/dist/translations/ml/agent-tools.js +0 -1
- package/dist/translations/ml/charts.js +0 -1
- package/dist/translations/ml/conversation.js +0 -1
- package/dist/translations/ml/data.js +0 -1
- package/dist/translations/ml/forms.js +0 -1
- package/dist/translations/ml/layout.js +0 -1
- package/dist/translations/ml/media.js +0 -1
- package/dist/translations/ml/overlays.js +0 -1
- package/dist/translations/ml/retrieval.js +0 -1
- package/dist/translations/ml/shared.js +0 -1
- package/dist/translations/ml/utility.js +0 -1
- package/dist/translations/ml/viewers.js +0 -5
- package/dist/translations/ml.js +0 -1
- package/dist/translations/mr/agent-tools.js +0 -1
- package/dist/translations/mr/charts.js +0 -1
- package/dist/translations/mr/conversation.js +0 -1
- package/dist/translations/mr/data.js +0 -1
- package/dist/translations/mr/forms.js +0 -1
- package/dist/translations/mr/layout.js +0 -1
- package/dist/translations/mr/media.js +0 -1
- package/dist/translations/mr/overlays.js +0 -1
- package/dist/translations/mr/retrieval.js +0 -1
- package/dist/translations/mr/shared.js +0 -1
- package/dist/translations/mr/utility.js +0 -1
- package/dist/translations/mr/viewers.js +0 -5
- package/dist/translations/mr.js +0 -1
- package/dist/translations/ms/agent-tools.js +0 -1
- package/dist/translations/ms/charts.js +0 -1
- package/dist/translations/ms/conversation.js +0 -1
- package/dist/translations/ms/data.js +0 -1
- package/dist/translations/ms/forms.js +0 -1
- package/dist/translations/ms/layout.js +0 -1
- package/dist/translations/ms/media.js +0 -1
- package/dist/translations/ms/overlays.js +0 -1
- package/dist/translations/ms/retrieval.js +0 -1
- package/dist/translations/ms/shared.js +0 -1
- package/dist/translations/ms/utility.js +0 -1
- package/dist/translations/ms/viewers.js +0 -5
- package/dist/translations/ms.js +0 -1
- package/dist/translations/my/agent-tools.js +0 -1
- package/dist/translations/my/charts.js +0 -1
- package/dist/translations/my/conversation.js +0 -1
- package/dist/translations/my/data.js +0 -1
- package/dist/translations/my/forms.js +0 -1
- package/dist/translations/my/layout.js +0 -1
- package/dist/translations/my/media.js +0 -1
- package/dist/translations/my/overlays.js +0 -1
- package/dist/translations/my/retrieval.js +0 -1
- package/dist/translations/my/shared.js +0 -1
- package/dist/translations/my/utility.js +0 -1
- package/dist/translations/my/viewers.js +0 -5
- package/dist/translations/my.js +0 -1
- package/dist/translations/nb/agent-tools.js +0 -1
- package/dist/translations/nb/charts.js +0 -1
- package/dist/translations/nb/conversation.js +0 -1
- package/dist/translations/nb/data.js +0 -1
- package/dist/translations/nb/forms.js +0 -1
- package/dist/translations/nb/layout.js +0 -1
- package/dist/translations/nb/media.js +0 -1
- package/dist/translations/nb/overlays.js +0 -1
- package/dist/translations/nb/retrieval.js +0 -1
- package/dist/translations/nb/shared.js +0 -1
- package/dist/translations/nb/utility.js +0 -1
- package/dist/translations/nb/viewers.js +0 -5
- package/dist/translations/nb.js +0 -1
- package/dist/translations/ne/agent-tools.js +0 -1
- package/dist/translations/ne/charts.js +0 -1
- package/dist/translations/ne/conversation.js +0 -1
- package/dist/translations/ne/data.js +0 -1
- package/dist/translations/ne/forms.js +0 -1
- package/dist/translations/ne/layout.js +0 -1
- package/dist/translations/ne/media.js +0 -1
- package/dist/translations/ne/overlays.js +0 -1
- package/dist/translations/ne/retrieval.js +0 -1
- package/dist/translations/ne/shared.js +0 -1
- package/dist/translations/ne/utility.js +0 -1
- package/dist/translations/ne/viewers.js +0 -5
- package/dist/translations/ne.js +0 -1
- package/dist/translations/nl/agent-tools.js +0 -1
- package/dist/translations/nl/charts.js +0 -1
- package/dist/translations/nl/conversation.js +0 -1
- package/dist/translations/nl/data.js +0 -1
- package/dist/translations/nl/forms.js +0 -1
- package/dist/translations/nl/layout.js +0 -1
- package/dist/translations/nl/media.js +0 -1
- package/dist/translations/nl/overlays.js +0 -1
- package/dist/translations/nl/retrieval.js +0 -1
- package/dist/translations/nl/shared.js +0 -1
- package/dist/translations/nl/utility.js +0 -1
- package/dist/translations/nl/viewers.js +0 -5
- package/dist/translations/nl.js +0 -1
- package/dist/translations/nn/agent-tools.js +0 -1
- package/dist/translations/nn/charts.js +0 -1
- package/dist/translations/nn/conversation.js +0 -1
- package/dist/translations/nn/data.js +0 -1
- package/dist/translations/nn/forms.js +0 -1
- package/dist/translations/nn/layout.js +0 -1
- package/dist/translations/nn/media.js +0 -1
- package/dist/translations/nn/overlays.js +0 -1
- package/dist/translations/nn/retrieval.js +0 -1
- package/dist/translations/nn/shared.js +0 -1
- package/dist/translations/nn/utility.js +0 -1
- package/dist/translations/nn/viewers.js +0 -5
- package/dist/translations/nn.js +0 -1
- package/dist/translations/om/agent-tools.js +0 -1
- package/dist/translations/om/charts.js +0 -1
- package/dist/translations/om/conversation.js +0 -1
- package/dist/translations/om/data.js +0 -1
- package/dist/translations/om/forms.js +0 -1
- package/dist/translations/om/layout.js +0 -1
- package/dist/translations/om/media.js +0 -1
- package/dist/translations/om/overlays.js +0 -1
- package/dist/translations/om/retrieval.js +0 -1
- package/dist/translations/om/shared.js +0 -1
- package/dist/translations/om/utility.js +0 -1
- package/dist/translations/om/viewers.js +0 -5
- package/dist/translations/om.js +0 -1
- package/dist/translations/or/agent-tools.js +0 -1
- package/dist/translations/or/charts.js +0 -1
- package/dist/translations/or/conversation.js +0 -1
- package/dist/translations/or/data.js +0 -1
- package/dist/translations/or/forms.js +0 -1
- package/dist/translations/or/layout.js +0 -1
- package/dist/translations/or/media.js +0 -1
- package/dist/translations/or/overlays.js +0 -1
- package/dist/translations/or/retrieval.js +0 -1
- package/dist/translations/or/shared.js +0 -1
- package/dist/translations/or/utility.js +0 -1
- package/dist/translations/or/viewers.js +0 -5
- package/dist/translations/or.js +0 -1
- package/dist/translations/pa/agent-tools.js +0 -1
- package/dist/translations/pa/charts.js +0 -1
- package/dist/translations/pa/conversation.js +0 -1
- package/dist/translations/pa/data.js +0 -1
- package/dist/translations/pa/forms.js +0 -1
- package/dist/translations/pa/layout.js +0 -1
- package/dist/translations/pa/media.js +0 -1
- package/dist/translations/pa/overlays.js +0 -1
- package/dist/translations/pa/retrieval.js +0 -1
- package/dist/translations/pa/shared.js +0 -1
- package/dist/translations/pa/utility.js +0 -1
- package/dist/translations/pa/viewers.js +0 -5
- package/dist/translations/pa.js +0 -1
- package/dist/translations/pcm/agent-tools.js +0 -1
- package/dist/translations/pcm/charts.js +0 -1
- package/dist/translations/pcm/conversation.js +0 -1
- package/dist/translations/pcm/data.js +0 -1
- package/dist/translations/pcm/forms.js +0 -1
- package/dist/translations/pcm/layout.js +0 -1
- package/dist/translations/pcm/media.js +0 -1
- package/dist/translations/pcm/overlays.js +0 -1
- package/dist/translations/pcm/retrieval.js +0 -1
- package/dist/translations/pcm/shared.js +0 -1
- package/dist/translations/pcm/utility.js +0 -1
- package/dist/translations/pcm/viewers.js +0 -5
- package/dist/translations/pcm.js +0 -1
- package/dist/translations/pl/agent-tools.js +0 -1
- package/dist/translations/pl/charts.js +0 -1
- package/dist/translations/pl/conversation.js +0 -1
- package/dist/translations/pl/data.js +0 -1
- package/dist/translations/pl/forms.js +0 -1
- package/dist/translations/pl/layout.js +0 -1
- package/dist/translations/pl/media.js +0 -1
- package/dist/translations/pl/overlays.js +0 -1
- package/dist/translations/pl/retrieval.js +0 -1
- package/dist/translations/pl/shared.js +0 -1
- package/dist/translations/pl/utility.js +0 -1
- package/dist/translations/pl/viewers.js +0 -5
- package/dist/translations/pl.js +0 -1
- package/dist/translations/pnb/agent-tools.js +0 -1
- package/dist/translations/pnb/charts.js +0 -1
- package/dist/translations/pnb/conversation.js +0 -1
- package/dist/translations/pnb/data.js +0 -1
- package/dist/translations/pnb/forms.js +0 -1
- package/dist/translations/pnb/layout.js +0 -1
- package/dist/translations/pnb/media.js +0 -1
- package/dist/translations/pnb/overlays.js +0 -1
- package/dist/translations/pnb/retrieval.js +0 -1
- package/dist/translations/pnb/shared.js +0 -1
- package/dist/translations/pnb/utility.js +0 -1
- package/dist/translations/pnb/viewers.js +0 -5
- package/dist/translations/pnb.js +0 -1
- package/dist/translations/ps/agent-tools.js +0 -1
- package/dist/translations/ps/charts.js +0 -1
- package/dist/translations/ps/conversation.js +0 -1
- package/dist/translations/ps/data.js +0 -1
- package/dist/translations/ps/forms.js +0 -1
- package/dist/translations/ps/layout.js +0 -1
- package/dist/translations/ps/media.js +0 -1
- package/dist/translations/ps/overlays.js +0 -1
- package/dist/translations/ps/retrieval.js +0 -1
- package/dist/translations/ps/shared.js +0 -1
- package/dist/translations/ps/utility.js +0 -1
- package/dist/translations/ps/viewers.js +0 -5
- package/dist/translations/ps.js +0 -1
- package/dist/translations/pt-BR/agent-tools.js +0 -1
- package/dist/translations/pt-BR/charts.js +0 -1
- package/dist/translations/pt-BR/conversation.js +0 -1
- package/dist/translations/pt-BR/data.js +0 -1
- package/dist/translations/pt-BR/forms.js +0 -1
- package/dist/translations/pt-BR/layout.js +0 -1
- package/dist/translations/pt-BR/media.js +0 -1
- package/dist/translations/pt-BR/overlays.js +0 -1
- package/dist/translations/pt-BR/retrieval.js +0 -1
- package/dist/translations/pt-BR/shared.js +0 -1
- package/dist/translations/pt-BR/utility.js +0 -1
- package/dist/translations/pt-BR/viewers.js +0 -5
- package/dist/translations/pt-BR.js +0 -1
- package/dist/translations/pt-PT/agent-tools.js +0 -1
- package/dist/translations/pt-PT/charts.js +0 -1
- package/dist/translations/pt-PT/conversation.js +0 -1
- package/dist/translations/pt-PT/data.js +0 -1
- package/dist/translations/pt-PT/forms.js +0 -1
- package/dist/translations/pt-PT/layout.js +0 -1
- package/dist/translations/pt-PT/media.js +0 -1
- package/dist/translations/pt-PT/overlays.js +0 -1
- package/dist/translations/pt-PT/retrieval.js +0 -1
- package/dist/translations/pt-PT/shared.js +0 -1
- package/dist/translations/pt-PT/utility.js +0 -1
- package/dist/translations/pt-PT/viewers.js +0 -5
- package/dist/translations/pt-PT.js +0 -1
- package/dist/translations/ro/agent-tools.js +0 -1
- package/dist/translations/ro/charts.js +0 -1
- package/dist/translations/ro/conversation.js +0 -1
- package/dist/translations/ro/data.js +0 -1
- package/dist/translations/ro/forms.js +0 -1
- package/dist/translations/ro/layout.js +0 -1
- package/dist/translations/ro/media.js +0 -1
- package/dist/translations/ro/overlays.js +0 -1
- package/dist/translations/ro/retrieval.js +0 -1
- package/dist/translations/ro/shared.js +0 -1
- package/dist/translations/ro/utility.js +0 -1
- package/dist/translations/ro/viewers.js +0 -5
- package/dist/translations/ro.js +0 -1
- package/dist/translations/ru/agent-tools.js +0 -1
- package/dist/translations/ru/charts.js +0 -1
- package/dist/translations/ru/conversation.js +0 -1
- package/dist/translations/ru/data.js +0 -1
- package/dist/translations/ru/forms.js +0 -1
- package/dist/translations/ru/layout.js +0 -1
- package/dist/translations/ru/media.js +0 -1
- package/dist/translations/ru/overlays.js +0 -1
- package/dist/translations/ru/retrieval.js +0 -1
- package/dist/translations/ru/shared.js +0 -1
- package/dist/translations/ru/utility.js +0 -1
- package/dist/translations/ru/viewers.js +0 -5
- package/dist/translations/ru.js +0 -1
- package/dist/translations/sd/agent-tools.js +0 -1
- package/dist/translations/sd/charts.js +0 -1
- package/dist/translations/sd/conversation.js +0 -1
- package/dist/translations/sd/data.js +0 -1
- package/dist/translations/sd/forms.js +0 -1
- package/dist/translations/sd/layout.js +0 -1
- package/dist/translations/sd/media.js +0 -1
- package/dist/translations/sd/overlays.js +0 -1
- package/dist/translations/sd/retrieval.js +0 -1
- package/dist/translations/sd/shared.js +0 -1
- package/dist/translations/sd/utility.js +0 -1
- package/dist/translations/sd/viewers.js +0 -5
- package/dist/translations/sd.js +0 -1
- package/dist/translations/sl/agent-tools.js +0 -1
- package/dist/translations/sl/charts.js +0 -1
- package/dist/translations/sl/conversation.js +0 -1
- package/dist/translations/sl/data.js +0 -1
- package/dist/translations/sl/forms.js +0 -1
- package/dist/translations/sl/layout.js +0 -1
- package/dist/translations/sl/media.js +0 -1
- package/dist/translations/sl/overlays.js +0 -1
- package/dist/translations/sl/retrieval.js +0 -1
- package/dist/translations/sl/shared.js +0 -1
- package/dist/translations/sl/utility.js +0 -1
- package/dist/translations/sl/viewers.js +0 -5
- package/dist/translations/sl.js +0 -1
- package/dist/translations/su/agent-tools.js +0 -1
- package/dist/translations/su/charts.js +0 -1
- package/dist/translations/su/conversation.js +0 -1
- package/dist/translations/su/data.js +0 -1
- package/dist/translations/su/forms.js +0 -1
- package/dist/translations/su/layout.js +0 -1
- package/dist/translations/su/media.js +0 -1
- package/dist/translations/su/overlays.js +0 -1
- package/dist/translations/su/retrieval.js +0 -1
- package/dist/translations/su/shared.js +0 -1
- package/dist/translations/su/utility.js +0 -1
- package/dist/translations/su/viewers.js +0 -5
- package/dist/translations/su.js +0 -1
- package/dist/translations/sv/agent-tools.js +0 -1
- package/dist/translations/sv/charts.js +0 -1
- package/dist/translations/sv/conversation.js +0 -1
- package/dist/translations/sv/data.js +0 -1
- package/dist/translations/sv/forms.js +0 -1
- package/dist/translations/sv/layout.js +0 -1
- package/dist/translations/sv/media.js +0 -1
- package/dist/translations/sv/overlays.js +0 -1
- package/dist/translations/sv/retrieval.js +0 -1
- package/dist/translations/sv/shared.js +0 -1
- package/dist/translations/sv/utility.js +0 -1
- package/dist/translations/sv/viewers.js +0 -5
- package/dist/translations/sv.js +0 -1
- package/dist/translations/sw/agent-tools.js +0 -1
- package/dist/translations/sw/charts.js +0 -1
- package/dist/translations/sw/conversation.js +0 -1
- package/dist/translations/sw/data.js +0 -1
- package/dist/translations/sw/forms.js +0 -1
- package/dist/translations/sw/layout.js +0 -1
- package/dist/translations/sw/media.js +0 -1
- package/dist/translations/sw/overlays.js +0 -1
- package/dist/translations/sw/retrieval.js +0 -1
- package/dist/translations/sw/shared.js +0 -1
- package/dist/translations/sw/utility.js +0 -1
- package/dist/translations/sw/viewers.js +0 -5
- package/dist/translations/sw.js +0 -1
- package/dist/translations/ta/agent-tools.js +0 -1
- package/dist/translations/ta/charts.js +0 -1
- package/dist/translations/ta/conversation.js +0 -1
- package/dist/translations/ta/data.js +0 -1
- package/dist/translations/ta/forms.js +0 -1
- package/dist/translations/ta/layout.js +0 -1
- package/dist/translations/ta/media.js +0 -1
- package/dist/translations/ta/overlays.js +0 -1
- package/dist/translations/ta/retrieval.js +0 -1
- package/dist/translations/ta/shared.js +0 -1
- package/dist/translations/ta/utility.js +0 -1
- package/dist/translations/ta/viewers.js +0 -5
- package/dist/translations/ta.js +0 -1
- package/dist/translations/te/agent-tools.js +0 -1
- package/dist/translations/te/charts.js +0 -1
- package/dist/translations/te/conversation.js +0 -1
- package/dist/translations/te/data.js +0 -1
- package/dist/translations/te/forms.js +0 -1
- package/dist/translations/te/layout.js +0 -1
- package/dist/translations/te/media.js +0 -1
- package/dist/translations/te/overlays.js +0 -1
- package/dist/translations/te/retrieval.js +0 -1
- package/dist/translations/te/shared.js +0 -1
- package/dist/translations/te/utility.js +0 -1
- package/dist/translations/te/viewers.js +0 -5
- package/dist/translations/te.js +0 -1
- package/dist/translations/th/agent-tools.js +0 -1
- package/dist/translations/th/charts.js +0 -1
- package/dist/translations/th/conversation.js +0 -1
- package/dist/translations/th/data.js +0 -1
- package/dist/translations/th/forms.js +0 -1
- package/dist/translations/th/layout.js +0 -1
- package/dist/translations/th/media.js +0 -1
- package/dist/translations/th/overlays.js +0 -1
- package/dist/translations/th/retrieval.js +0 -1
- package/dist/translations/th/shared.js +0 -1
- package/dist/translations/th/utility.js +0 -1
- package/dist/translations/th/viewers.js +0 -5
- package/dist/translations/th.js +0 -1
- package/dist/translations/tl/agent-tools.js +0 -1
- package/dist/translations/tl/charts.js +0 -1
- package/dist/translations/tl/conversation.js +0 -1
- package/dist/translations/tl/data.js +0 -1
- package/dist/translations/tl/forms.js +0 -1
- package/dist/translations/tl/layout.js +0 -1
- package/dist/translations/tl/media.js +0 -1
- package/dist/translations/tl/overlays.js +0 -1
- package/dist/translations/tl/retrieval.js +0 -1
- package/dist/translations/tl/shared.js +0 -1
- package/dist/translations/tl/utility.js +0 -1
- package/dist/translations/tl/viewers.js +0 -5
- package/dist/translations/tl.js +0 -1
- package/dist/translations/tr/agent-tools.js +0 -1
- package/dist/translations/tr/charts.js +0 -1
- package/dist/translations/tr/conversation.js +0 -1
- package/dist/translations/tr/data.js +0 -1
- package/dist/translations/tr/forms.js +0 -1
- package/dist/translations/tr/layout.js +0 -1
- package/dist/translations/tr/media.js +0 -1
- package/dist/translations/tr/overlays.js +0 -1
- package/dist/translations/tr/retrieval.js +0 -1
- package/dist/translations/tr/shared.js +0 -1
- package/dist/translations/tr/utility.js +0 -1
- package/dist/translations/tr/viewers.js +0 -5
- package/dist/translations/tr.js +0 -1
- package/dist/translations/uk/agent-tools.js +0 -1
- package/dist/translations/uk/charts.js +0 -1
- package/dist/translations/uk/conversation.js +0 -1
- package/dist/translations/uk/data.js +0 -1
- package/dist/translations/uk/forms.js +0 -1
- package/dist/translations/uk/layout.js +0 -1
- package/dist/translations/uk/media.js +0 -1
- package/dist/translations/uk/overlays.js +0 -1
- package/dist/translations/uk/retrieval.js +0 -1
- package/dist/translations/uk/shared.js +0 -1
- package/dist/translations/uk/utility.js +0 -1
- package/dist/translations/uk/viewers.js +0 -5
- package/dist/translations/uk.js +0 -1
- package/dist/translations/ur/agent-tools.js +0 -1
- package/dist/translations/ur/charts.js +0 -1
- package/dist/translations/ur/conversation.js +0 -1
- package/dist/translations/ur/data.js +0 -1
- package/dist/translations/ur/forms.js +0 -1
- package/dist/translations/ur/layout.js +0 -1
- package/dist/translations/ur/media.js +0 -1
- package/dist/translations/ur/overlays.js +0 -1
- package/dist/translations/ur/retrieval.js +0 -1
- package/dist/translations/ur/shared.js +0 -1
- package/dist/translations/ur/utility.js +0 -1
- package/dist/translations/ur/viewers.js +0 -5
- package/dist/translations/ur.js +0 -1
- package/dist/translations/uz/agent-tools.js +0 -1
- package/dist/translations/uz/charts.js +0 -1
- package/dist/translations/uz/conversation.js +0 -1
- package/dist/translations/uz/data.js +0 -1
- package/dist/translations/uz/forms.js +0 -1
- package/dist/translations/uz/layout.js +0 -1
- package/dist/translations/uz/media.js +0 -1
- package/dist/translations/uz/overlays.js +0 -1
- package/dist/translations/uz/retrieval.js +0 -1
- package/dist/translations/uz/shared.js +0 -1
- package/dist/translations/uz/utility.js +0 -1
- package/dist/translations/uz/viewers.js +0 -5
- package/dist/translations/uz.js +0 -1
- package/dist/translations/vi/agent-tools.js +0 -1
- package/dist/translations/vi/charts.js +0 -1
- package/dist/translations/vi/conversation.js +0 -1
- package/dist/translations/vi/data.js +0 -1
- package/dist/translations/vi/forms.js +0 -1
- package/dist/translations/vi/layout.js +0 -1
- package/dist/translations/vi/media.js +0 -1
- package/dist/translations/vi/overlays.js +0 -1
- package/dist/translations/vi/retrieval.js +0 -1
- package/dist/translations/vi/shared.js +0 -1
- package/dist/translations/vi/utility.js +0 -1
- package/dist/translations/vi/viewers.js +0 -5
- package/dist/translations/vi.js +0 -1
- package/dist/translations/yo/agent-tools.js +0 -1
- package/dist/translations/yo/charts.js +0 -1
- package/dist/translations/yo/conversation.js +0 -1
- package/dist/translations/yo/data.js +0 -1
- package/dist/translations/yo/forms.js +0 -1
- package/dist/translations/yo/layout.js +0 -1
- package/dist/translations/yo/media.js +0 -1
- package/dist/translations/yo/overlays.js +0 -1
- package/dist/translations/yo/retrieval.js +0 -1
- package/dist/translations/yo/shared.js +0 -1
- package/dist/translations/yo/utility.js +0 -1
- package/dist/translations/yo/viewers.js +0 -5
- package/dist/translations/yo.js +0 -1
- package/dist/translations/zh-CN/agent-tools.js +0 -1
- package/dist/translations/zh-CN/charts.js +0 -1
- package/dist/translations/zh-CN/conversation.js +0 -1
- package/dist/translations/zh-CN/data.js +0 -1
- package/dist/translations/zh-CN/forms.js +0 -1
- package/dist/translations/zh-CN/layout.js +0 -1
- package/dist/translations/zh-CN/media.js +0 -1
- package/dist/translations/zh-CN/overlays.js +0 -1
- package/dist/translations/zh-CN/retrieval.js +0 -1
- package/dist/translations/zh-CN/shared.js +0 -1
- package/dist/translations/zh-CN/utility.js +0 -1
- package/dist/translations/zh-CN/viewers.js +0 -5
- package/dist/translations/zh-CN.js +0 -1
- package/dist/translations/zh-TW/agent-tools.js +0 -1
- package/dist/translations/zh-TW/charts.js +0 -1
- package/dist/translations/zh-TW/conversation.js +0 -1
- package/dist/translations/zh-TW/data.js +0 -1
- package/dist/translations/zh-TW/forms.js +0 -1
- package/dist/translations/zh-TW/layout.js +0 -1
- package/dist/translations/zh-TW/media.js +0 -1
- package/dist/translations/zh-TW/overlays.js +0 -1
- package/dist/translations/zh-TW/retrieval.js +0 -1
- package/dist/translations/zh-TW/shared.js +0 -1
- package/dist/translations/zh-TW/utility.js +0 -1
- package/dist/translations/zh-TW/viewers.js +0 -5
- package/dist/translations/zh-TW.js +0 -1
- package/dist/translations/zu/agent-tools.js +0 -1
- package/dist/translations/zu/charts.js +0 -1
- package/dist/translations/zu/conversation.js +0 -1
- package/dist/translations/zu/data.js +0 -1
- package/dist/translations/zu/forms.js +0 -1
- package/dist/translations/zu/layout.js +0 -1
- package/dist/translations/zu/media.js +0 -1
- package/dist/translations/zu/overlays.js +0 -1
- package/dist/translations/zu/retrieval.js +0 -1
- package/dist/translations/zu/shared.js +0 -1
- package/dist/translations/zu/utility.js +0 -1
- package/dist/translations/zu/viewers.js +0 -5
- package/dist/translations/zu.js +0 -1
- package/vscode-css-data.json +0 -1
- package/vscode-html-data.json +0 -1
- package/web-types.json +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import path from"node:path";const INVENTORY_SCHEMA_VERSION=1,SURFACE_SECTIONS=["attributes","properties","slots","events","parts","cssProperties","cssStates","methods","staticProperties","staticMethods","moduleExports","form","native"],MAPPING_CLASSIFICATIONS=["exact","rewritten","warning-required","conceptual-only","unsupported"],ACCESSIBILITY_PROFILE_SECTIONS=["semantics","naming","keyboard","focus","states","announcements","motion"],ACCESSIBILITY_BEHAVIOR_VOCABULARY=Object.freeze({semantics:Object.freeze(["alert","article","button","checkbox","combobox","composition-primitive","dialog","document","grid","group","iframe","img","link","list","listbox","menu","menuitem","navigation","option","presentation","progressbar","radio","radiogroup","region","separator","slider","spinbutton","status","switch","tab","table","tablist","tabpanel","text-content","textbox","tooltip","transparent-content","tree","treeitem","video"]),naming:Object.freeze(["alternative-text","author-label-required","content-derived","content-or-author-label","control-labels-localized","current-page","frame-title","heading-level","value-text","visible-or-author-label"]),keyboard:Object.freeze(["arrow-navigation","data-point-navigation","escape-dismiss","home-end-navigation","media-controls","native-activation","native-editing","page-navigation","range-adjustment","spatial-adjustment","tab-cycle","typeahead"]),focus:Object.freeze(["focus-follows-selection","focus-preserved","focus-return","focus-trap","focus-visible-on-reveal","frame-focus-gated","initial-focus","native-focus","roving-focus"]),states:Object.freeze(["busy","checked","current","disabled","expanded","invalid","modal","multiselectable","orientation","paused","pressed","readonly","required","selected","sort","value-range"]),announcements:Object.freeze(["autoplay-content-change","character-count","content-change","copy-result","live-alert","live-status","page-change","playback-state","progress-value","selection-change","validation-message"]),motion:Object.freeze(["respects-reduced-motion","stops-autoplay","suppresses-animation","user-pause-control"])}),ACCESSIBILITY_COMPARISON_STATUSES=["equivalent","target-additive","not-applicable","warning-required"],ACCESSIBILITY_EVIDENCE=Object.freeze({upstream:"pinned-public-contract",target:"lyra-authored-contract-and-automated-tests"}),REWRITE_RULE_SECTIONS=["attributes","properties","events","slots","parts","cssProperties","methods","defaults"],NORMALIZATION_SECTIONS=["typeEquivalences","structuralTypeAliases","methodParameterTypeEquivalences","defaultEquivalences","derivedDefaultEquivalences","inferredAttributeSuppressions","unknownMethodReturnTypes","cancelabilityEquivalences","cancelabilityPathAdditions","attributePropertyEquivalences","reflectionEquivalences","cssDefaultEquivalences","deprecationEquivalences"],CANCELABILITY_RANK=new Map([["never",0],["conditional",1],["always",2]]),LOCAL_MIGRATION_ORIGINS=[],LOCAL_MIGRATION_PROFILES=[],MIGRATION_ATTRIBUTE_EXCLUSIONS=Object.freeze({dir:"platform-global-passthrough",lang:"platform-global-passthrough",role:"platform-global-passthrough",tabindex:"platform-global-passthrough",title:"platform-global-passthrough","did-ssr":"upstream-hydration-marker"});function emptyRewrites(){return Object.fromEntries(REWRITE_RULE_SECTIONS.map(section=>[section,[]]))}function emptyNormalizations(){return Object.fromEntries(NORMALIZATION_SECTIONS.map(section=>[section,[]]))}function isPlainObject(value){return value!==null&&typeof value=="object"&&!Array.isArray(value)}function accessibilityBehaviorSet(profile){return new Set(ACCESSIBILITY_PROFILE_SECTIONS.flatMap(section=>(profile?.[section]??[]).map(behavior=>`${section}:${behavior}`)))}function compareAccessibilityProfiles(profiles,upstreamProfile,targetProfile){const upstream=profiles?.[upstreamProfile],target=profiles?.[targetProfile];if(!upstream)throw new Error(`unknown upstream accessibility profile ${String(upstreamProfile)}`);if(!target)throw new Error(`unknown target accessibility profile ${String(targetProfile)}`);const upstreamBehaviors=accessibilityBehaviorSet(upstream),targetBehaviors=accessibilityBehaviorSet(target),missing=[...upstreamBehaviors].filter(behavior=>!targetBehaviors.has(behavior)).sort(),additions=[...targetBehaviors].filter(behavior=>!upstreamBehaviors.has(behavior)).sort();return{status:upstreamBehaviors.size===0&&targetBehaviors.size===0?"not-applicable":missing.length>0?"warning-required":additions.length>0?"target-additive":"equivalent",missing,additions}}function deriveStaticApiReviewStatus({upstreamReviewStatus,targetPresent,comparisonPerformed}){return upstreamReviewStatus==="tag-only"?"tag-only":upstreamReviewStatus==="complete"&&targetPresent===!0&&comparisonPerformed===!0?"reviewed":"unreviewed"}function validateAccessibilityProfiles(profiles,findings){if(!isPlainObject(profiles)||Object.keys(profiles).length===0){findings.push("accessibilityProfiles must be a non-empty object");return}for(const[profileName,profile]of Object.entries(profiles)){if(/^[a-z0-9]+(?:-[a-z0-9]+)*$/u.test(profileName)||findings.push(`accessibility profile ${profileName}: invalid profile name`),!isPlainObject(profile)){findings.push(`accessibility profile ${profileName}: profile must be an object`);continue}const allowedKeys=new Set(["description",...ACCESSIBILITY_PROFILE_SECTIONS]),unknownKeys=Object.keys(profile).filter(key=>!allowedKeys.has(key));unknownKeys.length>0&&findings.push(`accessibility profile ${profileName}: unknown key(s) ${unknownKeys.join(", ")}`),(typeof profile.description!="string"||!profile.description.trim())&&findings.push(`accessibility profile ${profileName}: description must be non-empty`);for(const section of ACCESSIBILITY_PROFILE_SECTIONS){const behaviors=profile[section];if(!Array.isArray(behaviors)){findings.push(`accessibility profile ${profileName}: ${section} must be an array`);continue}new Set(behaviors).size!==behaviors.length&&findings.push(`accessibility profile ${profileName}: duplicate ${section} behavior`),JSON.stringify(behaviors)!==JSON.stringify([...behaviors].sort())&&findings.push(`accessibility profile ${profileName}: ${section} behaviors must be sorted`);const allowed=new Set(ACCESSIBILITY_BEHAVIOR_VOCABULARY[section]);for(const behavior of behaviors)allowed.has(behavior)||findings.push(`accessibility profile ${profileName}: unknown ${section} behavior ${String(behavior)}`)}}}function validateAccessibilityParity(mapping,profiles,findings){const accessibility=mapping.parity?.accessibility;if(!isPlainObject(accessibility)){findings.push(`${mapping.upstreamTag}: missing accessibility parity review`);return}const allowedKeys=new Set(["reviewStatus","upstreamProfile","targetProfile","evidence","comparison","rationale"]),unknownKeys=Object.keys(accessibility).filter(key=>!allowedKeys.has(key));unknownKeys.length>0&&findings.push(`${mapping.upstreamTag}: accessibility parity has unknown key(s) ${unknownKeys.join(", ")}`),accessibility.reviewStatus!=="complete"&&findings.push(`${mapping.upstreamTag}: accessibility parity review is incomplete`),(!isPlainObject(accessibility.evidence)||accessibility.evidence.upstream!==ACCESSIBILITY_EVIDENCE.upstream||accessibility.evidence.target!==ACCESSIBILITY_EVIDENCE.target||Object.keys(accessibility.evidence??{}).some(key=>key!=="upstream"&&key!=="target"))&&findings.push(`${mapping.upstreamTag}: accessibility parity evidence is invalid`),(typeof accessibility.rationale!="string"||!accessibility.rationale.trim())&&findings.push(`${mapping.upstreamTag}: accessibility parity rationale must be non-empty`);let expected;try{expected=compareAccessibilityProfiles(profiles,accessibility.upstreamProfile,accessibility.targetProfile)}catch(error){findings.push(`${mapping.upstreamTag}: ${error instanceof Error?error.message:String(error)}`);return}(!isPlainObject(accessibility.comparison)||!sameJson(accessibility.comparison,expected))&&findings.push(`${mapping.upstreamTag}: stored accessibility comparison is stale`);const hasScopedConditionalReview=mapping.parity?.lightDom==="warning-required"&&Array.isArray(mapping.parity?.behaviorReviewFlags)&&mapping.parity.behaviorReviewFlags.length>0;(mapping.classification==="exact"||mapping.classification==="rewritten")&&expected.status==="warning-required"&&!hasScopedConditionalReview&&findings.push(`${mapping.upstreamTag}: automatic mapping has missing accessibility behavior`)}function validateAccessibilityContract(profiles,mappings){const findings=[];if(validateAccessibilityProfiles(profiles,findings),!Array.isArray(mappings))findings.push("accessibility mappings must be an array");else for(const mapping of mappings)validateAccessibilityParity(mapping,profiles,findings);return findings.sort()}const INTERNAL_METHOD_NAMES=new Set(["constructor","render","update","performUpdate","requestUpdate","shouldUpdate","willUpdate","updated","firstUpdated","createRenderRoot","connectedCallback","disconnectedCallback","adoptedCallback","attributeChangedCallback","addEventListener","removeEventListener","emit","localize","scheduleAfterUpdate","beginAbortableLoad","setCustomStates","setValue","updateValidity"]),PUBLIC_METHOD_NAMES=new Set(["focus","blur","click","select","show","hide","open","close","openSubmenu","closeSubmenu","toggle","checkValidity","reportValidity","setCustomValidity","resetValidity","formStateRestoreCallback","getForm","setSelectionRange","setRangeText","showPicker","stepUp","stepDown","play","pause","load","clearSearch","getHeadingTree","renderChart","renderMarkdown","search","searchNext","searchPrevious","handleColumnsChange","handlePageChange","handleSearchTermChange"]),FORM_PROPERTIES=new Set(["form","name","type","value","defaultValue","checked","defaultChecked","disabled","required","validity","validationMessage","willValidate","labels"]),FORM_METHODS=new Set(["checkValidity","reportValidity","setCustomValidity","getForm"]),NATIVE_METHODS=new Set(["focus","blur","click","select","setSelectionRange","setRangeText","showPicker","stepUp","stepDown","play","pause","load"]),NATIVE_EVENTS=new Set(["beforeinput","input","change","focus","blur","invalid","load","error","play","pause","ended","loadedmetadata","timeupdate","volumechange"]),UNDOCUMENTED_PUBLIC_FIELDS=new Set(["title"]),UNSPECIFIED_PUBLIC_DOCUMENTATION="unspecified-public-documentation",FRAMEWORK_CONTROLLER_FIELDS=new Set(["localize"]),PROPERTY_ONLY_FIELDS=new Set(["accessibleLabel","config","chart","currentTime","filter","files","keyframes","languages","marked","modal","selectedItems","selectedOptions","valueAsDate","valueAsNumber","validationMessage","validity","willValidate"]),hasOwn=(value,key)=>Object.prototype.hasOwnProperty.call(value,key),textOf=type=>type?.text?.replace(/\s+/g," ").trim()||"unknown",sortByName=entries=>[...entries].sort((a,b)=>a.name.localeCompare(b.name)),unique=entries=>[...new Set(entries)].sort();function canonicalDefault(raw){if(raw===void 0)return;if(raw===null||typeof raw=="boolean"||typeof raw=="number")return raw;const value=String(raw).trim();return value==="true"?!0:value==="false"?!1:value==="null"?null:value==="undefined"?"undefined":/^-?(?:\d+\.?\d*|\.\d+)(?:e[+-]?\d+)?$/i.test(value)?Number(value):value.startsWith("'")&&value.endsWith("'")||value.startsWith('"')&&value.endsWith('"')?value.slice(1,-1).replace(/\\(['"\\])/g,"$1"):value.replace(/\s+/g," ")}function kebabCase(name){return name.replace(/([a-z0-9])([A-Z])/g,"$1-$2").replaceAll("_","-").toLowerCase()}function isInternalMethod(member,ecosystem){return member.kind!=="method"||member.static||member.privacy==="private"||member.privacy==="protected"?!0:ecosystem==="lyra"&&!member.inheritedFrom?!1:!!(INTERNAL_METHOD_NAMES.has(member.name)||/^(?:handle|on|_)[A-Z_]/.test(member.name)&&!PUBLIC_METHOD_NAMES.has(member.name)||/Callback$/.test(member.name)&&!PUBLIC_METHOD_NAMES.has(member.name)||member.inheritedFrom&&!PUBLIC_METHOD_NAMES.has(member.name)&&!FORM_METHODS.has(member.name)||ecosystem!=="lyra"&&!member.description&&!PUBLIC_METHOD_NAMES.has(member.name)&&!FORM_METHODS.has(member.name))}function isPublicField(member,attributeNames,ecosystem){return member.kind!=="field"||member.static||member.privacy==="private"||member.privacy==="protected"?!1:ecosystem==="lyra"&&!member.inheritedFrom?!0:/^_/.test(member.name)||FRAMEWORK_CONTROLLER_FIELDS.has(member.name)&&!member.attribute&&!attributeNames.has(member.name)&&!member.description?!1:attributeNames.has(member.name)||member.attribute||FORM_PROPERTIES.has(member.name)||PROPERTY_ONLY_FIELDS.has(member.name)?!0:member.inheritedFrom?FORM_PROPERTIES.has(member.name)||PROPERTY_ONLY_FIELDS.has(member.name):ecosystem==="shoelace"?!!member.description||FORM_PROPERTIES.has(member.name)||UNDOCUMENTED_PUBLIC_FIELDS.has(member.name):member.privacy==="public"||!!member.description||!!member.readonly}const FRAMEWORK_STATIC_FIELDS=new Set(["css","dependencies","elementProperties","formAssociated","observeSlots","shadowRootOptions","styles"]);function isPublicStaticField(member,ecosystem){return member.kind!=="field"||member.static!==!0||member.privacy==="private"||member.privacy==="protected"||FRAMEWORK_STATIC_FIELDS.has(member.name)?!1:ecosystem==="lyra"&&!member.inheritedFrom?!0:member.privacy==="public"||!!member.description||!!member.readonly}function isPublicStaticMethod(member,ecosystem){return member.kind!=="method"||member.static!==!0||member.privacy==="private"||member.privacy==="protected"?!1:ecosystem==="lyra"&&!member.inheritedFrom?!(INTERNAL_METHOD_NAMES.has(member.name)||/^(?:handle|on|_)[A-Z_]/u.test(member.name)&&!PUBLIC_METHOD_NAMES.has(member.name)||/Callback$/u.test(member.name)&&!PUBLIC_METHOD_NAMES.has(member.name)):member.privacy==="public"||!!member.description}function normalizeParameter(parameter,ecosystem){const normalized={name:parameter.name,type:ecosystem!=="lyra"&&!parameter.type?UNSPECIFIED_PUBLIC_DOCUMENTATION:textOf(parameter.type),optional:parameter.optional===!0};return hasOwn(parameter,"default")?(normalized.hasDefault=!0,normalized.default=canonicalDefault(parameter.default)):normalized.hasDefault=!1,normalized}function eventCancelabilityFromDescription(description="",ecosystem="lyra",eventName){const text=description.toLowerCase().replace(/\b(?:conditionally\s+|non[- ]?|not\s+|never\s+)?cancell?able\s+`(lr-[a-z0-9-]+)`/gu,(phrase,referencedEvent)=>referencedEvent===eventName?phrase:""),conditionalPattern=/\bconditionally\s+cancell?able\b/gu,negativePattern=/\b(?:non[- ]?|not\s+|never\s+)cancell?able\b/gu,conditional=conditionalPattern.exec(text),negative=negativePattern.exec(text),withoutQualifiedMarkers=text.replace(conditionalPattern,phrase=>" ".repeat(phrase.length)).replace(negativePattern,phrase=>" ".repeat(phrase.length)),markers=[{kind:"conditional",match:conditional},{kind:"never",match:negative},{kind:"always",match:/\bcancell?able\b/u.exec(withoutQualifiedMarkers)},{kind:"implicit-always",match:/preventdefault\(\)|\bcancel(?:ing|ling) this event\b/u.exec(text)}].filter(({match})=>match);markers.sort((left,right)=>left.match.index-right.match.index);const first=markers[0];if(!first)return ecosystem==="lyra"?"never":UNSPECIFIED_PUBLIC_DOCUMENTATION;if(first.kind==="conditional")return"conditional";const kinds=new Set(markers.map(({kind})=>kind));return kinds.has("always")&&kinds.has("never")||first.kind==="always"&&/\b(?:except|unless|single\s+exception)\b/u.test(text)?"conditional":first.kind==="implicit-always"?"always":first.kind}function normalizeAttributes(declaration,publicFields,ecosystem){const fields=new Map(publicFields.map(member=>[member.name,member])),declared=declaration.attributes??[],source=declared.length?declared:publicFields.filter(member=>!member.readonly&&!PROPERTY_ONLY_FIELDS.has(member.name)).map(member=>({name:member.attribute||kebabCase(member.name),fieldName:member.name,type:member.type,...hasOwn(member,"default")?{default:member.default}:{},inferred:!0}));return sortByName(source.map(attribute=>{const field=fields.get(attribute.fieldName||attribute.name)??publicFields.find(member=>member.attribute===attribute.name),normalized={name:attribute.name,property:attribute.fieldName||field?.name||attribute.name,type:textOf(attribute.parsedType||attribute.type||field?.type),reflects:field?.reflects===!0,inferred:attribute.inferred===!0||ecosystem==="shoelace"&&declared.length===0,deprecated:attribute.deprecation??attribute.deprecated??field?.deprecation??field?.deprecated??null,hasDefault:hasOwn(attribute,"default")||!!(field&&hasOwn(field,"default"))};return normalized.hasDefault&&(normalized.default=canonicalDefault(hasOwn(attribute,"default")?attribute.default:field.default)),normalized}))}function normalizeProperties(publicFields){return sortByName(publicFields.map(member=>{const normalized={name:member.name,attribute:typeof member.attribute=="string"?member.attribute:null,type:textOf(member.parsedType||member.type),readonly:member.readonly===!0,reflects:member.reflects===!0,deprecated:member.deprecation||member.deprecated||null,hasDefault:hasOwn(member,"default")};return normalized.hasDefault&&(normalized.default=canonicalDefault(member.default)),normalized}))}function normalizeMethodEntries(members,ecosystem){const grouped=new Map;for(const member of members){const overload={parameters:(member.parameters??[]).map(parameter=>normalizeParameter(parameter,ecosystem)),returnType:ecosystem!=="lyra"&&!member.return?.type?UNSPECIFIED_PUBLIC_DOCUMENTATION:textOf(member.return?.type)},key=JSON.stringify(overload),current=grouped.get(member.name)??new Map;current.set(key,overload),grouped.set(member.name,current)}return[...grouped].map(([name,overloads])=>{const declaration=members.find(member=>member.kind==="method"&&member.name===name),deprecated=declaration?.deprecation||declaration?.deprecated||null;return{name,overloads:[...overloads.values()],...deprecated?{deprecated}:{}}}).sort((a,b)=>a.name.localeCompare(b.name))}function normalizeMethods(members,ecosystem){return normalizeMethodEntries(members.filter(member=>!isInternalMethod(member,ecosystem)),ecosystem)}function normalizeStaticProperties(members,ecosystem){return sortByName(members.filter(member=>isPublicStaticField(member,ecosystem)).map(member=>({name:member.name,type:textOf(member.parsedType||member.type),readonly:member.readonly===!0,deprecated:member.deprecation||member.deprecated||null})))}function normalizeStaticMethods(members,ecosystem){return normalizeMethodEntries(members.filter(member=>isPublicStaticMethod(member,ecosystem)),ecosystem)}function normalizedModulePath(modulePath){return typeof modulePath!="string"||!modulePath?null:path.posix.normalize(modulePath.replaceAll("\\","/").replace(/^\/+/,""))}function moduleLookupPath(modulePath){return normalizedModulePath(modulePath)?.replace(/\.(?:[cm]?js|ts)$/u,"")??null}function resolvedExportDeclarationPath(exportingModule,declarationModule){const exportingPath=normalizedModulePath(exportingModule),declaredPath=normalizedModulePath(declarationModule);return!exportingPath||!declaredPath?null:declarationModule.startsWith(".")?path.posix.normalize(path.posix.join(path.posix.dirname(exportingPath),declarationModule)):declaredPath}function moduleDeclarationIndex(manifest){const index=new Map;for(const module of manifest.modules??[]){const modulePath=moduleLookupPath(module.path);if(modulePath)for(const declaration of module.declarations??[]){if(!declaration?.name)continue;const key=`${modulePath}\0${declaration.name}`,declarations=index.get(key)??[];declarations.push(declaration),index.set(key,declarations)}}return index}function moduleExportDeclaration(index,module,entry){const exportingPath=moduleLookupPath(module.path),declarationName=entry.declaration?.name??entry.name,declaredPath=entry.declaration?.module?moduleLookupPath(resolvedExportDeclarationPath(module.path,entry.declaration.module)):exportingPath;return index.get(`${declaredPath}\0${declarationName}`)??index.get(`${exportingPath}\0${declarationName}`)??[]}function normalizeComponentModuleExports(manifest,componentModulePath,{ecosystem,additionalModules=[]}){const componentPath=normalizedModulePath(componentModulePath);if(!componentPath)return[];const scopedModules=new Set([componentPath,...additionalModules.map(modulePath=>normalizedModulePath(modulePath)).filter(Boolean)]),declarationIndex=moduleDeclarationIndex(manifest),normalized=[];for(const module of manifest.modules??[]){const modulePath=normalizedModulePath(module.path);if(!modulePath||!scopedModules.has(modulePath))continue;const explicitlyScoped=modulePath!==componentPath;for(const entry of module.exports??[]){if(entry.kind!=="js"||!entry.name||entry.name==="default"||entry.name==="*")continue;const declarations=moduleExportDeclaration(declarationIndex,module,entry),functions=declarations.filter(declaration=>declaration.kind==="function"&&declaration.privacy!=="private"&&declaration.privacy!=="protected"&&(ecosystem==="lyra"||declaration.privacy==="public"||!!declaration.description)),variable=declarations.find(declaration=>declaration.kind==="variable"&&declaration.privacy!=="private"&&declaration.privacy!=="protected"&&(ecosystem==="lyra"||declaration.privacy==="public"||!!declaration.description));if(functions.length>0){const callable=normalizeMethodEntries(functions.map(declaration=>({...declaration,kind:"method"})),ecosystem)[0];normalized.push({module:modulePath,name:entry.name,kind:"function",overloads:callable?.overloads??[],...callable?.deprecated?{deprecated:callable.deprecated}:{}})}else variable?normalized.push({module:modulePath,name:entry.name,kind:"variable",type:ecosystem!=="lyra"&&!variable.type?UNSPECIFIED_PUBLIC_DOCUMENTATION:textOf(variable.type),readonly:variable.readonly===!0,deprecated:variable.deprecation||variable.deprecated||null}):declarations.length===0&&explicitlyScoped&&normalized.push({module:modulePath,name:entry.name,kind:"unknown",type:UNSPECIFIED_PUBLIC_DOCUMENTATION,deprecated:null})}}return normalized.sort((left,right)=>`${left.module}:${left.name}:${left.kind}`.localeCompare(`${right.module}:${right.name}:${right.kind}`))}const REVIEWED_COMPONENT_MODULE_EXPORT_SCOPES=new Map([["webawesome:wa-animation",["components/animation/animations.js"]]]);function normalizeNamed(entries){return sortByName((entries??[]).map(entry=>({name:entry.name??"",deprecated:entry.deprecation||entry.deprecated||null})))}function normalizeCssProperties(entries,tagName="custom element"){return sortByName((entries??[]).map(entry=>{if(typeof entry?.name!="string"||!entry.name)throw new Error(`${tagName}: malformed CSS custom-property manifest entry`);const normalized={name:entry.name,deprecated:entry.deprecation||entry.deprecated||null,hasDefault:hasOwn(entry,"default")};return normalized.hasDefault&&(normalized.default=canonicalDefault(entry.default)),normalized}))}function eventFlag(description,positive,negative){const text=String(description??"").toLowerCase();if(negative.test(text))return!1;if(positive.test(text))return!0}const EVENT_CONSTRUCTORS=["AnimationEvent","BeforeUnloadEvent","ClipboardEvent","CloseEvent","CompositionEvent","CustomEvent","DeviceMotionEvent","DeviceOrientationEvent","DragEvent","ErrorEvent","Event","FocusEvent","GamepadEvent","HashChangeEvent","InputEvent","KeyboardEvent","MessageEvent","MouseEvent","PageTransitionEvent","PointerEvent","PopStateEvent","ProgressEvent","PromiseRejectionEvent","SecurityPolicyViolationEvent","StorageEvent","SubmitEvent","ToggleEvent","TouchEvent","TrackEvent","TransitionEvent","UIEvent","WheelEvent"],EVENT_CONSTRUCTOR_PATTERN=EVENT_CONSTRUCTORS.join("|"),SINGLE_EVENT_TYPE=new RegExp(`^(${EVENT_CONSTRUCTOR_PATTERN})(?:<.*>)?$`,"u"),EVENT_UNION_TYPE=new RegExp(`^(?:${EVENT_CONSTRUCTOR_PATTERN})(?:<.*>)?(?:\\s*\\|\\s*(?:${EVENT_CONSTRUCTOR_PATTERN})(?:<.*>)?)+$`,"u"),EVENT_WITH_COMPATIBILITY_DETAIL=new RegExp(`^(${EVENT_CONSTRUCTOR_PATTERN})(?:<.*>)?\\s*&\\s*\\{[^]*\\bdetail\\s*:`,"u");function eventConstructor(type){const text=textOf(type),single=SINGLE_EVENT_TYPE.exec(text);if(single)return single[1];const withCompatibilityDetail=EVENT_WITH_COMPATIBILITY_DETAIL.exec(text);return withCompatibilityDetail?withCompatibilityDetail[1]:EVENT_UNION_TYPE.test(text)?text:void 0}function normalizeEvents(entries,ecosystem){return sortByName((entries??[]).map(entry=>{const deprecated=entry.deprecation||entry.deprecated||null,normalized={name:entry.name,type:textOf(entry.type),cancelable:eventCancelabilityFromDescription(entry.description,ecosystem,entry.name),...deprecated?{deprecated}:{}},constructor=eventConstructor(entry.type),bubbles=eventFlag(entry.description,/\b(?:bubbling|bubbles)\b/,/\b(?:non[- ]?bubbling|does not bubble|doesn't bubble)\b/),composed=eventFlag(entry.description,/\bcomposed\b/,/\b(?:non[- ]?composed|not composed)\b/);return constructor!==void 0&&(normalized.constructor=constructor),bubbles!==void 0&&(normalized.bubbles=bubbles),composed!==void 0&&(normalized.composed=composed),normalized}))}function declaredFormAssociation(declaration){if(typeof declaration.formAssociated=="boolean")return declaration.formAssociated;const ownStatic=(declaration.members??[]).find(member=>member.kind==="field"&&member.name==="formAssociated"&&member.static===!0&&!member.inheritedFrom);if(ownStatic)return ownStatic.default===!0||String(ownStatic.default).trim()==="true";if((declaration.mixins??[]).some(mixin=>mixin.name==="FormAssociated"))return!0}function canonicalModulePath(modulePath){return typeof modulePath=="string"?modulePath.replace(/^\/+/,"").replace(/\.js$/u,".ts"):null}function manifestFormAssociations(manifest){const declarations=[],byModuleAndName=new Map,byName=new Map;for(const module of manifest.modules??[])for(const declaration of module.declarations??[]){if(!declaration?.name)continue;declarations.push(declaration);const modulePath=canonicalModulePath(module.path);modulePath&&byModuleAndName.set(`${modulePath}\0${declaration.name}`,declaration);const named=byName.get(declaration.name)??[];named.push(declaration),byName.set(declaration.name,named)}const resolved=new Map,resolving=new Set,resolve=declaration=>{if(resolved.has(declaration))return resolved.get(declaration);if(resolving.has(declaration))return!1;resolving.add(declaration);let associated=declaredFormAssociation(declaration);if(associated===void 0&&declaration.superclass?.name){const modulePath=canonicalModulePath(declaration.superclass.module),exact=modulePath?byModuleAndName.get(`${modulePath}\0${declaration.superclass.name}`):void 0,named=byName.get(declaration.superclass.name)??[],superclass=exact??(named.length===1?named[0]:void 0);superclass&&(associated=resolve(superclass))}return associated===void 0&&(associated=(declaration.members??[]).some(member=>member.kind==="field"&&member.name==="formAssociated"&&member.static===!0&&!!member.inheritedFrom&&(member.default===!0||String(member.default).trim()==="true"))),resolving.delete(declaration),resolved.set(declaration,associated===!0),associated===!0};for(const declaration of declarations)resolve(declaration);return resolved}function normalizeDeclaration(declaration,{ecosystem,formAssociated}){const attributeFieldNames=new Set((declaration.attributes??[]).flatMap(attribute=>[attribute.fieldName,attribute.name]).filter(Boolean)),publicFields=(declaration.members??[]).filter(member=>isPublicField(member,attributeFieldNames,ecosystem)),properties=normalizeProperties(publicFields),methods=normalizeMethods(declaration.members??[],ecosystem),staticProperties=normalizeStaticProperties(declaration.members??[],ecosystem),staticMethods=normalizeStaticMethods(declaration.members??[],ecosystem),events=normalizeEvents(declaration.events,ecosystem),formProperties=properties.filter(entry=>FORM_PROPERTIES.has(entry.name)).map(entry=>entry.name),formMethods=methods.filter(entry=>FORM_METHODS.has(entry.name)).map(entry=>entry.name),delegatedMethods=methods.filter(entry=>NATIVE_METHODS.has(entry.name)).map(entry=>entry.name),forwardedEvents=events.filter(entry=>NATIVE_EVENTS.has(entry.name)).map(entry=>entry.name),associated=formAssociated??declaredFormAssociation(declaration)===!0;return{attributes:normalizeAttributes(declaration,publicFields,ecosystem),properties,slots:normalizeNamed(declaration.slots),events,parts:normalizeNamed(declaration.cssParts),cssProperties:normalizeCssProperties(declaration.cssProperties,declaration.tagName),cssStates:normalizeNamed(declaration.cssStates),methods,staticProperties,staticMethods,moduleExports:[],form:{associated,properties:unique(formProperties),methods:unique(formMethods)},native:{forwardedEvents:unique(forwardedEvents),delegatedMethods:unique(delegatedMethods)},maturity:{status:declaration.status||"unclassified",since:declaration.since||null,deprecated:declaration.deprecated||null}}}function normalizeManifest(manifest,{ecosystem,tierByTag=new Map}){const components=[],formAssociations=manifestFormAssociations(manifest);for(const module of manifest.modules??[])for(const declaration of module.declarations??[]){if(!declaration.customElement||!declaration.tagName)continue;const normalized=normalizeDeclaration(declaration,{ecosystem,formAssociated:formAssociations.get(declaration)});normalized.moduleExports=normalizeComponentModuleExports(manifest,module.path,{ecosystem,additionalModules:REVIEWED_COMPONENT_MODULE_EXPORT_SCOPES.get(`${ecosystem}:${declaration.tagName}`)??[]}),components.push({tag:declaration.tagName,module:module.path||declaration.modulePath||declaration.definitionPath||null,tier:tierByTag.get(declaration.tagName)||null,maturity:normalized.maturity,surface:Object.fromEntries(SURFACE_SECTIONS.map(section=>[section,normalized[section]])),review:{status:"complete",source:"published-manifest",unreviewedSections:[]}})}return components.sort((a,b)=>a.tag.localeCompare(b.tag))}const UPSTREAM_RUNTIME_PACKAGES=Object.freeze({webawesome:"@awesome.me/webawesome",shoelace:"@shoelace-style/shoelace"});function runtimeEvidenceInvariant(condition,message){if(!condition)throw new Error(message)}function exactObjectKeys(value,expected){return value&&typeof value=="object"&&!Array.isArray(value)&&Object.keys(value).sort().join("\0")===[...expected].sort().join("\0")}function applyRuntimeEventCancelabilityEvidence(components,evidence,{ecosystem,version}={}){runtimeEvidenceInvariant(Array.isArray(components),"runtime cancelability evidence needs normalized components");const augmented=structuredClone(components);if(evidence==null)return augmented;runtimeEvidenceInvariant(exactObjectKeys(evidence,["source","coverage","events"]),`${String(ecosystem)}: malformed runtime cancelability evidence envelope`),runtimeEvidenceInvariant(exactObjectKeys(evidence.source,["package","version","tarballIntegrity"]),`${String(ecosystem)}: malformed runtime cancelability evidence source`);const expectedPackage=UPSTREAM_RUNTIME_PACKAGES[ecosystem];runtimeEvidenceInvariant(typeof expectedPackage=="string"&&evidence.source.package===expectedPackage,`${String(ecosystem)}: runtime evidence package ${String(evidence.source.package)} does not match ${String(expectedPackage)}`),runtimeEvidenceInvariant(evidence.source.version===version,`${String(ecosystem)}: runtime evidence version ${String(evidence.source.version)} does not match pin ${String(version)}`),runtimeEvidenceInvariant(typeof evidence.source.tarballIntegrity=="string"&&evidence.source.tarballIntegrity.startsWith("sha512-"),`${String(ecosystem)}: runtime evidence needs a SHA-512 package integrity`),runtimeEvidenceInvariant(evidence.coverage==="all-public-transition-paths",`${String(ecosystem)}: runtime cancelability evidence must cover all public transition paths`),runtimeEvidenceInvariant(Array.isArray(evidence.events)&&evidence.events.length>0,`${String(ecosystem)}: runtime cancelability evidence needs events`);const byTag=new Map(augmented.map(component=>[component.tag,component])),seen=new Set;for(const observation of evidence.events){runtimeEvidenceInvariant(exactObjectKeys(observation,["tag","event","cancelable","paths"]),`${String(observation?.tag)}#${String(observation?.event)}: malformed runtime cancelability evidence`);const key=`${observation.tag}#${observation.event}`;runtimeEvidenceInvariant(!seen.has(key),`duplicate runtime cancelability evidence ${key}`),seen.add(key),runtimeEvidenceInvariant(["always","never","conditional"].includes(observation.cancelable),`${key}: runtime cancelability evidence has an invalid result`),runtimeEvidenceInvariant(Array.isArray(observation.paths)&&observation.paths.length>0&&observation.paths.every(path2=>typeof path2=="string"&&!!path2.trim())&&new Set(observation.paths).size===observation.paths.length,`${key}: runtime cancelability evidence needs reviewed public paths`);const event=byTag.get(observation.tag)?.surface?.events?.find(entry=>entry.name===observation.event);runtimeEvidenceInvariant(event,`${key}: runtime cancelability evidence targets an unknown event`),runtimeEvidenceInvariant(event.cancelable===UNSPECIFIED_PUBLIC_DOCUMENTATION&&!event.cancelabilityEvidence,`${key}: pinned runtime evidence is stale because the manifest now documents cancelability`),event.cancelable=observation.cancelable,event.cancelabilityEvidence="pinned-runtime"}return augmented}const METHOD_EDGE_MEASUREMENT_BASES=new Set(["ambient-page-viewport"]),METHOD_EDGE_PARITY_EVIDENCE=Object.freeze({upstream:"pinned-package-black-box",target:"lyra-authored-contract-and-automated-tests"}),METHOD_EDGE_DIVERGENCE_FLAG="method-edge-return-sentinel-divergence";function validMethodEdgeOutcome(outcome){return!outcome||typeof outcome!="object"||Array.isArray(outcome)?!1:outcome.kind==="sentinel"?exactObjectKeys(outcome,["kind","value"])&&(outcome.value===null||typeof outcome.value=="string"||typeof outcome.value=="boolean"||typeof outcome.value=="number"&&Number.isFinite(outcome.value)):outcome.kind==="measurement"&&exactObjectKeys(outcome,["kind","basis"])&&METHOD_EDGE_MEASUREMENT_BASES.has(outcome.basis)}function applyRuntimeMethodEdgeSemanticsEvidence(components,evidence,{ecosystem,version}={}){runtimeEvidenceInvariant(Array.isArray(components),"runtime method-edge evidence needs normalized components");const augmented=structuredClone(components);if(evidence==null)return augmented;runtimeEvidenceInvariant(exactObjectKeys(evidence,["source","methods"]),`${String(ecosystem)}: malformed runtime method-edge evidence envelope`),runtimeEvidenceInvariant(exactObjectKeys(evidence.source,["package","version","tarballIntegrity"]),`${String(ecosystem)}: malformed runtime method-edge evidence source`);const expectedPackage=UPSTREAM_RUNTIME_PACKAGES[ecosystem];runtimeEvidenceInvariant(typeof expectedPackage=="string"&&evidence.source.package===expectedPackage,`${String(ecosystem)}: runtime method-edge evidence package ${String(evidence.source.package)} does not match ${String(expectedPackage)}`),runtimeEvidenceInvariant(evidence.source.version===version,`${String(ecosystem)}: runtime method-edge evidence version ${String(evidence.source.version)} does not match pin ${String(version)}`),runtimeEvidenceInvariant(typeof evidence.source.tarballIntegrity=="string"&&evidence.source.tarballIntegrity.startsWith("sha512-"),`${String(ecosystem)}: runtime method-edge evidence needs a SHA-512 package integrity`),runtimeEvidenceInvariant(Array.isArray(evidence.methods)&&evidence.methods.length>0,`${String(ecosystem)}: runtime method-edge evidence needs methods`);const byTag=new Map(augmented.map(component=>[component.tag,component])),seenMethods=new Set;for(const observation of evidence.methods){runtimeEvidenceInvariant(exactObjectKeys(observation,["tag","method","cases"]),`${String(observation?.tag)}#${String(observation?.method)}: malformed runtime method-edge evidence`);const key=`${observation.tag}#${observation.method}`;runtimeEvidenceInvariant(!seenMethods.has(key),`duplicate runtime method-edge evidence ${key}`),seenMethods.add(key);const method=byTag.get(observation.tag)?.surface?.methods?.find(entry=>entry.name===observation.method);runtimeEvidenceInvariant(method,`${key}: runtime method-edge evidence targets an unknown method`),runtimeEvidenceInvariant((method.overloads??[]).length>0&&(method.overloads??[]).every(overload=>overload.returnType===UNSPECIFIED_PUBLIC_DOCUMENTATION)&&!method.edgeSemantics,`${key}: pinned method-edge evidence is stale because the manifest now documents its return`);const caseNames=new Set;runtimeEvidenceInvariant(Array.isArray(observation.cases)&&observation.cases.length>0&&observation.cases.every(entry=>!exactObjectKeys(entry,["case","arguments","outcome"])||typeof entry.case!="string"||!entry.case.trim()||caseNames.has(entry.case)||!Array.isArray(entry.arguments)||!entry.arguments.every(argument=>typeof argument=="string"&&!!argument.trim())||!(method.overloads??[]).some(overload=>(overload.parameters??[]).length===entry.arguments.length)||!validMethodEdgeOutcome(entry.outcome)?!1:(caseNames.add(entry.case),!0)),`${key}: runtime method-edge evidence must cover unique named cases`),method.edgeSemantics={evidence:"pinned-runtime",cases:structuredClone(observation.cases)}}return augmented}function validateMethodEdgeParity(mapping,{upstream,target}={}){const findings=[],label=mapping?.upstreamTag??"<unknown>",methods=mapping?.parity?.methodEdges,observed=(upstream?.methods??[]).filter(method=>method.edgeSemantics),observedByName=new Map(observed.map(method=>[method.name,method])),behaviorFlags=mapping?.parity?.behaviorReviewFlags,hasDivergenceFlag=Array.isArray(behaviorFlags)&&behaviorFlags.includes(METHOD_EDGE_DIVERGENCE_FLAG);if(methods===void 0)return observed.length>0&&findings.push(`${label}: missing method-edge parity review`),hasDivergenceFlag&&findings.push(`${label}: stale method-edge divergence behavior flag`),findings;if(!Array.isArray(methods)||methods.length===0)return findings.push(`${label}: parity.methodEdges must be a non-empty array`),hasDivergenceFlag&&findings.push(`${label}: stale method-edge divergence behavior flag`),findings;const seenMethods=new Set;let hasDifferentCase=!1;for(const method of methods){if(!(exactObjectKeys(method,["method","evidence","cases","rationale"])&&typeof method.method=="string"&&!!method.method.trim()&&exactObjectKeys(method.evidence,["upstream","target"])&&method.evidence.upstream===METHOD_EDGE_PARITY_EVIDENCE.upstream&&method.evidence.target===METHOD_EDGE_PARITY_EVIDENCE.target&&Array.isArray(method.cases)&&method.cases.length>0&&typeof method.rationale=="string"&&!!method.rationale.trim())){findings.push(`${label}: malformed method-edge parity review`);continue}seenMethods.has(method.method)&&findings.push(`${label}: duplicate method-edge parity review ${method.method}`),seenMethods.add(method.method);const observedMethod=observedByName.get(method.method);upstream!==void 0&&!observedMethod&&findings.push(`${label}#${method.method}: stale method-edge parity review`),target!==void 0&&!(target.methods??[]).some(entry=>entry.name===method.method)&&findings.push(`${label}#${method.method}: dangling method-edge parity target`);const observedCases=new Map((observedMethod?.edgeSemantics?.cases??[]).map(entry=>[entry.case,entry])),seenCases=new Set;for(const edgeCase of method.cases){if(!(exactObjectKeys(edgeCase,["case","arguments","upstream","target","status"])&&typeof edgeCase.case=="string"&&!!edgeCase.case.trim()&&Array.isArray(edgeCase.arguments)&&edgeCase.arguments.every(argument=>typeof argument=="string"&&!!argument.trim())&&validMethodEdgeOutcome(edgeCase.upstream)&&validMethodEdgeOutcome(edgeCase.target)&&(edgeCase.status==="equivalent"||edgeCase.status==="different"))){findings.push(`${label}#${method.method}: malformed method-edge parity case`);continue}seenCases.has(edgeCase.case)&&findings.push(`${label}#${method.method}: duplicate method-edge parity case ${edgeCase.case}`),seenCases.add(edgeCase.case);const expectedStatus=sameJson(edgeCase.upstream,edgeCase.target)?"equivalent":"different";if(edgeCase.status!==expectedStatus&&findings.push(`${label}#${method.method}:${edgeCase.case}: stale method-edge parity status`),expectedStatus==="different"&&(hasDifferentCase=!0),observedMethod){const observedCase=observedCases.get(edgeCase.case);(!observedCase||!sameJson(observedCase.arguments,edgeCase.arguments)||!sameJson(observedCase.outcome,edgeCase.upstream))&&findings.push(`${label}#${method.method}:${edgeCase.case}: stored upstream method-edge observation is stale`)}}if(observedMethod)for(const observedCase of observedMethod.edgeSemantics.cases??[])seenCases.has(observedCase.case)||findings.push(`${label}#${method.method}:${observedCase.case}: missing method-edge parity case`)}if(upstream!==void 0)for(const method of observed)seenMethods.has(method.name)||findings.push(`${label}#${method.name}: missing method-edge parity review`);return hasDifferentCase?(mapping.classification!=="warning-required"&&findings.push(`${label}: method-edge divergence requires warning-required classification`),hasDivergenceFlag||findings.push(`${label}: missing ${METHOD_EDGE_DIVERGENCE_FLAG} behavior flag`),methods.some(method=>typeof mapping.rationale!="string"||typeof method?.rationale!="string"||!mapping.rationale.includes(method.rationale))&&findings.push(`${label}: mapping rationale omits method-edge divergence`)):hasDivergenceFlag&&findings.push(`${label}: stale method-edge divergence behavior flag`),findings}function mappedEventName(name,upstreamPrefix){return name.startsWith(upstreamPrefix)?`lr-${name.slice(upstreamPrefix.length)}`:name}function polarity(name){return/^(?:no|not|without|hide|disable)-/.test(name)?-1:/^(?:with|show|enable)-/.test(name)?1:0}function polarityStem(name){return name.replace(/^(?:no|not|without|hide|disable|with|show|enable)-/,"")}function pushMissing(drift,code,section,name){drift.push({code,section,member:name})}function normalizationKey(memberKind,member){return`${memberKind}:${member}`}function normalizedExpectedDefault(normalizations,memberKind,member,upstreamDefault){const rule=(normalizations.defaultEquivalences??[]).find(entry=>entry.memberKind===memberKind&&entry.member===member&&entry.upstream===upstreamDefault);return rule?rule.target:upstreamDefault}function reviewedAttributeProperty(normalizations,attribute,upstreamProperty,targetProperty){return(normalizations.attributePropertyEquivalences??[]).some(entry=>entry.attribute===attribute&&entry.upstream===upstreamProperty&&entry.target===targetProperty)}function reviewedReflection(normalizations,memberKind,member,upstreamReflects,targetReflects){return(normalizations.reflectionEquivalences??[]).some(entry=>entry.memberKind===memberKind&&entry.member===member&&entry.upstream===upstreamReflects&&entry.target===targetReflects)}function reviewedCssDefault(normalizations,member,upstreamEntry,targetEntry){return(normalizations.cssDefaultEquivalences??[]).some(entry=>entry.member===member&&entry.upstreamHasDefault===upstreamEntry.hasDefault&&(!entry.upstreamHasDefault||entry.upstream===upstreamEntry.default)&&entry.targetHasDefault===targetEntry.hasDefault&&(!entry.targetHasDefault||entry.target===targetEntry.default))}function deprecationReplacement(value){if(value&&typeof value=="object"){const replacement=value.replacement;if(!replacement||typeof replacement!="object")return null;const usage=typeof replacement.usage=="string"?replacement.usage.trim():"";return/^([a-z][a-z0-9-]*)\s*=\s*["'][^"']+["']$/iu.exec(usage)?.[1]===replacement.name?usage.replace(/\s+/gu,""):typeof replacement.name=="string"&&replacement.name?replacement.name:null}return typeof value!="string"?null:/\buse\s+(?:the\s+)?`([^`]+)`/iu.exec(value)?.[1]??/\buse\s+(?:the\s+)?(?!the\b)([a-z][a-z0-9-]*)\s+(?:part|property|attribute|slot|method)\b/iu.exec(value)?.[1]??null}function reviewedDeprecation(normalizations,section,member,upstreamDeprecated,upstreamReplacement,targetDeprecated,targetReplacement){return(normalizations.deprecationEquivalences??[]).some(entry=>entry.section===section&&entry.member===member&&entry.upstreamDeprecated===upstreamDeprecated&&entry.upstreamReplacement===upstreamReplacement&&entry.targetDeprecated===targetDeprecated&&entry.targetReplacement===targetReplacement)}function rewriteDeprecationReplacement(replacement,rewrites){if(replacement===null)return null;const assignment=/^([a-z][a-z0-9-]*)(=.*)$/iu.exec(replacement);return assignment?`${rewrites.get(assignment[1])||assignment[1]}${assignment[2]}`:rewrites.get(replacement)||replacement}function reviewedDerivedDefault(normalizations,memberKind,member,upstreamDefault,candidate){return candidate.hasDefault?!1:(normalizations.derivedDefaultEquivalences??[]).some(entry=>entry.memberKind===memberKind&&entry.member===member&&entry.upstream===upstreamDefault)}function containsTypePositionKeyword(type,keyword){if(typeof type!="string")return!1;let quote=null;for(let index=0;index<type.length;){const character=type[index];if(quote){if(character==="\\"){index+=2;continue}character===quote&&(quote=null),index++;continue}if(character==="'"||character==='"'||character==="`"){quote=character,index++;continue}if(/[A-Za-z_$]/u.test(character)){let end=index+1;for(;end<type.length&&/[A-Za-z0-9_$]/u.test(type[end]);)end++;if(type.slice(index,end)===keyword){let next=end;for(;next<type.length&&/\s/u.test(type[next]);)next++;if(type[next]==="?")for(next++;next<type.length&&/\s/u.test(type[next]);)next++;if(type[next]!==":"&&type[next]!=="(")return!0}index=end;continue}index++}return!1}function containsAnyTypeKeyword(type){return containsTypePositionKeyword(type,"any")}function containsUnknownTypeKeyword(type){return containsTypePositionKeyword(type,"unknown")}function containsTemplateInterpolation(type){return typeof type=="string"&&type.includes("${")}function structuralTypeAliasMap(normalizations){return new Map((normalizations?.structuralTypeAliases??[]).filter(entry=>typeof entry?.name=="string"&&typeof entry.target=="string").map(entry=>[entry.name,entry.target]))}function typeContainsIdentifier(type,identifier){return typeof type!="string"?!1:new RegExp(`(^|[^A-Za-z0-9_$])${identifier.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}([^A-Za-z0-9_$]|$)`,"u").test(type)}function expandStructuralTypeAliases(type,normalizations,resolving=new Set){if(typeof type!="string")return type;const aliases=structuralTypeAliasMap(normalizations);if(aliases.size===0)return type;let expanded="",quote=null;for(let index=0;index<type.length;){const character=type[index];if(quote){if(expanded+=character,character==="\\"&&index+1<type.length){expanded+=type[index+1],index+=2;continue}character===quote&&(quote=null),index+=1;continue}if(character==="'"||character==='"'||character==="`"){quote=character,expanded+=character,index+=1;continue}if(/[A-Za-z_$]/u.test(character)){let end=index+1;for(;end<type.length&&/[A-Za-z0-9_$]/u.test(type[end]);)end+=1;const identifier=type.slice(index,end),target=aliases.get(identifier);typeof target=="string"&&!resolving.has(identifier)?expanded+=expandStructuralTypeAliases(target,normalizations,new Set([...resolving,identifier])):expanded+=identifier,index=end;continue}expanded+=character,index+=1}return expanded}function reviewedTypeEquivalent(normalizations,memberKind,member,upstreamType,targetType){return containsAnyTypeKeyword(upstreamType)||containsAnyTypeKeyword(targetType)||memberKind==="event"&&(isUnknownEventType(upstreamType)||isUnknownEventType(targetType)||isBareCustomEventType(targetType))?!1:(normalizations.typeEquivalences??[]).some(entry=>entry.memberKind===memberKind&&entry.member===member&&entry.upstream===upstreamType&&entry.target===targetType)}function reviewedMethodParameterTypeEquivalent(normalizations,method,parameter,upstreamType,targetType){return typeof upstreamType!="string"||typeof targetType!="string"||containsAnyTypeKeyword(upstreamType)||containsAnyTypeKeyword(targetType)||containsUnknownTypeKeyword(upstreamType)||containsUnknownTypeKeyword(targetType)||containsTemplateInterpolation(upstreamType)||containsTemplateInterpolation(targetType)?!1:(normalizations.methodParameterTypeEquivalences??[]).some(entry=>entry.method===method&&entry.parameter===parameter&&entry.upstream===upstreamType&&entry.target===targetType)}function reviewedCancelability(normalizations,event,upstreamCancelable,targetCancelable){const upstreamRank=CANCELABILITY_RANK.get(upstreamCancelable),targetRank=CANCELABILITY_RANK.get(targetCancelable);if(upstreamRank===void 0||targetRank===void 0)return!1;const matches=entry=>entry.event===event&&entry.upstream===upstreamCancelable&&entry.target===targetCancelable;return targetRank>upstreamRank?(normalizations.cancelabilityEquivalences??[]).some(matches):upstreamCancelable==="always"&&targetCancelable==="conditional"&&(normalizations.cancelabilityPathAdditions??[]).some(matches)}function insertionPreservesDefault(rewrites,memberKind,member,upstreamDefault){return(rewrites.defaults??[]).some(rule=>rule.action==="insert-if-absent"&&rule.memberKind===memberKind&&rule.member===member&&rule.value===upstreamDefault)}function mappedPublicType(type,upstreamPrefix){if(typeof type!="string")return type;const sourcePrefix=upstreamPrefix==="wa-"?"Wa":upstreamPrefix==="sl-"?"Sl":null;return sourcePrefix?type.replace(new RegExp(`\\b${sourcePrefix}([A-Z][A-Za-z0-9_$]*)\\b`,"gu"),"Lyra$1"):type}function hasPublishedType(type){return!!type&&type!=="unknown"&&type!==UNSPECIFIED_PUBLIC_DOCUMENTATION}function splitTopLevelUnion(type){const tokens=[];let start=0,depth=0,quote=null;for(let index=0;index<type.length;index+=1){const character=type[index];if(quote){character===quote&&type[index-1]!=="\\"&&(quote=null);continue}if(character==="'"||character==='"'||character==="`"){quote=character;continue}if("([{<".includes(character))depth+=1;else if([")","]","}",">"].includes(character))depth=Math.max(0,depth-1);else if(character==="|"&&depth===0){const token2=type.slice(start,index).trim();token2&&tokens.push(token2),start=index+1}}const token=type.slice(start).trim();return token&&tokens.push(token),tokens}function normalizedTypeTokens(type){return typeof type!="string"?[]:splitTopLevelUnion(type.replace(/^\s*\|\s*/u,"").replace(/\s+/gu," ").trim())}function literalPrimitive(token){return/^(?:'[^']*'|"[^"]*"|`[^`]*`)$/u.test(token)?"string":/^-?(?:\d+(?:\.\d*)?|\.\d+)$/u.test(token)?"number":token==="true"||token==="false"?"boolean":null}function publicTypeCompatible(expected,actual){if(containsAnyTypeKeyword(expected)||containsAnyTypeKeyword(actual))return!1;const expectedTokens=normalizedTypeTokens(expected),actualTokens=normalizedTypeTokens(actual);if(expectedTokens.length===actualTokens.length){const actualSet2=new Set(actualTokens);if(expectedTokens.every(token=>actualSet2.has(token)))return!0}const actualSet=new Set(actualTokens);return expectedTokens.every(token=>{if(actualSet.has(token))return!0;const primitive=literalPrimitive(token);return!!(primitive&&actualSet.has(primitive)||token==="array"&&actualTokens.some(candidate=>/(?:\[\]|Array<.+>)$/u.test(candidate)))})}function canonicalEventType(type){if(typeof type!="string")return;const trimmed=type.trim(),detail=/^CustomEvent\s*</u.test(trimmed)&&trimmed.endsWith(">")?trimmed.slice(trimmed.indexOf("<")+1,-1).trim():trimmed;let canonical="",quote=null,escaped=!1,curlyDepth=0,angleDepth=0,squareDepth=0,parenDepth=0;for(const character of detail){if(quote){canonical+=character,escaped?escaped=!1:character==="\\"?escaped=!0:character===quote&&(quote=null);continue}if(character==="'"||character==='"'||character==="`"){quote=character,canonical+=character;continue}/\s/u.test(character)||(character==="{"?curlyDepth+=1:character==="}"?curlyDepth=Math.max(0,curlyDepth-1):character==="<"?angleDepth+=1:character===">"?angleDepth=Math.max(0,angleDepth-1):character==="["?squareDepth+=1:character==="]"?squareDepth=Math.max(0,squareDepth-1):character==="("?parenDepth+=1:character===")"&&(parenDepth=Math.max(0,parenDepth-1)),character===","&&curlyDepth>0&&angleDepth===0&&squareDepth===0&&parenDepth===0?canonical+=";":canonical+=character)}return canonical.replace(/\bvoid\b/gu,"undefined").replace(/;\}/gu,"}")}function stripBalancedOuterParentheses(type){let text=type.trim();for(;text.startsWith("(")&&text.endsWith(")");){let depth=0,quote=null,closesAtEnd=!1;for(let index=0;index<text.length;index+=1){const character=text[index];if(quote){character===quote&&text[index-1]!=="\\"&&(quote=null);continue}if(character==="'"||character==='"'||character==="`"){quote=character;continue}if(character==="(")depth+=1;else if(character===")"&&(depth-=1,depth===0)){closesAtEnd=index===text.length-1;break}}if(!closesAtEnd)break;text=text.slice(1,-1).trim()}return text}function customEventDetailType(type){const text=type.trim(),opening=/^CustomEvent\s*</u.exec(text);if(!opening)return;const start=opening[0].lastIndexOf("<");let depth=0,quote=null;for(let index=start;index<text.length;index+=1){const character=text[index];if(quote){character===quote&&text[index-1]!=="\\"&&(quote=null);continue}if(character==="'"||character==='"'||character==="`"){quote=character;continue}if(character==="<")depth+=1;else if(character===">"&&(depth-=1,depth===0))return text.slice(index+1).trim()===""?text.slice(start+1,index).trim():void 0}}function hasTopLevelUnknown(type){return splitTopLevelUnion(stripBalancedOuterParentheses(type)).includes("unknown")}function isUnknownEventType(type){if(typeof type!="string")return!1;const trimmed=stripBalancedOuterParentheses(type);if(hasTopLevelUnknown(trimmed))return!0;const detail=customEventDetailType(trimmed);return detail!==void 0&&hasTopLevelUnknown(detail)}function isBareCustomEventType(type){return typeof type=="string"&&/^CustomEvent\s*$/u.test(type.trim())}function eventTypeCompatible(expected,actual,normalizations={}){if(actual=expandStructuralTypeAliases(actual,normalizations),!hasPublishedType(expected)||!hasPublishedType(actual)||containsAnyTypeKeyword(expected)||containsAnyTypeKeyword(actual)||isUnknownEventType(expected)||isUnknownEventType(actual)||isBareCustomEventType(actual))return!1;const expectedCustom=/^CustomEvent\s*</u.test(expected.trim()),actualCustom=/^CustomEvent\s*</u.test(actual.trim());return expectedCustom!==actualCustom&&eventConstructor(expectedCustom?actual:expected)!==void 0?!1:canonicalEventType(expected)===canonicalEventType(actual)}function parametersMatch(expected,actual,upstreamPrefix,method,normalizations){const expectedParameters=expected??[],actualParameters=actual??[];return actualParameters.length<expectedParameters.length||!expectedParameters.every((parameter,index)=>{const candidate=actualParameters[index];return!candidate||parameter.name!==candidate.name||parameter.type!==UNSPECIFIED_PUBLIC_DOCUMENTATION&&mappedPublicType(parameter.type,upstreamPrefix)!==candidate.type&&!reviewedMethodParameterTypeEquivalent(normalizations,method,parameter.name,parameter.type,candidate.type)||(parameter.optional||parameter.hasDefault)&&!(candidate.optional||candidate.hasDefault)?!1:!parameter.hasDefault||candidate.hasDefault&¶meter.default===candidate.default})?!1:actualParameters.slice(expectedParameters.length).every(parameter=>parameter.optional||parameter.hasDefault)}function overloadMatches(method,expected,actual,upstreamPrefix,normalizations,unknownReturnTypeIsUnspecified=!1){return parametersMatch(expected.parameters,actual.parameters,upstreamPrefix,method,normalizations)&&(expected.returnType===UNSPECIFIED_PUBLIC_DOCUMENTATION||unknownReturnTypeIsUnspecified&&expected.returnType==="unknown"||mappedPublicType(expected.returnType,upstreamPrefix)===actual.returnType)}function methodOverloadsMatch(method,expected,actual,upstreamPrefix,normalizations,unknownReturnTypeIsUnspecified=!1){return(expected??[]).every(overload=>(actual??[]).some(candidate=>overloadMatches(method,overload,candidate,upstreamPrefix,normalizations,unknownReturnTypeIsUnspecified)))}function compareMappedSurfaces(upstream,target,{upstreamPrefix,rewrites={},normalizations={}}={}){const drift=[],attributeRewrites=new Map((rewrites.attributes??[]).map(entry=>[entry.from,entry.to])),propertyRewrites=new Map((rewrites.properties??[]).map(entry=>[entry.from,entry.to])),eventRewrites=new Map((rewrites.events??[]).map(entry=>[entry.from,entry.to])),methodRewrites=new Map((rewrites.methods??[]).map(entry=>[entry.from,entry.to])),sectionDeprecationRewrites=new Map([["attributes",attributeRewrites],["properties",propertyRewrites],["events",eventRewrites],["methods",methodRewrites],["staticProperties",new Map],["staticMethods",new Map],["moduleExports",new Map],...["slots","parts","cssProperties","cssStates"].map(section=>[section,new Map((rewrites[section]??[]).map(entry=>[entry.from,entry.to]))])]),unknownMethodReturnTypes=new Set((normalizations.unknownMethodReturnTypes??[]).map(entry=>entry.method)),inferredAttributeSuppressions=new Map((normalizations.inferredAttributeSuppressions??[]).map(entry=>[entry.attribute,entry])),suppressionRequiredProperties=new Set,excludedAttributeProperties=new Set((upstream.attributes??[]).filter(attribute=>Object.hasOwn(MIGRATION_ATTRIBUTE_EXCLUSIONS,attribute.name)).map(attribute=>attribute.property).filter(Boolean)),compareDeprecation=(section,upstreamMember,targetMember)=>{const upstreamDeprecated=!!upstreamMember.deprecated,targetDeprecated=!!targetMember.deprecated,upstreamReplacement=deprecationReplacement(upstreamMember.deprecated),targetReplacement=deprecationReplacement(targetMember.deprecated),expectedReplacement=rewriteDeprecationReplacement(upstreamReplacement,sectionDeprecationRewrites.get(section)??new Map);(upstreamDeprecated!==targetDeprecated||upstreamDeprecated&&targetDeprecated&&expectedReplacement!==targetReplacement)&&!reviewedDeprecation(normalizations,section,upstreamMember.name,upstreamDeprecated,upstreamReplacement,targetDeprecated,targetReplacement)&&drift.push({code:upstreamDeprecated===targetDeprecated?"deprecation-replacement-mismatch":"deprecation-mismatch",section,member:upstreamMember.name,expected:upstreamDeprecated?expectedReplacement??!0:!1,actual:targetDeprecated?targetReplacement??!0:!1})};for(const attribute of upstream.attributes??[]){if(Object.hasOwn(MIGRATION_ATTRIBUTE_EXCLUSIONS,attribute.name))continue;const suppression=inferredAttributeSuppressions.get(attribute.name),requiredProperty=suppression?.property;if(requiredProperty&&(attribute.inferred===!0||suppression.explicit===!0)){suppressionRequiredProperties.add(requiredProperty),(target.properties??[]).some(property=>property.name===requiredProperty)||pushMissing(drift,"missing-property","properties",requiredProperty);continue}const expectedName=attributeRewrites.get(attribute.name)||attribute.name,candidate=(target.attributes??[]).find(entry=>entry.name===expectedName);if(!candidate){const opposite=(target.attributes??[]).find(entry=>polarityStem(entry.name)===polarityStem(expectedName)&&polarity(entry.name)!==polarity(expectedName));opposite?drift.push({code:"polarity-mismatch",section:"attributes",member:attribute.name,expected:expectedName,actual:opposite.name}):pushMissing(drift,"missing-attribute","attributes",attribute.name);continue}const expectedType=mappedPublicType(attribute.type,upstreamPrefix);hasPublishedType(attribute.type)&&!publicTypeCompatible(expectedType,candidate.type)&&!reviewedTypeEquivalent(normalizations,"attribute",attribute.name,attribute.type,candidate.type)&&drift.push({code:"type-mismatch",section:"attributes",member:attribute.name,expected:expectedType,actual:candidate.type});const expectedProperty=propertyRewrites.get(attribute.property)||attribute.property;expectedProperty!==candidate.property&&!reviewedAttributeProperty(normalizations,attribute.name,attribute.property,candidate.property)&&drift.push({code:"attribute-property-mismatch",section:"attributes",member:attribute.name,expected:expectedProperty,actual:candidate.property}),attribute.reflects!==candidate.reflects&&!reviewedReflection(normalizations,"attribute",attribute.name,attribute.reflects,candidate.reflects)&&drift.push({code:"reflection-mismatch",section:"attributes",member:attribute.name,expected:attribute.reflects,actual:hasOwn(candidate,"reflects")?candidate.reflects:null});const expectedDefault=normalizedExpectedDefault(normalizations,"attribute",attribute.name,attribute.default);attribute.hasDefault&&(!candidate.hasDefault||candidate.default!==expectedDefault)&&!reviewedDerivedDefault(normalizations,"attribute",attribute.name,attribute.default,candidate)&&!insertionPreservesDefault(rewrites,"attribute",attribute.name,expectedDefault)&&drift.push({code:"default-mismatch",section:"attributes",member:attribute.name,expected:expectedDefault,actual:candidate.hasDefault?candidate.default:null}),compareDeprecation("attributes",attribute,candidate)}for(const property of upstream.properties??[]){if(excludedAttributeProperties.has(property.name))continue;const expectedName=propertyRewrites.get(property.name)||property.name,candidate=(target.properties??[]).find(entry=>entry.name===expectedName);if(!(!candidate&&suppressionRequiredProperties.has(expectedName))){if((upstream.attributes??[]).some(attribute=>attribute.property===property.name)){candidate?property.readonly===!1&&candidate.readonly!==!1&&drift.push({code:"readonly-mismatch",section:"properties",member:property.name,expected:property.readonly,actual:hasOwn(candidate,"readonly")?candidate.readonly:null}):pushMissing(drift,"missing-property","properties",property.name),candidate&&compareDeprecation("properties",property,candidate);continue}if(!candidate)pushMissing(drift,"missing-property","properties",property.name);else{const expectedType=mappedPublicType(property.type,upstreamPrefix);hasPublishedType(property.type)&&!publicTypeCompatible(expectedType,candidate.type)&&!reviewedTypeEquivalent(normalizations,"property",property.name,property.type,candidate.type)&&drift.push({code:"type-mismatch",section:"properties",member:property.name,expected:expectedType,actual:candidate.type}),property.reflects!==candidate.reflects&&!reviewedReflection(normalizations,"property",property.name,property.reflects,candidate.reflects)&&drift.push({code:"reflection-mismatch",section:"properties",member:property.name,expected:property.reflects,actual:hasOwn(candidate,"reflects")?candidate.reflects:null}),property.readonly===!1&&candidate.readonly!==!1&&drift.push({code:"readonly-mismatch",section:"properties",member:property.name,expected:property.readonly,actual:hasOwn(candidate,"readonly")?candidate.readonly:null});const expectedDefault=normalizedExpectedDefault(normalizations,"property",property.name,property.default);if(compareDeprecation("properties",property,candidate),!property.hasDefault||candidate.hasDefault&&candidate.default===expectedDefault||reviewedDerivedDefault(normalizations,"property",property.name,property.default,candidate)||insertionPreservesDefault(rewrites,"property",property.name,expectedDefault))continue;drift.push({code:"default-mismatch",section:"properties",member:property.name,expected:expectedDefault,actual:candidate.hasDefault?candidate.default:null})}}}for(const property of upstream.staticProperties??[]){const candidate=(target.staticProperties??[]).find(entry=>entry.name===property.name);if(!candidate){pushMissing(drift,"missing-static-property","staticProperties",property.name);continue}const expectedType=mappedPublicType(property.type,upstreamPrefix);hasPublishedType(property.type)&&!publicTypeCompatible(expectedType,candidate.type)&&!reviewedTypeEquivalent(normalizations,"staticProperty",property.name,property.type,candidate.type)&&drift.push({code:"static-property-type-mismatch",section:"staticProperties",member:property.name,expected:expectedType,actual:candidate.type}),property.readonly===!1&&candidate.readonly!==!1&&drift.push({code:"static-property-readonly-mismatch",section:"staticProperties",member:property.name,expected:!1,actual:hasOwn(candidate,"readonly")?candidate.readonly:null}),compareDeprecation("staticProperties",property,candidate)}for(const[section,code]of[["slots","missing-slot"],["parts","missing-part"],["cssProperties","missing-css-property"],["cssStates","missing-css-state"]]){const targetEntries=new Map((target[section]??[]).map(entry=>[entry.name,entry])),sectionRewrites=new Map((rewrites[section]??[]).map(entry=>[entry.from,entry.to]));for(const entry of upstream[section]??[]){const expectedName=sectionRewrites.get(entry.name)||entry.name,candidate=targetEntries.get(expectedName);if(!candidate){pushMissing(drift,code,section,entry.name);continue}section==="cssProperties"&&!(entry.hasDefault===candidate.hasDefault&&(!entry.hasDefault||entry.default===candidate.default))&&!reviewedCssDefault(normalizations,entry.name,entry,candidate)&&drift.push({code:"css-default-mismatch",section,member:entry.name,expectedHasDefault:entry.hasDefault,expected:entry.hasDefault?entry.default:null,actualHasDefault:candidate.hasDefault,actual:candidate.hasDefault?candidate.default:null}),compareDeprecation(section,entry,candidate)}}for(const method of upstream.methods??[]){const expectedName=methodRewrites.get(method.name)||method.name,candidate=(target.methods??[]).find(entry=>entry.name===expectedName);candidate?methodOverloadsMatch(method.name,method.overloads,candidate.overloads,upstreamPrefix,normalizations,unknownMethodReturnTypes.has(method.name))||drift.push({code:"method-signature-mismatch",section:"methods",member:method.name,expected:method.overloads,actual:candidate.overloads}):pushMissing(drift,"missing-method","methods",method.name),candidate&&compareDeprecation("methods",method,candidate)}for(const method of upstream.staticMethods??[]){const candidate=(target.staticMethods??[]).find(entry=>entry.name===method.name);candidate?methodOverloadsMatch(method.name,method.overloads,candidate.overloads,upstreamPrefix,normalizations)||drift.push({code:"static-method-signature-mismatch",section:"staticMethods",member:method.name,expected:method.overloads,actual:candidate.overloads}):pushMissing(drift,"missing-static-method","staticMethods",method.name),candidate&&compareDeprecation("staticMethods",method,candidate)}for(const exported of upstream.moduleExports??[]){const candidates=(target.moduleExports??[]).filter(entry=>entry.name===exported.name);if(candidates.length===0){drift.push({code:"missing-module-export",section:"moduleExports",member:exported.name,module:exported.module});continue}if(exported.kind==="unknown")continue;const sameKind=candidates.filter(entry=>entry.kind===exported.kind);if(sameKind.length===0){drift.push({code:"module-export-kind-mismatch",section:"moduleExports",member:exported.name,module:exported.module,expected:exported.kind,actual:unique(candidates.map(entry=>entry.kind))});continue}exported.kind==="function"?sameKind.some(candidate=>methodOverloadsMatch(exported.name,exported.overloads,candidate.overloads,upstreamPrefix,normalizations))||drift.push({code:"module-export-signature-mismatch",section:"moduleExports",member:exported.name,module:exported.module,expected:exported.overloads,actual:sameKind.map(candidate=>candidate.overloads)}):hasPublishedType(exported.type)&&!sameKind.some(candidate=>publicTypeCompatible(mappedPublicType(exported.type,upstreamPrefix),candidate.type)||reviewedTypeEquivalent(normalizations,"moduleExport",exported.name,exported.type,candidate.type))&&drift.push({code:"module-export-type-mismatch",section:"moduleExports",member:exported.name,module:exported.module,expected:mappedPublicType(exported.type,upstreamPrefix),actual:unique(sameKind.map(candidate=>candidate.type))})}for(const event of upstream.events??[]){const expectedName=eventRewrites.get(event.name)||mappedEventName(event.name,upstreamPrefix),candidate=(target.events??[]).find(entry=>entry.name===expectedName);if(!candidate)pushMissing(drift,"missing-event","events",event.name);else{const expectedType=mappedPublicType(event.type,upstreamPrefix);hasPublishedType(event.type)&&!eventTypeCompatible(expectedType,candidate.type,normalizations)&&!reviewedTypeEquivalent(normalizations,"event",event.name,event.type,candidate.type)&&drift.push({code:"event-type-mismatch",section:"events",member:event.name,expected:expectedType,actual:candidate.type}),event.cancelable!==UNSPECIFIED_PUBLIC_DOCUMENTATION&&candidate.cancelable!==event.cancelable&&!reviewedCancelability(normalizations,event.name,event.cancelable,candidate.cancelable)&&drift.push({code:"cancelability-mismatch",section:"events",member:event.name,expected:event.cancelable,actual:candidate.cancelable});for(const[field,code]of[["constructor","event-constructor-mismatch"],["bubbles","event-bubbles-mismatch"],["composed","event-composed-mismatch"]])!hasOwn(event,field)||candidate[field]===event[field]||drift.push({code,section:"events",member:event.name,expected:event[field],actual:hasOwn(candidate,field)?candidate[field]:null});compareDeprecation("events",event,candidate)}}upstream.form?.associated&&!target.form?.associated&&drift.push({code:"form-association-mismatch",section:"form",member:"associated"});for(const property of upstream.form?.properties??[])(target.form?.properties??[]).includes(property)||pushMissing(drift,"missing-form-property","form",property);for(const method of upstream.form?.methods??[])(target.form?.methods??[]).includes(method)||pushMissing(drift,"missing-form-method","form",method);for(const event of upstream.native?.forwardedEvents??[])(target.native?.forwardedEvents??[]).includes(event)||pushMissing(drift,"missing-native-event","native",event);for(const method of upstream.native?.delegatedMethods??[])(target.native?.delegatedMethods??[]).includes(method)||pushMissing(drift,"missing-native-method","native",method);return drift.sort((a,b)=>`${a.section}:${a.member}:${a.code}`.localeCompare(`${b.section}:${b.member}:${b.code}`))}function validateSurface(surface,label,findings){if(!surface||typeof surface!="object"){findings.push(`${label}: missing normalized surface`);return}for(const section of SURFACE_SECTIONS)section==="form"||section==="native"?(!surface[section]||typeof surface[section]!="object")&&findings.push(`${label}: missing ${section} contract`):Array.isArray(surface[section])||findings.push(`${label}: ${section} must be an array`);for(const event of surface.events??[])["always","never","conditional",UNSPECIFIED_PUBLIC_DOCUMENTATION].includes(event.cancelable)||findings.push(`${label}: event ${event.name} has unreviewed cancelability`),hasOwn(event,"cancelabilityEvidence")&&(event.cancelable!==UNSPECIFIED_PUBLIC_DOCUMENTATION&&event.cancelabilityEvidence==="pinned-runtime"||findings.push(`${label}: event ${event.name} has malformed cancelability evidence`));for(const method of surface.methods??[]){if(!hasOwn(method,"edgeSemantics"))continue;const edgeSemantics=method.edgeSemantics,caseNames=new Set;exactObjectKeys(edgeSemantics,["evidence","cases"])&&edgeSemantics.evidence==="pinned-runtime"&&Array.isArray(edgeSemantics.cases)&&edgeSemantics.cases.length>0&&edgeSemantics.cases.every(entry=>!exactObjectKeys(entry,["case","arguments","outcome"])||typeof entry.case!="string"||!entry.case.trim()||caseNames.has(entry.case)||!Array.isArray(entry.arguments)||!entry.arguments.every(argument=>typeof argument=="string"&&!!argument.trim())||!validMethodEdgeOutcome(entry.outcome)?!1:(caseNames.add(entry.case),!0))||findings.push(`${label}: method ${method.name} has malformed edge-semantics evidence`)}}function validateRewrites(mapping,findings){if(!mapping.rewrites||typeof mapping.rewrites!="object"){findings.push(`${mapping.upstreamTag}: missing deterministic rewrite contract`);return}for(const section of REWRITE_RULE_SECTIONS)Array.isArray(mapping.rewrites[section])||findings.push(`${mapping.upstreamTag}: rewrites.${section} must be an array`);for(const section of Object.keys(mapping.rewrites))REWRITE_RULE_SECTIONS.includes(section)||findings.push(`${mapping.upstreamTag}: unknown rewrite section ${section}`);for(const section of REWRITE_RULE_SECTIONS.filter(name=>name!=="defaults")){const seen=new Set;for(const rule of mapping.rewrites[section]??[]){const keys=rule&&typeof rule=="object"?Object.keys(rule):[];if(!rule||typeof rule.from!="string"||!rule.from||typeof rule.to!="string"||!rule.to||keys.some(key=>key!=="from"&&key!=="to")){findings.push(`${mapping.upstreamTag}: invalid rewrites.${section} rule`);continue}rule.from===rule.to&&findings.push(`${mapping.upstreamTag}: identity rewrites.${section} rule`),seen.has(rule.from)&&findings.push(`${mapping.upstreamTag}: duplicate rewrites.${section} source ${rule.from}`),seen.add(rule.from)}}const seenDefaults=new Set;for(const rule of mapping.rewrites.defaults??[]){const action=rule?.action,allowedKeys=action==="insert-if-absent"?new Set(["memberKind","member","action","value"]):action==="replace-value"?new Set(["memberKind","member","action","from","to"]):new Set,keys=rule&&typeof rule=="object"?Object.keys(rule):[];if(!((rule?.memberKind==="attribute"||rule?.memberKind==="property")&&typeof rule.member=="string"&&!!rule.member&&allowedKeys.size>0&&keys.every(key2=>allowedKeys.has(key2))&&(action==="insert-if-absent"?rule.memberKind==="attribute"&&Object.hasOwn(rule,"value")&&(rule.value===null||["string","boolean"].includes(typeof rule.value)||typeof rule.value=="number"&&Number.isFinite(rule.value)):Object.hasOwn(rule,"from")&&Object.hasOwn(rule,"to")&&rule.from!==rule.to&&[rule.from,rule.to].every(value=>value===null||["string","boolean"].includes(typeof value)||typeof value=="number"&&Number.isFinite(value))))){findings.push(`${mapping.upstreamTag}: invalid rewrites.defaults rule`);continue}const key=`${rule.memberKind}:${rule.member}:${action}`;seenDefaults.has(key)&&findings.push(`${mapping.upstreamTag}: duplicate rewrites.defaults rule ${key}`),seenDefaults.add(key)}}function validateDefaultRewriteSemantics(mapping,{upstream,target}={}){const findings=[];for(const rule of mapping.rewrites?.defaults??[]){if(rule?.action!=="insert-if-absent")continue;const section=rule.memberKind==="attribute"?"attributes":"properties",sourceMember=(upstream?.[section]??[]).find(entry=>entry.name===rule.member),targetMember=(target?.[section]??[]).find(entry=>entry.name===rule.member);sourceMember?(!sourceMember.hasDefault||sourceMember.default!==rule.value)&&findings.push(`${mapping.upstreamTag}: stale upstream default rewrite ${rule.memberKind}:${rule.member}`):findings.push(`${mapping.upstreamTag}: dangling upstream default rewrite ${rule.memberKind}:${rule.member}`),targetMember?targetMember.hasDefault&&targetMember.default===rule.value&&findings.push(`${mapping.upstreamTag}: stale target default rewrite ${rule.memberKind}:${rule.member}`):findings.push(`${mapping.upstreamTag}: dangling target default rewrite ${rule.memberKind}:${rule.member}`)}return findings}function isReviewedScalar(value){return value===null||typeof value=="string"||typeof value=="boolean"||typeof value=="number"&&Number.isFinite(value)}function validateMappingNormalizations(mapping,{upstream,target}={}){const findings=[],normalizations=mapping.normalizations;if(normalizations===void 0)return findings;if(!normalizations||typeof normalizations!="object"||Array.isArray(normalizations))return[`${mapping.upstreamTag}: normalizations must be an object`];for(const section of NORMALIZATION_SECTIONS)Array.isArray(normalizations[section])||findings.push(`${mapping.upstreamTag}: normalizations.${section} must be an array`);for(const section of Object.keys(normalizations))NORMALIZATION_SECTIONS.includes(section)||findings.push(`${mapping.upstreamTag}: unknown normalization section ${section}`);const attributeRewrites=new Map((mapping.rewrites?.attributes??[]).map(entry=>[entry.from,entry.to])),propertyRewrites=new Map((mapping.rewrites?.properties??[]).map(entry=>[entry.from,entry.to])),seenAttributeProperties=new Set;for(const rule of normalizations.attributePropertyEquivalences??[]){if(!(typeof rule?.attribute=="string"&&!!rule.attribute&&typeof rule.upstream=="string"&&!!rule.upstream&&typeof rule.target=="string"&&!!rule.target&&Object.keys(rule).length===3)){findings.push(`${mapping.upstreamTag}: invalid normalizations.attributePropertyEquivalences rule`);continue}seenAttributeProperties.has(rule.attribute)&&findings.push(`${mapping.upstreamTag}: duplicate attribute-property normalization ${rule.attribute}`),seenAttributeProperties.add(rule.attribute);const source=(upstream?.attributes??[]).find(entry=>entry.name===rule.attribute),targetName=attributeRewrites.get(rule.attribute)||rule.attribute,candidate=(target?.attributes??[]).find(entry=>entry.name===targetName);source?source.property!==rule.upstream&&findings.push(`${mapping.upstreamTag}: stale upstream attribute-property normalization ${rule.attribute}`):findings.push(`${mapping.upstreamTag}: dangling upstream attribute-property normalization ${rule.attribute}`),candidate?candidate.property!==rule.target?findings.push(`${mapping.upstreamTag}: stale target attribute-property normalization ${rule.attribute}`):(propertyRewrites.get(rule.upstream)||rule.upstream)===rule.target&&findings.push(`${mapping.upstreamTag}: stale equivalent attribute-property normalization ${rule.attribute}`):findings.push(`${mapping.upstreamTag}: dangling target attribute-property normalization ${rule.attribute}`)}const seenReflections=new Set;for(const rule of normalizations.reflectionEquivalences??[]){if(!(["attribute","property"].includes(rule?.memberKind)&&typeof rule.member=="string"&&!!rule.member&&typeof rule.upstream=="boolean"&&typeof rule.target=="boolean"&&rule.upstream!==rule.target&&Object.keys(rule).length===4)){findings.push(`${mapping.upstreamTag}: invalid normalizations.reflectionEquivalences rule`);continue}const key=`${rule.memberKind}:${rule.member}`;seenReflections.has(key)&&findings.push(`${mapping.upstreamTag}: duplicate reflection normalization ${key}`),seenReflections.add(key);const section=rule.memberKind==="attribute"?"attributes":"properties",rewrites=rule.memberKind==="attribute"?attributeRewrites:propertyRewrites,source=(upstream?.[section]??[]).find(entry=>entry.name===rule.member),candidate=(target?.[section]??[]).find(entry=>entry.name===(rewrites.get(rule.member)||rule.member));source?source.reflects!==rule.upstream&&findings.push(`${mapping.upstreamTag}: stale upstream reflection normalization ${key}`):findings.push(`${mapping.upstreamTag}: dangling upstream reflection normalization ${key}`),candidate?candidate.reflects!==rule.target&&findings.push(`${mapping.upstreamTag}: stale target reflection normalization ${key}`):findings.push(`${mapping.upstreamTag}: dangling target reflection normalization ${key}`)}const seenCssDefaults=new Set;for(const rule of normalizations.cssDefaultEquivalences??[]){const expectedKeys=new Set(["member","upstreamHasDefault","targetHasDefault"]);rule?.upstreamHasDefault===!0&&expectedKeys.add("upstream"),rule?.targetHasDefault===!0&&expectedKeys.add("target");const keys=rule&&typeof rule=="object"?Object.keys(rule):[];if(!(typeof rule?.member=="string"&&!!rule.member&&typeof rule.upstreamHasDefault=="boolean"&&typeof rule.targetHasDefault=="boolean"&&(rule.upstreamHasDefault!==!0||isReviewedScalar(rule.upstream))&&(rule.targetHasDefault!==!0||isReviewedScalar(rule.target))&&keys.length===expectedKeys.size&&keys.every(key=>expectedKeys.has(key))&&(rule.upstreamHasDefault!==rule.targetHasDefault||rule.upstreamHasDefault&&rule.upstream!==rule.target))){findings.push(`${mapping.upstreamTag}: invalid normalizations.cssDefaultEquivalences rule`);continue}seenCssDefaults.has(rule.member)&&findings.push(`${mapping.upstreamTag}: duplicate CSS-default normalization ${rule.member}`),seenCssDefaults.add(rule.member);const source=(upstream?.cssProperties??[]).find(entry=>entry.name===rule.member),targetName=new Map((mapping.rewrites?.cssProperties??[]).map(entry=>[entry.from,entry.to])).get(rule.member)||rule.member,candidate=(target?.cssProperties??[]).find(entry=>entry.name===targetName);source?(source.hasDefault!==rule.upstreamHasDefault||rule.upstreamHasDefault&&source.default!==rule.upstream)&&findings.push(`${mapping.upstreamTag}: stale upstream CSS-default normalization ${rule.member}`):findings.push(`${mapping.upstreamTag}: dangling upstream CSS-default normalization ${rule.member}`),candidate?(candidate.hasDefault!==rule.targetHasDefault||rule.targetHasDefault&&candidate.default!==rule.target)&&findings.push(`${mapping.upstreamTag}: stale target CSS-default normalization ${rule.member}`):findings.push(`${mapping.upstreamTag}: dangling target CSS-default normalization ${rule.member}`)}const seenDeprecations=new Set;for(const rule of normalizations.deprecationEquivalences??[]){if(!(["attributes","properties","slots","events","parts","cssProperties","cssStates","methods","staticProperties","staticMethods","moduleExports"].includes(rule?.section)&&typeof rule.member=="string"&&!!rule.member&&typeof rule.upstreamDeprecated=="boolean"&&(rule.upstreamReplacement===null||typeof rule.upstreamReplacement=="string")&&typeof rule.targetDeprecated=="boolean"&&(rule.targetReplacement===null||typeof rule.targetReplacement=="string")&&Object.keys(rule).length===6)){findings.push(`${mapping.upstreamTag}: invalid normalizations.deprecationEquivalences rule`);continue}const key=`${rule.section}:${rule.member}`;seenDeprecations.has(key)&&findings.push(`${mapping.upstreamTag}: duplicate deprecation normalization ${key}`),seenDeprecations.add(key);const sectionRewrites=new Map((mapping.rewrites?.[rule.section]??[]).map(entry=>[entry.from,entry.to])),targetName=sectionRewrites.get(rule.member)||rule.member,source=(upstream?.[rule.section]??[]).find(entry=>entry.name===rule.member),candidate=(target?.[rule.section]??[]).find(entry=>entry.name===targetName);if(!source){findings.push(`${mapping.upstreamTag}: dangling upstream deprecation normalization ${key}`);continue}if(!candidate){findings.push(`${mapping.upstreamTag}: dangling target deprecation normalization ${key}`);continue}const sourceDeprecated=!!source.deprecated,sourceReplacement=deprecationReplacement(source.deprecated),targetDeprecated=!!candidate.deprecated,targetReplacement=deprecationReplacement(candidate.deprecated);(sourceDeprecated!==rule.upstreamDeprecated||sourceReplacement!==rule.upstreamReplacement)&&findings.push(`${mapping.upstreamTag}: stale upstream deprecation normalization ${key}`),(targetDeprecated!==rule.targetDeprecated||targetReplacement!==rule.targetReplacement)&&findings.push(`${mapping.upstreamTag}: stale target deprecation normalization ${key}`);const expectedReplacement=rewriteDeprecationReplacement(sourceReplacement,sectionRewrites);sourceDeprecated===targetDeprecated&&expectedReplacement===targetReplacement&&findings.push(`${mapping.upstreamTag}: stale equivalent deprecation normalization ${key}`)}const seenStructuralAliases=new Set,structuralAliasRules=new Map;for(const rule of normalizations.structuralTypeAliases??[]){const keys=rule&&typeof rule=="object"?Object.keys(rule):[];if(!(typeof rule?.name=="string"&&/^[A-Za-z_$][A-Za-z0-9_$]*$/u.test(rule.name)&&typeof rule.target=="string"&&!!rule.target.trim()&&!containsAnyTypeKeyword(rule.target)&&!containsUnknownTypeKeyword(rule.target)&&!containsTemplateInterpolation(rule.target)&&keys.length===2&&keys.every(key=>key==="name"||key==="target"))){findings.push(`${mapping.upstreamTag}: invalid normalizations.structuralTypeAliases rule`);continue}seenStructuralAliases.has(rule.name)&&findings.push(`${mapping.upstreamTag}: duplicate structural type alias ${rule.name}`),seenStructuralAliases.add(rule.name),structuralAliasRules.set(rule.name,rule.target)}const reachableStructuralAliases=new Set,visitStructuralAlias=(name,trail=new Set)=>{if(trail.has(name)){findings.push(`${mapping.upstreamTag}: cyclic structural type alias ${name}`);return}if(reachableStructuralAliases.has(name))return;const targetType=structuralAliasRules.get(name);if(targetType===void 0)return;reachableStructuralAliases.add(name);const nextTrail=new Set([...trail,name]);for(const candidate of structuralAliasRules.keys())typeContainsIdentifier(targetType,candidate)&&visitStructuralAlias(candidate,nextTrail)};for(const event of target?.events??[])for(const name of structuralAliasRules.keys())typeContainsIdentifier(event.type,name)&&visitStructuralAlias(name);for(const name of structuralAliasRules.keys())reachableStructuralAliases.has(name)||findings.push(`${mapping.upstreamTag}: stale structural type alias ${name}`);const seenTypes=new Set;for(const rule of normalizations.typeEquivalences??[]){const keys=rule&&typeof rule=="object"?Object.keys(rule):[];if(!((rule?.memberKind==="attribute"||rule?.memberKind==="property"||rule?.memberKind==="event"||rule?.memberKind==="staticProperty"||rule?.memberKind==="moduleExport")&&typeof rule.member=="string"&&!!rule.member&&typeof rule.upstream=="string"&&!!rule.upstream&&typeof rule.target=="string"&&!!rule.target&&rule.upstream!==rule.target&&keys.length===4&&keys.every(key2=>["memberKind","member","upstream","target"].includes(key2)))){findings.push(`${mapping.upstreamTag}: invalid normalizations.typeEquivalences rule`);continue}const key=normalizationKey(rule.memberKind,rule.member);(containsAnyTypeKeyword(rule.upstream)||containsAnyTypeKeyword(rule.target)||rule.memberKind==="event"&&isBareCustomEventType(rule.target))&&findings.push(`${mapping.upstreamTag}: unsafe any type normalization ${key}`),rule.memberKind==="event"&&(isUnknownEventType(rule.upstream)||isUnknownEventType(rule.target))&&findings.push(`${mapping.upstreamTag}: unsafe unknown event type normalization ${key}`),seenTypes.has(key)&&findings.push(`${mapping.upstreamTag}: duplicate normalizations.typeEquivalences rule ${key}`),seenTypes.add(key);const section=rule.memberKind==="attribute"?"attributes":rule.memberKind==="property"?"properties":rule.memberKind==="event"?"events":rule.memberKind==="staticProperty"?"staticProperties":"moduleExports",rewrites=new Map((mapping.rewrites?.[section]??[]).map(entry=>[entry.from,entry.to])),upstreamPrefix=mapping.upstreamTag?.startsWith("wa-")?"wa-":"sl-",targetName=rewrites.get(rule.member)||(rule.memberKind==="event"?mappedEventName(rule.member,upstreamPrefix):rule.member),upstreamMember=(upstream?.[section]??[]).find(entry=>entry.name===rule.member),targetMember=(target?.[section]??[]).find(entry=>entry.name===targetName);rule.memberKind==="property"&&(upstream?.attributes??[]).some(attribute=>attribute.property===rule.member)&&findings.push(`${mapping.upstreamTag}: unreachable property type normalization ${key}`),upstreamMember?(!hasPublishedType(upstreamMember.type)||upstreamMember.type!==rule.upstream)&&findings.push(`${mapping.upstreamTag}: stale upstream type normalization ${key}`):findings.push(`${mapping.upstreamTag}: dangling upstream type normalization ${key}`),targetMember?targetMember.type!==rule.target?findings.push(`${mapping.upstreamTag}: stale target type normalization ${key}`):upstreamMember&&hasPublishedType(upstreamMember.type)&&(rule.memberKind==="event"?eventTypeCompatible(mappedPublicType(upstreamMember.type,upstreamPrefix),targetMember.type,normalizations):publicTypeCompatible(mappedPublicType(upstreamMember.type,upstreamPrefix),targetMember.type))&&findings.push(`${mapping.upstreamTag}: stale compatible type normalization ${key}`):findings.push(`${mapping.upstreamTag}: dangling target type normalization ${key}`)}const methodRewrites=new Map((mapping.rewrites?.methods??[]).map(entry=>[entry.from,entry.to])),seenMethodParameters=new Set;for(const rule of normalizations.methodParameterTypeEquivalences??[]){const keys=rule&&typeof rule=="object"?Object.keys(rule):[];if(!(typeof rule?.method=="string"&&!!rule.method.trim()&&typeof rule.parameter=="string"&&!!rule.parameter.trim()&&typeof rule.upstream=="string"&&!!rule.upstream.trim()&&rule.upstream!==UNSPECIFIED_PUBLIC_DOCUMENTATION&&typeof rule.target=="string"&&!!rule.target.trim()&&rule.target!==UNSPECIFIED_PUBLIC_DOCUMENTATION&&rule.upstream!==rule.target&&keys.length===4&&keys.every(key2=>["method","parameter","upstream","target"].includes(key2)))){findings.push(`${mapping.upstreamTag}: invalid normalizations.methodParameterTypeEquivalences rule`);continue}const key=`${rule.method}:${rule.parameter}`;seenMethodParameters.has(key)&&findings.push(`${mapping.upstreamTag}: duplicate normalizations.methodParameterTypeEquivalences rule ${key}`),seenMethodParameters.add(key),(containsAnyTypeKeyword(rule.upstream)||containsAnyTypeKeyword(rule.target))&&findings.push(`${mapping.upstreamTag}: unsafe any method-parameter type normalization ${key}`),(containsUnknownTypeKeyword(rule.upstream)||containsUnknownTypeKeyword(rule.target))&&findings.push(`${mapping.upstreamTag}: unsafe unknown method-parameter type normalization ${key}`),(containsTemplateInterpolation(rule.upstream)||containsTemplateInterpolation(rule.target))&&findings.push(`${mapping.upstreamTag}: unsafe template interpolation method-parameter type normalization ${key}`);const upstreamMethod=(upstream?.methods??[]).find(entry=>entry.name===rule.method),targetMethodName=methodRewrites.get(rule.method)||rule.method,targetMethod=(target?.methods??[]).find(entry=>entry.name===targetMethodName),upstreamParameters=(upstreamMethod?.overloads??[]).flatMap(overload=>overload.parameters??[]),targetParameters=(targetMethod?.overloads??[]).flatMap(overload=>overload.parameters??[]),upstreamParameter=upstreamParameters.find(entry=>entry.name===rule.parameter),targetParameter=targetParameters.find(entry=>entry.name===rule.parameter);upstreamMethod?upstreamParameter?upstreamParameter.type!==rule.upstream&&findings.push(`${mapping.upstreamTag}: stale upstream method-parameter type normalization ${key}`):findings.push(`${mapping.upstreamTag}: dangling upstream method parameter normalization ${key}`):findings.push(`${mapping.upstreamTag}: dangling upstream method-parameter type normalization ${key}`),targetMethod?targetParameter?targetParameter.type!==rule.target?findings.push(`${mapping.upstreamTag}: stale target method-parameter type normalization ${key}`):mappedPublicType(rule.upstream,mapping.upstreamTag?.startsWith("wa-")?"wa-":"sl-")===targetParameter.type&&findings.push(`${mapping.upstreamTag}: stale compatible method-parameter type normalization ${key}`):findings.push(`${mapping.upstreamTag}: dangling target method parameter normalization ${key}`):findings.push(`${mapping.upstreamTag}: dangling target method-parameter type normalization ${key}`)}const seenDefaults=new Set;for(const rule of normalizations.defaultEquivalences??[]){const keys=rule&&typeof rule=="object"?Object.keys(rule):[];if(!((rule?.memberKind==="attribute"||rule?.memberKind==="property")&&typeof rule.member=="string"&&!!rule.member&&Object.hasOwn(rule,"upstream")&&Object.hasOwn(rule,"target")&&isReviewedScalar(rule.upstream)&&isReviewedScalar(rule.target)&&rule.upstream!==rule.target&&keys.length===4&&keys.every(key2=>["memberKind","member","upstream","target"].includes(key2)))){findings.push(`${mapping.upstreamTag}: invalid normalizations.defaultEquivalences rule`);continue}const key=normalizationKey(rule.memberKind,rule.member);seenDefaults.has(key)&&findings.push(`${mapping.upstreamTag}: duplicate normalizations.defaultEquivalences rule ${key}`),seenDefaults.add(key);const section=rule.memberKind==="attribute"?"attributes":"properties",upstreamMember=(upstream?.[section]??[]).find(entry=>entry.name===rule.member),targetMember=(target?.[section]??[]).find(entry=>entry.name===rule.member);upstreamMember?(!upstreamMember.hasDefault||upstreamMember.default!==rule.upstream)&&findings.push(`${mapping.upstreamTag}: stale upstream default normalization ${key}`):findings.push(`${mapping.upstreamTag}: dangling upstream normalization member ${key}`),targetMember?(!targetMember.hasDefault||targetMember.default!==rule.target)&&findings.push(`${mapping.upstreamTag}: stale target default normalization ${key}`):findings.push(`${mapping.upstreamTag}: dangling target normalization member ${key}`)}const seenAttributes=new Set,seenProperties=new Set;for(const rule of normalizations.inferredAttributeSuppressions??[]){const keys=rule&&typeof rule=="object"?Object.keys(rule):[];if(!(typeof rule?.attribute=="string"&&!!rule.attribute&&typeof rule.property=="string"&&!!rule.property&&(rule.explicit===void 0||rule.explicit===!0)&&keys.every(key=>key==="attribute"||key==="property"||key==="explicit"))){findings.push(`${mapping.upstreamTag}: invalid normalizations.inferredAttributeSuppressions rule`);continue}(seenAttributes.has(rule.attribute)||seenProperties.has(rule.property))&&findings.push(`${mapping.upstreamTag}: duplicate normalizations.inferredAttributeSuppressions rule ${rule.attribute}:${rule.property}`),seenAttributes.add(rule.attribute),seenProperties.add(rule.property);const upstreamAttribute=(upstream?.attributes??[]).find(entry=>entry.name===rule.attribute),upstreamProperty=(upstream?.properties??[]).find(entry=>entry.name===rule.property),targetAttribute=(target?.attributes??[]).find(entry=>entry.name===rule.attribute),targetProperty=(target?.properties??[]).find(entry=>entry.name===rule.property);upstreamAttribute?(upstreamAttribute.inferred!==!0&&rule.explicit!==!0&&findings.push(`${mapping.upstreamTag}: cannot suppress explicit upstream attribute ${rule.attribute}`),upstreamAttribute.inferred===!0&&rule.explicit===!0&&findings.push(`${mapping.upstreamTag}: stale explicit attribute suppression ${rule.attribute}`),upstreamAttribute.property!==rule.property&&findings.push(`${mapping.upstreamTag}: stale inferred attribute property ${rule.attribute}:${rule.property}`)):findings.push(`${mapping.upstreamTag}: dangling inferred upstream attribute ${rule.attribute}`),upstreamProperty||findings.push(`${mapping.upstreamTag}: dangling inferred upstream property ${rule.property}`),targetProperty||findings.push(`${mapping.upstreamTag}: dangling inferred target property ${rule.property}`),targetAttribute&&findings.push(`${mapping.upstreamTag}: stale inferred attribute suppression ${rule.attribute}`)}const seenDerivedDefaults=new Set;for(const rule of normalizations.derivedDefaultEquivalences??[]){const keys=rule&&typeof rule=="object"?Object.keys(rule):[];if(!((rule?.memberKind==="attribute"||rule?.memberKind==="property")&&typeof rule.member=="string"&&!!rule.member&&Object.hasOwn(rule,"upstream")&&Object.hasOwn(rule,"target")&&isReviewedScalar(rule.upstream)&&isReviewedScalar(rule.target)&&keys.length===4&&keys.every(key2=>["memberKind","member","upstream","target"].includes(key2)))){findings.push(`${mapping.upstreamTag}: invalid normalizations.derivedDefaultEquivalences rule`);continue}const key=normalizationKey(rule.memberKind,rule.member);seenDerivedDefaults.has(key)&&findings.push(`${mapping.upstreamTag}: duplicate normalizations.derivedDefaultEquivalences rule ${key}`),seenDerivedDefaults.add(key);const section=rule.memberKind==="attribute"?"attributes":"properties",upstreamMember=(upstream?.[section]??[]).find(entry=>entry.name===rule.member),targetMember=(target?.[section]??[]).find(entry=>entry.name===rule.member);upstreamMember?(!upstreamMember.hasDefault||upstreamMember.default!==rule.upstream)&&findings.push(`${mapping.upstreamTag}: stale derived upstream default ${key}`):findings.push(`${mapping.upstreamTag}: dangling derived-default upstream member ${key}`),targetMember?targetMember.hasDefault&&findings.push(`${mapping.upstreamTag}: stale derived target default ${key}`):findings.push(`${mapping.upstreamTag}: dangling derived-default target member ${key}`)}const seenMethods=new Set;for(const rule of normalizations.unknownMethodReturnTypes??[]){const keys=rule&&typeof rule=="object"?Object.keys(rule):[];if(!(typeof rule?.method=="string"&&!!rule.method&&keys.length===1&&keys[0]==="method")){findings.push(`${mapping.upstreamTag}: invalid normalizations.unknownMethodReturnTypes rule`);continue}seenMethods.has(rule.method)&&findings.push(`${mapping.upstreamTag}: duplicate normalizations.unknownMethodReturnTypes rule ${rule.method}`),seenMethods.add(rule.method);const upstreamMethod=(upstream?.methods??[]).find(entry=>entry.name===rule.method),targetMethod=(target?.methods??[]).find(entry=>entry.name===rule.method);upstreamMethod?(upstreamMethod.overloads??[]).some(overload=>overload.returnType==="unknown"||overload.returnType===UNSPECIFIED_PUBLIC_DOCUMENTATION)||findings.push(`${mapping.upstreamTag}: stale unknown-return normalization ${rule.method}`):findings.push(`${mapping.upstreamTag}: dangling unknown-return upstream method ${rule.method}`),targetMethod?(targetMethod.overloads??[]).every(overload=>overload.returnType==="unknown"||overload.returnType===UNSPECIFIED_PUBLIC_DOCUMENTATION)&&findings.push(`${mapping.upstreamTag}: stale concrete target return normalization ${rule.method}`):findings.push(`${mapping.upstreamTag}: dangling unknown-return target method ${rule.method}`)}const seenCancelabilities=new Set,cancelabilityPrefix=mapping.upstreamTag?.startsWith("sl-")?"sl-":"wa-",cancelabilityEventRewrites=new Map((mapping.rewrites?.events??[]).map(entry=>[entry.from,entry.to]));for(const[section,allowedKeys]of[["cancelabilityEquivalences",["event","upstream","target"]],["cancelabilityPathAdditions",["event","upstream","target","addedPath"]]])for(const rule of normalizations[section]??[]){const keys=rule&&typeof rule=="object"?Object.keys(rule):[];if(!(typeof rule?.event=="string"&&!!rule.event&&CANCELABILITY_RANK.has(rule.upstream)&&CANCELABILITY_RANK.has(rule.target)&&keys.length===allowedKeys.length&&keys.every(key=>allowedKeys.includes(key))&&(section==="cancelabilityEquivalences"?CANCELABILITY_RANK.get(rule.target)>CANCELABILITY_RANK.get(rule.upstream):rule.upstream==="always"&&rule.target==="conditional"&&typeof rule.addedPath=="string"&&!!rule.addedPath))){findings.push(`${mapping.upstreamTag}: invalid normalizations.${section} rule`);continue}seenCancelabilities.has(rule.event)&&findings.push(`${mapping.upstreamTag}: duplicate cancelability normalization ${rule.event}`),seenCancelabilities.add(rule.event);const upstreamEvent=(upstream?.events??[]).find(entry=>entry.name===rule.event),targetName=cancelabilityEventRewrites.get(rule.event)||mappedEventName(rule.event,cancelabilityPrefix),targetEvent=(target?.events??[]).find(entry=>entry.name===targetName);upstreamEvent?upstreamEvent.cancelable!==rule.upstream&&findings.push(`${mapping.upstreamTag}: stale upstream cancelability normalization ${rule.event}`):findings.push(`${mapping.upstreamTag}: dangling upstream cancelability normalization ${rule.event}`),targetEvent?targetEvent.cancelable!==rule.target&&findings.push(`${mapping.upstreamTag}: stale target cancelability normalization ${rule.event}`):findings.push(`${mapping.upstreamTag}: dangling target cancelability normalization ${rule.event}`)}return findings.sort()}function manifestDeclarations(manifest){return(manifest.modules??[]).flatMap(module=>(module.declarations??[]).filter(declaration=>declaration.customElement&&declaration.tagName).map(declaration=>({module,declaration}))).sort((a,b)=>a.declaration.tagName.localeCompare(b.declaration.tagName))}function sameJson(left,right){return JSON.stringify(left)===JSON.stringify(right)}function validateLocalMigrations(inventory){const findings=[];if(!Array.isArray(inventory?.localMigrations))return["localMigrations must be an array"];const allowedOrigins=new Set(LOCAL_MIGRATION_ORIGINS),components=new Map((inventory.components??[]).map(component=>[component.tag,component])),seenProfiles=new Set;for(const profile of inventory.localMigrations){if(!profile||typeof profile!="object"||Array.isArray(profile)){findings.push("localMigrations entries must be objects");continue}const unknownProfileKeys=Object.keys(profile).filter(key2=>key2!=="origin"&&key2!=="tag"&&key2!=="defaults");unknownProfileKeys.length&&findings.push(`local migration has unknown key(s) ${unknownProfileKeys.join(", ")}`),allowedOrigins.has(profile.origin)||findings.push(`local migration has unknown origin ${String(profile.origin)}`),(typeof profile.tag!="string"||!profile.tag.startsWith("lr-"))&&findings.push(`local migration needs a valid lr-* tag, got ${String(profile.tag)}`);const key=`${String(profile.origin)}:${String(profile.tag)}`;seenProfiles.has(key)&&findings.push(`duplicate local migration ${key}`),seenProfiles.add(key);const component=components.get(profile.tag);if(component||findings.push(`${key}: target tag is not registered`),!Array.isArray(profile.defaults)||profile.defaults.length===0){findings.push(`${key}: defaults must be a non-empty array`);continue}const attributes=new Map((component?.surface?.attributes??[]).map(attribute=>[attribute.name,attribute])),seenDefaults=new Set;for(const rule of profile.defaults){if(!rule||typeof rule!="object"||Array.isArray(rule)){findings.push(`${key}: default rules must be objects`);continue}const unknownRuleKeys=Object.keys(rule).filter(name=>!["memberKind","member","action","value"].includes(name));if(unknownRuleKeys.length&&findings.push(`${key}: default rule has unknown key(s) ${unknownRuleKeys.join(", ")}`),rule.memberKind!=="attribute"&&findings.push(`${key}: local defaults support only attribute members`),rule.action!=="insert-if-absent"&&findings.push(`${key}: local defaults support only insert-if-absent`),typeof rule.member!="string"||!rule.member){findings.push(`${key}: default rule needs a member`);continue}seenDefaults.has(rule.member)&&findings.push(`${key}: duplicate default member ${rule.member}`),seenDefaults.add(rule.member);const attribute=attributes.get(rule.member);attribute||findings.push(`${key}: unknown target attribute ${rule.member}`),Object.hasOwn(rule,"value")?typeof rule.value!="string"&&typeof rule.value!="boolean"&&!(typeof rule.value=="number"&&Number.isFinite(rule.value))?findings.push(`${key}: ${rule.member} value must be a finite string, number, or boolean`):rule.value===!1?findings.push(`${key}: false boolean insertion requires explicit converter evidence`):rule.value===!0&&!String(attribute?.type).includes("boolean")&&findings.push(`${key}: true presence insertion requires a boolean target attribute ${rule.member}`):findings.push(`${key}: ${rule.member} needs a value`)}}return findings}function validateInventory(inventory,{upstreamTags,lyraManifest,strict=!1}={}){const findings=[];if(inventory.schemaVersion!==INVENTORY_SCHEMA_VERSION&&findings.push(`schemaVersion must be ${INVENTORY_SCHEMA_VERSION}`),Array.isArray(inventory.components)||findings.push("components must be an array"),Array.isArray(inventory.mappings)||findings.push("mappings must be an array"),findings.length)return findings;const lyraByTag=new Map(inventory.components.map(component=>[component.tag,component]));validateAccessibilityProfiles(inventory.accessibilityProfiles,findings),findings.push(...validateLocalMigrations(inventory)),lyraByTag.size!==inventory.components.length&&findings.push("components contain duplicate Lyra tags");const expectedLyra=manifestDeclarations(lyraManifest),normalizedLyraByTag=new Map(normalizeManifest(lyraManifest,{ecosystem:"lyra"}).map(component=>[component.tag,component])),expectedLyraTags=expectedLyra.map(({declaration})=>declaration.tagName),actualLyraTags=[...lyraByTag.keys()].sort();sameJson(actualLyraTags,expectedLyraTags)||findings.push("Lyra tag inventory drifted from custom-elements.json");for(const{declaration}of expectedLyra){const component=lyraByTag.get(declaration.tagName);if(!component)continue;validateSurface(component.surface,component.tag,findings);const expectedSurface=normalizedLyraByTag.get(declaration.tagName)?.surface;sameJson(component.surface,expectedSurface)||findings.push(`${component.tag}: normalized public surface drifted`),(!component.family||!component.classModule||!component.registrationModule)&&findings.push(`${component.tag}: incomplete registration metadata`),(!Array.isArray(component.optionalPeers)||!Array.isArray(component.counterparts))&&findings.push(`${component.tag}: peers/counterparts must be arrays`),component.maturity?.status||findings.push(`${component.tag}: missing maturity classification`),strict&&component.maturity.status==="unclassified"&&findings.push(`${component.tag}: maturity remains unclassified`)}const catalogs={webawesome:[...upstreamTags.webawesome.free,...upstreamTags.webawesome.pro].sort(),shoelace:[...upstreamTags.shoelace.tags].sort()},upstreamByTag=new Map;for(const ecosystem of["webawesome","shoelace"]){const upstream=inventory.upstreams?.[ecosystem];if(!upstream){findings.push(`missing ${ecosystem} inventory`);continue}const expectedPin=upstreamTags[ecosystem];(upstream.version!==expectedPin.version||upstream.commit!==expectedPin.commit)&&findings.push(`${ecosystem}: pin drifted from upstream-tags.json`);const tags=(upstream.components??[]).map(component=>component.tag).sort();sameJson(tags,catalogs[ecosystem])||findings.push(`${ecosystem}: tag catalog drifted from upstream-tags.json`);for(const component of upstream.components??[])upstreamByTag.has(component.tag)&&findings.push(`${component.tag}: duplicate upstream tag`),upstreamByTag.set(component.tag,{ecosystem,component}),validateSurface(component.surface,component.tag,findings),(!component.review?.status||!Array.isArray(component.review.unreviewedSections))&&findings.push(`${component.tag}: missing surface review metadata`),strict&&component.review.status!=="complete"&&findings.push(`${component.tag}: public surface review is incomplete`);const expectedRuntimeEvidence=new Set;for(const observation of expectedPin.runtimeEventCancelability?.events??[]){const key=`${observation.tag}#${observation.event}`;if(expectedRuntimeEvidence.has(key)){findings.push(`${ecosystem}: duplicate runtime cancelability evidence ${key}`);continue}expectedRuntimeEvidence.add(key);const event=(upstream.components??[]).find(entry=>entry.tag===observation.tag)?.surface?.events?.find(entry=>entry.name===observation.event);(event?.cancelable!==observation.cancelable||event?.cancelabilityEvidence!=="pinned-runtime")&&findings.push(`${key}: stored runtime cancelability evidence drifted from upstream-tags.json`)}for(const component of upstream.components??[])for(const event of component.surface?.events??[])event.cancelabilityEvidence&&!expectedRuntimeEvidence.has(`${component.tag}#${event.name}`)&&findings.push(`${component.tag}#${event.name}: stored runtime cancelability evidence is stale`);const expectedMethodEdgeEvidence=new Set;for(const observation of expectedPin.runtimeMethodEdgeSemantics?.methods??[]){const key=`${observation.tag}#${observation.method}`;if(expectedMethodEdgeEvidence.has(key)){findings.push(`${ecosystem}: duplicate runtime method-edge evidence ${key}`);continue}expectedMethodEdgeEvidence.add(key);const method=(upstream.components??[]).find(entry=>entry.tag===observation.tag)?.surface?.methods?.find(entry=>entry.name===observation.method);sameJson(method?.edgeSemantics,{evidence:"pinned-runtime",cases:observation.cases})||findings.push(`${key}: stored runtime method-edge evidence drifted from upstream-tags.json`)}for(const component of upstream.components??[])for(const method of component.surface?.methods??[])method.edgeSemantics&&!expectedMethodEdgeEvidence.has(`${component.tag}#${method.name}`)&&findings.push(`${component.tag}#${method.name}: stored runtime method-edge evidence is stale`)}const mappingByTag=new Map;for(const mapping of inventory.mappings){mappingByTag.has(mapping.upstreamTag)&&findings.push(`${mapping.upstreamTag}: duplicate mapping`),mappingByTag.set(mapping.upstreamTag,mapping),upstreamByTag.has(mapping.upstreamTag)||findings.push(`${mapping.upstreamTag}: fictional upstream mapping`),MAPPING_CLASSIFICATIONS.includes(mapping.classification)||findings.push(`${mapping.upstreamTag}: invalid mapping classification`),validateAccessibilityParity(mapping,inventory.accessibilityProfiles,findings),validateRewrites(mapping,findings),mapping.classification==="exact"&&mapping.rationale!==null&&findings.push(`${mapping.upstreamTag}: exact mappings must not carry a rationale`),mapping.classification==="exact"&&REWRITE_RULE_SECTIONS.some(section=>mapping.rewrites?.[section]?.length)&&findings.push(`${mapping.upstreamTag}: exact mappings cannot declare rewrite rules`),mapping.classification==="rewritten"&&!REWRITE_RULE_SECTIONS.some(section=>mapping.rewrites?.[section]?.length)&&findings.push(`${mapping.upstreamTag}: rewritten mappings need a deterministic rule`),mapping.classification!=="exact"&&!mapping.rationale?.trim()&&findings.push(`${mapping.upstreamTag}: non-exact mapping needs a rationale`),mapping.targetTag&&!lyraByTag.has(mapping.targetTag)&&mapping.classification!=="unsupported"&&findings.push(`${mapping.upstreamTag} -> ${mapping.targetTag}: dangling target`);for(const rewrite of mapping.rewrites?.attributes??[]){const from=polarity(rewrite.from),to=polarity(rewrite.to);from!==to&&(from===-1||to===-1)&&findings.push(`${mapping.upstreamTag}: ${rewrite.from} -> ${rewrite.to} inverts polarity`)}const upstreamEntry=upstreamByTag.get(mapping.upstreamTag)?.component,target=lyraByTag.get(mapping.targetTag);if(findings.push(...validateMethodEdgeParity(mapping,{upstream:upstreamEntry?.surface,target:target?.surface})),findings.push(...validateDefaultRewriteSemantics(mapping,{upstream:upstreamEntry?.surface,target:target?.surface})),findings.push(...validateMappingNormalizations(mapping,{upstream:upstreamEntry?.surface,target:target?.surface})),upstreamEntry?.review.status==="complete"&&target){const expectedDrift=compareMappedSurfaces(upstreamEntry.surface,target.surface,{upstreamPrefix:mapping.upstream==="webawesome"?"wa-":"sl-",rewrites:mapping.rewrites,normalizations:mapping.normalizations});sameJson(mapping.drift,expectedDrift)||findings.push(`${mapping.upstreamTag}: stored surface drift is stale`),mapping.classification==="exact"&&expectedDrift.length&&findings.push(`${mapping.upstreamTag}: exact mapping has ${expectedDrift.length} surface difference(s)`)}const expectedStaticApiReview=deriveStaticApiReviewStatus({upstreamReviewStatus:upstreamEntry?.review.status,targetPresent:!!target,comparisonPerformed:upstreamEntry?.review.status==="complete"&&!!target});mapping.parity?.staticApi!==expectedStaticApiReview&&findings.push(`${mapping.upstreamTag}: static API review status is stale; expected ${expectedStaticApiReview}`),strict&&mapping.classification==="unsupported"&&findings.push(`${mapping.upstreamTag}: unsupported release blocker remains`)}mappingByTag.size!==upstreamByTag.size&&findings.push("not every upstream tag has exactly one mapping decision");for(const tag of upstreamByTag.keys())mappingByTag.has(tag)||findings.push(`${tag}: no mapping decision`);return findings.sort()}function validatePinnedManifests(inventory,{webawesomeManifest,shoelaceManifest,upstreamTags}){const findings=[],manifests={webawesome:{manifest:webawesomeManifest,prefix:"wa-"},shoelace:{manifest:shoelaceManifest,prefix:"sl-"}};for(const[ecosystem,{manifest,prefix}]of Object.entries(manifests)){const checked=new Map(applyRuntimeMethodEdgeSemanticsEvidence(applyRuntimeEventCancelabilityEvidence(normalizeManifest(manifest,{ecosystem}),upstreamTags?.[ecosystem]?.runtimeEventCancelability,{ecosystem,version:upstreamTags?.[ecosystem]?.version??inventory.upstreams[ecosystem].version}),upstreamTags?.[ecosystem]?.runtimeMethodEdgeSemantics,{ecosystem,version:upstreamTags?.[ecosystem]?.version??inventory.upstreams[ecosystem].version}).filter(entry=>entry.tag.startsWith(prefix)).map(entry=>[entry.tag,entry])),stored=new Map(inventory.upstreams[ecosystem].components.map(entry=>[entry.tag,entry]));for(const[tag,entry]of checked){const snapshot=stored.get(tag);if(!snapshot){findings.push(`${tag}: pinned manifest tag is absent from the inventory`);continue}sameJson(snapshot.surface,entry.surface)||findings.push(`${tag}: pinned public surface drifted`),sameJson(snapshot.maturity,entry.maturity)||findings.push(`${tag}: pinned maturity metadata drifted`),snapshot.review.status!=="complete"&&findings.push(`${tag}: pinned manifest surface is marked unreviewed`)}for(const[tag,snapshot]of stored)snapshot.review.source==="published-manifest"&&!checked.has(tag)&&findings.push(`${tag}: stored published-manifest surface is fictional or stale`)}return findings.sort()}function emptySurface(){return{attributes:[],properties:[],slots:[],events:[],parts:[],cssProperties:[],cssStates:[],methods:[],staticProperties:[],staticMethods:[],moduleExports:[],form:{associated:!1,properties:[],methods:[]},native:{forwardedEvents:[],delegatedMethods:[]}}}function familyFromModule(modulePath){return modulePath.split(path.posix.sep)[2]||null}export{ACCESSIBILITY_PROFILE_SECTIONS,INVENTORY_SCHEMA_VERSION,LOCAL_MIGRATION_ORIGINS,LOCAL_MIGRATION_PROFILES,MIGRATION_ATTRIBUTE_EXCLUSIONS,NORMALIZATION_SECTIONS,REWRITE_RULE_SECTIONS,SURFACE_SECTIONS,applyRuntimeEventCancelabilityEvidence,applyRuntimeMethodEdgeSemanticsEvidence,compareAccessibilityProfiles,compareMappedSurfaces,deriveStaticApiReviewStatus,emptyNormalizations,emptyRewrites,emptySurface,eventCancelabilityFromDescription,familyFromModule,normalizeDeclaration,normalizeManifest,validateAccessibilityContract,validateInventory,validateLocalMigrations,validateMappingNormalizations,validateMethodEdgeParity,validatePinnedManifests};
|
|
1
|
+
import path from"node:path";const INVENTORY_SCHEMA_VERSION=1,SURFACE_SECTIONS=["attributes","properties","slots","events","parts","cssProperties","cssStates","methods","staticProperties","staticMethods","moduleExports","form","native"],MAPPING_CLASSIFICATIONS=["exact","rewritten","warning-required","conceptual-only","unsupported"],ACCESSIBILITY_PROFILE_SECTIONS=["semantics","naming","keyboard","focus","states","announcements","motion"],ACCESSIBILITY_BEHAVIOR_VOCABULARY=Object.freeze({semantics:Object.freeze(["alert","article","button","checkbox","combobox","composition-primitive","dialog","document","grid","group","iframe","img","link","list","listbox","menu","menuitem","navigation","option","presentation","progressbar","radio","radiogroup","region","separator","slider","spinbutton","status","switch","tab","table","tablist","tabpanel","text-content","textbox","tooltip","transparent-content","tree","treeitem","video"]),naming:Object.freeze(["alternative-text","author-label-required","content-derived","content-or-author-label","control-labels-localized","current-page","frame-title","heading-level","value-text","visible-or-author-label"]),keyboard:Object.freeze(["arrow-navigation","data-point-navigation","escape-dismiss","home-end-navigation","media-controls","native-activation","native-editing","page-navigation","range-adjustment","spatial-adjustment","tab-cycle","typeahead"]),focus:Object.freeze(["focus-follows-selection","focus-preserved","focus-return","focus-trap","focus-visible-on-reveal","frame-focus-gated","initial-focus","native-focus","roving-focus"]),states:Object.freeze(["busy","checked","current","disabled","expanded","invalid","modal","multiselectable","orientation","paused","pressed","readonly","required","selected","sort","value-range"]),announcements:Object.freeze(["autoplay-content-change","character-count","content-change","copy-result","live-alert","live-status","page-change","playback-state","progress-value","selection-change","validation-message"]),motion:Object.freeze(["respects-reduced-motion","stops-autoplay","suppresses-animation","user-pause-control"])}),ACCESSIBILITY_COMPARISON_STATUSES=["equivalent","target-additive","not-applicable","warning-required"],ACCESSIBILITY_EVIDENCE=Object.freeze({upstream:"pinned-public-contract",target:"lyra-authored-contract-and-automated-tests"}),REWRITE_RULE_SECTIONS=["attributes","properties","events","slots","parts","cssProperties","methods","defaults"],NORMALIZATION_SECTIONS=["typeEquivalences","structuralTypeAliases","methodParameterTypeEquivalences","defaultEquivalences","derivedDefaultEquivalences","inferredAttributeSuppressions","unknownMethodReturnTypes","cancelabilityEquivalences","cancelabilityPathAdditions","attributePropertyEquivalences","reflectionEquivalences","cssDefaultEquivalences","deprecationEquivalences"],CANCELABILITY_RANK=new Map([["never",0],["conditional",1],["always",2]]),LOCAL_MIGRATION_ORIGINS=[],LOCAL_MIGRATION_PROFILES=[],MIGRATION_ATTRIBUTE_EXCLUSIONS=Object.freeze({dir:"platform-global-passthrough",lang:"platform-global-passthrough",role:"platform-global-passthrough",tabindex:"platform-global-passthrough",title:"platform-global-passthrough","did-ssr":"upstream-hydration-marker"});function emptyRewrites(){return Object.fromEntries(REWRITE_RULE_SECTIONS.map(section=>[section,[]]))}function emptyNormalizations(){return Object.fromEntries(NORMALIZATION_SECTIONS.map(section=>[section,[]]))}function isPlainObject(value){return value!==null&&typeof value=="object"&&!Array.isArray(value)}function accessibilityBehaviorSet(profile){return new Set(ACCESSIBILITY_PROFILE_SECTIONS.flatMap(section=>(profile?.[section]??[]).map(behavior=>`${section}:${behavior}`)))}function compareAccessibilityProfiles(profiles,upstreamProfile,targetProfile){const upstream=profiles?.[upstreamProfile],target=profiles?.[targetProfile];if(!upstream)throw new Error(`unknown upstream accessibility profile ${String(upstreamProfile)}`);if(!target)throw new Error(`unknown target accessibility profile ${String(targetProfile)}`);const upstreamBehaviors=accessibilityBehaviorSet(upstream),targetBehaviors=accessibilityBehaviorSet(target),missing=[...upstreamBehaviors].filter(behavior=>!targetBehaviors.has(behavior)).sort(),additions=[...targetBehaviors].filter(behavior=>!upstreamBehaviors.has(behavior)).sort();return{status:upstreamBehaviors.size===0&&targetBehaviors.size===0?"not-applicable":missing.length>0?"warning-required":additions.length>0?"target-additive":"equivalent",missing,additions}}function deriveStaticApiReviewStatus({upstreamReviewStatus,targetPresent,comparisonPerformed}){return upstreamReviewStatus==="tag-only"?"tag-only":upstreamReviewStatus==="complete"&&targetPresent===!0&&comparisonPerformed===!0?"reviewed":"unreviewed"}function validateAccessibilityProfiles(profiles,findings){if(!isPlainObject(profiles)||Object.keys(profiles).length===0){findings.push("accessibilityProfiles must be a non-empty object");return}for(const[profileName,profile]of Object.entries(profiles)){if(/^[a-z0-9]+(?:-[a-z0-9]+)*$/u.test(profileName)||findings.push(`accessibility profile ${profileName}: invalid profile name`),!isPlainObject(profile)){findings.push(`accessibility profile ${profileName}: profile must be an object`);continue}const allowedKeys=new Set(["description",...ACCESSIBILITY_PROFILE_SECTIONS]),unknownKeys=Object.keys(profile).filter(key=>!allowedKeys.has(key));unknownKeys.length>0&&findings.push(`accessibility profile ${profileName}: unknown key(s) ${unknownKeys.join(", ")}`),(typeof profile.description!="string"||!profile.description.trim())&&findings.push(`accessibility profile ${profileName}: description must be non-empty`);for(const section of ACCESSIBILITY_PROFILE_SECTIONS){const behaviors=profile[section];if(!Array.isArray(behaviors)){findings.push(`accessibility profile ${profileName}: ${section} must be an array`);continue}new Set(behaviors).size!==behaviors.length&&findings.push(`accessibility profile ${profileName}: duplicate ${section} behavior`),JSON.stringify(behaviors)!==JSON.stringify([...behaviors].sort())&&findings.push(`accessibility profile ${profileName}: ${section} behaviors must be sorted`);const allowed=new Set(ACCESSIBILITY_BEHAVIOR_VOCABULARY[section]);for(const behavior of behaviors)allowed.has(behavior)||findings.push(`accessibility profile ${profileName}: unknown ${section} behavior ${String(behavior)}`)}}}function validateAccessibilityParity(mapping,profiles,findings){const accessibility=mapping.parity?.accessibility;if(!isPlainObject(accessibility)){findings.push(`${mapping.upstreamTag}: missing accessibility parity review`);return}const allowedKeys=new Set(["reviewStatus","upstreamProfile","targetProfile","evidence","comparison","rationale"]),unknownKeys=Object.keys(accessibility).filter(key=>!allowedKeys.has(key));unknownKeys.length>0&&findings.push(`${mapping.upstreamTag}: accessibility parity has unknown key(s) ${unknownKeys.join(", ")}`),accessibility.reviewStatus!=="complete"&&findings.push(`${mapping.upstreamTag}: accessibility parity review is incomplete`),(!isPlainObject(accessibility.evidence)||accessibility.evidence.upstream!==ACCESSIBILITY_EVIDENCE.upstream||accessibility.evidence.target!==ACCESSIBILITY_EVIDENCE.target||Object.keys(accessibility.evidence??{}).some(key=>key!=="upstream"&&key!=="target"))&&findings.push(`${mapping.upstreamTag}: accessibility parity evidence is invalid`),(typeof accessibility.rationale!="string"||!accessibility.rationale.trim())&&findings.push(`${mapping.upstreamTag}: accessibility parity rationale must be non-empty`);let expected;try{expected=compareAccessibilityProfiles(profiles,accessibility.upstreamProfile,accessibility.targetProfile)}catch(error){findings.push(`${mapping.upstreamTag}: ${error instanceof Error?error.message:String(error)}`);return}(!isPlainObject(accessibility.comparison)||!sameJson(accessibility.comparison,expected))&&findings.push(`${mapping.upstreamTag}: stored accessibility comparison is stale`);const hasScopedConditionalReview=mapping.parity?.lightDom==="warning-required"&&Array.isArray(mapping.parity?.behaviorReviewFlags)&&mapping.parity.behaviorReviewFlags.length>0;(mapping.classification==="exact"||mapping.classification==="rewritten")&&expected.status==="warning-required"&&!hasScopedConditionalReview&&findings.push(`${mapping.upstreamTag}: automatic mapping has missing accessibility behavior`)}function validateAccessibilityContract(profiles,mappings){const findings=[];if(validateAccessibilityProfiles(profiles,findings),!Array.isArray(mappings))findings.push("accessibility mappings must be an array");else for(const mapping of mappings)validateAccessibilityParity(mapping,profiles,findings);return findings.sort()}const INTERNAL_METHOD_NAMES=new Set(["constructor","render","update","performUpdate","requestUpdate","shouldUpdate","willUpdate","updated","firstUpdated","createRenderRoot","connectedCallback","disconnectedCallback","adoptedCallback","attributeChangedCallback","addEventListener","removeEventListener","emit","localize","scheduleAfterUpdate","beginAbortableLoad","setCustomStates","setValue","updateValidity"]),PUBLIC_METHOD_NAMES=new Set(["focus","blur","click","select","show","hide","open","close","openSubmenu","closeSubmenu","toggle","checkValidity","reportValidity","setCustomValidity","resetValidity","formStateRestoreCallback","getForm","setSelectionRange","setRangeText","showPicker","stepUp","stepDown","play","pause","load","clearSearch","getHeadingTree","renderChart","renderMarkdown","search","searchNext","searchPrevious","handleColumnsChange","handlePageChange","handleSearchTermChange"]),FORM_PROPERTIES=new Set(["form","name","type","value","defaultValue","checked","defaultChecked","disabled","required","validity","validationMessage","willValidate","labels"]),FORM_METHODS=new Set(["checkValidity","reportValidity","setCustomValidity","getForm"]),NATIVE_METHODS=new Set(["focus","blur","click","select","setSelectionRange","setRangeText","showPicker","stepUp","stepDown","play","pause","load"]),NATIVE_EVENTS=new Set(["beforeinput","input","change","focus","blur","invalid","load","error","play","pause","ended","loadedmetadata","timeupdate","volumechange"]),UNDOCUMENTED_PUBLIC_FIELDS=new Set(["title"]),UNSPECIFIED_PUBLIC_DOCUMENTATION="unspecified-public-documentation",FRAMEWORK_CONTROLLER_FIELDS=new Set(["localize"]),PROPERTY_ONLY_FIELDS=new Set(["accessibleLabel","config","chart","currentTime","filter","files","keyframes","languages","marked","modal","selectedItems","selectedOptions","valueAsDate","valueAsNumber","validationMessage","validity","willValidate"]),hasOwn=(value,key)=>Object.prototype.hasOwnProperty.call(value,key),textOf=type=>type?.text?.replace(/\s+/g," ").trim()||"unknown",sortByName=entries=>[...entries].sort((a,b)=>a.name.localeCompare(b.name)),unique=entries=>[...new Set(entries)].sort();function canonicalDefault(raw){if(raw===void 0)return;if(raw===null||typeof raw=="boolean"||typeof raw=="number")return raw;const value=String(raw).trim();return value==="true"?!0:value==="false"?!1:value==="null"?null:value==="undefined"?"undefined":/^-?(?:\d+\.?\d*|\.\d+)(?:e[+-]?\d+)?$/i.test(value)?Number(value):value.startsWith("'")&&value.endsWith("'")||value.startsWith('"')&&value.endsWith('"')?value.slice(1,-1).replace(/\\(['"\\])/g,"$1"):value.replace(/\s+/g," ")}function kebabCase(name){return name.replace(/([a-z0-9])([A-Z])/g,"$1-$2").replaceAll("_","-").toLowerCase()}function isInternalMethod(member,ecosystem){return member.kind!=="method"||member.static||member.privacy==="private"||member.privacy==="protected"?!0:ecosystem==="lyra"&&!member.inheritedFrom?!1:!!(INTERNAL_METHOD_NAMES.has(member.name)||/^(?:handle|on|_)[A-Z_]/.test(member.name)&&!PUBLIC_METHOD_NAMES.has(member.name)||/Callback$/.test(member.name)&&!PUBLIC_METHOD_NAMES.has(member.name)||member.inheritedFrom&&!PUBLIC_METHOD_NAMES.has(member.name)&&!FORM_METHODS.has(member.name)||ecosystem!=="lyra"&&!member.description&&!PUBLIC_METHOD_NAMES.has(member.name)&&!FORM_METHODS.has(member.name))}function isPublicField(member,attributeNames,ecosystem){return member.kind!=="field"||member.static||member.privacy==="private"||member.privacy==="protected"?!1:ecosystem==="lyra"&&!member.inheritedFrom?!0:/^_/.test(member.name)||FRAMEWORK_CONTROLLER_FIELDS.has(member.name)&&!member.attribute&&!attributeNames.has(member.name)&&!member.description?!1:attributeNames.has(member.name)||member.attribute||FORM_PROPERTIES.has(member.name)||PROPERTY_ONLY_FIELDS.has(member.name)?!0:member.inheritedFrom?FORM_PROPERTIES.has(member.name)||PROPERTY_ONLY_FIELDS.has(member.name):ecosystem==="shoelace"?!!member.description||FORM_PROPERTIES.has(member.name)||UNDOCUMENTED_PUBLIC_FIELDS.has(member.name):member.privacy==="public"||!!member.description||!!member.readonly}const FRAMEWORK_STATIC_FIELDS=new Set(["css","dependencies","elementProperties","formAssociated","observeSlots","shadowRootOptions","styles"]);function isPublicStaticField(member,ecosystem){return member.kind!=="field"||member.static!==!0||member.privacy==="private"||member.privacy==="protected"||FRAMEWORK_STATIC_FIELDS.has(member.name)?!1:ecosystem==="lyra"&&!member.inheritedFrom?!0:member.privacy==="public"||!!member.description||!!member.readonly}function isPublicStaticMethod(member,ecosystem){return member.kind!=="method"||member.static!==!0||member.privacy==="private"||member.privacy==="protected"?!1:ecosystem==="lyra"&&!member.inheritedFrom?!(INTERNAL_METHOD_NAMES.has(member.name)||/^(?:handle|on|_)[A-Z_]/u.test(member.name)&&!PUBLIC_METHOD_NAMES.has(member.name)||/Callback$/u.test(member.name)&&!PUBLIC_METHOD_NAMES.has(member.name)):member.privacy==="public"||!!member.description}function normalizeParameter(parameter,ecosystem){const normalized={name:parameter.name,type:ecosystem!=="lyra"&&!parameter.type?UNSPECIFIED_PUBLIC_DOCUMENTATION:textOf(parameter.type),optional:parameter.optional===!0};return hasOwn(parameter,"default")?(normalized.hasDefault=!0,normalized.default=canonicalDefault(parameter.default)):normalized.hasDefault=!1,normalized}function eventCancelabilityFromDescription(description="",ecosystem="lyra",eventName){const text=description.toLowerCase().replace(/\b(?:conditionally\s+|non[- ]?|not\s+|never\s+)?cancell?able\s+`(lr-[a-z0-9-]+)`/gu,(phrase,referencedEvent)=>referencedEvent===eventName?phrase:""),conditionalPattern=/\bconditionally\s+cancell?able\b/gu,negativePattern=/\b(?:non[- ]?|not\s+|never\s+)cancell?able\b/gu,conditional=conditionalPattern.exec(text),negative=negativePattern.exec(text),withoutQualifiedMarkers=text.replace(conditionalPattern,phrase=>" ".repeat(phrase.length)).replace(negativePattern,phrase=>" ".repeat(phrase.length)),markers=[{kind:"conditional",match:conditional},{kind:"never",match:negative},{kind:"always",match:/\bcancell?able\b/u.exec(withoutQualifiedMarkers)},{kind:"implicit-always",match:/preventdefault\(\)|\bcancel(?:ing|ling) this event\b/u.exec(text)}].filter(({match})=>match);markers.sort((left,right)=>left.match.index-right.match.index);const first=markers[0];if(!first)return ecosystem==="lyra"?"never":UNSPECIFIED_PUBLIC_DOCUMENTATION;if(first.kind==="conditional")return"conditional";const kinds=new Set(markers.map(({kind})=>kind));return kinds.has("always")&&kinds.has("never")||first.kind==="always"&&/\b(?:except|unless|single\s+exception)\b/u.test(text)?"conditional":first.kind==="implicit-always"?"always":first.kind}function normalizeAttributes(declaration,publicFields,ecosystem){const fields=new Map(publicFields.map(member=>[member.name,member])),declared=declaration.attributes??[],source=declared.length?declared:publicFields.filter(member=>!member.readonly&&!PROPERTY_ONLY_FIELDS.has(member.name)).map(member=>({name:member.attribute||kebabCase(member.name),fieldName:member.name,type:member.type,...hasOwn(member,"default")?{default:member.default}:{},inferred:!0}));return sortByName(source.map(attribute=>{const field=fields.get(attribute.fieldName||attribute.name)??publicFields.find(member=>member.attribute===attribute.name),normalized={name:attribute.name,property:attribute.fieldName||field?.name||attribute.name,type:textOf(attribute.parsedType||attribute.type||field?.type),reflects:field?.reflects===!0,inferred:attribute.inferred===!0||ecosystem==="shoelace"&&declared.length===0,deprecated:attribute.deprecation??attribute.deprecated??field?.deprecation??field?.deprecated??null,hasDefault:hasOwn(attribute,"default")||!!(field&&hasOwn(field,"default"))};return normalized.hasDefault&&(normalized.default=canonicalDefault(hasOwn(attribute,"default")?attribute.default:field.default)),normalized}))}function normalizeProperties(publicFields){return sortByName(publicFields.map(member=>{const normalized={name:member.name,attribute:typeof member.attribute=="string"?member.attribute:null,type:textOf(member.parsedType||member.type),readonly:member.readonly===!0,reflects:member.reflects===!0,deprecated:member.deprecation||member.deprecated||null,hasDefault:hasOwn(member,"default")};return normalized.hasDefault&&(normalized.default=canonicalDefault(member.default)),normalized}))}function normalizeMethodEntries(members,ecosystem){const grouped=new Map;for(const member of members){const overload={parameters:(member.parameters??[]).map(parameter=>normalizeParameter(parameter,ecosystem)),returnType:ecosystem!=="lyra"&&!member.return?.type?UNSPECIFIED_PUBLIC_DOCUMENTATION:textOf(member.return?.type)},key=JSON.stringify(overload),current=grouped.get(member.name)??new Map;current.set(key,overload),grouped.set(member.name,current)}return[...grouped].map(([name,overloads])=>{const declaration=members.find(member=>member.kind==="method"&&member.name===name),deprecated=declaration?.deprecation||declaration?.deprecated||null;return{name,overloads:[...overloads.values()],...deprecated?{deprecated}:{}}}).sort((a,b)=>a.name.localeCompare(b.name))}function normalizeMethods(members,ecosystem){return normalizeMethodEntries(members.filter(member=>!isInternalMethod(member,ecosystem)),ecosystem)}function normalizeStaticProperties(members,ecosystem){return sortByName(members.filter(member=>isPublicStaticField(member,ecosystem)).map(member=>({name:member.name,type:textOf(member.parsedType||member.type),readonly:member.readonly===!0,deprecated:member.deprecation||member.deprecated||null})))}function normalizeStaticMethods(members,ecosystem){return normalizeMethodEntries(members.filter(member=>isPublicStaticMethod(member,ecosystem)),ecosystem)}function normalizedModulePath(modulePath){return typeof modulePath!="string"||!modulePath?null:path.posix.normalize(modulePath.replaceAll("\\","/").replace(/^\/+/,""))}function moduleLookupPath(modulePath){return normalizedModulePath(modulePath)?.replace(/\.(?:[cm]?js|ts)$/u,"")??null}function resolvedExportDeclarationPath(exportingModule,declarationModule){const exportingPath=normalizedModulePath(exportingModule),declaredPath=normalizedModulePath(declarationModule);return!exportingPath||!declaredPath?null:declarationModule.startsWith(".")?path.posix.normalize(path.posix.join(path.posix.dirname(exportingPath),declarationModule)):declaredPath}function moduleDeclarationIndex(manifest){const index=new Map;for(const module of manifest.modules??[]){const modulePath=moduleLookupPath(module.path);if(modulePath)for(const declaration of module.declarations??[]){if(!declaration?.name)continue;const key=`${modulePath}\0${declaration.name}`,declarations=index.get(key)??[];declarations.push(declaration),index.set(key,declarations)}}return index}function moduleExportDeclaration(index,module,entry){const exportingPath=moduleLookupPath(module.path),declarationName=entry.declaration?.name??entry.name,declaredPath=entry.declaration?.module?moduleLookupPath(resolvedExportDeclarationPath(module.path,entry.declaration.module)):exportingPath;return index.get(`${declaredPath}\0${declarationName}`)??index.get(`${exportingPath}\0${declarationName}`)??[]}function normalizeComponentModuleExports(manifest,componentModulePath,{ecosystem,additionalModules=[]}){const componentPath=normalizedModulePath(componentModulePath);if(!componentPath)return[];const scopedModules=new Set([componentPath,...additionalModules.map(modulePath=>normalizedModulePath(modulePath)).filter(Boolean)]),declarationIndex=moduleDeclarationIndex(manifest),normalized=[];for(const module of manifest.modules??[]){const modulePath=normalizedModulePath(module.path);if(!modulePath||!scopedModules.has(modulePath))continue;const explicitlyScoped=modulePath!==componentPath;for(const entry of module.exports??[]){if(entry.kind!=="js"||!entry.name||entry.name==="default"||entry.name==="*")continue;const declarations=moduleExportDeclaration(declarationIndex,module,entry),functions=declarations.filter(declaration=>declaration.kind==="function"&&declaration.privacy!=="private"&&declaration.privacy!=="protected"&&(ecosystem==="lyra"||declaration.privacy==="public"||!!declaration.description)),variable=declarations.find(declaration=>declaration.kind==="variable"&&declaration.privacy!=="private"&&declaration.privacy!=="protected"&&(ecosystem==="lyra"||declaration.privacy==="public"||!!declaration.description));if(functions.length>0){const callable=normalizeMethodEntries(functions.map(declaration=>({...declaration,kind:"method"})),ecosystem)[0];normalized.push({module:modulePath,name:entry.name,kind:"function",overloads:callable?.overloads??[],...callable?.deprecated?{deprecated:callable.deprecated}:{}})}else variable?normalized.push({module:modulePath,name:entry.name,kind:"variable",type:ecosystem!=="lyra"&&!variable.type?UNSPECIFIED_PUBLIC_DOCUMENTATION:textOf(variable.type),readonly:variable.readonly===!0,deprecated:variable.deprecation||variable.deprecated||null}):declarations.length===0&&explicitlyScoped&&normalized.push({module:modulePath,name:entry.name,kind:"unknown",type:UNSPECIFIED_PUBLIC_DOCUMENTATION,deprecated:null})}}return normalized.sort((left,right)=>`${left.module}:${left.name}:${left.kind}`.localeCompare(`${right.module}:${right.name}:${right.kind}`))}const REVIEWED_COMPONENT_MODULE_EXPORT_SCOPES=new Map([["webawesome:wa-animation",["components/animation/animations.js"]]]);function normalizeNamed(entries){return sortByName((entries??[]).map(entry=>({name:entry.name??"",deprecated:entry.deprecation||entry.deprecated||null})))}function normalizeCssProperties(entries,tagName="custom element"){return sortByName((entries??[]).map(entry=>{if(typeof entry?.name!="string"||!entry.name)throw new Error(`${tagName}: malformed CSS custom-property manifest entry`);const normalized={name:entry.name,deprecated:entry.deprecation||entry.deprecated||null,hasDefault:hasOwn(entry,"default")};return normalized.hasDefault&&(normalized.default=canonicalDefault(entry.default)),normalized}))}function eventFlag(description,positive,negative){const text=String(description??"").toLowerCase();if(negative.test(text))return!1;if(positive.test(text))return!0}const EVENT_CONSTRUCTORS=["AnimationEvent","BeforeUnloadEvent","ClipboardEvent","CloseEvent","CompositionEvent","CustomEvent","DeviceMotionEvent","DeviceOrientationEvent","DragEvent","ErrorEvent","Event","FocusEvent","GamepadEvent","HashChangeEvent","InputEvent","KeyboardEvent","MessageEvent","MouseEvent","PageTransitionEvent","PointerEvent","PopStateEvent","ProgressEvent","PromiseRejectionEvent","SecurityPolicyViolationEvent","StorageEvent","SubmitEvent","ToggleEvent","TouchEvent","TrackEvent","TransitionEvent","UIEvent","WheelEvent"],EVENT_CONSTRUCTOR_PATTERN=EVENT_CONSTRUCTORS.join("|"),SINGLE_EVENT_TYPE=new RegExp(`^(${EVENT_CONSTRUCTOR_PATTERN})(?:<.*>)?$`,"u"),EVENT_UNION_TYPE=new RegExp(`^(?:${EVENT_CONSTRUCTOR_PATTERN})(?:<.*>)?(?:\\s*\\|\\s*(?:${EVENT_CONSTRUCTOR_PATTERN})(?:<.*>)?)+$`,"u"),EVENT_WITH_COMPATIBILITY_DETAIL=new RegExp(`^(${EVENT_CONSTRUCTOR_PATTERN})(?:<.*>)?\\s*&\\s*\\{[^]*\\bdetail\\s*:`,"u");function eventConstructor(type){const text=textOf(type),single=SINGLE_EVENT_TYPE.exec(text);if(single)return single[1];const withCompatibilityDetail=EVENT_WITH_COMPATIBILITY_DETAIL.exec(text);return withCompatibilityDetail?withCompatibilityDetail[1]:EVENT_UNION_TYPE.test(text)?text:void 0}function normalizeEvents(entries,ecosystem){return sortByName((entries??[]).map(entry=>{const deprecated=entry.deprecation||entry.deprecated||null,normalized={name:entry.name,type:textOf(entry.type),cancelable:eventCancelabilityFromDescription(entry.description,ecosystem,entry.name),...deprecated?{deprecated}:{}},constructor=eventConstructor(entry.type),bubbles=eventFlag(entry.description,/\b(?:bubbling|bubbles)\b/,/\b(?:non[- ]?bubbling|does not bubble|doesn't bubble)\b/),composed=eventFlag(entry.description,/\bcomposed\b/,/\b(?:non[- ]?composed|not composed)\b/);return constructor!==void 0&&(normalized.constructor=constructor),bubbles!==void 0&&(normalized.bubbles=bubbles),composed!==void 0&&(normalized.composed=composed),normalized}))}function declaredFormAssociation(declaration){if(typeof declaration.formAssociated=="boolean")return declaration.formAssociated;const ownStatic=(declaration.members??[]).find(member=>member.kind==="field"&&member.name==="formAssociated"&&member.static===!0&&!member.inheritedFrom);if(ownStatic)return ownStatic.default===!0||String(ownStatic.default).trim()==="true";if((declaration.mixins??[]).some(mixin=>mixin.name==="FormAssociated"||mixin.name==="CheckedFormAssociated"))return!0}function canonicalModulePath(modulePath){return typeof modulePath=="string"?modulePath.replace(/^\/+/,"").replace(/\.js$/u,".ts"):null}function manifestFormAssociations(manifest){const declarations=[],byModuleAndName=new Map,byName=new Map;for(const module of manifest.modules??[])for(const declaration of module.declarations??[]){if(!declaration?.name)continue;declarations.push(declaration);const modulePath=canonicalModulePath(module.path);modulePath&&byModuleAndName.set(`${modulePath}\0${declaration.name}`,declaration);const named=byName.get(declaration.name)??[];named.push(declaration),byName.set(declaration.name,named)}const resolved=new Map,resolving=new Set,resolve=declaration=>{if(resolved.has(declaration))return resolved.get(declaration);if(resolving.has(declaration))return!1;resolving.add(declaration);let associated=declaredFormAssociation(declaration);if(associated===void 0&&declaration.superclass?.name){const modulePath=canonicalModulePath(declaration.superclass.module),exact=modulePath?byModuleAndName.get(`${modulePath}\0${declaration.superclass.name}`):void 0,named=byName.get(declaration.superclass.name)??[],superclass=exact??(named.length===1?named[0]:void 0);superclass&&(associated=resolve(superclass))}return associated===void 0&&(associated=(declaration.members??[]).some(member=>member.kind==="field"&&member.name==="formAssociated"&&member.static===!0&&!!member.inheritedFrom&&(member.default===!0||String(member.default).trim()==="true"))),resolving.delete(declaration),resolved.set(declaration,associated===!0),associated===!0};for(const declaration of declarations)resolve(declaration);return resolved}function normalizeDeclaration(declaration,{ecosystem,formAssociated}){const attributeFieldNames=new Set((declaration.attributes??[]).flatMap(attribute=>[attribute.fieldName,attribute.name]).filter(Boolean)),publicFields=(declaration.members??[]).filter(member=>isPublicField(member,attributeFieldNames,ecosystem)),properties=normalizeProperties(publicFields),methods=normalizeMethods(declaration.members??[],ecosystem),staticProperties=normalizeStaticProperties(declaration.members??[],ecosystem),staticMethods=normalizeStaticMethods(declaration.members??[],ecosystem),events=normalizeEvents(declaration.events,ecosystem),formProperties=properties.filter(entry=>FORM_PROPERTIES.has(entry.name)).map(entry=>entry.name),formMethods=methods.filter(entry=>FORM_METHODS.has(entry.name)).map(entry=>entry.name),delegatedMethods=methods.filter(entry=>NATIVE_METHODS.has(entry.name)).map(entry=>entry.name),forwardedEvents=events.filter(entry=>NATIVE_EVENTS.has(entry.name)).map(entry=>entry.name),associated=formAssociated??declaredFormAssociation(declaration)===!0;return{attributes:normalizeAttributes(declaration,publicFields,ecosystem),properties,slots:normalizeNamed(declaration.slots),events,parts:normalizeNamed(declaration.cssParts),cssProperties:normalizeCssProperties(declaration.cssProperties,declaration.tagName),cssStates:normalizeNamed(declaration.cssStates),methods,staticProperties,staticMethods,moduleExports:[],form:{associated,properties:unique(formProperties),methods:unique(formMethods)},native:{forwardedEvents:unique(forwardedEvents),delegatedMethods:unique(delegatedMethods)},maturity:{status:declaration.status||"unclassified",since:declaration.since||null,deprecated:declaration.deprecated||null}}}function normalizeManifest(manifest,{ecosystem,tierByTag=new Map}){const components=[],formAssociations=manifestFormAssociations(manifest);for(const module of manifest.modules??[])for(const declaration of module.declarations??[]){if(!declaration.customElement||!declaration.tagName)continue;const normalized=normalizeDeclaration(declaration,{ecosystem,formAssociated:formAssociations.get(declaration)});normalized.moduleExports=normalizeComponentModuleExports(manifest,module.path,{ecosystem,additionalModules:REVIEWED_COMPONENT_MODULE_EXPORT_SCOPES.get(`${ecosystem}:${declaration.tagName}`)??[]}),components.push({tag:declaration.tagName,module:module.path||declaration.modulePath||declaration.definitionPath||null,tier:tierByTag.get(declaration.tagName)||null,maturity:normalized.maturity,surface:Object.fromEntries(SURFACE_SECTIONS.map(section=>[section,normalized[section]])),review:{status:"complete",source:"published-manifest",unreviewedSections:[]}})}return components.sort((a,b)=>a.tag.localeCompare(b.tag))}const UPSTREAM_RUNTIME_PACKAGES=Object.freeze({webawesome:"@awesome.me/webawesome",shoelace:"@shoelace-style/shoelace"});function runtimeEvidenceInvariant(condition,message){if(!condition)throw new Error(message)}function exactObjectKeys(value,expected){return value&&typeof value=="object"&&!Array.isArray(value)&&Object.keys(value).sort().join("\0")===[...expected].sort().join("\0")}function applyRuntimeEventCancelabilityEvidence(components,evidence,{ecosystem,version}={}){runtimeEvidenceInvariant(Array.isArray(components),"runtime cancelability evidence needs normalized components");const augmented=structuredClone(components);if(evidence==null)return augmented;runtimeEvidenceInvariant(exactObjectKeys(evidence,["source","coverage","events"]),`${String(ecosystem)}: malformed runtime cancelability evidence envelope`),runtimeEvidenceInvariant(exactObjectKeys(evidence.source,["package","version","tarballIntegrity"]),`${String(ecosystem)}: malformed runtime cancelability evidence source`);const expectedPackage=UPSTREAM_RUNTIME_PACKAGES[ecosystem];runtimeEvidenceInvariant(typeof expectedPackage=="string"&&evidence.source.package===expectedPackage,`${String(ecosystem)}: runtime evidence package ${String(evidence.source.package)} does not match ${String(expectedPackage)}`),runtimeEvidenceInvariant(evidence.source.version===version,`${String(ecosystem)}: runtime evidence version ${String(evidence.source.version)} does not match pin ${String(version)}`),runtimeEvidenceInvariant(typeof evidence.source.tarballIntegrity=="string"&&evidence.source.tarballIntegrity.startsWith("sha512-"),`${String(ecosystem)}: runtime evidence needs a SHA-512 package integrity`),runtimeEvidenceInvariant(evidence.coverage==="all-public-transition-paths",`${String(ecosystem)}: runtime cancelability evidence must cover all public transition paths`),runtimeEvidenceInvariant(Array.isArray(evidence.events)&&evidence.events.length>0,`${String(ecosystem)}: runtime cancelability evidence needs events`);const byTag=new Map(augmented.map(component=>[component.tag,component])),seen=new Set;for(const observation of evidence.events){runtimeEvidenceInvariant(exactObjectKeys(observation,["tag","event","cancelable","paths"]),`${String(observation?.tag)}#${String(observation?.event)}: malformed runtime cancelability evidence`);const key=`${observation.tag}#${observation.event}`;runtimeEvidenceInvariant(!seen.has(key),`duplicate runtime cancelability evidence ${key}`),seen.add(key),runtimeEvidenceInvariant(["always","never","conditional"].includes(observation.cancelable),`${key}: runtime cancelability evidence has an invalid result`),runtimeEvidenceInvariant(Array.isArray(observation.paths)&&observation.paths.length>0&&observation.paths.every(path2=>typeof path2=="string"&&!!path2.trim())&&new Set(observation.paths).size===observation.paths.length,`${key}: runtime cancelability evidence needs reviewed public paths`);const event=byTag.get(observation.tag)?.surface?.events?.find(entry=>entry.name===observation.event);runtimeEvidenceInvariant(event,`${key}: runtime cancelability evidence targets an unknown event`),runtimeEvidenceInvariant(event.cancelable===UNSPECIFIED_PUBLIC_DOCUMENTATION&&!event.cancelabilityEvidence,`${key}: pinned runtime evidence is stale because the manifest now documents cancelability`),event.cancelable=observation.cancelable,event.cancelabilityEvidence="pinned-runtime"}return augmented}const METHOD_EDGE_MEASUREMENT_BASES=new Set(["ambient-page-viewport"]),METHOD_EDGE_PARITY_EVIDENCE=Object.freeze({upstream:"pinned-package-black-box",target:"lyra-authored-contract-and-automated-tests"}),METHOD_EDGE_DIVERGENCE_FLAG="method-edge-return-sentinel-divergence";function validMethodEdgeOutcome(outcome){return!outcome||typeof outcome!="object"||Array.isArray(outcome)?!1:outcome.kind==="sentinel"?exactObjectKeys(outcome,["kind","value"])&&(outcome.value===null||typeof outcome.value=="string"||typeof outcome.value=="boolean"||typeof outcome.value=="number"&&Number.isFinite(outcome.value)):outcome.kind==="measurement"&&exactObjectKeys(outcome,["kind","basis"])&&METHOD_EDGE_MEASUREMENT_BASES.has(outcome.basis)}function applyRuntimeMethodEdgeSemanticsEvidence(components,evidence,{ecosystem,version}={}){runtimeEvidenceInvariant(Array.isArray(components),"runtime method-edge evidence needs normalized components");const augmented=structuredClone(components);if(evidence==null)return augmented;runtimeEvidenceInvariant(exactObjectKeys(evidence,["source","methods"]),`${String(ecosystem)}: malformed runtime method-edge evidence envelope`),runtimeEvidenceInvariant(exactObjectKeys(evidence.source,["package","version","tarballIntegrity"]),`${String(ecosystem)}: malformed runtime method-edge evidence source`);const expectedPackage=UPSTREAM_RUNTIME_PACKAGES[ecosystem];runtimeEvidenceInvariant(typeof expectedPackage=="string"&&evidence.source.package===expectedPackage,`${String(ecosystem)}: runtime method-edge evidence package ${String(evidence.source.package)} does not match ${String(expectedPackage)}`),runtimeEvidenceInvariant(evidence.source.version===version,`${String(ecosystem)}: runtime method-edge evidence version ${String(evidence.source.version)} does not match pin ${String(version)}`),runtimeEvidenceInvariant(typeof evidence.source.tarballIntegrity=="string"&&evidence.source.tarballIntegrity.startsWith("sha512-"),`${String(ecosystem)}: runtime method-edge evidence needs a SHA-512 package integrity`),runtimeEvidenceInvariant(Array.isArray(evidence.methods)&&evidence.methods.length>0,`${String(ecosystem)}: runtime method-edge evidence needs methods`);const byTag=new Map(augmented.map(component=>[component.tag,component])),seenMethods=new Set;for(const observation of evidence.methods){runtimeEvidenceInvariant(exactObjectKeys(observation,["tag","method","cases"]),`${String(observation?.tag)}#${String(observation?.method)}: malformed runtime method-edge evidence`);const key=`${observation.tag}#${observation.method}`;runtimeEvidenceInvariant(!seenMethods.has(key),`duplicate runtime method-edge evidence ${key}`),seenMethods.add(key);const method=byTag.get(observation.tag)?.surface?.methods?.find(entry=>entry.name===observation.method);runtimeEvidenceInvariant(method,`${key}: runtime method-edge evidence targets an unknown method`),runtimeEvidenceInvariant((method.overloads??[]).length>0&&(method.overloads??[]).every(overload=>overload.returnType===UNSPECIFIED_PUBLIC_DOCUMENTATION)&&!method.edgeSemantics,`${key}: pinned method-edge evidence is stale because the manifest now documents its return`);const caseNames=new Set;runtimeEvidenceInvariant(Array.isArray(observation.cases)&&observation.cases.length>0&&observation.cases.every(entry=>!exactObjectKeys(entry,["case","arguments","outcome"])||typeof entry.case!="string"||!entry.case.trim()||caseNames.has(entry.case)||!Array.isArray(entry.arguments)||!entry.arguments.every(argument=>typeof argument=="string"&&!!argument.trim())||!(method.overloads??[]).some(overload=>(overload.parameters??[]).length===entry.arguments.length)||!validMethodEdgeOutcome(entry.outcome)?!1:(caseNames.add(entry.case),!0)),`${key}: runtime method-edge evidence must cover unique named cases`),method.edgeSemantics={evidence:"pinned-runtime",cases:structuredClone(observation.cases)}}return augmented}function validateMethodEdgeParity(mapping,{upstream,target}={}){const findings=[],label=mapping?.upstreamTag??"<unknown>",methods=mapping?.parity?.methodEdges,observed=(upstream?.methods??[]).filter(method=>method.edgeSemantics),observedByName=new Map(observed.map(method=>[method.name,method])),behaviorFlags=mapping?.parity?.behaviorReviewFlags,hasDivergenceFlag=Array.isArray(behaviorFlags)&&behaviorFlags.includes(METHOD_EDGE_DIVERGENCE_FLAG);if(methods===void 0)return observed.length>0&&findings.push(`${label}: missing method-edge parity review`),hasDivergenceFlag&&findings.push(`${label}: stale method-edge divergence behavior flag`),findings;if(!Array.isArray(methods)||methods.length===0)return findings.push(`${label}: parity.methodEdges must be a non-empty array`),hasDivergenceFlag&&findings.push(`${label}: stale method-edge divergence behavior flag`),findings;const seenMethods=new Set;let hasDifferentCase=!1;for(const method of methods){if(!(exactObjectKeys(method,["method","evidence","cases","rationale"])&&typeof method.method=="string"&&!!method.method.trim()&&exactObjectKeys(method.evidence,["upstream","target"])&&method.evidence.upstream===METHOD_EDGE_PARITY_EVIDENCE.upstream&&method.evidence.target===METHOD_EDGE_PARITY_EVIDENCE.target&&Array.isArray(method.cases)&&method.cases.length>0&&typeof method.rationale=="string"&&!!method.rationale.trim())){findings.push(`${label}: malformed method-edge parity review`);continue}seenMethods.has(method.method)&&findings.push(`${label}: duplicate method-edge parity review ${method.method}`),seenMethods.add(method.method);const observedMethod=observedByName.get(method.method);upstream!==void 0&&!observedMethod&&findings.push(`${label}#${method.method}: stale method-edge parity review`),target!==void 0&&!(target.methods??[]).some(entry=>entry.name===method.method)&&findings.push(`${label}#${method.method}: dangling method-edge parity target`);const observedCases=new Map((observedMethod?.edgeSemantics?.cases??[]).map(entry=>[entry.case,entry])),seenCases=new Set;for(const edgeCase of method.cases){if(!(exactObjectKeys(edgeCase,["case","arguments","upstream","target","status"])&&typeof edgeCase.case=="string"&&!!edgeCase.case.trim()&&Array.isArray(edgeCase.arguments)&&edgeCase.arguments.every(argument=>typeof argument=="string"&&!!argument.trim())&&validMethodEdgeOutcome(edgeCase.upstream)&&validMethodEdgeOutcome(edgeCase.target)&&(edgeCase.status==="equivalent"||edgeCase.status==="different"))){findings.push(`${label}#${method.method}: malformed method-edge parity case`);continue}seenCases.has(edgeCase.case)&&findings.push(`${label}#${method.method}: duplicate method-edge parity case ${edgeCase.case}`),seenCases.add(edgeCase.case);const expectedStatus=sameJson(edgeCase.upstream,edgeCase.target)?"equivalent":"different";if(edgeCase.status!==expectedStatus&&findings.push(`${label}#${method.method}:${edgeCase.case}: stale method-edge parity status`),expectedStatus==="different"&&(hasDifferentCase=!0),observedMethod){const observedCase=observedCases.get(edgeCase.case);(!observedCase||!sameJson(observedCase.arguments,edgeCase.arguments)||!sameJson(observedCase.outcome,edgeCase.upstream))&&findings.push(`${label}#${method.method}:${edgeCase.case}: stored upstream method-edge observation is stale`)}}if(observedMethod)for(const observedCase of observedMethod.edgeSemantics.cases??[])seenCases.has(observedCase.case)||findings.push(`${label}#${method.method}:${observedCase.case}: missing method-edge parity case`)}if(upstream!==void 0)for(const method of observed)seenMethods.has(method.name)||findings.push(`${label}#${method.name}: missing method-edge parity review`);return hasDifferentCase?(mapping.classification!=="warning-required"&&findings.push(`${label}: method-edge divergence requires warning-required classification`),hasDivergenceFlag||findings.push(`${label}: missing ${METHOD_EDGE_DIVERGENCE_FLAG} behavior flag`),methods.some(method=>typeof mapping.rationale!="string"||typeof method?.rationale!="string"||!mapping.rationale.includes(method.rationale))&&findings.push(`${label}: mapping rationale omits method-edge divergence`)):hasDivergenceFlag&&findings.push(`${label}: stale method-edge divergence behavior flag`),findings}function mappedEventName(name,upstreamPrefix){return name.startsWith(upstreamPrefix)?`lr-${name.slice(upstreamPrefix.length)}`:name}function polarity(name){return/^(?:no|not|without|hide|disable)-/.test(name)?-1:/^(?:with|show|enable)-/.test(name)?1:0}function polarityStem(name){return name.replace(/^(?:no|not|without|hide|disable|with|show|enable)-/,"")}function pushMissing(drift,code,section,name){drift.push({code,section,member:name})}function normalizationKey(memberKind,member){return`${memberKind}:${member}`}function normalizedExpectedDefault(normalizations,memberKind,member,upstreamDefault){const rule=(normalizations.defaultEquivalences??[]).find(entry=>entry.memberKind===memberKind&&entry.member===member&&entry.upstream===upstreamDefault);return rule?rule.target:upstreamDefault}function reviewedAttributeProperty(normalizations,attribute,upstreamProperty,targetProperty){return(normalizations.attributePropertyEquivalences??[]).some(entry=>entry.attribute===attribute&&entry.upstream===upstreamProperty&&entry.target===targetProperty)}function reviewedReflection(normalizations,memberKind,member,upstreamReflects,targetReflects){return(normalizations.reflectionEquivalences??[]).some(entry=>entry.memberKind===memberKind&&entry.member===member&&entry.upstream===upstreamReflects&&entry.target===targetReflects)}function reviewedCssDefault(normalizations,member,upstreamEntry,targetEntry){return(normalizations.cssDefaultEquivalences??[]).some(entry=>entry.member===member&&entry.upstreamHasDefault===upstreamEntry.hasDefault&&(!entry.upstreamHasDefault||entry.upstream===upstreamEntry.default)&&entry.targetHasDefault===targetEntry.hasDefault&&(!entry.targetHasDefault||entry.target===targetEntry.default))}function deprecationReplacement(value){if(value&&typeof value=="object"){const replacement=value.replacement;if(!replacement||typeof replacement!="object")return null;const usage=typeof replacement.usage=="string"?replacement.usage.trim():"";return/^([a-z][a-z0-9-]*)\s*=\s*["'][^"']+["']$/iu.exec(usage)?.[1]===replacement.name?usage.replace(/\s+/gu,""):typeof replacement.name=="string"&&replacement.name?replacement.name:null}return typeof value!="string"?null:/\buse\s+(?:the\s+)?`([^`]+)`/iu.exec(value)?.[1]??/\buse\s+(?:the\s+)?(?!the\b)([a-z][a-z0-9-]*)\s+(?:part|property|attribute|slot|method)\b/iu.exec(value)?.[1]??null}function reviewedDeprecation(normalizations,section,member,upstreamDeprecated,upstreamReplacement,targetDeprecated,targetReplacement){return(normalizations.deprecationEquivalences??[]).some(entry=>entry.section===section&&entry.member===member&&entry.upstreamDeprecated===upstreamDeprecated&&entry.upstreamReplacement===upstreamReplacement&&entry.targetDeprecated===targetDeprecated&&entry.targetReplacement===targetReplacement)}function rewriteDeprecationReplacement(replacement,rewrites){if(replacement===null)return null;const assignment=/^([a-z][a-z0-9-]*)(=.*)$/iu.exec(replacement);return assignment?`${rewrites.get(assignment[1])||assignment[1]}${assignment[2]}`:rewrites.get(replacement)||replacement}function reviewedDerivedDefault(normalizations,memberKind,member,upstreamDefault,candidate){return candidate.hasDefault?!1:(normalizations.derivedDefaultEquivalences??[]).some(entry=>entry.memberKind===memberKind&&entry.member===member&&entry.upstream===upstreamDefault)}function containsTypePositionKeyword(type,keyword){if(typeof type!="string")return!1;let quote=null;for(let index=0;index<type.length;){const character=type[index];if(quote){if(character==="\\"){index+=2;continue}character===quote&&(quote=null),index++;continue}if(character==="'"||character==='"'||character==="`"){quote=character,index++;continue}if(/[A-Za-z_$]/u.test(character)){let end=index+1;for(;end<type.length&&/[A-Za-z0-9_$]/u.test(type[end]);)end++;if(type.slice(index,end)===keyword){let next=end;for(;next<type.length&&/\s/u.test(type[next]);)next++;if(type[next]==="?")for(next++;next<type.length&&/\s/u.test(type[next]);)next++;if(type[next]!==":"&&type[next]!=="(")return!0}index=end;continue}index++}return!1}function containsAnyTypeKeyword(type){return containsTypePositionKeyword(type,"any")}function containsUnknownTypeKeyword(type){return containsTypePositionKeyword(type,"unknown")}function containsTemplateInterpolation(type){return typeof type=="string"&&type.includes("${")}function structuralTypeAliasMap(normalizations){return new Map((normalizations?.structuralTypeAliases??[]).filter(entry=>typeof entry?.name=="string"&&typeof entry.target=="string").map(entry=>[entry.name,entry.target]))}function typeContainsIdentifier(type,identifier){return typeof type!="string"?!1:new RegExp(`(^|[^A-Za-z0-9_$])${identifier.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}([^A-Za-z0-9_$]|$)`,"u").test(type)}function expandStructuralTypeAliases(type,normalizations,resolving=new Set){if(typeof type!="string")return type;const aliases=structuralTypeAliasMap(normalizations);if(aliases.size===0)return type;let expanded="",quote=null;for(let index=0;index<type.length;){const character=type[index];if(quote){if(expanded+=character,character==="\\"&&index+1<type.length){expanded+=type[index+1],index+=2;continue}character===quote&&(quote=null),index+=1;continue}if(character==="'"||character==='"'||character==="`"){quote=character,expanded+=character,index+=1;continue}if(/[A-Za-z_$]/u.test(character)){let end=index+1;for(;end<type.length&&/[A-Za-z0-9_$]/u.test(type[end]);)end+=1;const identifier=type.slice(index,end),target=aliases.get(identifier);typeof target=="string"&&!resolving.has(identifier)?expanded+=expandStructuralTypeAliases(target,normalizations,new Set([...resolving,identifier])):expanded+=identifier,index=end;continue}expanded+=character,index+=1}return expanded}function reviewedTypeEquivalent(normalizations,memberKind,member,upstreamType,targetType){return containsAnyTypeKeyword(upstreamType)||containsAnyTypeKeyword(targetType)||memberKind==="event"&&(isUnknownEventType(upstreamType)||isUnknownEventType(targetType)||isBareCustomEventType(targetType))?!1:(normalizations.typeEquivalences??[]).some(entry=>entry.memberKind===memberKind&&entry.member===member&&entry.upstream===upstreamType&&entry.target===targetType)}function reviewedMethodParameterTypeEquivalent(normalizations,method,parameter,upstreamType,targetType){return typeof upstreamType!="string"||typeof targetType!="string"||containsAnyTypeKeyword(upstreamType)||containsAnyTypeKeyword(targetType)||containsUnknownTypeKeyword(upstreamType)||containsUnknownTypeKeyword(targetType)||containsTemplateInterpolation(upstreamType)||containsTemplateInterpolation(targetType)?!1:(normalizations.methodParameterTypeEquivalences??[]).some(entry=>entry.method===method&&entry.parameter===parameter&&entry.upstream===upstreamType&&entry.target===targetType)}function reviewedCancelability(normalizations,event,upstreamCancelable,targetCancelable){const upstreamRank=CANCELABILITY_RANK.get(upstreamCancelable),targetRank=CANCELABILITY_RANK.get(targetCancelable);if(upstreamRank===void 0||targetRank===void 0)return!1;const matches=entry=>entry.event===event&&entry.upstream===upstreamCancelable&&entry.target===targetCancelable;return targetRank>upstreamRank?(normalizations.cancelabilityEquivalences??[]).some(matches):upstreamCancelable==="always"&&targetCancelable==="conditional"&&(normalizations.cancelabilityPathAdditions??[]).some(matches)}function insertionPreservesDefault(rewrites,memberKind,member,upstreamDefault){return(rewrites.defaults??[]).some(rule=>rule.action==="insert-if-absent"&&rule.memberKind===memberKind&&rule.member===member&&rule.value===upstreamDefault)}function mappedPublicType(type,upstreamPrefix){if(typeof type!="string")return type;const sourcePrefix=upstreamPrefix==="wa-"?"Wa":upstreamPrefix==="sl-"?"Sl":null;return sourcePrefix?type.replace(new RegExp(`\\b${sourcePrefix}([A-Z][A-Za-z0-9_$]*)\\b`,"gu"),"Lyra$1"):type}function hasPublishedType(type){return!!type&&type!=="unknown"&&type!==UNSPECIFIED_PUBLIC_DOCUMENTATION}function splitTopLevelUnion(type){const tokens=[];let start=0,depth=0,quote=null;for(let index=0;index<type.length;index+=1){const character=type[index];if(quote){character===quote&&type[index-1]!=="\\"&&(quote=null);continue}if(character==="'"||character==='"'||character==="`"){quote=character;continue}if("([{<".includes(character))depth+=1;else if([")","]","}",">"].includes(character))depth=Math.max(0,depth-1);else if(character==="|"&&depth===0){const token2=type.slice(start,index).trim();token2&&tokens.push(token2),start=index+1}}const token=type.slice(start).trim();return token&&tokens.push(token),tokens}function normalizedTypeTokens(type){return typeof type!="string"?[]:splitTopLevelUnion(type.replace(/^\s*\|\s*/u,"").replace(/\s+/gu," ").trim())}function literalPrimitive(token){return/^(?:'[^']*'|"[^"]*"|`[^`]*`)$/u.test(token)?"string":/^-?(?:\d+(?:\.\d*)?|\.\d+)$/u.test(token)?"number":token==="true"||token==="false"?"boolean":null}function publicTypeCompatible(expected,actual){if(containsAnyTypeKeyword(expected)||containsAnyTypeKeyword(actual))return!1;const expectedTokens=normalizedTypeTokens(expected),actualTokens=normalizedTypeTokens(actual);if(expectedTokens.length===actualTokens.length){const actualSet2=new Set(actualTokens);if(expectedTokens.every(token=>actualSet2.has(token)))return!0}const actualSet=new Set(actualTokens);return expectedTokens.every(token=>{if(actualSet.has(token))return!0;const primitive=literalPrimitive(token);return!!(primitive&&actualSet.has(primitive)||token==="array"&&actualTokens.some(candidate=>/(?:\[\]|Array<.+>)$/u.test(candidate)))})}function canonicalEventType(type){if(typeof type!="string")return;const trimmed=type.trim(),detail=/^CustomEvent\s*</u.test(trimmed)&&trimmed.endsWith(">")?trimmed.slice(trimmed.indexOf("<")+1,-1).trim():trimmed;let canonical="",quote=null,escaped=!1,curlyDepth=0,angleDepth=0,squareDepth=0,parenDepth=0;for(const character of detail){if(quote){canonical+=character,escaped?escaped=!1:character==="\\"?escaped=!0:character===quote&&(quote=null);continue}if(character==="'"||character==='"'||character==="`"){quote=character,canonical+=character;continue}/\s/u.test(character)||(character==="{"?curlyDepth+=1:character==="}"?curlyDepth=Math.max(0,curlyDepth-1):character==="<"?angleDepth+=1:character===">"?angleDepth=Math.max(0,angleDepth-1):character==="["?squareDepth+=1:character==="]"?squareDepth=Math.max(0,squareDepth-1):character==="("?parenDepth+=1:character===")"&&(parenDepth=Math.max(0,parenDepth-1)),character===","&&curlyDepth>0&&angleDepth===0&&squareDepth===0&&parenDepth===0?canonical+=";":canonical+=character)}return canonical.replace(/\bvoid\b/gu,"undefined").replace(/;\}/gu,"}")}function stripBalancedOuterParentheses(type){let text=type.trim();for(;text.startsWith("(")&&text.endsWith(")");){let depth=0,quote=null,closesAtEnd=!1;for(let index=0;index<text.length;index+=1){const character=text[index];if(quote){character===quote&&text[index-1]!=="\\"&&(quote=null);continue}if(character==="'"||character==='"'||character==="`"){quote=character;continue}if(character==="(")depth+=1;else if(character===")"&&(depth-=1,depth===0)){closesAtEnd=index===text.length-1;break}}if(!closesAtEnd)break;text=text.slice(1,-1).trim()}return text}function customEventDetailType(type){const text=type.trim(),opening=/^CustomEvent\s*</u.exec(text);if(!opening)return;const start=opening[0].lastIndexOf("<");let depth=0,quote=null;for(let index=start;index<text.length;index+=1){const character=text[index];if(quote){character===quote&&text[index-1]!=="\\"&&(quote=null);continue}if(character==="'"||character==='"'||character==="`"){quote=character;continue}if(character==="<")depth+=1;else if(character===">"&&(depth-=1,depth===0))return text.slice(index+1).trim()===""?text.slice(start+1,index).trim():void 0}}function hasTopLevelUnknown(type){return splitTopLevelUnion(stripBalancedOuterParentheses(type)).includes("unknown")}function isUnknownEventType(type){if(typeof type!="string")return!1;const trimmed=stripBalancedOuterParentheses(type);if(hasTopLevelUnknown(trimmed))return!0;const detail=customEventDetailType(trimmed);return detail!==void 0&&hasTopLevelUnknown(detail)}function isBareCustomEventType(type){return typeof type=="string"&&/^CustomEvent\s*$/u.test(type.trim())}function eventTypeCompatible(expected,actual,normalizations={}){if(actual=expandStructuralTypeAliases(actual,normalizations),!hasPublishedType(expected)||!hasPublishedType(actual)||containsAnyTypeKeyword(expected)||containsAnyTypeKeyword(actual)||isUnknownEventType(expected)||isUnknownEventType(actual)||isBareCustomEventType(actual))return!1;const expectedCustom=/^CustomEvent\s*</u.test(expected.trim()),actualCustom=/^CustomEvent\s*</u.test(actual.trim());return expectedCustom!==actualCustom&&eventConstructor(expectedCustom?actual:expected)!==void 0?!1:canonicalEventType(expected)===canonicalEventType(actual)}function parametersMatch(expected,actual,upstreamPrefix,method,normalizations){const expectedParameters=expected??[],actualParameters=actual??[];return actualParameters.length<expectedParameters.length||!expectedParameters.every((parameter,index)=>{const candidate=actualParameters[index];return!candidate||parameter.name!==candidate.name||parameter.type!==UNSPECIFIED_PUBLIC_DOCUMENTATION&&mappedPublicType(parameter.type,upstreamPrefix)!==candidate.type&&!reviewedMethodParameterTypeEquivalent(normalizations,method,parameter.name,parameter.type,candidate.type)||(parameter.optional||parameter.hasDefault)&&!(candidate.optional||candidate.hasDefault)?!1:!parameter.hasDefault||candidate.hasDefault&¶meter.default===candidate.default})?!1:actualParameters.slice(expectedParameters.length).every(parameter=>parameter.optional||parameter.hasDefault)}function overloadMatches(method,expected,actual,upstreamPrefix,normalizations,unknownReturnTypeIsUnspecified=!1){return parametersMatch(expected.parameters,actual.parameters,upstreamPrefix,method,normalizations)&&(expected.returnType===UNSPECIFIED_PUBLIC_DOCUMENTATION||unknownReturnTypeIsUnspecified&&expected.returnType==="unknown"||mappedPublicType(expected.returnType,upstreamPrefix)===actual.returnType)}function methodOverloadsMatch(method,expected,actual,upstreamPrefix,normalizations,unknownReturnTypeIsUnspecified=!1){return(expected??[]).every(overload=>(actual??[]).some(candidate=>overloadMatches(method,overload,candidate,upstreamPrefix,normalizations,unknownReturnTypeIsUnspecified)))}function compareMappedSurfaces(upstream,target,{upstreamPrefix,rewrites={},normalizations={}}={}){const drift=[],attributeRewrites=new Map((rewrites.attributes??[]).map(entry=>[entry.from,entry.to])),propertyRewrites=new Map((rewrites.properties??[]).map(entry=>[entry.from,entry.to])),eventRewrites=new Map((rewrites.events??[]).map(entry=>[entry.from,entry.to])),methodRewrites=new Map((rewrites.methods??[]).map(entry=>[entry.from,entry.to])),sectionDeprecationRewrites=new Map([["attributes",attributeRewrites],["properties",propertyRewrites],["events",eventRewrites],["methods",methodRewrites],["staticProperties",new Map],["staticMethods",new Map],["moduleExports",new Map],...["slots","parts","cssProperties","cssStates"].map(section=>[section,new Map((rewrites[section]??[]).map(entry=>[entry.from,entry.to]))])]),unknownMethodReturnTypes=new Set((normalizations.unknownMethodReturnTypes??[]).map(entry=>entry.method)),inferredAttributeSuppressions=new Map((normalizations.inferredAttributeSuppressions??[]).map(entry=>[entry.attribute,entry])),suppressionRequiredProperties=new Set,excludedAttributeProperties=new Set((upstream.attributes??[]).filter(attribute=>Object.hasOwn(MIGRATION_ATTRIBUTE_EXCLUSIONS,attribute.name)).map(attribute=>attribute.property).filter(Boolean)),compareDeprecation=(section,upstreamMember,targetMember)=>{const upstreamDeprecated=!!upstreamMember.deprecated,targetDeprecated=!!targetMember.deprecated,upstreamReplacement=deprecationReplacement(upstreamMember.deprecated),targetReplacement=deprecationReplacement(targetMember.deprecated),expectedReplacement=rewriteDeprecationReplacement(upstreamReplacement,sectionDeprecationRewrites.get(section)??new Map);(upstreamDeprecated!==targetDeprecated||upstreamDeprecated&&targetDeprecated&&expectedReplacement!==targetReplacement)&&!reviewedDeprecation(normalizations,section,upstreamMember.name,upstreamDeprecated,upstreamReplacement,targetDeprecated,targetReplacement)&&drift.push({code:upstreamDeprecated===targetDeprecated?"deprecation-replacement-mismatch":"deprecation-mismatch",section,member:upstreamMember.name,expected:upstreamDeprecated?expectedReplacement??!0:!1,actual:targetDeprecated?targetReplacement??!0:!1})};for(const attribute of upstream.attributes??[]){if(Object.hasOwn(MIGRATION_ATTRIBUTE_EXCLUSIONS,attribute.name))continue;const suppression=inferredAttributeSuppressions.get(attribute.name),requiredProperty=suppression?.property;if(requiredProperty&&(attribute.inferred===!0||suppression.explicit===!0)){suppressionRequiredProperties.add(requiredProperty),(target.properties??[]).some(property=>property.name===requiredProperty)||pushMissing(drift,"missing-property","properties",requiredProperty);continue}const expectedName=attributeRewrites.get(attribute.name)||attribute.name,candidate=(target.attributes??[]).find(entry=>entry.name===expectedName);if(!candidate){const opposite=(target.attributes??[]).find(entry=>polarityStem(entry.name)===polarityStem(expectedName)&&polarity(entry.name)!==polarity(expectedName));opposite?drift.push({code:"polarity-mismatch",section:"attributes",member:attribute.name,expected:expectedName,actual:opposite.name}):pushMissing(drift,"missing-attribute","attributes",attribute.name);continue}const expectedType=mappedPublicType(attribute.type,upstreamPrefix);hasPublishedType(attribute.type)&&!publicTypeCompatible(expectedType,candidate.type)&&!reviewedTypeEquivalent(normalizations,"attribute",attribute.name,attribute.type,candidate.type)&&drift.push({code:"type-mismatch",section:"attributes",member:attribute.name,expected:expectedType,actual:candidate.type});const expectedProperty=propertyRewrites.get(attribute.property)||attribute.property;expectedProperty!==candidate.property&&!reviewedAttributeProperty(normalizations,attribute.name,attribute.property,candidate.property)&&drift.push({code:"attribute-property-mismatch",section:"attributes",member:attribute.name,expected:expectedProperty,actual:candidate.property}),attribute.reflects!==candidate.reflects&&!reviewedReflection(normalizations,"attribute",attribute.name,attribute.reflects,candidate.reflects)&&drift.push({code:"reflection-mismatch",section:"attributes",member:attribute.name,expected:attribute.reflects,actual:hasOwn(candidate,"reflects")?candidate.reflects:null});const expectedDefault=normalizedExpectedDefault(normalizations,"attribute",attribute.name,attribute.default);attribute.hasDefault&&(!candidate.hasDefault||candidate.default!==expectedDefault)&&!reviewedDerivedDefault(normalizations,"attribute",attribute.name,attribute.default,candidate)&&!insertionPreservesDefault(rewrites,"attribute",attribute.name,expectedDefault)&&drift.push({code:"default-mismatch",section:"attributes",member:attribute.name,expected:expectedDefault,actual:candidate.hasDefault?candidate.default:null}),compareDeprecation("attributes",attribute,candidate)}for(const property of upstream.properties??[]){if(excludedAttributeProperties.has(property.name))continue;const expectedName=propertyRewrites.get(property.name)||property.name,candidate=(target.properties??[]).find(entry=>entry.name===expectedName);if(!(!candidate&&suppressionRequiredProperties.has(expectedName))){if((upstream.attributes??[]).some(attribute=>attribute.property===property.name)){candidate?property.readonly===!1&&candidate.readonly!==!1&&drift.push({code:"readonly-mismatch",section:"properties",member:property.name,expected:property.readonly,actual:hasOwn(candidate,"readonly")?candidate.readonly:null}):pushMissing(drift,"missing-property","properties",property.name),candidate&&compareDeprecation("properties",property,candidate);continue}if(!candidate)pushMissing(drift,"missing-property","properties",property.name);else{const expectedType=mappedPublicType(property.type,upstreamPrefix);hasPublishedType(property.type)&&!publicTypeCompatible(expectedType,candidate.type)&&!reviewedTypeEquivalent(normalizations,"property",property.name,property.type,candidate.type)&&drift.push({code:"type-mismatch",section:"properties",member:property.name,expected:expectedType,actual:candidate.type}),property.reflects!==candidate.reflects&&!reviewedReflection(normalizations,"property",property.name,property.reflects,candidate.reflects)&&drift.push({code:"reflection-mismatch",section:"properties",member:property.name,expected:property.reflects,actual:hasOwn(candidate,"reflects")?candidate.reflects:null}),property.readonly===!1&&candidate.readonly!==!1&&drift.push({code:"readonly-mismatch",section:"properties",member:property.name,expected:property.readonly,actual:hasOwn(candidate,"readonly")?candidate.readonly:null});const expectedDefault=normalizedExpectedDefault(normalizations,"property",property.name,property.default);if(compareDeprecation("properties",property,candidate),!property.hasDefault||candidate.hasDefault&&candidate.default===expectedDefault||reviewedDerivedDefault(normalizations,"property",property.name,property.default,candidate)||insertionPreservesDefault(rewrites,"property",property.name,expectedDefault))continue;drift.push({code:"default-mismatch",section:"properties",member:property.name,expected:expectedDefault,actual:candidate.hasDefault?candidate.default:null})}}}for(const property of upstream.staticProperties??[]){const candidate=(target.staticProperties??[]).find(entry=>entry.name===property.name);if(!candidate){pushMissing(drift,"missing-static-property","staticProperties",property.name);continue}const expectedType=mappedPublicType(property.type,upstreamPrefix);hasPublishedType(property.type)&&!publicTypeCompatible(expectedType,candidate.type)&&!reviewedTypeEquivalent(normalizations,"staticProperty",property.name,property.type,candidate.type)&&drift.push({code:"static-property-type-mismatch",section:"staticProperties",member:property.name,expected:expectedType,actual:candidate.type}),property.readonly===!1&&candidate.readonly!==!1&&drift.push({code:"static-property-readonly-mismatch",section:"staticProperties",member:property.name,expected:!1,actual:hasOwn(candidate,"readonly")?candidate.readonly:null}),compareDeprecation("staticProperties",property,candidate)}for(const[section,code]of[["slots","missing-slot"],["parts","missing-part"],["cssProperties","missing-css-property"],["cssStates","missing-css-state"]]){const targetEntries=new Map((target[section]??[]).map(entry=>[entry.name,entry])),sectionRewrites=new Map((rewrites[section]??[]).map(entry=>[entry.from,entry.to]));for(const entry of upstream[section]??[]){const expectedName=sectionRewrites.get(entry.name)||entry.name,candidate=targetEntries.get(expectedName);if(!candidate){pushMissing(drift,code,section,entry.name);continue}section==="cssProperties"&&!(entry.hasDefault===candidate.hasDefault&&(!entry.hasDefault||entry.default===candidate.default))&&!reviewedCssDefault(normalizations,entry.name,entry,candidate)&&drift.push({code:"css-default-mismatch",section,member:entry.name,expectedHasDefault:entry.hasDefault,expected:entry.hasDefault?entry.default:null,actualHasDefault:candidate.hasDefault,actual:candidate.hasDefault?candidate.default:null}),compareDeprecation(section,entry,candidate)}}for(const method of upstream.methods??[]){const expectedName=methodRewrites.get(method.name)||method.name,candidate=(target.methods??[]).find(entry=>entry.name===expectedName);candidate?methodOverloadsMatch(method.name,method.overloads,candidate.overloads,upstreamPrefix,normalizations,unknownMethodReturnTypes.has(method.name))||drift.push({code:"method-signature-mismatch",section:"methods",member:method.name,expected:method.overloads,actual:candidate.overloads}):pushMissing(drift,"missing-method","methods",method.name),candidate&&compareDeprecation("methods",method,candidate)}for(const method of upstream.staticMethods??[]){const candidate=(target.staticMethods??[]).find(entry=>entry.name===method.name);candidate?methodOverloadsMatch(method.name,method.overloads,candidate.overloads,upstreamPrefix,normalizations)||drift.push({code:"static-method-signature-mismatch",section:"staticMethods",member:method.name,expected:method.overloads,actual:candidate.overloads}):pushMissing(drift,"missing-static-method","staticMethods",method.name),candidate&&compareDeprecation("staticMethods",method,candidate)}for(const exported of upstream.moduleExports??[]){const candidates=(target.moduleExports??[]).filter(entry=>entry.name===exported.name);if(candidates.length===0){drift.push({code:"missing-module-export",section:"moduleExports",member:exported.name,module:exported.module});continue}if(exported.kind==="unknown")continue;const sameKind=candidates.filter(entry=>entry.kind===exported.kind);if(sameKind.length===0){drift.push({code:"module-export-kind-mismatch",section:"moduleExports",member:exported.name,module:exported.module,expected:exported.kind,actual:unique(candidates.map(entry=>entry.kind))});continue}exported.kind==="function"?sameKind.some(candidate=>methodOverloadsMatch(exported.name,exported.overloads,candidate.overloads,upstreamPrefix,normalizations))||drift.push({code:"module-export-signature-mismatch",section:"moduleExports",member:exported.name,module:exported.module,expected:exported.overloads,actual:sameKind.map(candidate=>candidate.overloads)}):hasPublishedType(exported.type)&&!sameKind.some(candidate=>publicTypeCompatible(mappedPublicType(exported.type,upstreamPrefix),candidate.type)||reviewedTypeEquivalent(normalizations,"moduleExport",exported.name,exported.type,candidate.type))&&drift.push({code:"module-export-type-mismatch",section:"moduleExports",member:exported.name,module:exported.module,expected:mappedPublicType(exported.type,upstreamPrefix),actual:unique(sameKind.map(candidate=>candidate.type))})}for(const event of upstream.events??[]){const expectedName=eventRewrites.get(event.name)||mappedEventName(event.name,upstreamPrefix),candidate=(target.events??[]).find(entry=>entry.name===expectedName);if(!candidate)pushMissing(drift,"missing-event","events",event.name);else{const expectedType=mappedPublicType(event.type,upstreamPrefix);hasPublishedType(event.type)&&!eventTypeCompatible(expectedType,candidate.type,normalizations)&&!reviewedTypeEquivalent(normalizations,"event",event.name,event.type,candidate.type)&&drift.push({code:"event-type-mismatch",section:"events",member:event.name,expected:expectedType,actual:candidate.type}),event.cancelable!==UNSPECIFIED_PUBLIC_DOCUMENTATION&&candidate.cancelable!==event.cancelable&&!reviewedCancelability(normalizations,event.name,event.cancelable,candidate.cancelable)&&drift.push({code:"cancelability-mismatch",section:"events",member:event.name,expected:event.cancelable,actual:candidate.cancelable});for(const[field,code]of[["constructor","event-constructor-mismatch"],["bubbles","event-bubbles-mismatch"],["composed","event-composed-mismatch"]])!hasOwn(event,field)||candidate[field]===event[field]||drift.push({code,section:"events",member:event.name,expected:event[field],actual:hasOwn(candidate,field)?candidate[field]:null});compareDeprecation("events",event,candidate)}}upstream.form?.associated&&!target.form?.associated&&drift.push({code:"form-association-mismatch",section:"form",member:"associated"});for(const property of upstream.form?.properties??[])(target.form?.properties??[]).includes(property)||pushMissing(drift,"missing-form-property","form",property);for(const method of upstream.form?.methods??[])(target.form?.methods??[]).includes(method)||pushMissing(drift,"missing-form-method","form",method);for(const event of upstream.native?.forwardedEvents??[])(target.native?.forwardedEvents??[]).includes(event)||pushMissing(drift,"missing-native-event","native",event);for(const method of upstream.native?.delegatedMethods??[])(target.native?.delegatedMethods??[]).includes(method)||pushMissing(drift,"missing-native-method","native",method);return drift.sort((a,b)=>`${a.section}:${a.member}:${a.code}`.localeCompare(`${b.section}:${b.member}:${b.code}`))}function validateSurface(surface,label,findings){if(!surface||typeof surface!="object"){findings.push(`${label}: missing normalized surface`);return}for(const section of SURFACE_SECTIONS)section==="form"||section==="native"?(!surface[section]||typeof surface[section]!="object")&&findings.push(`${label}: missing ${section} contract`):Array.isArray(surface[section])||findings.push(`${label}: ${section} must be an array`);for(const event of surface.events??[])["always","never","conditional",UNSPECIFIED_PUBLIC_DOCUMENTATION].includes(event.cancelable)||findings.push(`${label}: event ${event.name} has unreviewed cancelability`),hasOwn(event,"cancelabilityEvidence")&&(event.cancelable!==UNSPECIFIED_PUBLIC_DOCUMENTATION&&event.cancelabilityEvidence==="pinned-runtime"||findings.push(`${label}: event ${event.name} has malformed cancelability evidence`));for(const method of surface.methods??[]){if(!hasOwn(method,"edgeSemantics"))continue;const edgeSemantics=method.edgeSemantics,caseNames=new Set;exactObjectKeys(edgeSemantics,["evidence","cases"])&&edgeSemantics.evidence==="pinned-runtime"&&Array.isArray(edgeSemantics.cases)&&edgeSemantics.cases.length>0&&edgeSemantics.cases.every(entry=>!exactObjectKeys(entry,["case","arguments","outcome"])||typeof entry.case!="string"||!entry.case.trim()||caseNames.has(entry.case)||!Array.isArray(entry.arguments)||!entry.arguments.every(argument=>typeof argument=="string"&&!!argument.trim())||!validMethodEdgeOutcome(entry.outcome)?!1:(caseNames.add(entry.case),!0))||findings.push(`${label}: method ${method.name} has malformed edge-semantics evidence`)}}function validateRewrites(mapping,findings){if(!mapping.rewrites||typeof mapping.rewrites!="object"){findings.push(`${mapping.upstreamTag}: missing deterministic rewrite contract`);return}for(const section of REWRITE_RULE_SECTIONS)Array.isArray(mapping.rewrites[section])||findings.push(`${mapping.upstreamTag}: rewrites.${section} must be an array`);for(const section of Object.keys(mapping.rewrites))REWRITE_RULE_SECTIONS.includes(section)||findings.push(`${mapping.upstreamTag}: unknown rewrite section ${section}`);for(const section of REWRITE_RULE_SECTIONS.filter(name=>name!=="defaults")){const seen=new Set;for(const rule of mapping.rewrites[section]??[]){const keys=rule&&typeof rule=="object"?Object.keys(rule):[];if(!rule||typeof rule.from!="string"||!rule.from||typeof rule.to!="string"||!rule.to||keys.some(key=>key!=="from"&&key!=="to")){findings.push(`${mapping.upstreamTag}: invalid rewrites.${section} rule`);continue}rule.from===rule.to&&findings.push(`${mapping.upstreamTag}: identity rewrites.${section} rule`),seen.has(rule.from)&&findings.push(`${mapping.upstreamTag}: duplicate rewrites.${section} source ${rule.from}`),seen.add(rule.from)}}const seenDefaults=new Set;for(const rule of mapping.rewrites.defaults??[]){const action=rule?.action,allowedKeys=action==="insert-if-absent"?new Set(["memberKind","member","action","value"]):action==="replace-value"?new Set(["memberKind","member","action","from","to"]):new Set,keys=rule&&typeof rule=="object"?Object.keys(rule):[];if(!((rule?.memberKind==="attribute"||rule?.memberKind==="property")&&typeof rule.member=="string"&&!!rule.member&&allowedKeys.size>0&&keys.every(key2=>allowedKeys.has(key2))&&(action==="insert-if-absent"?rule.memberKind==="attribute"&&Object.hasOwn(rule,"value")&&(rule.value===null||["string","boolean"].includes(typeof rule.value)||typeof rule.value=="number"&&Number.isFinite(rule.value)):Object.hasOwn(rule,"from")&&Object.hasOwn(rule,"to")&&rule.from!==rule.to&&[rule.from,rule.to].every(value=>value===null||["string","boolean"].includes(typeof value)||typeof value=="number"&&Number.isFinite(value))))){findings.push(`${mapping.upstreamTag}: invalid rewrites.defaults rule`);continue}const key=`${rule.memberKind}:${rule.member}:${action}`;seenDefaults.has(key)&&findings.push(`${mapping.upstreamTag}: duplicate rewrites.defaults rule ${key}`),seenDefaults.add(key)}}function validateDefaultRewriteSemantics(mapping,{upstream,target}={}){const findings=[];for(const rule of mapping.rewrites?.defaults??[]){if(rule?.action!=="insert-if-absent")continue;const section=rule.memberKind==="attribute"?"attributes":"properties",sourceMember=(upstream?.[section]??[]).find(entry=>entry.name===rule.member),targetMember=(target?.[section]??[]).find(entry=>entry.name===rule.member);sourceMember?(!sourceMember.hasDefault||sourceMember.default!==rule.value)&&findings.push(`${mapping.upstreamTag}: stale upstream default rewrite ${rule.memberKind}:${rule.member}`):findings.push(`${mapping.upstreamTag}: dangling upstream default rewrite ${rule.memberKind}:${rule.member}`),targetMember?targetMember.hasDefault&&targetMember.default===rule.value&&findings.push(`${mapping.upstreamTag}: stale target default rewrite ${rule.memberKind}:${rule.member}`):findings.push(`${mapping.upstreamTag}: dangling target default rewrite ${rule.memberKind}:${rule.member}`)}return findings}function isReviewedScalar(value){return value===null||typeof value=="string"||typeof value=="boolean"||typeof value=="number"&&Number.isFinite(value)}function validateMappingNormalizations(mapping,{upstream,target}={}){const findings=[],normalizations=mapping.normalizations;if(normalizations===void 0)return findings;if(!normalizations||typeof normalizations!="object"||Array.isArray(normalizations))return[`${mapping.upstreamTag}: normalizations must be an object`];for(const section of NORMALIZATION_SECTIONS)Array.isArray(normalizations[section])||findings.push(`${mapping.upstreamTag}: normalizations.${section} must be an array`);for(const section of Object.keys(normalizations))NORMALIZATION_SECTIONS.includes(section)||findings.push(`${mapping.upstreamTag}: unknown normalization section ${section}`);const attributeRewrites=new Map((mapping.rewrites?.attributes??[]).map(entry=>[entry.from,entry.to])),propertyRewrites=new Map((mapping.rewrites?.properties??[]).map(entry=>[entry.from,entry.to])),seenAttributeProperties=new Set;for(const rule of normalizations.attributePropertyEquivalences??[]){if(!(typeof rule?.attribute=="string"&&!!rule.attribute&&typeof rule.upstream=="string"&&!!rule.upstream&&typeof rule.target=="string"&&!!rule.target&&Object.keys(rule).length===3)){findings.push(`${mapping.upstreamTag}: invalid normalizations.attributePropertyEquivalences rule`);continue}seenAttributeProperties.has(rule.attribute)&&findings.push(`${mapping.upstreamTag}: duplicate attribute-property normalization ${rule.attribute}`),seenAttributeProperties.add(rule.attribute);const source=(upstream?.attributes??[]).find(entry=>entry.name===rule.attribute),targetName=attributeRewrites.get(rule.attribute)||rule.attribute,candidate=(target?.attributes??[]).find(entry=>entry.name===targetName);source?source.property!==rule.upstream&&findings.push(`${mapping.upstreamTag}: stale upstream attribute-property normalization ${rule.attribute}`):findings.push(`${mapping.upstreamTag}: dangling upstream attribute-property normalization ${rule.attribute}`),candidate?candidate.property!==rule.target?findings.push(`${mapping.upstreamTag}: stale target attribute-property normalization ${rule.attribute}`):(propertyRewrites.get(rule.upstream)||rule.upstream)===rule.target&&findings.push(`${mapping.upstreamTag}: stale equivalent attribute-property normalization ${rule.attribute}`):findings.push(`${mapping.upstreamTag}: dangling target attribute-property normalization ${rule.attribute}`)}const seenReflections=new Set;for(const rule of normalizations.reflectionEquivalences??[]){if(!(["attribute","property"].includes(rule?.memberKind)&&typeof rule.member=="string"&&!!rule.member&&typeof rule.upstream=="boolean"&&typeof rule.target=="boolean"&&rule.upstream!==rule.target&&Object.keys(rule).length===4)){findings.push(`${mapping.upstreamTag}: invalid normalizations.reflectionEquivalences rule`);continue}const key=`${rule.memberKind}:${rule.member}`;seenReflections.has(key)&&findings.push(`${mapping.upstreamTag}: duplicate reflection normalization ${key}`),seenReflections.add(key);const section=rule.memberKind==="attribute"?"attributes":"properties",rewrites=rule.memberKind==="attribute"?attributeRewrites:propertyRewrites,source=(upstream?.[section]??[]).find(entry=>entry.name===rule.member),candidate=(target?.[section]??[]).find(entry=>entry.name===(rewrites.get(rule.member)||rule.member));source?source.reflects!==rule.upstream&&findings.push(`${mapping.upstreamTag}: stale upstream reflection normalization ${key}`):findings.push(`${mapping.upstreamTag}: dangling upstream reflection normalization ${key}`),candidate?candidate.reflects!==rule.target&&findings.push(`${mapping.upstreamTag}: stale target reflection normalization ${key}`):findings.push(`${mapping.upstreamTag}: dangling target reflection normalization ${key}`)}const seenCssDefaults=new Set;for(const rule of normalizations.cssDefaultEquivalences??[]){const expectedKeys=new Set(["member","upstreamHasDefault","targetHasDefault"]);rule?.upstreamHasDefault===!0&&expectedKeys.add("upstream"),rule?.targetHasDefault===!0&&expectedKeys.add("target");const keys=rule&&typeof rule=="object"?Object.keys(rule):[];if(!(typeof rule?.member=="string"&&!!rule.member&&typeof rule.upstreamHasDefault=="boolean"&&typeof rule.targetHasDefault=="boolean"&&(rule.upstreamHasDefault!==!0||isReviewedScalar(rule.upstream))&&(rule.targetHasDefault!==!0||isReviewedScalar(rule.target))&&keys.length===expectedKeys.size&&keys.every(key=>expectedKeys.has(key))&&(rule.upstreamHasDefault!==rule.targetHasDefault||rule.upstreamHasDefault&&rule.upstream!==rule.target))){findings.push(`${mapping.upstreamTag}: invalid normalizations.cssDefaultEquivalences rule`);continue}seenCssDefaults.has(rule.member)&&findings.push(`${mapping.upstreamTag}: duplicate CSS-default normalization ${rule.member}`),seenCssDefaults.add(rule.member);const source=(upstream?.cssProperties??[]).find(entry=>entry.name===rule.member),targetName=new Map((mapping.rewrites?.cssProperties??[]).map(entry=>[entry.from,entry.to])).get(rule.member)||rule.member,candidate=(target?.cssProperties??[]).find(entry=>entry.name===targetName);source?(source.hasDefault!==rule.upstreamHasDefault||rule.upstreamHasDefault&&source.default!==rule.upstream)&&findings.push(`${mapping.upstreamTag}: stale upstream CSS-default normalization ${rule.member}`):findings.push(`${mapping.upstreamTag}: dangling upstream CSS-default normalization ${rule.member}`),candidate?(candidate.hasDefault!==rule.targetHasDefault||rule.targetHasDefault&&candidate.default!==rule.target)&&findings.push(`${mapping.upstreamTag}: stale target CSS-default normalization ${rule.member}`):findings.push(`${mapping.upstreamTag}: dangling target CSS-default normalization ${rule.member}`)}const seenDeprecations=new Set;for(const rule of normalizations.deprecationEquivalences??[]){if(!(["attributes","properties","slots","events","parts","cssProperties","cssStates","methods","staticProperties","staticMethods","moduleExports"].includes(rule?.section)&&typeof rule.member=="string"&&!!rule.member&&typeof rule.upstreamDeprecated=="boolean"&&(rule.upstreamReplacement===null||typeof rule.upstreamReplacement=="string")&&typeof rule.targetDeprecated=="boolean"&&(rule.targetReplacement===null||typeof rule.targetReplacement=="string")&&Object.keys(rule).length===6)){findings.push(`${mapping.upstreamTag}: invalid normalizations.deprecationEquivalences rule`);continue}const key=`${rule.section}:${rule.member}`;seenDeprecations.has(key)&&findings.push(`${mapping.upstreamTag}: duplicate deprecation normalization ${key}`),seenDeprecations.add(key);const sectionRewrites=new Map((mapping.rewrites?.[rule.section]??[]).map(entry=>[entry.from,entry.to])),targetName=sectionRewrites.get(rule.member)||rule.member,source=(upstream?.[rule.section]??[]).find(entry=>entry.name===rule.member),candidate=(target?.[rule.section]??[]).find(entry=>entry.name===targetName);if(!source){findings.push(`${mapping.upstreamTag}: dangling upstream deprecation normalization ${key}`);continue}if(!candidate){findings.push(`${mapping.upstreamTag}: dangling target deprecation normalization ${key}`);continue}const sourceDeprecated=!!source.deprecated,sourceReplacement=deprecationReplacement(source.deprecated),targetDeprecated=!!candidate.deprecated,targetReplacement=deprecationReplacement(candidate.deprecated);(sourceDeprecated!==rule.upstreamDeprecated||sourceReplacement!==rule.upstreamReplacement)&&findings.push(`${mapping.upstreamTag}: stale upstream deprecation normalization ${key}`),(targetDeprecated!==rule.targetDeprecated||targetReplacement!==rule.targetReplacement)&&findings.push(`${mapping.upstreamTag}: stale target deprecation normalization ${key}`);const expectedReplacement=rewriteDeprecationReplacement(sourceReplacement,sectionRewrites);sourceDeprecated===targetDeprecated&&expectedReplacement===targetReplacement&&findings.push(`${mapping.upstreamTag}: stale equivalent deprecation normalization ${key}`)}const seenStructuralAliases=new Set,structuralAliasRules=new Map;for(const rule of normalizations.structuralTypeAliases??[]){const keys=rule&&typeof rule=="object"?Object.keys(rule):[];if(!(typeof rule?.name=="string"&&/^[A-Za-z_$][A-Za-z0-9_$]*$/u.test(rule.name)&&typeof rule.target=="string"&&!!rule.target.trim()&&!containsAnyTypeKeyword(rule.target)&&!containsUnknownTypeKeyword(rule.target)&&!containsTemplateInterpolation(rule.target)&&keys.length===2&&keys.every(key=>key==="name"||key==="target"))){findings.push(`${mapping.upstreamTag}: invalid normalizations.structuralTypeAliases rule`);continue}seenStructuralAliases.has(rule.name)&&findings.push(`${mapping.upstreamTag}: duplicate structural type alias ${rule.name}`),seenStructuralAliases.add(rule.name),structuralAliasRules.set(rule.name,rule.target)}const reachableStructuralAliases=new Set,visitStructuralAlias=(name,trail=new Set)=>{if(trail.has(name)){findings.push(`${mapping.upstreamTag}: cyclic structural type alias ${name}`);return}if(reachableStructuralAliases.has(name))return;const targetType=structuralAliasRules.get(name);if(targetType===void 0)return;reachableStructuralAliases.add(name);const nextTrail=new Set([...trail,name]);for(const candidate of structuralAliasRules.keys())typeContainsIdentifier(targetType,candidate)&&visitStructuralAlias(candidate,nextTrail)};for(const event of target?.events??[])for(const name of structuralAliasRules.keys())typeContainsIdentifier(event.type,name)&&visitStructuralAlias(name);for(const name of structuralAliasRules.keys())reachableStructuralAliases.has(name)||findings.push(`${mapping.upstreamTag}: stale structural type alias ${name}`);const seenTypes=new Set;for(const rule of normalizations.typeEquivalences??[]){const keys=rule&&typeof rule=="object"?Object.keys(rule):[];if(!((rule?.memberKind==="attribute"||rule?.memberKind==="property"||rule?.memberKind==="event"||rule?.memberKind==="staticProperty"||rule?.memberKind==="moduleExport")&&typeof rule.member=="string"&&!!rule.member&&typeof rule.upstream=="string"&&!!rule.upstream&&typeof rule.target=="string"&&!!rule.target&&rule.upstream!==rule.target&&keys.length===4&&keys.every(key2=>["memberKind","member","upstream","target"].includes(key2)))){findings.push(`${mapping.upstreamTag}: invalid normalizations.typeEquivalences rule`);continue}const key=normalizationKey(rule.memberKind,rule.member);(containsAnyTypeKeyword(rule.upstream)||containsAnyTypeKeyword(rule.target)||rule.memberKind==="event"&&isBareCustomEventType(rule.target))&&findings.push(`${mapping.upstreamTag}: unsafe any type normalization ${key}`),rule.memberKind==="event"&&(isUnknownEventType(rule.upstream)||isUnknownEventType(rule.target))&&findings.push(`${mapping.upstreamTag}: unsafe unknown event type normalization ${key}`),seenTypes.has(key)&&findings.push(`${mapping.upstreamTag}: duplicate normalizations.typeEquivalences rule ${key}`),seenTypes.add(key);const section=rule.memberKind==="attribute"?"attributes":rule.memberKind==="property"?"properties":rule.memberKind==="event"?"events":rule.memberKind==="staticProperty"?"staticProperties":"moduleExports",rewrites=new Map((mapping.rewrites?.[section]??[]).map(entry=>[entry.from,entry.to])),upstreamPrefix=mapping.upstreamTag?.startsWith("wa-")?"wa-":"sl-",targetName=rewrites.get(rule.member)||(rule.memberKind==="event"?mappedEventName(rule.member,upstreamPrefix):rule.member),upstreamMember=(upstream?.[section]??[]).find(entry=>entry.name===rule.member),targetMember=(target?.[section]??[]).find(entry=>entry.name===targetName);rule.memberKind==="property"&&(upstream?.attributes??[]).some(attribute=>attribute.property===rule.member)&&findings.push(`${mapping.upstreamTag}: unreachable property type normalization ${key}`),upstreamMember?(!hasPublishedType(upstreamMember.type)||upstreamMember.type!==rule.upstream)&&findings.push(`${mapping.upstreamTag}: stale upstream type normalization ${key}`):findings.push(`${mapping.upstreamTag}: dangling upstream type normalization ${key}`),targetMember?targetMember.type!==rule.target?findings.push(`${mapping.upstreamTag}: stale target type normalization ${key}`):upstreamMember&&hasPublishedType(upstreamMember.type)&&(rule.memberKind==="event"?eventTypeCompatible(mappedPublicType(upstreamMember.type,upstreamPrefix),targetMember.type,normalizations):publicTypeCompatible(mappedPublicType(upstreamMember.type,upstreamPrefix),targetMember.type))&&findings.push(`${mapping.upstreamTag}: stale compatible type normalization ${key}`):findings.push(`${mapping.upstreamTag}: dangling target type normalization ${key}`)}const methodRewrites=new Map((mapping.rewrites?.methods??[]).map(entry=>[entry.from,entry.to])),seenMethodParameters=new Set;for(const rule of normalizations.methodParameterTypeEquivalences??[]){const keys=rule&&typeof rule=="object"?Object.keys(rule):[];if(!(typeof rule?.method=="string"&&!!rule.method.trim()&&typeof rule.parameter=="string"&&!!rule.parameter.trim()&&typeof rule.upstream=="string"&&!!rule.upstream.trim()&&rule.upstream!==UNSPECIFIED_PUBLIC_DOCUMENTATION&&typeof rule.target=="string"&&!!rule.target.trim()&&rule.target!==UNSPECIFIED_PUBLIC_DOCUMENTATION&&rule.upstream!==rule.target&&keys.length===4&&keys.every(key2=>["method","parameter","upstream","target"].includes(key2)))){findings.push(`${mapping.upstreamTag}: invalid normalizations.methodParameterTypeEquivalences rule`);continue}const key=`${rule.method}:${rule.parameter}`;seenMethodParameters.has(key)&&findings.push(`${mapping.upstreamTag}: duplicate normalizations.methodParameterTypeEquivalences rule ${key}`),seenMethodParameters.add(key),(containsAnyTypeKeyword(rule.upstream)||containsAnyTypeKeyword(rule.target))&&findings.push(`${mapping.upstreamTag}: unsafe any method-parameter type normalization ${key}`),(containsUnknownTypeKeyword(rule.upstream)||containsUnknownTypeKeyword(rule.target))&&findings.push(`${mapping.upstreamTag}: unsafe unknown method-parameter type normalization ${key}`),(containsTemplateInterpolation(rule.upstream)||containsTemplateInterpolation(rule.target))&&findings.push(`${mapping.upstreamTag}: unsafe template interpolation method-parameter type normalization ${key}`);const upstreamMethod=(upstream?.methods??[]).find(entry=>entry.name===rule.method),targetMethodName=methodRewrites.get(rule.method)||rule.method,targetMethod=(target?.methods??[]).find(entry=>entry.name===targetMethodName),upstreamParameters=(upstreamMethod?.overloads??[]).flatMap(overload=>overload.parameters??[]),targetParameters=(targetMethod?.overloads??[]).flatMap(overload=>overload.parameters??[]),upstreamParameter=upstreamParameters.find(entry=>entry.name===rule.parameter),targetParameter=targetParameters.find(entry=>entry.name===rule.parameter);upstreamMethod?upstreamParameter?upstreamParameter.type!==rule.upstream&&findings.push(`${mapping.upstreamTag}: stale upstream method-parameter type normalization ${key}`):findings.push(`${mapping.upstreamTag}: dangling upstream method parameter normalization ${key}`):findings.push(`${mapping.upstreamTag}: dangling upstream method-parameter type normalization ${key}`),targetMethod?targetParameter?targetParameter.type!==rule.target?findings.push(`${mapping.upstreamTag}: stale target method-parameter type normalization ${key}`):mappedPublicType(rule.upstream,mapping.upstreamTag?.startsWith("wa-")?"wa-":"sl-")===targetParameter.type&&findings.push(`${mapping.upstreamTag}: stale compatible method-parameter type normalization ${key}`):findings.push(`${mapping.upstreamTag}: dangling target method parameter normalization ${key}`):findings.push(`${mapping.upstreamTag}: dangling target method-parameter type normalization ${key}`)}const seenDefaults=new Set;for(const rule of normalizations.defaultEquivalences??[]){const keys=rule&&typeof rule=="object"?Object.keys(rule):[];if(!((rule?.memberKind==="attribute"||rule?.memberKind==="property")&&typeof rule.member=="string"&&!!rule.member&&Object.hasOwn(rule,"upstream")&&Object.hasOwn(rule,"target")&&isReviewedScalar(rule.upstream)&&isReviewedScalar(rule.target)&&rule.upstream!==rule.target&&keys.length===4&&keys.every(key2=>["memberKind","member","upstream","target"].includes(key2)))){findings.push(`${mapping.upstreamTag}: invalid normalizations.defaultEquivalences rule`);continue}const key=normalizationKey(rule.memberKind,rule.member);seenDefaults.has(key)&&findings.push(`${mapping.upstreamTag}: duplicate normalizations.defaultEquivalences rule ${key}`),seenDefaults.add(key);const section=rule.memberKind==="attribute"?"attributes":"properties",upstreamMember=(upstream?.[section]??[]).find(entry=>entry.name===rule.member),targetMember=(target?.[section]??[]).find(entry=>entry.name===rule.member);upstreamMember?(!upstreamMember.hasDefault||upstreamMember.default!==rule.upstream)&&findings.push(`${mapping.upstreamTag}: stale upstream default normalization ${key}`):findings.push(`${mapping.upstreamTag}: dangling upstream normalization member ${key}`),targetMember?(!targetMember.hasDefault||targetMember.default!==rule.target)&&findings.push(`${mapping.upstreamTag}: stale target default normalization ${key}`):findings.push(`${mapping.upstreamTag}: dangling target normalization member ${key}`)}const seenAttributes=new Set,seenProperties=new Set;for(const rule of normalizations.inferredAttributeSuppressions??[]){const keys=rule&&typeof rule=="object"?Object.keys(rule):[];if(!(typeof rule?.attribute=="string"&&!!rule.attribute&&typeof rule.property=="string"&&!!rule.property&&(rule.explicit===void 0||rule.explicit===!0)&&keys.every(key=>key==="attribute"||key==="property"||key==="explicit"))){findings.push(`${mapping.upstreamTag}: invalid normalizations.inferredAttributeSuppressions rule`);continue}(seenAttributes.has(rule.attribute)||seenProperties.has(rule.property))&&findings.push(`${mapping.upstreamTag}: duplicate normalizations.inferredAttributeSuppressions rule ${rule.attribute}:${rule.property}`),seenAttributes.add(rule.attribute),seenProperties.add(rule.property);const upstreamAttribute=(upstream?.attributes??[]).find(entry=>entry.name===rule.attribute),upstreamProperty=(upstream?.properties??[]).find(entry=>entry.name===rule.property),targetAttribute=(target?.attributes??[]).find(entry=>entry.name===rule.attribute),targetProperty=(target?.properties??[]).find(entry=>entry.name===rule.property);upstreamAttribute?(upstreamAttribute.inferred!==!0&&rule.explicit!==!0&&findings.push(`${mapping.upstreamTag}: cannot suppress explicit upstream attribute ${rule.attribute}`),upstreamAttribute.inferred===!0&&rule.explicit===!0&&findings.push(`${mapping.upstreamTag}: stale explicit attribute suppression ${rule.attribute}`),upstreamAttribute.property!==rule.property&&findings.push(`${mapping.upstreamTag}: stale inferred attribute property ${rule.attribute}:${rule.property}`)):findings.push(`${mapping.upstreamTag}: dangling inferred upstream attribute ${rule.attribute}`),upstreamProperty||findings.push(`${mapping.upstreamTag}: dangling inferred upstream property ${rule.property}`),targetProperty||findings.push(`${mapping.upstreamTag}: dangling inferred target property ${rule.property}`),targetAttribute&&findings.push(`${mapping.upstreamTag}: stale inferred attribute suppression ${rule.attribute}`)}const seenDerivedDefaults=new Set;for(const rule of normalizations.derivedDefaultEquivalences??[]){const keys=rule&&typeof rule=="object"?Object.keys(rule):[];if(!((rule?.memberKind==="attribute"||rule?.memberKind==="property")&&typeof rule.member=="string"&&!!rule.member&&Object.hasOwn(rule,"upstream")&&Object.hasOwn(rule,"target")&&isReviewedScalar(rule.upstream)&&isReviewedScalar(rule.target)&&keys.length===4&&keys.every(key2=>["memberKind","member","upstream","target"].includes(key2)))){findings.push(`${mapping.upstreamTag}: invalid normalizations.derivedDefaultEquivalences rule`);continue}const key=normalizationKey(rule.memberKind,rule.member);seenDerivedDefaults.has(key)&&findings.push(`${mapping.upstreamTag}: duplicate normalizations.derivedDefaultEquivalences rule ${key}`),seenDerivedDefaults.add(key);const section=rule.memberKind==="attribute"?"attributes":"properties",upstreamMember=(upstream?.[section]??[]).find(entry=>entry.name===rule.member),targetMember=(target?.[section]??[]).find(entry=>entry.name===rule.member);upstreamMember?(!upstreamMember.hasDefault||upstreamMember.default!==rule.upstream)&&findings.push(`${mapping.upstreamTag}: stale derived upstream default ${key}`):findings.push(`${mapping.upstreamTag}: dangling derived-default upstream member ${key}`),targetMember?targetMember.hasDefault&&findings.push(`${mapping.upstreamTag}: stale derived target default ${key}`):findings.push(`${mapping.upstreamTag}: dangling derived-default target member ${key}`)}const seenMethods=new Set;for(const rule of normalizations.unknownMethodReturnTypes??[]){const keys=rule&&typeof rule=="object"?Object.keys(rule):[];if(!(typeof rule?.method=="string"&&!!rule.method&&keys.length===1&&keys[0]==="method")){findings.push(`${mapping.upstreamTag}: invalid normalizations.unknownMethodReturnTypes rule`);continue}seenMethods.has(rule.method)&&findings.push(`${mapping.upstreamTag}: duplicate normalizations.unknownMethodReturnTypes rule ${rule.method}`),seenMethods.add(rule.method);const upstreamMethod=(upstream?.methods??[]).find(entry=>entry.name===rule.method),targetMethod=(target?.methods??[]).find(entry=>entry.name===rule.method);upstreamMethod?(upstreamMethod.overloads??[]).some(overload=>overload.returnType==="unknown"||overload.returnType===UNSPECIFIED_PUBLIC_DOCUMENTATION)||findings.push(`${mapping.upstreamTag}: stale unknown-return normalization ${rule.method}`):findings.push(`${mapping.upstreamTag}: dangling unknown-return upstream method ${rule.method}`),targetMethod?(targetMethod.overloads??[]).every(overload=>overload.returnType==="unknown"||overload.returnType===UNSPECIFIED_PUBLIC_DOCUMENTATION)&&findings.push(`${mapping.upstreamTag}: stale concrete target return normalization ${rule.method}`):findings.push(`${mapping.upstreamTag}: dangling unknown-return target method ${rule.method}`)}const seenCancelabilities=new Set,cancelabilityPrefix=mapping.upstreamTag?.startsWith("sl-")?"sl-":"wa-",cancelabilityEventRewrites=new Map((mapping.rewrites?.events??[]).map(entry=>[entry.from,entry.to]));for(const[section,allowedKeys]of[["cancelabilityEquivalences",["event","upstream","target"]],["cancelabilityPathAdditions",["event","upstream","target","addedPath"]]])for(const rule of normalizations[section]??[]){const keys=rule&&typeof rule=="object"?Object.keys(rule):[];if(!(typeof rule?.event=="string"&&!!rule.event&&CANCELABILITY_RANK.has(rule.upstream)&&CANCELABILITY_RANK.has(rule.target)&&keys.length===allowedKeys.length&&keys.every(key=>allowedKeys.includes(key))&&(section==="cancelabilityEquivalences"?CANCELABILITY_RANK.get(rule.target)>CANCELABILITY_RANK.get(rule.upstream):rule.upstream==="always"&&rule.target==="conditional"&&typeof rule.addedPath=="string"&&!!rule.addedPath))){findings.push(`${mapping.upstreamTag}: invalid normalizations.${section} rule`);continue}seenCancelabilities.has(rule.event)&&findings.push(`${mapping.upstreamTag}: duplicate cancelability normalization ${rule.event}`),seenCancelabilities.add(rule.event);const upstreamEvent=(upstream?.events??[]).find(entry=>entry.name===rule.event),targetName=cancelabilityEventRewrites.get(rule.event)||mappedEventName(rule.event,cancelabilityPrefix),targetEvent=(target?.events??[]).find(entry=>entry.name===targetName);upstreamEvent?upstreamEvent.cancelable!==rule.upstream&&findings.push(`${mapping.upstreamTag}: stale upstream cancelability normalization ${rule.event}`):findings.push(`${mapping.upstreamTag}: dangling upstream cancelability normalization ${rule.event}`),targetEvent?targetEvent.cancelable!==rule.target&&findings.push(`${mapping.upstreamTag}: stale target cancelability normalization ${rule.event}`):findings.push(`${mapping.upstreamTag}: dangling target cancelability normalization ${rule.event}`)}return findings.sort()}function manifestDeclarations(manifest){return(manifest.modules??[]).flatMap(module=>(module.declarations??[]).filter(declaration=>declaration.customElement&&declaration.tagName).map(declaration=>({module,declaration}))).sort((a,b)=>a.declaration.tagName.localeCompare(b.declaration.tagName))}function sameJson(left,right){return JSON.stringify(left)===JSON.stringify(right)}function validateLocalMigrations(inventory){const findings=[];if(!Array.isArray(inventory?.localMigrations))return["localMigrations must be an array"];const allowedOrigins=new Set(LOCAL_MIGRATION_ORIGINS),components=new Map((inventory.components??[]).map(component=>[component.tag,component])),seenProfiles=new Set;for(const profile of inventory.localMigrations){if(!profile||typeof profile!="object"||Array.isArray(profile)){findings.push("localMigrations entries must be objects");continue}const unknownProfileKeys=Object.keys(profile).filter(key2=>key2!=="origin"&&key2!=="tag"&&key2!=="defaults");unknownProfileKeys.length&&findings.push(`local migration has unknown key(s) ${unknownProfileKeys.join(", ")}`),allowedOrigins.has(profile.origin)||findings.push(`local migration has unknown origin ${String(profile.origin)}`),(typeof profile.tag!="string"||!profile.tag.startsWith("lr-"))&&findings.push(`local migration needs a valid lr-* tag, got ${String(profile.tag)}`);const key=`${String(profile.origin)}:${String(profile.tag)}`;seenProfiles.has(key)&&findings.push(`duplicate local migration ${key}`),seenProfiles.add(key);const component=components.get(profile.tag);if(component||findings.push(`${key}: target tag is not registered`),!Array.isArray(profile.defaults)||profile.defaults.length===0){findings.push(`${key}: defaults must be a non-empty array`);continue}const attributes=new Map((component?.surface?.attributes??[]).map(attribute=>[attribute.name,attribute])),seenDefaults=new Set;for(const rule of profile.defaults){if(!rule||typeof rule!="object"||Array.isArray(rule)){findings.push(`${key}: default rules must be objects`);continue}const unknownRuleKeys=Object.keys(rule).filter(name=>!["memberKind","member","action","value"].includes(name));if(unknownRuleKeys.length&&findings.push(`${key}: default rule has unknown key(s) ${unknownRuleKeys.join(", ")}`),rule.memberKind!=="attribute"&&findings.push(`${key}: local defaults support only attribute members`),rule.action!=="insert-if-absent"&&findings.push(`${key}: local defaults support only insert-if-absent`),typeof rule.member!="string"||!rule.member){findings.push(`${key}: default rule needs a member`);continue}seenDefaults.has(rule.member)&&findings.push(`${key}: duplicate default member ${rule.member}`),seenDefaults.add(rule.member);const attribute=attributes.get(rule.member);attribute||findings.push(`${key}: unknown target attribute ${rule.member}`),Object.hasOwn(rule,"value")?typeof rule.value!="string"&&typeof rule.value!="boolean"&&!(typeof rule.value=="number"&&Number.isFinite(rule.value))?findings.push(`${key}: ${rule.member} value must be a finite string, number, or boolean`):rule.value===!1?findings.push(`${key}: false boolean insertion requires explicit converter evidence`):rule.value===!0&&!String(attribute?.type).includes("boolean")&&findings.push(`${key}: true presence insertion requires a boolean target attribute ${rule.member}`):findings.push(`${key}: ${rule.member} needs a value`)}}return findings}function validateInventory(inventory,{upstreamTags,lyraManifest,strict=!1}={}){const findings=[];if(inventory.schemaVersion!==INVENTORY_SCHEMA_VERSION&&findings.push(`schemaVersion must be ${INVENTORY_SCHEMA_VERSION}`),Array.isArray(inventory.components)||findings.push("components must be an array"),Array.isArray(inventory.mappings)||findings.push("mappings must be an array"),findings.length)return findings;const lyraByTag=new Map(inventory.components.map(component=>[component.tag,component]));validateAccessibilityProfiles(inventory.accessibilityProfiles,findings),findings.push(...validateLocalMigrations(inventory)),lyraByTag.size!==inventory.components.length&&findings.push("components contain duplicate Lyra tags");const expectedLyra=manifestDeclarations(lyraManifest),normalizedLyraByTag=new Map(normalizeManifest(lyraManifest,{ecosystem:"lyra"}).map(component=>[component.tag,component])),expectedLyraTags=expectedLyra.map(({declaration})=>declaration.tagName),actualLyraTags=[...lyraByTag.keys()].sort();sameJson(actualLyraTags,expectedLyraTags)||findings.push("Lyra tag inventory drifted from custom-elements.json");for(const{declaration}of expectedLyra){const component=lyraByTag.get(declaration.tagName);if(!component)continue;validateSurface(component.surface,component.tag,findings);const expectedSurface=normalizedLyraByTag.get(declaration.tagName)?.surface;sameJson(component.surface,expectedSurface)||findings.push(`${component.tag}: normalized public surface drifted`),(!component.family||!component.classModule||!component.registrationModule)&&findings.push(`${component.tag}: incomplete registration metadata`),(!Array.isArray(component.optionalPeers)||!Array.isArray(component.counterparts))&&findings.push(`${component.tag}: peers/counterparts must be arrays`),component.maturity?.status||findings.push(`${component.tag}: missing maturity classification`),strict&&component.maturity.status==="unclassified"&&findings.push(`${component.tag}: maturity remains unclassified`)}const catalogs={webawesome:[...upstreamTags.webawesome.free,...upstreamTags.webawesome.pro].sort(),shoelace:[...upstreamTags.shoelace.tags].sort()},upstreamByTag=new Map;for(const ecosystem of["webawesome","shoelace"]){const upstream=inventory.upstreams?.[ecosystem];if(!upstream){findings.push(`missing ${ecosystem} inventory`);continue}const expectedPin=upstreamTags[ecosystem];(upstream.version!==expectedPin.version||upstream.commit!==expectedPin.commit)&&findings.push(`${ecosystem}: pin drifted from upstream-tags.json`);const tags=(upstream.components??[]).map(component=>component.tag).sort();sameJson(tags,catalogs[ecosystem])||findings.push(`${ecosystem}: tag catalog drifted from upstream-tags.json`);for(const component of upstream.components??[])upstreamByTag.has(component.tag)&&findings.push(`${component.tag}: duplicate upstream tag`),upstreamByTag.set(component.tag,{ecosystem,component}),validateSurface(component.surface,component.tag,findings),(!component.review?.status||!Array.isArray(component.review.unreviewedSections))&&findings.push(`${component.tag}: missing surface review metadata`),strict&&component.review.status!=="complete"&&findings.push(`${component.tag}: public surface review is incomplete`);const expectedRuntimeEvidence=new Set;for(const observation of expectedPin.runtimeEventCancelability?.events??[]){const key=`${observation.tag}#${observation.event}`;if(expectedRuntimeEvidence.has(key)){findings.push(`${ecosystem}: duplicate runtime cancelability evidence ${key}`);continue}expectedRuntimeEvidence.add(key);const event=(upstream.components??[]).find(entry=>entry.tag===observation.tag)?.surface?.events?.find(entry=>entry.name===observation.event);(event?.cancelable!==observation.cancelable||event?.cancelabilityEvidence!=="pinned-runtime")&&findings.push(`${key}: stored runtime cancelability evidence drifted from upstream-tags.json`)}for(const component of upstream.components??[])for(const event of component.surface?.events??[])event.cancelabilityEvidence&&!expectedRuntimeEvidence.has(`${component.tag}#${event.name}`)&&findings.push(`${component.tag}#${event.name}: stored runtime cancelability evidence is stale`);const expectedMethodEdgeEvidence=new Set;for(const observation of expectedPin.runtimeMethodEdgeSemantics?.methods??[]){const key=`${observation.tag}#${observation.method}`;if(expectedMethodEdgeEvidence.has(key)){findings.push(`${ecosystem}: duplicate runtime method-edge evidence ${key}`);continue}expectedMethodEdgeEvidence.add(key);const method=(upstream.components??[]).find(entry=>entry.tag===observation.tag)?.surface?.methods?.find(entry=>entry.name===observation.method);sameJson(method?.edgeSemantics,{evidence:"pinned-runtime",cases:observation.cases})||findings.push(`${key}: stored runtime method-edge evidence drifted from upstream-tags.json`)}for(const component of upstream.components??[])for(const method of component.surface?.methods??[])method.edgeSemantics&&!expectedMethodEdgeEvidence.has(`${component.tag}#${method.name}`)&&findings.push(`${component.tag}#${method.name}: stored runtime method-edge evidence is stale`)}const mappingByTag=new Map;for(const mapping of inventory.mappings){mappingByTag.has(mapping.upstreamTag)&&findings.push(`${mapping.upstreamTag}: duplicate mapping`),mappingByTag.set(mapping.upstreamTag,mapping),upstreamByTag.has(mapping.upstreamTag)||findings.push(`${mapping.upstreamTag}: fictional upstream mapping`),MAPPING_CLASSIFICATIONS.includes(mapping.classification)||findings.push(`${mapping.upstreamTag}: invalid mapping classification`),validateAccessibilityParity(mapping,inventory.accessibilityProfiles,findings),validateRewrites(mapping,findings),mapping.classification==="exact"&&mapping.rationale!==null&&findings.push(`${mapping.upstreamTag}: exact mappings must not carry a rationale`),mapping.classification==="exact"&&REWRITE_RULE_SECTIONS.some(section=>mapping.rewrites?.[section]?.length)&&findings.push(`${mapping.upstreamTag}: exact mappings cannot declare rewrite rules`),mapping.classification==="rewritten"&&!REWRITE_RULE_SECTIONS.some(section=>mapping.rewrites?.[section]?.length)&&findings.push(`${mapping.upstreamTag}: rewritten mappings need a deterministic rule`),mapping.classification!=="exact"&&!mapping.rationale?.trim()&&findings.push(`${mapping.upstreamTag}: non-exact mapping needs a rationale`),mapping.targetTag&&!lyraByTag.has(mapping.targetTag)&&mapping.classification!=="unsupported"&&findings.push(`${mapping.upstreamTag} -> ${mapping.targetTag}: dangling target`);for(const rewrite of mapping.rewrites?.attributes??[]){const from=polarity(rewrite.from),to=polarity(rewrite.to);from!==to&&(from===-1||to===-1)&&findings.push(`${mapping.upstreamTag}: ${rewrite.from} -> ${rewrite.to} inverts polarity`)}const upstreamEntry=upstreamByTag.get(mapping.upstreamTag)?.component,target=lyraByTag.get(mapping.targetTag);if(findings.push(...validateMethodEdgeParity(mapping,{upstream:upstreamEntry?.surface,target:target?.surface})),findings.push(...validateDefaultRewriteSemantics(mapping,{upstream:upstreamEntry?.surface,target:target?.surface})),findings.push(...validateMappingNormalizations(mapping,{upstream:upstreamEntry?.surface,target:target?.surface})),upstreamEntry?.review.status==="complete"&&target){const expectedDrift=compareMappedSurfaces(upstreamEntry.surface,target.surface,{upstreamPrefix:mapping.upstream==="webawesome"?"wa-":"sl-",rewrites:mapping.rewrites,normalizations:mapping.normalizations});sameJson(mapping.drift,expectedDrift)||findings.push(`${mapping.upstreamTag}: stored surface drift is stale`),mapping.classification==="exact"&&expectedDrift.length&&findings.push(`${mapping.upstreamTag}: exact mapping has ${expectedDrift.length} surface difference(s)`)}const expectedStaticApiReview=deriveStaticApiReviewStatus({upstreamReviewStatus:upstreamEntry?.review.status,targetPresent:!!target,comparisonPerformed:upstreamEntry?.review.status==="complete"&&!!target});mapping.parity?.staticApi!==expectedStaticApiReview&&findings.push(`${mapping.upstreamTag}: static API review status is stale; expected ${expectedStaticApiReview}`),strict&&mapping.classification==="unsupported"&&findings.push(`${mapping.upstreamTag}: unsupported release blocker remains`)}mappingByTag.size!==upstreamByTag.size&&findings.push("not every upstream tag has exactly one mapping decision");for(const tag of upstreamByTag.keys())mappingByTag.has(tag)||findings.push(`${tag}: no mapping decision`);return findings.sort()}function validatePinnedManifests(inventory,{webawesomeManifest,shoelaceManifest,upstreamTags}){const findings=[],manifests={webawesome:{manifest:webawesomeManifest,prefix:"wa-"},shoelace:{manifest:shoelaceManifest,prefix:"sl-"}};for(const[ecosystem,{manifest,prefix}]of Object.entries(manifests)){const checked=new Map(applyRuntimeMethodEdgeSemanticsEvidence(applyRuntimeEventCancelabilityEvidence(normalizeManifest(manifest,{ecosystem}),upstreamTags?.[ecosystem]?.runtimeEventCancelability,{ecosystem,version:upstreamTags?.[ecosystem]?.version??inventory.upstreams[ecosystem].version}),upstreamTags?.[ecosystem]?.runtimeMethodEdgeSemantics,{ecosystem,version:upstreamTags?.[ecosystem]?.version??inventory.upstreams[ecosystem].version}).filter(entry=>entry.tag.startsWith(prefix)).map(entry=>[entry.tag,entry])),stored=new Map(inventory.upstreams[ecosystem].components.map(entry=>[entry.tag,entry]));for(const[tag,entry]of checked){const snapshot=stored.get(tag);if(!snapshot){findings.push(`${tag}: pinned manifest tag is absent from the inventory`);continue}sameJson(snapshot.surface,entry.surface)||findings.push(`${tag}: pinned public surface drifted`),sameJson(snapshot.maturity,entry.maturity)||findings.push(`${tag}: pinned maturity metadata drifted`),snapshot.review.status!=="complete"&&findings.push(`${tag}: pinned manifest surface is marked unreviewed`)}for(const[tag,snapshot]of stored)snapshot.review.source==="published-manifest"&&!checked.has(tag)&&findings.push(`${tag}: stored published-manifest surface is fictional or stale`)}return findings.sort()}function emptySurface(){return{attributes:[],properties:[],slots:[],events:[],parts:[],cssProperties:[],cssStates:[],methods:[],staticProperties:[],staticMethods:[],moduleExports:[],form:{associated:!1,properties:[],methods:[]},native:{forwardedEvents:[],delegatedMethods:[]}}}function familyFromModule(modulePath){return modulePath.split(path.posix.sep)[2]||null}export{ACCESSIBILITY_PROFILE_SECTIONS,INVENTORY_SCHEMA_VERSION,LOCAL_MIGRATION_ORIGINS,LOCAL_MIGRATION_PROFILES,MIGRATION_ATTRIBUTE_EXCLUSIONS,NORMALIZATION_SECTIONS,REWRITE_RULE_SECTIONS,SURFACE_SECTIONS,applyRuntimeEventCancelabilityEvidence,applyRuntimeMethodEdgeSemanticsEvidence,compareAccessibilityProfiles,compareMappedSurfaces,deriveStaticApiReviewStatus,emptyNormalizations,emptyRewrites,emptySurface,eventCancelabilityFromDescription,familyFromModule,normalizeDeclaration,normalizeManifest,validateAccessibilityContract,validateInventory,validateLocalMigrations,validateMappingNormalizations,validateMethodEdgeParity,validatePinnedManifests};
|