UNPKG

eslint-plugin-baseline-js

Version:

Enforce JavaScript Baseline (widely/newly/year) browser compatibility with a single ESLint rule. Prevent runtime errors by catching unsupported JavaScript features during development.

2,513 lines (2,509 loc) 1.05 MB
import { createRequire } from "node:module"; import { builtinRules } from "eslint/use-at-your-own-risk"; import esx from "eslint-plugin-es-x"; //#region src/configs/baseline.ts /** * Recommended config: enable Baseline with Web APIs and JS builtins detection on auto preset. * - baseline: defaults to 'widely' * - includeWebApis/includeJsBuiltins: { preset: 'auto' } */ function recommendedConfig(opts = {}) { const available = opts.available ?? opts.baseline ?? "widely"; const level = opts.level ?? "error"; return { files: ["**/*.{js,cjs,mjs,jsx}"], rules: { "baseline-js/use-baseline": [level, { available, includeWebApis: { preset: "auto" }, includeJsBuiltins: { preset: "auto" } }] } }; } /** * Recommended config for TypeScript-aware projects: * - Uses 'type-aware' preset to require type information for instance-member checks. * - Falls back gracefully when types are unavailable (instance checks are skipped by the rule). */ function recommendedTsConfig(opts = {}) { const available = opts.available ?? opts.baseline ?? "widely"; const level = opts.level ?? "error"; return { files: ["**/*.{ts,tsx}"], rules: { "baseline-js/use-baseline": [level, { available, includeWebApis: { preset: "type-aware" }, includeJsBuiltins: { preset: "type-aware" } }] } }; } //#endregion //#region src/config.ts /** * Named constants for Baseline string options. * Prefer using these to avoid typos in user configs. */ const BASELINE = { WIDELY: "widely", NEWLY: "newly" }; function getBaselineValue(opt) { if (!opt) return BASELINE.WIDELY; return opt.available ?? opt.baseline ?? BASELINE.WIDELY; } //#endregion //#region src/baseline/data/descriptors.api.ts const descriptors$1 = [ { featureId: "a", kind: "instanceMember", iface: "HTMLAnchorElement", prop: "hash" }, { featureId: "a", kind: "instanceMember", iface: "HTMLAnchorElement", prop: "host" }, { featureId: "a", kind: "instanceMember", iface: "HTMLAnchorElement", prop: "hostname" }, { featureId: "a", kind: "instanceMember", iface: "HTMLAnchorElement", prop: "href" }, { featureId: "a", kind: "instanceMember", iface: "HTMLAnchorElement", prop: "hreflang" }, { featureId: "a", kind: "instanceMember", iface: "HTMLAnchorElement", prop: "origin" }, { featureId: "a", kind: "instanceMember", iface: "HTMLAnchorElement", prop: "password" }, { featureId: "a", kind: "instanceMember", iface: "HTMLAnchorElement", prop: "pathname" }, { featureId: "a", kind: "instanceMember", iface: "HTMLAnchorElement", prop: "port" }, { featureId: "a", kind: "instanceMember", iface: "HTMLAnchorElement", prop: "protocol" }, { featureId: "a", kind: "instanceMember", iface: "HTMLAnchorElement", prop: "rel" }, { featureId: "a", kind: "instanceMember", iface: "HTMLAnchorElement", prop: "relList" }, { featureId: "a", kind: "instanceMember", iface: "HTMLAnchorElement", prop: "search" }, { featureId: "a", kind: "instanceMember", iface: "HTMLAnchorElement", prop: "target" }, { featureId: "a", kind: "instanceMember", iface: "HTMLAnchorElement", prop: "text" }, { featureId: "a", kind: "instanceMember", iface: "HTMLAnchorElement", prop: "toString" }, { featureId: "a", kind: "instanceMember", iface: "HTMLAnchorElement", prop: "type" }, { featureId: "a", kind: "instanceMember", iface: "HTMLAnchorElement", prop: "username" }, { featureId: "abortable-fetch", kind: "instanceMember", iface: "Request", prop: "signal" }, { featureId: "abortable-fetch", kind: "instanceMember", iface: "fetch", prop: "init_signal_parameter" }, { featureId: "aborting", kind: "newIdent", name: "AbortController" }, { featureId: "aborting", kind: "instanceMember", iface: "AbortController", prop: "abort" }, { featureId: "aborting", kind: "instanceMember", iface: "AbortController", prop: "signal" }, { featureId: "aborting", kind: "instanceMember", iface: "AbortSignal", prop: "abort_event" }, { featureId: "aborting", kind: "callStatic", base: "AbortSignal", prop: "abort" }, { featureId: "aborting", kind: "instanceMember", iface: "AbortSignal", prop: "aborted" }, { featureId: "aborting", kind: "instanceMember", iface: "AbortSignal", prop: "reason" }, { featureId: "aborting", kind: "instanceMember", iface: "AbortSignal", prop: "throwIfAborted" }, { featureId: "aborting", kind: "callStatic", base: "AbortSignal", prop: "timeout" }, { featureId: "abortsignal-any", kind: "callStatic", base: "AbortSignal", prop: "any" }, { featureId: "accelerometer", kind: "newIdent", name: "Accelerometer" }, { featureId: "accelerometer", kind: "instanceMember", iface: "Accelerometer", prop: "x" }, { featureId: "accelerometer", kind: "instanceMember", iface: "Accelerometer", prop: "y" }, { featureId: "accelerometer", kind: "instanceMember", iface: "Accelerometer", prop: "z" }, { featureId: "accelerometer", kind: "newIdent", name: "GravitySensor" }, { featureId: "accelerometer", kind: "newIdent", name: "LinearAccelerationSensor" }, { featureId: "accelerometer", kind: "instanceMember", iface: "Permissions", prop: "permission_accelerometer" }, { featureId: "accesskey", kind: "instanceMember", iface: "HTMLElement", prop: "accessKey" }, { featureId: "accesskey", kind: "instanceMember", iface: "HTMLElement", prop: "accessKeyLabel" }, { featureId: "active-view-transition", kind: "instanceMember", iface: "ViewTransition", prop: "types" }, { featureId: "active-view-transition", kind: "instanceMember", iface: "ViewTransitionTypeSet", prop: "@@iterator" }, { featureId: "active-view-transition", kind: "instanceMember", iface: "ViewTransitionTypeSet", prop: "add" }, { featureId: "active-view-transition", kind: "instanceMember", iface: "ViewTransitionTypeSet", prop: "clear" }, { featureId: "active-view-transition", kind: "instanceMember", iface: "ViewTransitionTypeSet", prop: "delete" }, { featureId: "active-view-transition", kind: "instanceMember", iface: "ViewTransitionTypeSet", prop: "entries" }, { featureId: "active-view-transition", kind: "instanceMember", iface: "ViewTransitionTypeSet", prop: "forEach" }, { featureId: "active-view-transition", kind: "instanceMember", iface: "ViewTransitionTypeSet", prop: "has" }, { featureId: "active-view-transition", kind: "instanceMember", iface: "ViewTransitionTypeSet", prop: "keys" }, { featureId: "active-view-transition", kind: "instanceMember", iface: "ViewTransitionTypeSet", prop: "size" }, { featureId: "active-view-transition", kind: "instanceMember", iface: "ViewTransitionTypeSet", prop: "values" }, { featureId: "alerts", kind: "member", base: "window", prop: "alert" }, { featureId: "alerts", kind: "member", base: "window", prop: "confirm" }, { featureId: "alerts", kind: "member", base: "window", prop: "prompt" }, { featureId: "ambient-light", kind: "newIdent", name: "AmbientLightSensor" }, { featureId: "ambient-light", kind: "instanceMember", iface: "AmbientLightSensor", prop: "illuminance" }, { featureId: "ambient-light", kind: "instanceMember", iface: "Permissions", prop: "permission_ambient-light-sensor" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "align-self" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "alignSelf" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "block-size" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "blockSize" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "bottom" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "height" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "inline-size" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "inlineSize" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "inset" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "inset-block" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "inset-block-end" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "inset-block-start" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "inset-inline" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "inset-inline-end" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "inset-inline-start" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "insetBlock" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "insetBlockEnd" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "insetBlockStart" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "insetInline" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "insetInlineEnd" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "insetInlineStart" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "justify-self" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "justifySelf" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "left" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "margin" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "margin-block" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "margin-block-end" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "margin-block-start" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "margin-bottom" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "margin-inline" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "margin-inline-end" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "margin-inline-start" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "margin-left" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "margin-right" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "margin-top" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "marginBlock" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "marginBlockEnd" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "marginBlockStart" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "marginBottom" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "marginInline" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "marginInlineEnd" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "marginInlineStart" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "marginLeft" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "marginRight" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "marginTop" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "max-block-size" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "max-height" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "max-inline-size" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "max-width" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "maxBlockSize" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "maxHeight" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "maxInlineSize" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "maxWidth" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "min-block-size" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "min-height" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "min-inline-size" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "min-width" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "minBlockSize" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "minHeight" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "minInlineSize" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "minWidth" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "place-self" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "placeSelf" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "position-anchor" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "position-area" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "positionAnchor" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "positionArea" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "right" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "top" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryDescriptors", prop: "width" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryRule", prop: "name" }, { featureId: "anchor-positioning", kind: "instanceMember", iface: "CSSPositionTryRule", prop: "style" }, { featureId: "angle-instanced-arrays", kind: "instanceMember", iface: "ANGLE_instanced_arrays", prop: "drawArraysInstancedANGLE" }, { featureId: "angle-instanced-arrays", kind: "instanceMember", iface: "ANGLE_instanced_arrays", prop: "drawElementsInstancedANGLE" }, { featureId: "angle-instanced-arrays", kind: "instanceMember", iface: "ANGLE_instanced_arrays", prop: "vertexAttribDivisorANGLE" }, { featureId: "animations-css", kind: "newIdent", name: "AnimationEvent" }, { featureId: "animations-css", kind: "instanceMember", iface: "AnimationEvent", prop: "animationName" }, { featureId: "animations-css", kind: "instanceMember", iface: "AnimationEvent", prop: "elapsedTime" }, { featureId: "animations-css", kind: "instanceMember", iface: "AnimationEvent", prop: "pseudoElement" }, { featureId: "animations-css", kind: "instanceMember", iface: "CSSAnimation", prop: "animationName" }, { featureId: "animations-css", kind: "instanceMember", iface: "CSSKeyframeRule", prop: "keyText" }, { featureId: "animations-css", kind: "instanceMember", iface: "CSSKeyframeRule", prop: "style" }, { featureId: "animations-css", kind: "instanceMember", iface: "CSSKeyframesRule", prop: "appendRule" }, { featureId: "animations-css", kind: "instanceMember", iface: "CSSKeyframesRule", prop: "cssRules" }, { featureId: "animations-css", kind: "instanceMember", iface: "CSSKeyframesRule", prop: "deleteRule" }, { featureId: "animations-css", kind: "instanceMember", iface: "CSSKeyframesRule", prop: "findRule" }, { featureId: "animations-css", kind: "instanceMember", iface: "CSSKeyframesRule", prop: "length" }, { featureId: "animations-css", kind: "instanceMember", iface: "CSSKeyframesRule", prop: "name" }, { featureId: "app-file-handlers", kind: "instanceMember", iface: "LaunchParams", prop: "files" }, { featureId: "app-launch-handler", kind: "instanceMember", iface: "LaunchParams", prop: "targetURL" }, { featureId: "app-launch-handler", kind: "instanceMember", iface: "LaunchQueue", prop: "setConsumer" }, { featureId: "app-launch-handler", kind: "member", base: "window", prop: "launchQueue" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaActiveDescendantElement" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaAtomic" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaAutoComplete" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaBrailleLabel" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaBrailleRoleDescription" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaBusy" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaChecked" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaColCount" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaColIndex" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaColIndexText" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaColSpan" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaControlsElements" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaCurrent" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaDescribedByElements" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaDescription" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaDetailsElements" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaDisabled" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaErrorMessageElements" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaExpanded" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaFlowToElements" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaHasPopup" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaHidden" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaInvalid" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaKeyShortcuts" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaLabel" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaLabelledByElements" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaLevel" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaLive" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaModal" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaMultiLine" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaMultiSelectable" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaOrientation" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaOwnsElements" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaPlaceholder" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaPosInSet" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaPressed" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaReadOnly" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaRelevant" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaRequired" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaRoleDescription" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaRowCount" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaRowIndex" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaRowIndexText" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaRowSpan" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaSelected" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaSetSize" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaSort" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaValueMax" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaValueMin" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaValueNow" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "ariaValueText" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "Element", prop: "role" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaActiveDescendantElement" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaAtomic" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaAutoComplete" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaBrailleLabel" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaBrailleRoleDescription" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaBusy" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaChecked" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaColCount" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaColIndex" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaColIndexText" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaColSpan" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaControlsElements" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaCurrent" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaDescribedByElements" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaDescription" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaDetailsElements" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaDisabled" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaErrorMessageElements" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaExpanded" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaFlowToElements" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaHasPopup" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaHidden" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaInvalid" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaKeyShortcuts" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaLabel" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaLabelledByElements" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaLevel" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaLive" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaModal" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaMultiLine" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaMultiSelectable" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaOrientation" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaOwnsElements" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaPlaceholder" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaPosInSet" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaPressed" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaReadOnly" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaRequired" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaRoleDescription" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaRowCount" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaRowIndex" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaRowIndexText" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaRowSpan" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaSelected" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaSetSize" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaSort" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaValueMax" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaValueMin" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaValueNow" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "ariaValueText" }, { featureId: "aria-attribute-reflection", kind: "instanceMember", iface: "ElementInternals", prop: "role" }, { featureId: "async-clipboard", kind: "instanceMember", iface: "Clipboard", prop: "read" }, { featureId: "async-clipboard", kind: "instanceMember", iface: "Clipboard", prop: "readText" }, { featureId: "async-clipboard", kind: "instanceMember", iface: "Clipboard", prop: "type_image-png" }, { featureId: "async-clipboard", kind: "instanceMember", iface: "Clipboard", prop: "type_text-html" }, { featureId: "async-clipboard", kind: "instanceMember", iface: "Clipboard", prop: "type_text-plain" }, { featureId: "async-clipboard", kind: "instanceMember", iface: "Clipboard", prop: "write" }, { featureId: "async-clipboard", kind: "instanceMember", iface: "Clipboard", prop: "writeText" }, { featureId: "async-clipboard", kind: "newIdent", name: "ClipboardItem" }, { featureId: "async-clipboard", kind: "instanceMember", iface: "ClipboardItem", prop: "getType" }, { featureId: "async-clipboard", kind: "instanceMember", iface: "ClipboardItem", prop: "presentationStyle" }, { featureId: "async-clipboard", kind: "instanceMember", iface: "ClipboardItem", prop: "types" }, { featureId: "async-clipboard", kind: "member", base: "navigator", prop: "clipboard" }, { featureId: "async-clipboard", kind: "instanceMember", iface: "Permissions", prop: "permission_clipboard-write" }, { featureId: "async-iterable-streams", kind: "instanceMember", iface: "ReadableStream", prop: "@@asyncIterator" }, { featureId: "async-iterable-streams", kind: "instanceMember", iface: "ReadableStream", prop: "values" }, { featureId: "attribution-reporting", kind: "instanceMember", iface: "HTMLAnchorElement", prop: "attributionSrc" }, { featureId: "attribution-reporting", kind: "instanceMember", iface: "HTMLAreaElement", prop: "attributionSrc" }, { featureId: "attribution-reporting", kind: "instanceMember", iface: "HTMLImageElement", prop: "attributionSrc" }, { featureId: "attribution-reporting", kind: "instanceMember", iface: "HTMLScriptElement", prop: "attributionSrc" }, { featureId: "attribution-reporting", kind: "instanceMember", iface: "XMLHttpRequest", prop: "setAttributionReporting" }, { featureId: "attribution-reporting", kind: "instanceMember", iface: "fetch", prop: "init_attributionReporting_parameter" }, { featureId: "audio", kind: "instanceMember", iface: "HTMLAudioElement", prop: "Audio" }, { featureId: "audio-session", kind: "instanceMember", iface: "AudioSession", prop: "type" }, { featureId: "audio-session", kind: "member", base: "navigator", prop: "audioSession" }, { featureId: "audio-video-tracks", kind: "instanceMember", iface: "AudioTrack", prop: "enabled" }, { featureId: "audio-video-tracks", kind: "instanceMember", iface: "AudioTrack", prop: "id" }, { featureId: "audio-video-tracks", kind: "instanceMember", iface: "AudioTrack", prop: "kind" }, { featureId: "audio-video-tracks", kind: "instanceMember", iface: "AudioTrack", prop: "label" }, { featureId: "audio-video-tracks", kind: "instanceMember", iface: "AudioTrack", prop: "language" }, { featureId: "audio-video-tracks", kind: "instanceMember", iface: "AudioTrackList", prop: "addtrack_event" }, { featureId: "audio-video-tracks", kind: "instanceMember", iface: "AudioTrackList", prop: "change_event" }, { featureId: "audio-video-tracks", kind: "instanceMember", iface: "AudioTrackList", prop: "getTrackById" }, { featureId: "audio-video-tracks", kind: "instanceMember", iface: "AudioTrackList", prop: "length" }, { featureId: "audio-video-tracks", kind: "instanceMember", iface: "AudioTrackList", prop: "removetrack_event" }, { featureId: "audio-video-tracks", kind: "instanceMember", iface: "HTMLMediaElement", prop: "audioTracks" }, { featureId: "audio-video-tracks", kind: "instanceMember", iface: "HTMLMediaElement", prop: "videoTracks" }, { featureId: "audio-video-tracks", kind: "instanceMember", iface: "VideoTrack", prop: "id" }, { featureId: "audio-video-tracks", kind: "instanceMember", iface: "VideoTrack", prop: "kind" }, { featureId: "audio-video-tracks", kind: "instanceMember", iface: "VideoTrack", prop: "label" }, { featureId: "audio-video-tracks", kind: "instanceMember", iface: "VideoTrack", prop: "language" }, { featureId: "audio-video-tracks", kind: "instanceMember", iface: "VideoTrack", prop: "selected" }, { featureId: "audio-video-tracks", kind: "instanceMember", iface: "VideoTrackList", prop: "addtrack_event" }, { featureId: "audio-video-tracks", kind: "instanceMember", iface: "VideoTrackList", prop: "change_event" }, { featureId: "audio-video-tracks", kind: "instanceMember", iface: "VideoTrackList", prop: "getTrackById" }, { featureId: "audio-video-tracks", kind: "instanceMember", iface: "VideoTrackList", prop: "length" }, { featureId: "audio-video-tracks", kind: "instanceMember", iface: "VideoTrackList", prop: "removetrack_event" }, { featureId: "audio-video-tracks", kind: "instanceMember", iface: "VideoTrackList", prop: "selectedIndex" }, { featureId: "audio-worklet", kind: "instanceMember", iface: "AudioWorkletGlobalScope", prop: "currentFrame" }, { featureId: "audio-worklet", kind: "instanceMember", iface: "AudioWorkletGlobalScope", prop: "currentTime" }, { featureId: "audio-worklet", kind: "instanceMember", iface: "AudioWorkletGlobalScope", prop: "port" }, { featureId: "audio-worklet", kind: "instanceMember", iface: "AudioWorkletGlobalScope", prop: "registerProcessor" }, { featureId: "audio-worklet", kind: "instanceMember", iface: "AudioWorkletGlobalScope", prop: "sampleRate" }, { featureId: "audio-worklet", kind: "newIdent", name: "AudioWorkletNode" }, { featureId: "audio-worklet", kind: "instanceMember", iface: "AudioWorkletNode", prop: "parameters" }, { featureId: "audio-worklet", kind: "instanceMember", iface: "AudioWorkletNode", prop: "port" }, { featureId: "audio-worklet", kind: "instanceMember", iface: "AudioWorkletNode", prop: "processorerror_event" }, { featureId: "audio-worklet", kind: "newIdent", name: "AudioWorkletProcessor" }, { featureId: "audio-worklet", kind: "instanceMember", iface: "AudioWorkletProcessor", prop: "port" }, { featureId: "audio-worklet", kind: "instanceMember", iface: "BaseAudioContext", prop: "audioWorklet" }, { featureId: "audio-worklet", kind: "instanceMember", iface: "Worklet", prop: "addModule" }, { featureId: "autocapitalize", kind: "instanceMember", iface: "HTMLElement", prop: "autocapitalize" }, { featureId: "autocorrect", kind: "instanceMember", iface: "HTMLElement", prop: "autocorrect" }, { featureId: "autofocus", kind: "instanceMember", iface: "HTMLElement", prop: "autofocus" }, { featureId: "autofocus", kind: "instanceMember", iface: "MathMLElement", prop: "autofocus" }, { featureId: "autofocus", kind: "instanceMember", iface: "SVGElement", prop: "autofocus" }, { featureId: "autonomous-custom-elements", kind: "instanceMember", iface: "CustomElementRegistry", prop: "define" }, { featureId: "autonomous-custom-elements", kind: "instanceMember", iface: "CustomElementRegistry", prop: "get" }, { featureId: "autonomous-custom-elements", kind: "instanceMember", iface: "CustomElementRegistry", prop: "getName" }, { featureId: "autonomous-custom-elements", kind: "instanceMember", iface: "CustomElementRegistry", prop: "upgrade" }, { featureId: "autonomous-custom-elements", kind: "instanceMember", iface: "CustomElementRegistry", prop: "whenDefined" }, { featureId: "autonomous-custom-elements", kind: "member", base: "window", prop: "customElements" }, { featureId: "background-fetch", kind: "newIdent", name: "BackgroundFetchEvent" }, { featureId: "background-fetch", kind: "instanceMember", iface: "BackgroundFetchEvent", prop: "registration" }, { featureId: "background-fetch", kind: "instanceMember", iface: "BackgroundFetchManager", prop: "fetch" }, { featureId: "background-fetch", kind: "instanceMember", iface: "BackgroundFetchManager", prop: "get" }, { featureId: "background-fetch", kind: "instanceMember", iface: "BackgroundFetchManager", prop: "getIds" }, { featureId: "background-fetch", kind: "instanceMember", iface: "BackgroundFetchRecord", prop: "request" }, { featureId: "background-fetch", kind: "instanceMember", iface: "BackgroundFetchRecord", prop: "responseReady" }, { featureId: "background-fetch", kind: "instanceMember", iface: "BackgroundFetchRegistration", prop: "abort" }, { featureId: "background-fetch", kind: "instanceMember", iface: "BackgroundFetchRegistration", prop: "downloadTotal" }, { featureId: "background-fetch", kind: "instanceMember", iface: "BackgroundFetchRegistration", prop: "downloaded" }, { featureId: "background-fetch", kind: "instanceMember", iface: "BackgroundFetchRegistration", prop: "failureReason" }, { featureId: "background-fetch", kind: "instanceMember", iface: "BackgroundFetchRegistration", prop: "id" }, { featureId: "background-fetch", kind: "instanceMember", iface: "BackgroundFetchRegistration", prop: "match" }, { featureId: "background-fetch", kind: "instanceMember", iface: "BackgroundFetchRegistration", prop: "matchAll" }, { featureId: "background-fetch", kind: "instanceMember", iface: "BackgroundFetchRegistration", prop: "progress_event" }, { featureId: "background-fetch", kind: "instanceMember", iface: "BackgroundFetchRegistration", prop: "recordsAvailable" }, { featureId: "background-fetch", kind: "instanceMember", iface: "BackgroundFetchRegistration", prop: "result" }, { featureId: "background-fetch", kind: "instanceMember", iface: "BackgroundFetchRegistration", prop: "uploadTotal" }, { featureId: "background-fetch", kind: "instanceMember", iface: "BackgroundFetchRegistration", prop: "uploaded" }, { featureId: "background-fetch", kind: "newIdent", name: "BackgroundFetchUpdateUIEvent" }, { featureId: "background-fetch", kind: "instanceMember", iface: "BackgroundFetchUpdateUIEvent", prop: "updateUI" }, { featureId: "background-fetch", kind: "instanceMember", iface: "ServiceWorkerGlobalScope", prop: "backgroundfetchabort_event" }, { featureId: "background-fetch", kind: "instanceMember", iface: "ServiceWorkerGlobalScope", prop: "backgroundfetchclick_event" }, { featureId: "background-fetch", kind: "instanceMember", iface: "ServiceWorkerGlobalScope", prop: "backgroundfetchfail_event" }, { featureId: "background-fetch", kind: "instanceMember", iface: "ServiceWorkerGlobalScope", prop: "backgroundfetchsuccess_event" }, { featureId: "background-fetch", kind: "instanceMember", iface: "ServiceWorkerRegistration", prop: "backgroundFetch" }, { featureId: "background-sync", kind: "instanceMember", iface: "Permissions", prop: "permission_background-sync" }, { featureId: "background-sync", kind: "instanceMember", iface: "ServiceWorkerGlobalScope", prop: "sync_event" }, { featureId: "background-sync", kind: "instanceMember", iface: "ServiceWorkerRegistration", prop: "sync" }, { featureId: "background-sync", kind: "newIdent", name: "SyncEvent" }, { featureId: "background-sync", kind: "instanceMember", iface: "SyncEvent", prop: "lastChance" }, { featureId: "background-sync", kind: "instanceMember", iface: "SyncEvent", prop: "tag" }, { featureId: "background-sync", kind: "instanceMember", iface: "SyncManager", prop: "getTags" }, { featureId: "background-sync", kind: "instanceMember", iface: "SyncManager", prop: "register" }, { featureId: "background-sync", kind: "instanceMember", iface: "SyncManager", prop: "worker_support" }, { featureId: "badging", kind: "member", base: "navigator", prop: "clearAppBadge" }, { featureId: "badging", kind: "member", base: "navigator", prop: "setAppBadge" }, { featureId: "barcode", kind: "newIdent", name: "BarcodeDetector" }, { featureId: "barcode", kind: "instanceMember", iface: "BarcodeDetector", prop: "detect" }, { featureId: "barcode", kind: "callStatic", base: "BarcodeDetector", prop: "getSupportedFormats" }, { featureId: "barprop", kind: "instanceMember", iface: "BarProp", prop: "visible" }, { featureId: "barprop", kind: "member", base: "window", prop: "locationbar" }, { featureId: "barprop", kind: "member", base: "window", prop: "menubar" }, { featureId: "barprop", kind: "member", base: "window", prop: "personalbar" }, { featureId: "barprop", kind: "member", base: "window", prop: "scrollbars" }, { featureId: "barprop", kind: "member", base: "window", prop: "statusbar" }, { featureId: "barprop", kind: "member", base: "window", prop: "toolbar" }, { featureId: "base", kind: "instanceMember", iface: "HTMLBaseElement", prop: "href" }, { featureId: "base", kind: "instanceMember", iface: "HTMLBaseElement", prop: "target" }, { featureId: "base64encodedecode", kind: "instanceMember", iface: "atob", prop: "worker_support" }, { featureId: "base64encodedecode", kind: "instanceMember", iface: "btoa", prop: "worker_support" }, { featureId: "battery", kind: "instanceMember", iface: "BatteryManager", prop: "charging" }, { featureId: "battery", kind: "instanceMember", iface: "BatteryManager", prop: "chargingTime" }, { featureId: "battery", kind: "instanceMember", iface: "BatteryManager", prop: "chargingchange_event" }, { featureId: "battery", kind: "instanceMember", iface: "BatteryManager", prop: "chargingtimechange_event" }, { featureId: "battery", kind: "instanceMember", iface: "BatteryManager", prop: "dischargingTime" }, { featureId: "battery", kind: "instanceMember", iface: "BatteryManager", prop: "dischargingtimechange_event" }, { featureId: "battery", kind: "instanceMember", iface: "BatteryManager", prop: "level" }, { featureId: "battery", kind: "instanceMember", iface: "BatteryManager", prop: "levelchange_event" }, { featureId: "battery", kind: "instanceMember", iface: "BatteryManager", prop: "secure_context_required" }, { featureId: "battery", kind: "member", base: "navigator", prop: "getBattery" }, { featureId: "beacons", kind: "member", base: "navigator", prop: "sendBeacon" }, { featureId: "beforeinstallprompt", kind: "newIdent", name: "BeforeInstallPromptEvent" }, { featureId: "beforeinstallprompt", kind: "instanceMember", iface: "BeforeInstallPromptEvent", prop: "platforms" }, { featureId: "beforeinstallprompt", kind: "instanceMember", iface: "BeforeInstallPromptEvent", prop: "prompt" }, { featureId: "beforeinstallprompt", kind: "instanceMember", iface: "BeforeInstallPromptEvent", prop: "userChoice" }, { featureId: "beforeinstallprompt", kind: "member", base: "window", prop: "appinstalled_event" }, { featureId: "beforeinstallprompt", kind: "member", base: "window", prop: "beforeinstallprompt_event" }, { featureId: "beforeunload", kind: "instanceMember", iface: "BeforeUnloadEvent", prop: "user_interaction" }, { featureId: "beforeunload", kind: "member", base: "window", prop: "beforeunload_event" }, { featureId: "bfcache-blocking-reasons", kind: "instanceMember", iface: "NotRestoredReasonDetails", prop: "reason" }, { featureId: "bfcache-blocking-reasons", kind: "instanceMember", iface: "NotRestoredReasonDetails", prop: "toJSON" }, { featureId: "bfcache-blocking-reasons", kind: "instanceMember", iface: "NotRestoredReasons", prop: "children" }, { featureId: "bfcache-blocking-reasons", kind: "instanceMember", iface: "NotRestoredReasons", prop: "id" }, { featureId: "bfcache-blocking-reasons", kind: "instanceMember", iface: "NotRestoredReasons", prop: "name" }, { featureId: "bfcache-blocking-reasons", kind: "instanceMember", iface: "NotRestoredReasons", prop: "reasons" }, { featureId: "bfcache-blocking-reasons", kind: "instanceMember", iface: "NotRestoredReasons", prop: "src" }, { featureId: "bfcache-blocking-reasons", kind: "instanceMember", iface: "NotRestoredReasons", prop: "toJSON" }, { featureId: "bfcache-blocking-reasons", kind: "instanceMember", iface: "NotRestoredReasons", prop: "url" }, { featureId: "bfcache-blocking-reasons", kind: "instanceMember", iface: "PerformanceNavigationTiming", prop: "notRestoredReasons" }, { featureId: "blocking-render", kind: "instanceMember", iface: "HTMLLinkElement", prop: "blocking" }, { featureId: "blocking-render", kind: "instanceMember", iface: "HTMLScriptElement", prop: "blocking" }, { featureId: "blocking-render", kind: "instanceMember", iface: "HTMLStyleElement", prop: "blocking" }, { featureId: "broadcast-channel", kind: "newIdent", name: "BroadcastChannel" }, { featureId: "broadcast-channel", kind: "instanceMember", iface: "BroadcastChannel", prop: "close" }, { featureId: "broadcast-channel", kind: "instanceMember", iface: "BroadcastChannel", prop: "message_event" }, { featureId: "broadcast-channel", kind: "instanceMember", iface: "BroadcastChannel", prop: "messageerror_event" }, { featureId: "broadcast-channel", kind: "instanceMember", iface: "BroadcastChannel", prop: "name" }, { featureId: "broadcast-channel", kind: "instanceMember", iface: "BroadcastChannel", prop: "postMessage" }, { featureId: "button", kind: "instanceMember",