@wcstack/devtools 1.26.0 → 1.28.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/README.ja.md +1 -1
- package/dist/auto.min.js +1 -1
- package/dist/auto.min.js.map +1 -1
- package/dist/index.d.ts +42 -1
- package/dist/index.esm.js +0 -0
- package/dist/index.esm.js.map +1 -1
- package/package.json +1 -1
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/protocol/types.ts","../src/protocol/registry.ts","../src/core/formatValue.ts","../src/core/DevtoolsCore.ts","../src/core/declaredScan.ts","../src/shell/WcsDevtools.ts","../src/bootstrapDevtools.ts"],"sourcesContent":["/**\n * protocol/types.ts\n *\n * DevTools Hook Protocol (docs/devtools-hook-protocol.md) の devtools 側型定義。\n *\n * ランタイム(@wcstack/state)側の内部型は import しない — プロトコルは\n * 「文書化された構造」への構造的型付けで両側が独立に実装する(protocol §2)。\n * そのためランタイム内部オブジェクトは *Like インターフェースとして、\n * devtools が実際に触るプロパティだけを宣言する。\n */\n\n/** グローバル registry のプロパティ名 */\nexport const DEVTOOLS_HOOK_GLOBAL = \"__WCSTACK_DEVTOOLS_HOOK__\";\n\n/** プロトコル版。additive change では上げない(protocol §2) */\nexport const DEVTOOLS_PROTOCOL_VERSION = 1;\n\nexport interface IPathInfoLike {\n readonly path: string;\n}\n\nexport interface IAbsolutePathInfoLike {\n readonly stateName: string;\n readonly pathInfo: IPathInfoLike;\n}\n\nexport interface IListIndexLike {\n readonly index: number;\n readonly indexes: number[];\n}\n\nexport interface IAbsoluteAddressLike {\n readonly absolutePathInfo: IAbsolutePathInfoLike;\n readonly listIndex: IListIndexLike | null;\n}\n\nexport interface IBindingLike {\n readonly propName: string;\n readonly statePathName: string;\n readonly stateName: string;\n readonly bindingType: string;\n readonly node: Node;\n readonly replaceNode: Node;\n}\n\nexport interface IStateElementSummaryLike {\n readonly name: string;\n readonly rootNode: Node;\n readonly element: unknown;\n readonly paths: {\n readonly list: ReadonlySet<string>;\n readonly element: ReadonlySet<string>;\n readonly getter: ReadonlySet<string>;\n readonly setter: ReadonlySet<string>;\n };\n readonly commandTokenNames: ReadonlySet<string>;\n readonly eventTokenNames: ReadonlySet<string>;\n readonly staticDependency: ReadonlyMap<string, readonly string[]>;\n readonly dynamicDependency: ReadonlyMap<string, readonly string[]>;\n}\n\nexport type DevtoolsEventLike =\n | {\n readonly type: \"state:element-registered\";\n readonly name: string;\n readonly rootNode: Node;\n readonly element: unknown;\n }\n | {\n readonly type: \"state:element-unregistered\";\n readonly name: string;\n readonly rootNode: Node;\n readonly element: unknown;\n }\n | {\n readonly type: \"state:write\";\n readonly absoluteAddress: IAbsoluteAddressLike;\n readonly value: unknown;\n readonly oldValue: unknown;\n readonly hasOldValue: boolean;\n }\n | {\n readonly type: \"state:update-batch\";\n readonly addresses: ReadonlySet<IAbsoluteAddressLike>;\n }\n | {\n readonly type: \"state:binding-added\";\n readonly absoluteAddress: IAbsoluteAddressLike;\n readonly binding: IBindingLike;\n }\n | {\n readonly type: \"state:binding-removed\";\n readonly absoluteAddress: IAbsoluteAddressLike;\n readonly binding: IBindingLike;\n }\n | {\n readonly type: \"state:binding-cleared\";\n readonly absoluteAddress: IAbsoluteAddressLike;\n }\n | {\n readonly type: \"state:token-emit\";\n readonly kind: \"command\" | \"event\";\n readonly stateName: string | null;\n readonly tokenName: string;\n readonly args: readonly unknown[];\n readonly subscriberCount: number;\n };\n\nexport type DevtoolsSinkLike = (event: DevtoolsEventLike) => void;\n\nexport interface IDevtoolsSourceLike {\n readonly id: string;\n readonly kind: string;\n readonly packageVersion: string;\n getStateElements(): IStateElementSummaryLike[];\n /** protocol v1 追補 API。古いランタイムには無い可能性があるため optional 扱いで呼ぶ */\n keys?(name: string, rootNode: Node): string[];\n read(name: string, rootNode: Node, path: string, indexes?: number[]): unknown;\n write(name: string, rootNode: Node, path: string, value: unknown, indexes?: number[]): void;\n _setSink(sink: DevtoolsSinkLike | null): void;\n}\n\nexport interface IDevtoolsListenerLike {\n onSourceRegistered?(source: IDevtoolsSourceLike): void;\n onSourceUnregistered?(sourceId: string): void;\n onEvent?(sourceId: string, event: DevtoolsEventLike): void;\n}\n\nexport interface IDevtoolsHookRegistryLike {\n readonly version: number;\n readonly sources: Map<string, IDevtoolsSourceLike>;\n register(source: IDevtoolsSourceLike): void;\n unregister(sourceId: string): void;\n addListener(listener: IDevtoolsListenerLike): () => void;\n}\n","/**\n * protocol/registry.ts\n *\n * registry 最小実装の devtools 側コピー(protocol §2)。\n * ロード順非依存にするため、ランタイム側(@wcstack/state の bridge)と\n * devtools 側の両方が同一仕様の最小実装を持ち、先にロードされた方が\n * globalThis に置く(先勝ち・振る舞い差し替えなし)。\n */\n\nimport {\n DEVTOOLS_HOOK_GLOBAL,\n DEVTOOLS_PROTOCOL_VERSION,\n IDevtoolsHookRegistryLike,\n IDevtoolsListenerLike,\n IDevtoolsSourceLike,\n} from \"./types\";\n\nfunction createMinimalRegistry(): IDevtoolsHookRegistryLike {\n const sources = new Map<string, IDevtoolsSourceLike>();\n const listeners = new Set<IDevtoolsListenerLike>();\n const applySink = (source: IDevtoolsSourceLike): void => {\n if (listeners.size === 0) {\n source._setSink(null);\n return;\n }\n const sourceId = source.id;\n source._setSink((event) => {\n for (const listener of listeners) {\n listener.onEvent?.(sourceId, event);\n }\n });\n };\n return {\n version: DEVTOOLS_PROTOCOL_VERSION,\n sources,\n register(source: IDevtoolsSourceLike): void {\n if (sources.has(source.id)) {\n return;\n }\n sources.set(source.id, source);\n applySink(source);\n for (const listener of listeners) {\n listener.onSourceRegistered?.(source);\n }\n },\n unregister(sourceId: string): void {\n const source = sources.get(sourceId);\n if (source === undefined) {\n return;\n }\n source._setSink(null);\n sources.delete(sourceId);\n for (const listener of listeners) {\n listener.onSourceUnregistered?.(sourceId);\n }\n },\n addListener(listener: IDevtoolsListenerLike): () => void {\n listeners.add(listener);\n for (const source of sources.values()) {\n applySink(source);\n listener.onSourceRegistered?.(source);\n }\n return () => {\n if (!listeners.delete(listener)) {\n return;\n }\n for (const source of sources.values()) {\n applySink(source);\n }\n };\n },\n };\n}\n\nexport function getOrCreateHookRegistry(): IDevtoolsHookRegistryLike {\n const globals = globalThis as unknown as Record<string, unknown>;\n const existing = globals[DEVTOOLS_HOOK_GLOBAL] as IDevtoolsHookRegistryLike | undefined;\n if (existing !== undefined) {\n if (existing.version !== DEVTOOLS_PROTOCOL_VERSION) {\n // 先勝ち固定。振る舞いは差し替えない(protocol §2)\n console.warn(\n `[wcstack/devtools] hook registry version mismatch: found ${existing.version}, expected ${DEVTOOLS_PROTOCOL_VERSION}. Keeping the existing registry (first-wins).`\n );\n }\n return existing;\n }\n const registry = createMinimalRegistry();\n globals[DEVTOOLS_HOOK_GLOBAL] = registry;\n return registry;\n}\n","/**\n * core/formatValue.ts\n *\n * 値フォーマッタ(devtools-tag-design.md §6)。\n *\n * 規範:\n * - primitive はそのまま(文字列は引用 + 80 文字上限)\n * - 配列 / plain object は深さ制限 + 要素数制限つきの要約\n * - それ以外(MediaStream, Blob, Element, class インスタンス等)は\n * `[[ClassName]]` タグ表示のみ\n * - structuredClone / JSON.stringify を全値に無差別適用しない\n * (生ハンドル・循環・巨大値対策。camera G1 との共存)\n */\n\nconst MAX_STRING = 80;\nconst MAX_ITEMS = 3;\n\nfunction isPlainObject(value: object): boolean {\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\nfunction className(value: object): string {\n const ctor = (value as { constructor?: { name?: string } }).constructor;\n const name = ctor?.name;\n return typeof name === \"string\" && name.length > 0 ? name : \"Object\";\n}\n\n/**\n * 任意の値を表示用の短い文字列へ変換する。\n * @param value 対象値\n * @param depth 再帰許容深さ(既定 2。0 で複合値は要約タグのみ)\n */\nexport function formatValue(value: unknown, depth: number = 2): string {\n switch (typeof value) {\n case \"string\": {\n const body = value.length > MAX_STRING ? value.slice(0, MAX_STRING) + \"…\" : value;\n return `\"${body}\"`;\n }\n case \"number\":\n case \"boolean\":\n case \"bigint\":\n return String(value);\n case \"symbol\":\n return value.toString();\n case \"undefined\":\n return \"undefined\";\n case \"function\":\n return \"[[Function]]\";\n default:\n break;\n }\n if (value === null) {\n return \"null\";\n }\n const objectValue = value as object;\n if (Array.isArray(objectValue)) {\n if (depth <= 0) {\n return `[[Array(${objectValue.length})]]`;\n }\n const shown = objectValue.slice(0, MAX_ITEMS).map((item) => formatValue(item, depth - 1));\n const rest = objectValue.length > MAX_ITEMS ? `, …(${objectValue.length})` : \"\";\n return `[${shown.join(\", \")}${rest}]`;\n }\n if (isPlainObject(objectValue)) {\n if (depth <= 0) {\n return \"[[Object]]\";\n }\n const keys = Object.keys(objectValue);\n const shown = keys.slice(0, MAX_ITEMS).map(\n (key) => `${key}: ${formatValue((objectValue as Record<string, unknown>)[key], depth - 1)}`\n );\n const rest = keys.length > MAX_ITEMS ? `, …(${keys.length})` : \"\";\n return `{${shown.join(\", \")}${rest}}`;\n }\n // DOM ノード・生ハンドル・class インスタンス等はタグ表示のみ\n return `[[${className(objectValue)}]]`;\n}\n\n/**\n * token 引数の要約(先頭 3 引数 × 各 80 文字上限、devtools-tag-design.md §6)。\n */\nexport function formatArgs(args: readonly unknown[]): string {\n if (args.length === 0) {\n return \"\";\n }\n const shown = args.slice(0, MAX_ITEMS).map((arg) => {\n const text = formatValue(arg, 1);\n return text.length > MAX_STRING ? text.slice(0, MAX_STRING) + \"…\" : text;\n });\n const rest = args.length > MAX_ITEMS ? `, …(${args.length})` : \"\";\n return `${shown.join(\", \")}${rest}`;\n}\n","/**\n * core/DevtoolsCore.ts\n *\n * hook client(devtools-tag-design.md §1)。DOM 非依存の純ロジック層。\n *\n * - registry への addListener / 解除(connect / disconnect)\n * - source 管理と roster(state 要素一覧)の維持\n * - 配線台帳(binding-added/removed イベントから構築。binding は WeakRef 保持)\n * - タイムライン ring buffer(既定 500 件 FIFO)\n * - 予約 prefix `wcs-devtools` の自己除外(protocol §5)\n *\n * 台帳はすべて devtools 側に置く(protocol 原則 2)。disconnect で\n * sources / roster / wiring をクリアし、残留参照を持たない。\n */\n\nimport { getOrCreateHookRegistry } from \"../protocol/registry\";\nimport {\n DevtoolsEventLike,\n IAbsoluteAddressLike,\n IBindingLike,\n IDevtoolsSourceLike,\n IStateElementSummaryLike,\n} from \"../protocol/types\";\nimport { formatArgs, formatValue } from \"./formatValue\";\n\n/** 予約 state 名 prefix(protocol §5)。この prefix の要素・イベントは常に除外 */\nexport const RESERVED_STATE_NAME_PREFIX = \"wcs-devtools\";\n\nconst DEFAULT_TIMELINE_CAPACITY = 500;\n\nexport type TimelineKind =\n | \"write\"\n | \"batch\"\n | \"command\"\n | \"event\"\n | \"element-registered\"\n | \"element-unregistered\";\n\nexport interface ITimelineEntry {\n readonly seq: number;\n readonly time: number;\n readonly sourceId: string;\n readonly kind: TimelineKind;\n readonly stateName: string | null;\n readonly label: string;\n readonly detail: string;\n readonly subscriberCount: number | null;\n}\n\nexport interface IRosterEntry {\n readonly sourceId: string;\n readonly name: string;\n readonly rootNode: Node;\n readonly summary: IStateElementSummaryLike;\n}\n\nexport interface IWiringEntry {\n readonly sourceId: string;\n readonly stateName: string;\n readonly path: string;\n readonly propName: string;\n readonly bindingType: string;\n readonly bindingRef: WeakRef<IBindingLike>;\n}\n\nexport type CoreChangeKind = \"sources\" | \"roster\" | \"wiring\" | \"timeline\";\nexport type CoreChangeListener = (kind: CoreChangeKind) => void;\n\nexport interface IDevtoolsCoreOptions {\n /** タイムライン ring buffer 件数(既定 500) */\n timelineCapacity?: number;\n /** 追加で除外する state 名(予約 prefix は常に除外) */\n hiddenStateNames?: readonly string[];\n}\n\nfunction pathKeyOf(stateName: string, path: string): string {\n return stateName + \"\u0000\" + path;\n}\n\nexport class DevtoolsCore {\n private _timelineCapacity: number;\n private _hiddenStateNames: Set<string>;\n private _removeListener: (() => void) | null = null;\n private _sources: Map<string, IDevtoolsSourceLike> = new Map();\n private _roster: Map<string, IRosterEntry[]> = new Map();\n private _wiringByPathKey: Map<string, Set<IWiringEntry>> = new Map();\n private _wiringEntryByBinding: WeakMap<IBindingLike, IWiringEntry> = new WeakMap();\n private _timeline: ITimelineEntry[] = [];\n private _seq: number = 0;\n private _paused: boolean = false;\n private _changeListeners: Set<CoreChangeListener> = new Set();\n\n constructor(options?: IDevtoolsCoreOptions) {\n this._timelineCapacity = options?.timelineCapacity ?? DEFAULT_TIMELINE_CAPACITY;\n this._hiddenStateNames = new Set(options?.hiddenStateNames ?? []);\n }\n\n get connected(): boolean {\n return this._removeListener !== null;\n }\n\n get paused(): boolean {\n return this._paused;\n }\n\n set paused(value: boolean) {\n this._paused = value;\n }\n\n /** 表示から除外する state 名か(予約 prefix + hiddenStateNames、protocol §5) */\n isHiddenStateName(name: string | null): boolean {\n if (name === null) {\n return false;\n }\n return name.startsWith(RESERVED_STATE_NAME_PREFIX) || this._hiddenStateNames.has(name);\n }\n\n connect(): void {\n if (this._removeListener !== null) {\n return;\n }\n const registry = getOrCreateHookRegistry();\n this._removeListener = registry.addListener({\n onSourceRegistered: (source) => {\n this._sources.set(source.id, source);\n this._refreshRosterOf(source);\n this._notify(\"sources\");\n },\n onSourceUnregistered: (sourceId) => {\n this._sources.delete(sourceId);\n this._roster.delete(sourceId);\n this._notify(\"sources\");\n this._notify(\"roster\");\n },\n onEvent: (sourceId, event) => {\n this._ingest(sourceId, event);\n },\n });\n }\n\n /** 購読解除 + 台帳クリア(タイムラインは保持。protocol §7-2 の残留ゼロ) */\n disconnect(): void {\n if (this._removeListener === null) {\n return;\n }\n this._removeListener();\n this._removeListener = null;\n this._sources.clear();\n this._roster.clear();\n this._wiringByPathKey.clear();\n this._wiringEntryByBinding = new WeakMap();\n this._notify(\"sources\");\n this._notify(\"roster\");\n this._notify(\"wiring\");\n }\n\n onChange(listener: CoreChangeListener): () => void {\n this._changeListeners.add(listener);\n return () => {\n this._changeListeners.delete(listener);\n };\n }\n\n getSources(): IDevtoolsSourceLike[] {\n return [...this._sources.values()];\n }\n\n getRoster(): IRosterEntry[] {\n const entries: IRosterEntry[] = [];\n for (const list of this._roster.values()) {\n entries.push(...list);\n }\n return entries;\n }\n\n /** 全 source の state 要素一覧を pull で取り直す */\n refreshRoster(): void {\n for (const source of this._sources.values()) {\n this._refreshRosterOf(source);\n }\n this._notify(\"roster\");\n }\n\n getTimeline(): readonly ITimelineEntry[] {\n return this._timeline;\n }\n\n clearTimeline(): void {\n this._timeline = [];\n this._notify(\"timeline\");\n }\n\n /** 指定パスに束縛された配線(生存している binding のみ) */\n getWiringForPath(stateName: string, path: string): IWiringEntry[] {\n const set = this._wiringByPathKey.get(pathKeyOf(stateName, path));\n if (set === undefined) {\n return [];\n }\n return this._collectAlive(set);\n }\n\n /** 全配線のスナップショット(生存している binding のみ) */\n getAllWiring(): IWiringEntry[] {\n const result: IWiringEntry[] = [];\n for (const set of this._wiringByPathKey.values()) {\n result.push(...this._collectAlive(set));\n }\n return result;\n }\n\n /** 指定ノード(またはその子孫のバインドノード)に載る配線 */\n getWiringForNode(node: Node): IWiringEntry[] {\n const result: IWiringEntry[] = [];\n for (const set of this._wiringByPathKey.values()) {\n for (const entry of this._collectAlive(set)) {\n const binding = entry.bindingRef.deref()!;\n if (\n binding.node === node ||\n binding.replaceNode === node ||\n node.contains(binding.node) ||\n node.contains(binding.replaceNode)\n ) {\n result.push(entry);\n }\n }\n }\n return result;\n }\n\n /** roster entry の state からトップレベルキーを列挙(keys 未実装ランタイムは空) */\n keysOf(entry: IRosterEntry): string[] {\n const source = this._sources.get(entry.sourceId);\n if (source === undefined || typeof source.keys !== \"function\") {\n return [];\n }\n return source.keys(entry.name, entry.rootNode);\n }\n\n readValue(entry: IRosterEntry, path: string, indexes?: number[]): unknown {\n const source = this._sources.get(entry.sourceId);\n if (source === undefined) {\n return undefined;\n }\n return source.read(entry.name, entry.rootNode, path, indexes);\n }\n\n writeValue(entry: IRosterEntry, path: string, value: unknown, indexes?: number[]): void {\n const source = this._sources.get(entry.sourceId);\n if (source === undefined) {\n return;\n }\n source.write(entry.name, entry.rootNode, path, value, indexes);\n }\n\n // --- internal ---\n\n private _notify(kind: CoreChangeKind): void {\n for (const listener of this._changeListeners) {\n listener(kind);\n }\n }\n\n private _refreshRosterOf(source: IDevtoolsSourceLike): void {\n const entries: IRosterEntry[] = [];\n for (const summary of source.getStateElements()) {\n if (this.isHiddenStateName(summary.name)) {\n continue;\n }\n entries.push({\n sourceId: source.id,\n name: summary.name,\n rootNode: summary.rootNode,\n summary,\n });\n }\n this._roster.set(source.id, entries);\n }\n\n private _collectAlive(set: Set<IWiringEntry>): IWiringEntry[] {\n const alive: IWiringEntry[] = [];\n for (const entry of set) {\n if (entry.bindingRef.deref() === undefined) {\n // GC 済み binding は遅延剪定(detach 漏れで DOM を残さないための WeakRef 側)\n set.delete(entry);\n continue;\n }\n alive.push(entry);\n }\n return alive;\n }\n\n private _appendTimeline(entry: Omit<ITimelineEntry, \"seq\" | \"time\">): void {\n if (this._paused) {\n return;\n }\n this._timeline.push({\n ...entry,\n seq: this._seq++,\n time: performance.now(),\n });\n const overflow = this._timeline.length - this._timelineCapacity;\n if (overflow > 0) {\n this._timeline.splice(0, overflow);\n }\n this._notify(\"timeline\");\n }\n\n private _labelOf(address: IAbsoluteAddressLike): string {\n const indexes = address.listIndex?.indexes;\n const path = address.absolutePathInfo.pathInfo.path;\n return indexes !== undefined ? `${path}[${indexes.join(\",\")}]` : path;\n }\n\n private _ingest(sourceId: string, event: DevtoolsEventLike): void {\n switch (event.type) {\n case \"state:element-registered\": {\n if (this.isHiddenStateName(event.name)) {\n return;\n }\n const source = this._sources.get(sourceId);\n if (source !== undefined) {\n this._refreshRosterOf(source);\n this._notify(\"roster\");\n }\n this._appendTimeline({\n sourceId,\n kind: \"element-registered\",\n stateName: event.name,\n label: event.name,\n detail: \"\",\n subscriberCount: null,\n });\n return;\n }\n case \"state:element-unregistered\": {\n if (this.isHiddenStateName(event.name)) {\n return;\n }\n const source = this._sources.get(sourceId);\n if (source !== undefined) {\n this._refreshRosterOf(source);\n this._notify(\"roster\");\n }\n this._appendTimeline({\n sourceId,\n kind: \"element-unregistered\",\n stateName: event.name,\n label: event.name,\n detail: \"\",\n subscriberCount: null,\n });\n return;\n }\n case \"state:write\": {\n const stateName = event.absoluteAddress.absolutePathInfo.stateName;\n if (this.isHiddenStateName(stateName)) {\n return;\n }\n const detail = event.hasOldValue\n ? `${formatValue(event.value)} (was ${formatValue(event.oldValue)})`\n : formatValue(event.value);\n this._appendTimeline({\n sourceId,\n kind: \"write\",\n stateName,\n label: this._labelOf(event.absoluteAddress),\n detail,\n subscriberCount: null,\n });\n return;\n }\n case \"state:update-batch\": {\n const labels: string[] = [];\n let total = 0;\n for (const address of event.addresses) {\n if (this.isHiddenStateName(address.absolutePathInfo.stateName)) {\n continue;\n }\n total++;\n if (labels.length < 3) {\n labels.push(this._labelOf(address));\n }\n }\n if (total === 0) {\n return;\n }\n const rest = total > labels.length ? `, …(${total})` : \"\";\n this._appendTimeline({\n sourceId,\n kind: \"batch\",\n stateName: null,\n label: `${total} address${total === 1 ? \"\" : \"es\"}`,\n detail: `${labels.join(\", \")}${rest}`,\n subscriberCount: null,\n });\n return;\n }\n case \"state:binding-added\": {\n const stateName = event.absoluteAddress.absolutePathInfo.stateName;\n if (this.isHiddenStateName(stateName)) {\n return;\n }\n const path = event.absoluteAddress.absolutePathInfo.pathInfo.path;\n const key = pathKeyOf(stateName, path);\n let set = this._wiringByPathKey.get(key);\n if (set === undefined) {\n set = new Set();\n this._wiringByPathKey.set(key, set);\n }\n const entry: IWiringEntry = {\n sourceId,\n stateName,\n path,\n propName: event.binding.propName,\n bindingType: event.binding.bindingType,\n bindingRef: new WeakRef(event.binding),\n };\n set.add(entry);\n this._wiringEntryByBinding.set(event.binding, entry);\n this._notify(\"wiring\");\n return;\n }\n case \"state:binding-removed\": {\n const entry = this._wiringEntryByBinding.get(event.binding);\n if (entry === undefined) {\n return;\n }\n this._wiringEntryByBinding.delete(event.binding);\n const key = pathKeyOf(entry.stateName, entry.path);\n const set = this._wiringByPathKey.get(key);\n if (set !== undefined) {\n set.delete(entry);\n if (set.size === 0) {\n this._wiringByPathKey.delete(key);\n }\n }\n this._notify(\"wiring\");\n return;\n }\n case \"state:binding-cleared\": {\n const stateName = event.absoluteAddress.absolutePathInfo.stateName;\n const path = event.absoluteAddress.absolutePathInfo.pathInfo.path;\n const key = pathKeyOf(stateName, path);\n if (this._wiringByPathKey.delete(key)) {\n this._notify(\"wiring\");\n }\n return;\n }\n case \"state:token-emit\": {\n if (this.isHiddenStateName(event.stateName)) {\n return;\n }\n this._appendTimeline({\n sourceId,\n kind: event.kind,\n stateName: event.stateName,\n label: event.tokenName,\n detail: formatArgs(event.args),\n subscriberCount: event.subscriberCount,\n });\n return;\n }\n }\n }\n}\n","/**\n * core/declaredScan.ts\n *\n * 遅延アタッチ時の declared ビュー(protocol §6)。\n *\n * binding 台帳はフック接続前の分を復元できないため、DOM に残っている\n * `data-wcs` 属性と `<!--wcs-*: -->` コメントを再スキャンして\n * 「宣言レベルの配線ビュー」を組む。ライブ台帳と違い binding 実体・\n * 接続状態は分からない(UI では \"declared\" バッジで区別する)。\n *\n * パースは表示目的の簡易版(`prop[#mod]: path[@state][|filters]` を\n * `;` 区切りで分解するだけ)。正確なセマンティクスの正本は\n * @wcstack/state の bindTextParser であり、ここでは追随しない。\n */\n\nexport interface IDeclaredBinding {\n /** 宣言が載っている要素(コメント由来の場合は親要素) */\n readonly element: Element;\n readonly propName: string;\n readonly path: string;\n readonly stateName: string;\n readonly filters: readonly string[];\n /** 宣言ソース: data-wcs 属性か comment ノードか */\n readonly origin: \"attribute\" | \"comment\";\n readonly raw: string;\n}\n\nconst DEFAULT_BIND_ATTRIBUTE = \"data-wcs\";\nconst COMMENT_PREFIXES = [\"wcs-text\", \"wcs-for\", \"wcs-if\", \"wcs-elseif\", \"wcs-else\"];\n\nfunction parseEntry(\n element: Element,\n raw: string,\n origin: \"attribute\" | \"comment\"\n): IDeclaredBinding | null {\n const trimmed = raw.trim();\n if (trimmed.length === 0) {\n return null;\n }\n const colon = trimmed.indexOf(\":\");\n if (colon < 0) {\n return null;\n }\n const propName = trimmed.slice(0, colon).trim();\n const rhs = trimmed.slice(colon + 1).trim();\n if (propName.length === 0 || rhs.length === 0) {\n return null;\n }\n const [pathPart, ...filterParts] = rhs.split(\"|\").map((part) => part.trim());\n let path = pathPart;\n let stateName = \"default\";\n const at = pathPart.lastIndexOf(\"@\");\n if (at > 0) {\n path = pathPart.slice(0, at).trim();\n stateName = pathPart.slice(at + 1).trim();\n }\n return {\n element,\n propName,\n path,\n stateName,\n filters: filterParts.filter((part) => part.length > 0),\n origin,\n raw: trimmed,\n };\n}\n\n/**\n * rootNode 配下の宣言配線を列挙する。\n * @param root 走査起点(Document / ShadowRoot / Element)\n * @param bindAttributeName バインド属性名(既定 data-wcs。setConfig で変えたページ用)\n */\nexport function scanDeclaredBindings(\n root: ParentNode,\n bindAttributeName: string = DEFAULT_BIND_ATTRIBUTE\n): IDeclaredBinding[] {\n const result: IDeclaredBinding[] = [];\n\n // data-wcs 属性(template の for/if 宣言もこの属性に載る)\n for (const element of root.querySelectorAll(`[${bindAttributeName}]`)) {\n // querySelectorAll の一致条件上、属性は必ず存在する\n const raw = element.getAttribute(bindAttributeName)!;\n for (const part of raw.split(\";\")) {\n const entry = parseEntry(element, part, \"attribute\");\n if (entry !== null) {\n result.push(entry);\n }\n }\n }\n\n // <!--wcs-text: path--> 等のコメントノード(mustache 展開後の姿)\n const document = root.ownerDocument ?? (root as Document);\n const walker = document.createTreeWalker(root as Node, NodeFilter.SHOW_COMMENT);\n let comment = walker.nextNode();\n while (comment !== null) {\n // コメントノードの textContent は常に文字列\n const text = comment.textContent!.trim();\n const prefix = COMMENT_PREFIXES.find(\n (candidate) => text === candidate || text.startsWith(candidate + \":\")\n );\n if (prefix !== undefined) {\n const parentElement =\n comment.parentNode instanceof Element ? comment.parentNode : null;\n if (parentElement !== null) {\n const body = text === prefix ? \"\" : text.slice(prefix.length + 1).trim();\n if (body.length > 0) {\n const propName = prefix === \"wcs-text\" ? \"textContent\" : prefix.slice(\"wcs-\".length);\n // propName / body とも非空のため parseEntry は必ず成功する\n result.push(parseEntry(parentElement, `${propName}: ${body}`, \"comment\")!);\n }\n }\n }\n comment = walker.nextNode();\n }\n\n return result;\n}\n","/**\n * shell/WcsDevtools.ts\n *\n * `<wcs-devtools>` — ページ内オーバーレイ DevTools 本体(devtools-tag-design.md)。\n *\n * - ShadowRoot 内で完結(ページの CSS/DOM を変更しない)\n * - ハイライトはページ要素の style/class を触らず、fixed 配置の\n * オーバーレイ枠で描く(devtools-tag-design.md §2)\n * - UI レンダリングは vanilla DOM(記録済み決定: inspected ランタイムの\n * updater キューに devtools 描画負荷を混ぜない = 観測者効果の排除。\n * wcs-state ドッグフーディングは Phase 2 で再評価)\n * - 描画は Core の change 通知を rAF で 1 回に合流(イベント毎 DOM 追加禁止、\n * devtools-tag-design.md §3.3)\n */\n\nimport { DevtoolsCore, IRosterEntry, ITimelineEntry, IWiringEntry } from \"../core/DevtoolsCore\";\nimport { formatValue } from \"../core/formatValue\";\nimport { IDeclaredBinding, scanDeclaredBindings } from \"../core/declaredScan\";\n\nconst STYLE_TEXT = /* css */ `\n:host {\n all: initial;\n position: fixed;\n z-index: 2147483647;\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 12px;\n inset: auto 0 0 auto;\n}\n* { box-sizing: border-box; }\n.badge {\n position: fixed;\n right: 12px;\n bottom: 12px;\n width: 40px;\n height: 40px;\n border-radius: 20px;\n border: 1px solid #2b4f78;\n background: #10263f;\n color: #9fd0ff;\n font-weight: 700;\n cursor: pointer;\n}\n.panel {\n position: fixed;\n display: flex;\n flex-direction: column;\n background: #0d1b2a;\n color: #d7e3f4;\n border: 1px solid #2b4f78;\n box-shadow: 0 0 24px rgba(0,0,0,.5);\n}\n.panel.dock-bottom { left: 0; right: 0; bottom: 0; height: 45vh; }\n.panel.dock-right { top: 0; right: 0; bottom: 0; width: 420px; }\n.panel[hidden] { display: none; }\nheader {\n display: flex;\n gap: 6px;\n align-items: center;\n padding: 6px 8px;\n border-bottom: 1px solid #2b4f78;\n background: #10263f;\n}\nheader .title { font-weight: 700; color: #9fd0ff; margin-right: 4px; }\nheader select, header button {\n font: inherit;\n background: #16324f;\n color: #d7e3f4;\n border: 1px solid #2b4f78;\n border-radius: 4px;\n padding: 2px 8px;\n cursor: pointer;\n}\nheader button[aria-pressed=\"true\"] { background: #2b5d8f; }\nheader .spacer { flex: 1; }\n.panes { display: flex; flex: 1; min-height: 0; }\n.pane { flex: 1; min-width: 0; overflow: auto; padding: 6px 8px; border-right: 1px solid #1d3a5c; }\n.pane:last-child { border-right: none; }\n.pane h3 {\n margin: 0 0 6px;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: .08em;\n color: #7ba7d4;\n}\n.tree-row { display: flex; gap: 6px; padding: 1px 0; align-items: baseline; white-space: nowrap; }\n.tree-row .toggle { width: 14px; cursor: pointer; color: #7ba7d4; user-select: none; }\n.tree-row .key { color: #9fd0ff; cursor: pointer; }\n.tree-row .value { color: #ffd9a0; overflow: hidden; text-overflow: ellipsis; }\n.tree-row .value.editable { cursor: pointer; }\n.tree-row input { font: inherit; background: #16324f; color: #ffd9a0; border: 1px solid #2b4f78; }\n.badge-tag {\n display: inline-block;\n padding: 0 4px;\n border-radius: 3px;\n font-size: 10px;\n background: #26456a;\n color: #a8c6e8;\n}\n.badge-tag.warn { background: #6a3326; color: #ffb3a0; }\n.badge-tag.declared { background: #4a4426; color: #efe3a0; }\n.wiring-row, .timeline-row { padding: 1px 0; white-space: nowrap; }\n.wiring-row .prop { color: #b7f0c0; }\n.wiring-row .path { color: #9fd0ff; }\n.timeline-row .t { color: #6f88a3; }\n.timeline-row .label { color: #9fd0ff; }\n.timeline-row .detail { color: #ffd9a0; }\n.timeline-row .kind { display: inline-block; min-width: 52px; text-align: center; }\n.empty { color: #6f88a3; font-style: italic; padding: 4px 0; }\n.notice { color: #efe3a0; padding: 2px 0 6px; }\n.notice button { font: inherit; margin-left: 6px; cursor: pointer; }\n.hl-box {\n position: fixed;\n pointer-events: none;\n border: 1px solid #58c2ff;\n background: rgba(88,194,255,.18);\n}\n`;\n\ntype PaneName = \"state\" | \"wiring\" | \"timeline\";\n\n/** タイムラインの DOM 描画上限(buffer とは別。§3.3 のバースト圧縮の一部) */\nconst TIMELINE_RENDER_LIMIT = 200;\n/** リスト展開の 1 階層あたり表示件数上限 */\nconst LIST_CHILD_LIMIT = 20;\n\ninterface ITreeNodeRef {\n readonly path: string;\n readonly indexes: number[];\n}\n\nfunction nodeKeyOf(ref: ITreeNodeRef): string {\n return `${ref.path}#${ref.indexes.join(\",\")}`;\n}\n\nfunction isExpandable(value: unknown): boolean {\n if (Array.isArray(value)) {\n return true;\n }\n if (value === null || typeof value !== \"object\") {\n return false;\n }\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\nfunction coerceInput(text: string): unknown {\n const trimmed = text.trim();\n try {\n return JSON.parse(trimmed);\n } catch {\n return text;\n }\n}\n\nexport class WcsDevtools extends HTMLElement {\n static get observedAttributes(): string[] {\n return [\"open\", \"dock\", \"hotkey\"];\n }\n\n private _core: DevtoolsCore | null = null;\n private _removeCoreListener: (() => void) | null = null;\n private _panel: HTMLElement | null = null;\n private _badge: HTMLButtonElement | null = null;\n private _stateSelect: HTMLSelectElement | null = null;\n private _paneElements: Partial<Record<PaneName, HTMLElement>> = {};\n private _highlightLayer: HTMLElement | null = null;\n private _dirtyPanes: Set<PaneName> = new Set();\n private _renderScheduled: boolean = false;\n private _selectedRosterKey: string | null = null;\n private _selectedPath: string | null = null;\n private _pickedNode: Node | null = null;\n private _pickMode: boolean = false;\n private _expanded: Set<string> = new Set();\n private _hotkeyHandler: ((event: KeyboardEvent) => void) | null = null;\n private _pickHandler: ((event: MouseEvent) => void) | null = null;\n\n get core(): DevtoolsCore | null {\n return this._core;\n }\n\n connectedCallback(): void {\n // SSR では不活性(protocol 原則 6)\n if (document.documentElement.hasAttribute(\"data-wcs-server\")) {\n return;\n }\n if (this.shadowRoot === null) {\n this._buildShadow();\n }\n const capacity = Number(this.getAttribute(\"buffer\") ?? \"\");\n const hidden = (this.getAttribute(\"hidden-states\") ?? \"\")\n .split(\",\")\n .map((name) => name.trim())\n .filter((name) => name.length > 0);\n this._core = new DevtoolsCore({\n timelineCapacity: Number.isFinite(capacity) && capacity > 0 ? capacity : undefined,\n hiddenStateNames: hidden,\n });\n this._removeCoreListener = this._core.onChange((kind) => {\n if (kind === \"roster\" || kind === \"sources\") {\n this._markDirty(\"state\");\n this._markDirty(\"wiring\");\n } else if (kind === \"wiring\") {\n this._markDirty(\"wiring\");\n } else {\n this._markDirty(\"timeline\");\n }\n });\n this._core.connect();\n this._applyDock();\n this._applyOpen();\n this._installHotkey();\n this._markDirty(\"state\");\n this._markDirty(\"wiring\");\n this._markDirty(\"timeline\");\n }\n\n disconnectedCallback(): void {\n this._removeCoreListener?.();\n this._removeCoreListener = null;\n this._core?.disconnect();\n this._core = null;\n this._uninstallHotkey();\n this._exitPickMode();\n }\n\n attributeChangedCallback(name: string): void {\n if (this.shadowRoot === null) {\n return;\n }\n if (name === \"open\") {\n this._applyOpen();\n } else if (name === \"dock\") {\n this._applyDock();\n } else if (name === \"hotkey\") {\n this._uninstallHotkey();\n this._installHotkey();\n }\n }\n\n /** テスト用: rAF を待たずに保留中の描画を実行する */\n __flushRenderForTest(): void {\n this._renderDirty();\n }\n\n // --- shadow construction ---\n\n private _buildShadow(): void {\n const shadow = this.attachShadow({ mode: \"open\" });\n const style = document.createElement(\"style\");\n style.textContent = STYLE_TEXT;\n shadow.append(style);\n\n const badge = document.createElement(\"button\");\n badge.className = \"badge\";\n badge.title = \"wcstack DevTools\";\n badge.textContent = \"WCS\";\n badge.addEventListener(\"click\", () => this.toggle());\n shadow.append(badge);\n this._badge = badge;\n\n const panel = document.createElement(\"div\");\n panel.className = \"panel dock-bottom\";\n panel.hidden = true;\n\n const header = document.createElement(\"header\");\n const title = document.createElement(\"span\");\n title.className = \"title\";\n title.textContent = \"wcstack devtools\";\n header.append(title);\n\n const stateSelect = document.createElement(\"select\");\n stateSelect.title = \"state element\";\n stateSelect.addEventListener(\"change\", () => {\n this._selectedRosterKey = stateSelect.value || null;\n this._selectedPath = null;\n this._expanded.clear();\n this._markDirty(\"state\");\n this._markDirty(\"wiring\");\n });\n header.append(stateSelect);\n this._stateSelect = stateSelect;\n\n const pickButton = this._headerButton(header, \"⌖ pick\", \"pick a page element\");\n pickButton.addEventListener(\"click\", () => {\n if (this._pickMode) {\n this._exitPickMode();\n } else {\n this._enterPickMode();\n }\n pickButton.setAttribute(\"aria-pressed\", String(this._pickMode));\n });\n pickButton.dataset[\"role\"] = \"pick\";\n\n const pauseButton = this._headerButton(header, \"⏸\", \"pause timeline\");\n pauseButton.addEventListener(\"click\", () => {\n const core = this._core;\n if (core === null) {\n return;\n }\n core.paused = !core.paused;\n pauseButton.setAttribute(\"aria-pressed\", String(core.paused));\n });\n pauseButton.dataset[\"role\"] = \"pause\";\n\n const clearButton = this._headerButton(header, \"🗑\", \"clear timeline\");\n clearButton.addEventListener(\"click\", () => {\n this._core?.clearTimeline();\n });\n clearButton.dataset[\"role\"] = \"clear\";\n\n const spacer = document.createElement(\"span\");\n spacer.className = \"spacer\";\n header.append(spacer);\n\n const dockButton = this._headerButton(header, \"dock\", \"toggle dock position\");\n dockButton.addEventListener(\"click\", () => {\n const next = (this.getAttribute(\"dock\") ?? \"bottom\") === \"bottom\" ? \"right\" : \"bottom\";\n this.setAttribute(\"dock\", next);\n });\n dockButton.dataset[\"role\"] = \"dock\";\n\n const closeButton = this._headerButton(header, \"×\", \"close\");\n closeButton.addEventListener(\"click\", () => this.toggle(false));\n closeButton.dataset[\"role\"] = \"close\";\n\n panel.append(header);\n\n const panes = document.createElement(\"div\");\n panes.className = \"panes\";\n for (const [name, heading] of [\n [\"state\", \"State\"],\n [\"wiring\", \"Wiring\"],\n [\"timeline\", \"Timeline\"],\n ] as const) {\n const pane = document.createElement(\"section\");\n pane.className = `pane pane-${name}`;\n const h3 = document.createElement(\"h3\");\n h3.textContent = heading;\n const body = document.createElement(\"div\");\n body.className = \"pane-body\";\n pane.append(h3, body);\n panes.append(pane);\n this._paneElements[name] = body;\n }\n panel.append(panes);\n shadow.append(panel);\n this._panel = panel;\n\n const highlightLayer = document.createElement(\"div\");\n highlightLayer.className = \"hl-layer\";\n shadow.append(highlightLayer);\n this._highlightLayer = highlightLayer;\n }\n\n private _headerButton(header: HTMLElement, label: string, title: string): HTMLButtonElement {\n const button = document.createElement(\"button\");\n button.textContent = label;\n button.title = title;\n button.setAttribute(\"aria-pressed\", \"false\");\n header.append(button);\n return button;\n }\n\n // --- open/close/dock/hotkey ---\n\n get open(): boolean {\n return this.hasAttribute(\"open\");\n }\n\n toggle(force?: boolean): void {\n const next = force ?? !this.open;\n if (next) {\n this.setAttribute(\"open\", \"\");\n } else {\n this.removeAttribute(\"open\");\n }\n }\n\n private _applyOpen(): void {\n // shadowRoot 構築後にしか呼ばれない(attributeChangedCallback 側でガード済み)\n this._panel!.hidden = !this.open;\n this._badge!.hidden = this.open;\n if (this.open) {\n this._markDirty(\"state\");\n this._markDirty(\"wiring\");\n this._markDirty(\"timeline\");\n }\n }\n\n private _applyDock(): void {\n // shadowRoot 構築後にしか呼ばれない(attributeChangedCallback 側でガード済み)\n const dock = this.getAttribute(\"dock\") === \"right\" ? \"right\" : \"bottom\";\n this._panel!.classList.toggle(\"dock-right\", dock === \"right\");\n this._panel!.classList.toggle(\"dock-bottom\", dock === \"bottom\");\n }\n\n private _installHotkey(): void {\n const spec = this.getAttribute(\"hotkey\") ?? \"Alt+Shift+D\";\n if (spec === \"none\") {\n return;\n }\n const parts = spec.split(\"+\").map((part) => part.trim().toLowerCase());\n const key = parts[parts.length - 1];\n const alt = parts.includes(\"alt\");\n const shift = parts.includes(\"shift\");\n const ctrl = parts.includes(\"ctrl\");\n const meta = parts.includes(\"meta\");\n this._hotkeyHandler = (event: KeyboardEvent) => {\n if (\n event.key.toLowerCase() === key &&\n event.altKey === alt &&\n event.shiftKey === shift &&\n event.ctrlKey === ctrl &&\n event.metaKey === meta\n ) {\n event.preventDefault();\n this.toggle();\n }\n };\n window.addEventListener(\"keydown\", this._hotkeyHandler);\n }\n\n private _uninstallHotkey(): void {\n if (this._hotkeyHandler !== null) {\n window.removeEventListener(\"keydown\", this._hotkeyHandler);\n this._hotkeyHandler = null;\n }\n }\n\n // --- pick mode ---\n\n private _enterPickMode(): void {\n // 呼び出し元(pick ボタン)が toggle 済みのため、ここでは常に開始でよい\n this._pickMode = true;\n // click を capture で奪う(誤操作防止、devtools-tag-design.md G-U2 の既定側)\n this._pickHandler = (event: MouseEvent) => {\n const target = event.target as Node;\n // devtools 自身(実ブラウザでは retarget されて host、shadow 非 retarget 環境では\n // shadow 内ノード)は pick 対象外\n if (target.getRootNode() === this.shadowRoot || target === this) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n this._pickedNode = target;\n this._selectedPath = null;\n this._exitPickMode();\n this._markDirty(\"wiring\");\n };\n document.addEventListener(\"click\", this._pickHandler, { capture: true });\n }\n\n private _exitPickMode(): void {\n if (this._pickHandler !== null) {\n document.removeEventListener(\"click\", this._pickHandler, { capture: true });\n this._pickHandler = null;\n }\n this._pickMode = false;\n const pickButton = this.shadowRoot?.querySelector('button[data-role=\"pick\"]');\n pickButton?.setAttribute(\"aria-pressed\", \"false\");\n }\n\n // --- rendering ---\n\n private _markDirty(pane: PaneName): void {\n this._dirtyPanes.add(pane);\n if (this._renderScheduled) {\n return;\n }\n this._renderScheduled = true;\n requestAnimationFrame(() => {\n this._renderDirty();\n });\n }\n\n private _renderDirty(): void {\n this._renderScheduled = false;\n if (this._core === null || this.shadowRoot === null) {\n this._dirtyPanes.clear();\n return;\n }\n const dirty = this._dirtyPanes;\n this._dirtyPanes = new Set();\n if (dirty.has(\"state\")) {\n this._renderStatePane();\n }\n if (dirty.has(\"wiring\")) {\n this._renderWiringPane();\n }\n if (dirty.has(\"timeline\")) {\n this._renderTimelinePane();\n }\n }\n\n private _rosterKey(entry: IRosterEntry): string {\n return `${entry.sourceId}:${entry.name}`;\n }\n\n private _selectedRoster(): IRosterEntry | null {\n const core = this._core!;\n const roster = core.getRoster();\n if (roster.length === 0) {\n return null;\n }\n const found = roster.find((entry) => this._rosterKey(entry) === this._selectedRosterKey);\n return found ?? roster[0];\n }\n\n private _renderStatePane(): void {\n const core = this._core!;\n const body = this._paneElements[\"state\"]!;\n const select = this._stateSelect!;\n const roster = core.getRoster();\n const selected = this._selectedRoster();\n\n select.replaceChildren(\n ...roster.map((entry) => {\n const option = document.createElement(\"option\");\n option.value = this._rosterKey(entry);\n option.textContent = `${entry.name} (${entry.sourceId.slice(0, 12)})`;\n option.selected = selected !== null && this._rosterKey(entry) === this._rosterKey(selected);\n return option;\n })\n );\n\n body.replaceChildren();\n if (selected === null) {\n body.append(this._emptyRow(\"no <wcs-state> elements observed\"));\n return;\n }\n this._selectedRosterKey = this._rosterKey(selected);\n const keys = core.keysOf(selected);\n if (keys.length === 0) {\n body.append(this._emptyRow(\"no readable keys (runtime without keys() API?)\"));\n return;\n }\n for (const key of keys) {\n this._renderTreeNode(body, selected, { path: key, indexes: [] }, key, 0);\n }\n }\n\n private _renderTreeNode(\n container: HTMLElement,\n entry: IRosterEntry,\n ref: ITreeNodeRef,\n label: string,\n depth: number\n ): void {\n const core = this._core!;\n let value: unknown;\n let readable = true;\n try {\n value = core.readValue(entry, ref.path, ref.indexes);\n } catch {\n readable = false;\n }\n\n const row = document.createElement(\"div\");\n row.className = \"tree-row\";\n row.style.paddingLeft = `${depth * 14}px`;\n\n const expandable = readable && isExpandable(value);\n const key = nodeKeyOf(ref);\n const expanded = expandable && this._expanded.has(key);\n\n const toggle = document.createElement(\"span\");\n toggle.className = \"toggle\";\n toggle.textContent = expandable ? (expanded ? \"▾\" : \"▸\") : \"\";\n if (expandable) {\n toggle.addEventListener(\"click\", () => {\n if (this._expanded.has(key)) {\n this._expanded.delete(key);\n } else {\n this._expanded.add(key);\n }\n this._markDirty(\"state\");\n });\n }\n row.append(toggle);\n\n const keySpan = document.createElement(\"span\");\n keySpan.className = \"key\";\n keySpan.textContent = `${label}:`;\n keySpan.title = ref.path;\n keySpan.addEventListener(\"click\", () => {\n this._selectedPath = ref.path;\n this._pickedNode = null;\n this._markDirty(\"wiring\");\n this._highlightPath(entry, ref.path);\n });\n row.append(keySpan);\n\n const valueSpan = document.createElement(\"span\");\n valueSpan.className = \"value\";\n if (!readable) {\n valueSpan.textContent = \"(unreadable getter)\";\n } else {\n valueSpan.textContent = formatValue(value, 1);\n const editable = value === null || typeof value !== \"object\";\n if (editable && typeof value !== \"function\") {\n valueSpan.classList.add(\"editable\");\n valueSpan.title = \"click to edit\";\n valueSpan.addEventListener(\"click\", () => {\n this._beginEdit(row, valueSpan, entry, ref, value);\n });\n }\n }\n row.append(valueSpan);\n container.append(row);\n\n if (expanded) {\n if (Array.isArray(value)) {\n const limit = Math.min(value.length, LIST_CHILD_LIMIT);\n for (let index = 0; index < limit; index++) {\n this._renderTreeNode(\n container,\n entry,\n { path: `${ref.path}.*`, indexes: [...ref.indexes, index] },\n `[${index}]`,\n depth + 1\n );\n }\n if (value.length > limit) {\n const more = this._emptyRow(`…(${value.length} items)`);\n more.style.paddingLeft = `${(depth + 1) * 14}px`;\n container.append(more);\n }\n } else {\n for (const childKey of Object.keys(value as Record<string, unknown>)) {\n this._renderTreeNode(\n container,\n entry,\n { path: `${ref.path}.${childKey}`, indexes: ref.indexes },\n childKey,\n depth + 1\n );\n }\n }\n }\n }\n\n private _beginEdit(\n row: HTMLElement,\n valueSpan: HTMLElement,\n entry: IRosterEntry,\n ref: ITreeNodeRef,\n current: unknown\n ): void {\n const input = document.createElement(\"input\");\n input.value = typeof current === \"string\" ? current : String(current);\n const commit = (): void => {\n // 編集は通常のリアクティブパイプラインを通る(devtools-tag-design.md §3.1)\n this._core?.writeValue(entry, ref.path, coerceInput(input.value), ref.indexes);\n this._markDirty(\"state\");\n };\n input.addEventListener(\"keydown\", (event) => {\n if (event.key === \"Enter\") {\n commit();\n } else if (event.key === \"Escape\") {\n this._markDirty(\"state\");\n }\n });\n row.replaceChild(input, valueSpan);\n input.focus();\n }\n\n private _renderWiringPane(): void {\n const core = this._core!;\n const body = this._paneElements[\"wiring\"]!;\n body.replaceChildren();\n\n let entries: IWiringEntry[];\n let contextLabel: string;\n if (this._pickedNode !== null) {\n entries = core.getWiringForNode(this._pickedNode);\n const target = this._pickedNode;\n contextLabel =\n target instanceof Element ? `<${target.tagName.toLowerCase()}>` : target.nodeName;\n } else if (this._selectedPath !== null) {\n const selected = this._selectedRoster();\n entries =\n selected !== null ? core.getWiringForPath(selected.name, this._selectedPath) : [];\n contextLabel = this._selectedPath;\n } else {\n entries = core.getAllWiring();\n contextLabel = \"all\";\n }\n\n const info = document.createElement(\"div\");\n info.textContent = `context: ${contextLabel} — ${entries.length} live binding${entries.length === 1 ? \"\" : \"s\"}`;\n body.append(info);\n\n if (entries.length > 0) {\n for (const entry of entries) {\n body.append(this._wiringRow(entry));\n }\n return;\n }\n\n // ライブ台帳が空 → declared ビューへフォールバック(protocol §6)\n const selected = this._selectedRoster();\n const declared =\n selected !== null ? scanDeclaredBindings(this._scanRootOf(selected)) : [];\n if (declared.length === 0) {\n body.append(this._emptyRow(\"no bindings observed\"));\n return;\n }\n const notice = document.createElement(\"div\");\n notice.className = \"notice\";\n const tag = document.createElement(\"span\");\n tag.className = \"badge-tag declared\";\n tag.textContent = \"declared\";\n notice.append(tag, document.createTextNode(\" attached late — reload to capture live bindings \"));\n const reload = document.createElement(\"button\");\n reload.textContent = \"reload\";\n reload.addEventListener(\"click\", () => {\n location.reload();\n });\n notice.append(reload);\n body.append(notice);\n for (const entry of declared) {\n body.append(this._declaredRow(entry));\n }\n }\n\n private _scanRootOf(entry: IRosterEntry): ParentNode {\n // instanceof はテスト環境(happy-dom)の Document 実体と一致しないことがあるため\n // nodeType で判定する(DOCUMENT_FRAGMENT_NODE は ShadowRoot を含む)\n const rootNode = entry.rootNode;\n if (\n rootNode.nodeType === Node.DOCUMENT_NODE ||\n rootNode.nodeType === Node.DOCUMENT_FRAGMENT_NODE\n ) {\n return rootNode as unknown as ParentNode;\n }\n return document;\n }\n\n private _wiringRow(entry: IWiringEntry): HTMLElement {\n const row = document.createElement(\"div\");\n row.className = \"wiring-row\";\n const prop = document.createElement(\"span\");\n prop.className = \"prop\";\n prop.textContent = entry.propName;\n const arrow = document.createTextNode(\" ← \");\n const path = document.createElement(\"span\");\n path.className = \"path\";\n path.textContent = `${entry.path}@${entry.stateName}`;\n const type = document.createElement(\"span\");\n type.className = \"badge-tag\";\n type.textContent = entry.bindingType;\n row.append(type, document.createTextNode(\" \"), prop, arrow, path);\n row.addEventListener(\"click\", () => {\n const binding = entry.bindingRef.deref();\n if (binding !== undefined) {\n this._highlightNodes([binding.node, binding.replaceNode]);\n }\n });\n return row;\n }\n\n private _declaredRow(entry: IDeclaredBinding): HTMLElement {\n const row = document.createElement(\"div\");\n row.className = \"wiring-row\";\n const type = document.createElement(\"span\");\n type.className = \"badge-tag declared\";\n type.textContent = entry.origin;\n const prop = document.createElement(\"span\");\n prop.className = \"prop\";\n prop.textContent = entry.propName;\n const path = document.createElement(\"span\");\n path.className = \"path\";\n path.textContent = `${entry.path}@${entry.stateName}`;\n row.append(type, document.createTextNode(\" \"), prop, document.createTextNode(\" ← \"), path);\n row.addEventListener(\"click\", () => {\n this._highlightNodes([entry.element]);\n });\n return row;\n }\n\n private _renderTimelinePane(): void {\n const core = this._core!;\n const body = this._paneElements[\"timeline\"]!;\n const timeline = core.getTimeline();\n const start = Math.max(0, timeline.length - TIMELINE_RENDER_LIMIT);\n const rows: HTMLElement[] = [];\n if (start > 0) {\n rows.push(this._emptyRow(`…(${start} earlier entries)`));\n }\n for (let index = start; index < timeline.length; index++) {\n rows.push(this._timelineRow(timeline[index]));\n }\n if (rows.length === 0) {\n rows.push(this._emptyRow(\"no activity yet\"));\n }\n body.replaceChildren(...rows);\n body.scrollTop = body.scrollHeight;\n }\n\n private _timelineRow(entry: ITimelineEntry): HTMLElement {\n const row = document.createElement(\"div\");\n row.className = \"timeline-row\";\n const time = document.createElement(\"span\");\n time.className = \"t\";\n time.textContent = `${(entry.time / 1000).toFixed(3)}s `;\n const kind = document.createElement(\"span\");\n kind.className = \"badge-tag kind\";\n kind.textContent = entry.kind;\n // subscriber 0 の command/event 空撃ちは警告表示(devtools-tag-design.md §3.2)\n if (entry.subscriberCount === 0) {\n kind.classList.add(\"warn\");\n kind.title = \"emitted with no subscribers\";\n }\n const label = document.createElement(\"span\");\n label.className = \"label\";\n const stateName = entry.stateName !== null ? `@${entry.stateName}` : \"\";\n label.textContent = ` ${entry.label}${stateName} `;\n const detail = document.createElement(\"span\");\n detail.className = \"detail\";\n detail.textContent = entry.detail;\n row.append(time, kind, label, detail);\n return row;\n }\n\n private _emptyRow(text: string): HTMLElement {\n const row = document.createElement(\"div\");\n row.className = \"empty\";\n row.textContent = text;\n return row;\n }\n\n // --- highlight ---\n\n private _highlightPath(entry: IRosterEntry, path: string): void {\n const core = this._core!;\n const nodes: Node[] = [];\n for (const wiring of core.getWiringForPath(entry.name, path)) {\n const binding = wiring.bindingRef.deref();\n if (binding !== undefined) {\n nodes.push(binding.node, binding.replaceNode);\n }\n }\n this._highlightNodes(nodes);\n }\n\n private _highlightNodes(nodes: readonly Node[]): void {\n // shadowRoot 構築後にしか呼ばれない(各リスナーは _buildShadow 内で配線される)\n const layer = this._highlightLayer!;\n layer.replaceChildren();\n const seen = new Set<Element>();\n for (const node of nodes) {\n const element = node instanceof Element ? node : node.parentElement;\n if (element === null || seen.has(element) || !element.isConnected) {\n continue;\n }\n seen.add(element);\n const rect = element.getBoundingClientRect();\n const box = document.createElement(\"div\");\n box.className = \"hl-box\";\n box.style.left = `${rect.left}px`;\n box.style.top = `${rect.top}px`;\n box.style.width = `${rect.width}px`;\n box.style.height = `${rect.height}px`;\n layer.append(box);\n }\n // 2 秒後に自動で消す(追従はしない — クリック時スナップショット表示)\n setTimeout(() => {\n layer.replaceChildren();\n }, 2000);\n }\n}\n","/**\n * bootstrapDevtools.ts\n *\n * `<wcs-devtools>` の登録と自動挿入(devtools-tag-design.md §2)。\n * - 既に定義済みなら再定義しない\n * - ページに `<wcs-devtools>` が無ければ body 末尾に 1 つ挿入\n * (手動で書かれていれば挿入しない)\n * - SSR では何もしない\n */\n\nimport { WcsDevtools } from \"./shell/WcsDevtools\";\n\nconst TAG_NAME = \"wcs-devtools\";\n\nfunction insertIfAbsent(): void {\n if (document.querySelector(TAG_NAME) !== null) {\n return;\n }\n document.body.appendChild(document.createElement(TAG_NAME));\n}\n\nexport function bootstrapDevtools(): void {\n if (document.documentElement.hasAttribute(\"data-wcs-server\")) {\n return;\n }\n if (!customElements.get(TAG_NAME)) {\n customElements.define(TAG_NAME, WcsDevtools);\n }\n if (document.body !== null) {\n insertIfAbsent();\n } else {\n document.addEventListener(\"DOMContentLoaded\", insertIfAbsent, { once: true });\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/protocol/types.ts","../src/protocol/registry.ts","../src/core/formatValue.ts","../src/core/DevtoolsCore.ts","../src/core/declaredScan.ts","../src/shell/WcsDevtools.ts","../src/bootstrapDevtools.ts"],"sourcesContent":["/**\n * protocol/types.ts\n *\n * DevTools Hook Protocol (docs/devtools-hook-protocol.md) の devtools 側型定義。\n *\n * ランタイム(@wcstack/state)側の内部型は import しない — プロトコルは\n * 「文書化された構造」への構造的型付けで両側が独立に実装する(protocol §2)。\n * そのためランタイム内部オブジェクトは *Like インターフェースとして、\n * devtools が実際に触るプロパティだけを宣言する。\n */\n\n/** グローバル registry のプロパティ名 */\nexport const DEVTOOLS_HOOK_GLOBAL = \"__WCSTACK_DEVTOOLS_HOOK__\";\n\n/** プロトコル版。additive change では上げない(protocol §2) */\nexport const DEVTOOLS_PROTOCOL_VERSION = 1;\n\nexport interface IPathInfoLike {\n readonly path: string;\n}\n\nexport interface IAbsolutePathInfoLike {\n readonly stateName: string;\n readonly pathInfo: IPathInfoLike;\n}\n\nexport interface IListIndexLike {\n readonly index: number;\n readonly indexes: number[];\n}\n\nexport interface IAbsoluteAddressLike {\n readonly absolutePathInfo: IAbsolutePathInfoLike;\n readonly listIndex: IListIndexLike | null;\n}\n\nexport interface IBindingLike {\n readonly propName: string;\n readonly statePathName: string;\n readonly stateName: string;\n readonly bindingType: string;\n readonly node: Node;\n readonly replaceNode: Node;\n}\n\nexport interface IStateElementSummaryLike {\n readonly name: string;\n readonly rootNode: Node;\n readonly element: unknown;\n readonly paths: {\n readonly list: ReadonlySet<string>;\n readonly element: ReadonlySet<string>;\n readonly getter: ReadonlySet<string>;\n readonly setter: ReadonlySet<string>;\n };\n readonly commandTokenNames: ReadonlySet<string>;\n readonly eventTokenNames: ReadonlySet<string>;\n readonly staticDependency: ReadonlyMap<string, readonly string[]>;\n readonly dynamicDependency: ReadonlyMap<string, readonly string[]>;\n}\n\nexport type DevtoolsEventLike =\n | {\n readonly type: \"state:element-registered\";\n readonly name: string;\n readonly rootNode: Node;\n readonly element: unknown;\n }\n | {\n readonly type: \"state:element-unregistered\";\n readonly name: string;\n readonly rootNode: Node;\n readonly element: unknown;\n }\n | {\n readonly type: \"state:write\";\n readonly absoluteAddress: IAbsoluteAddressLike;\n readonly value: unknown;\n readonly oldValue: unknown;\n readonly hasOldValue: boolean;\n }\n | {\n readonly type: \"state:update-batch\";\n readonly addresses: ReadonlySet<IAbsoluteAddressLike>;\n }\n | {\n readonly type: \"state:binding-added\";\n readonly absoluteAddress: IAbsoluteAddressLike;\n readonly binding: IBindingLike;\n }\n | {\n readonly type: \"state:binding-removed\";\n readonly absoluteAddress: IAbsoluteAddressLike;\n readonly binding: IBindingLike;\n }\n | {\n readonly type: \"state:binding-cleared\";\n readonly absoluteAddress: IAbsoluteAddressLike;\n }\n | {\n readonly type: \"state:token-emit\";\n readonly kind: \"command\" | \"event\";\n readonly stateName: string | null;\n readonly tokenName: string;\n readonly args: readonly unknown[];\n readonly subscriberCount: number;\n }\n | {\n // `$watch` の実行中の throw。watch は例外を自分で閉じる(drain と他機能を\n // 巻き添えにしないため)ので、これが無いと失敗が devtools から見えない。\n readonly type: \"state:watch-error\";\n readonly phase: \"prime\" | \"evaluate\" | \"handler\";\n readonly stateName: string;\n readonly path: string;\n readonly error: unknown;\n }\n | {\n // watch 起点の書き込み連鎖が深さ上限で打ち切られた。\n readonly type: \"state:watch-chain-limit\";\n readonly maxDepth: number;\n readonly paths: readonly string[];\n }\n | {\n // two-way エコーの辺単位抑止(enablePropagationContext 時のみ流れる)。\n readonly type: \"propagation:suppressed\";\n readonly reason: \"confirmation\" | \"visited-edge\";\n readonly transactionId: number;\n readonly edgeId: number;\n readonly node: Node;\n readonly member: string;\n }\n | {\n readonly type: \"propagation:coalesced\";\n readonly absoluteAddress: IAbsoluteAddressLike;\n readonly droppedTransactionId: number;\n readonly winnerTransactionId: number;\n }\n | {\n readonly type: \"propagation:hop-limit\";\n readonly absoluteAddress: IAbsoluteAddressLike;\n readonly transactionId: number;\n readonly hop: number;\n }\n | {\n // sidecar manifest から 1 コンポーネント契約を読んだ(opt-in contract analyzer)。\n readonly type: \"contract:manifest-read\";\n readonly tag: string;\n readonly loaded: boolean;\n }\n | {\n readonly type: \"contract:unsupported-extension\";\n readonly namespace: string;\n }\n | {\n // sidecar と live wcBindable 宣言の drift。live 宣言が正本。\n readonly type: \"contract:drift\";\n readonly reason: \"component-not-loaded\" | \"missing-member\" | \"event-mismatch\";\n readonly tag: string;\n readonly member?: string;\n readonly sidecarEvent?: string;\n readonly liveEvent?: string;\n };\n\nexport type DevtoolsSinkLike = (event: DevtoolsEventLike) => void;\n\nexport interface IDevtoolsSourceLike {\n readonly id: string;\n readonly kind: string;\n readonly packageVersion: string;\n getStateElements(): IStateElementSummaryLike[];\n /** protocol v1 追補 API。古いランタイムには無い可能性があるため optional 扱いで呼ぶ */\n keys?(name: string, rootNode: Node): string[];\n read(name: string, rootNode: Node, path: string, indexes?: number[]): unknown;\n write(name: string, rootNode: Node, path: string, value: unknown, indexes?: number[]): void;\n _setSink(sink: DevtoolsSinkLike | null): void;\n}\n\nexport interface IDevtoolsListenerLike {\n onSourceRegistered?(source: IDevtoolsSourceLike): void;\n onSourceUnregistered?(sourceId: string): void;\n onEvent?(sourceId: string, event: DevtoolsEventLike): void;\n}\n\nexport interface IDevtoolsHookRegistryLike {\n readonly version: number;\n readonly sources: Map<string, IDevtoolsSourceLike>;\n register(source: IDevtoolsSourceLike): void;\n unregister(sourceId: string): void;\n addListener(listener: IDevtoolsListenerLike): () => void;\n}\n","/**\n * protocol/registry.ts\n *\n * registry 最小実装の devtools 側コピー(protocol §2)。\n * ロード順非依存にするため、ランタイム側(@wcstack/state の bridge)と\n * devtools 側の両方が同一仕様の最小実装を持ち、先にロードされた方が\n * globalThis に置く(先勝ち・振る舞い差し替えなし)。\n */\n\nimport {\n DEVTOOLS_HOOK_GLOBAL,\n DEVTOOLS_PROTOCOL_VERSION,\n IDevtoolsHookRegistryLike,\n IDevtoolsListenerLike,\n IDevtoolsSourceLike,\n} from \"./types\";\n\nfunction createMinimalRegistry(): IDevtoolsHookRegistryLike {\n const sources = new Map<string, IDevtoolsSourceLike>();\n const listeners = new Set<IDevtoolsListenerLike>();\n const applySink = (source: IDevtoolsSourceLike): void => {\n if (listeners.size === 0) {\n source._setSink(null);\n return;\n }\n const sourceId = source.id;\n source._setSink((event) => {\n for (const listener of listeners) {\n listener.onEvent?.(sourceId, event);\n }\n });\n };\n return {\n version: DEVTOOLS_PROTOCOL_VERSION,\n sources,\n register(source: IDevtoolsSourceLike): void {\n if (sources.has(source.id)) {\n return;\n }\n sources.set(source.id, source);\n applySink(source);\n for (const listener of listeners) {\n listener.onSourceRegistered?.(source);\n }\n },\n unregister(sourceId: string): void {\n const source = sources.get(sourceId);\n if (source === undefined) {\n return;\n }\n source._setSink(null);\n sources.delete(sourceId);\n for (const listener of listeners) {\n listener.onSourceUnregistered?.(sourceId);\n }\n },\n addListener(listener: IDevtoolsListenerLike): () => void {\n listeners.add(listener);\n for (const source of sources.values()) {\n applySink(source);\n listener.onSourceRegistered?.(source);\n }\n return () => {\n if (!listeners.delete(listener)) {\n return;\n }\n for (const source of sources.values()) {\n applySink(source);\n }\n };\n },\n };\n}\n\nexport function getOrCreateHookRegistry(): IDevtoolsHookRegistryLike {\n const globals = globalThis as unknown as Record<string, unknown>;\n const existing = globals[DEVTOOLS_HOOK_GLOBAL] as IDevtoolsHookRegistryLike | undefined;\n if (existing !== undefined) {\n if (existing.version !== DEVTOOLS_PROTOCOL_VERSION) {\n // 先勝ち固定。振る舞いは差し替えない(protocol §2)\n console.warn(\n `[wcstack/devtools] hook registry version mismatch: found ${existing.version}, expected ${DEVTOOLS_PROTOCOL_VERSION}. Keeping the existing registry (first-wins).`\n );\n }\n return existing;\n }\n const registry = createMinimalRegistry();\n globals[DEVTOOLS_HOOK_GLOBAL] = registry;\n return registry;\n}\n","/**\n * core/formatValue.ts\n *\n * 値フォーマッタ(devtools-tag-design.md §6)。\n *\n * 規範:\n * - primitive はそのまま(文字列は引用 + 80 文字上限)\n * - 配列 / plain object は深さ制限 + 要素数制限つきの要約\n * - それ以外(MediaStream, Blob, Element, class インスタンス等)は\n * `[[ClassName]]` タグ表示のみ\n * - structuredClone / JSON.stringify を全値に無差別適用しない\n * (生ハンドル・循環・巨大値対策。camera G1 との共存)\n */\n\nconst MAX_STRING = 80;\nconst MAX_ITEMS = 3;\n\nfunction isPlainObject(value: object): boolean {\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\nfunction className(value: object): string {\n const ctor = (value as { constructor?: { name?: string } }).constructor;\n const name = ctor?.name;\n return typeof name === \"string\" && name.length > 0 ? name : \"Object\";\n}\n\n/**\n * 任意の値を表示用の短い文字列へ変換する。\n * @param value 対象値\n * @param depth 再帰許容深さ(既定 2。0 で複合値は要約タグのみ)\n */\nexport function formatValue(value: unknown, depth: number = 2): string {\n switch (typeof value) {\n case \"string\": {\n const body = value.length > MAX_STRING ? value.slice(0, MAX_STRING) + \"…\" : value;\n return `\"${body}\"`;\n }\n case \"number\":\n case \"boolean\":\n case \"bigint\":\n return String(value);\n case \"symbol\":\n return value.toString();\n case \"undefined\":\n return \"undefined\";\n case \"function\":\n return \"[[Function]]\";\n default:\n break;\n }\n if (value === null) {\n return \"null\";\n }\n const objectValue = value as object;\n if (Array.isArray(objectValue)) {\n if (depth <= 0) {\n return `[[Array(${objectValue.length})]]`;\n }\n const shown = objectValue.slice(0, MAX_ITEMS).map((item) => formatValue(item, depth - 1));\n const rest = objectValue.length > MAX_ITEMS ? `, …(${objectValue.length})` : \"\";\n return `[${shown.join(\", \")}${rest}]`;\n }\n if (isPlainObject(objectValue)) {\n if (depth <= 0) {\n return \"[[Object]]\";\n }\n const keys = Object.keys(objectValue);\n const shown = keys.slice(0, MAX_ITEMS).map(\n (key) => `${key}: ${formatValue((objectValue as Record<string, unknown>)[key], depth - 1)}`\n );\n const rest = keys.length > MAX_ITEMS ? `, …(${keys.length})` : \"\";\n return `{${shown.join(\", \")}${rest}}`;\n }\n // DOM ノード・生ハンドル・class インスタンス等はタグ表示のみ\n return `[[${className(objectValue)}]]`;\n}\n\n/**\n * throw された値の要約。\n *\n * `formatValue` は class インスタンスを `[[ClassName]]` に畳むため、Error に\n * そのまま使うと **最も知りたい message が消える**(`[[Error]]` だけになる)。\n * Error 形(name / message を持つ)だけは `Name: message` に開く。\n * 非 Error の throw(文字列・オブジェクト等)は通常の要約へ倒す。\n */\nexport function formatError(error: unknown): string {\n if (error !== null && typeof error === \"object\") {\n const { name, message } = error as { name?: unknown; message?: unknown };\n if (typeof message === \"string\") {\n const label = typeof name === \"string\" && name.length > 0 ? name : className(error as object);\n const body = message.length > MAX_STRING ? message.slice(0, MAX_STRING) + \"…\" : message;\n return body.length > 0 ? `${label}: ${body}` : label;\n }\n }\n return formatValue(error, 1);\n}\n\n/**\n * token 引数の要約(先頭 3 引数 × 各 80 文字上限、devtools-tag-design.md §6)。\n */\nexport function formatArgs(args: readonly unknown[]): string {\n if (args.length === 0) {\n return \"\";\n }\n const shown = args.slice(0, MAX_ITEMS).map((arg) => {\n const text = formatValue(arg, 1);\n return text.length > MAX_STRING ? text.slice(0, MAX_STRING) + \"…\" : text;\n });\n const rest = args.length > MAX_ITEMS ? `, …(${args.length})` : \"\";\n return `${shown.join(\", \")}${rest}`;\n}\n","/**\n * core/DevtoolsCore.ts\n *\n * hook client(devtools-tag-design.md §1)。DOM 非依存の純ロジック層。\n *\n * - registry への addListener / 解除(connect / disconnect)\n * - source 管理と roster(state 要素一覧)の維持\n * - 配線台帳(binding-added/removed イベントから構築。binding は WeakRef 保持)\n * - タイムライン ring buffer(既定 500 件 FIFO)\n * - 予約 prefix `wcs-devtools` の自己除外(protocol §5)\n *\n * 台帳はすべて devtools 側に置く(protocol 原則 2)。disconnect で\n * sources / roster / wiring をクリアし、残留参照を持たない。\n */\n\nimport { getOrCreateHookRegistry } from \"../protocol/registry\";\nimport {\n DevtoolsEventLike,\n IAbsoluteAddressLike,\n IBindingLike,\n IDevtoolsSourceLike,\n IStateElementSummaryLike,\n} from \"../protocol/types\";\nimport { formatArgs, formatError, formatValue } from \"./formatValue\";\n\n/** 予約 state 名 prefix(protocol §5)。この prefix の要素・イベントは常に除外 */\nexport const RESERVED_STATE_NAME_PREFIX = \"wcs-devtools\";\n\nconst DEFAULT_TIMELINE_CAPACITY = 500;\n\nexport type TimelineKind =\n | \"write\"\n | \"batch\"\n | \"command\"\n | \"event\"\n | \"element-registered\"\n | \"element-unregistered\"\n | \"watch-error\"\n | \"watch-chain-limit\"\n | \"propagation-suppressed\"\n | \"propagation-coalesced\"\n | \"propagation-hop-limit\"\n | \"contract-drift\";\n\nexport interface ITimelineEntry {\n readonly seq: number;\n readonly time: number;\n readonly sourceId: string;\n readonly kind: TimelineKind;\n readonly stateName: string | null;\n readonly label: string;\n readonly detail: string;\n readonly subscriberCount: number | null;\n}\n\nexport interface IRosterEntry {\n readonly sourceId: string;\n readonly name: string;\n readonly rootNode: Node;\n readonly summary: IStateElementSummaryLike;\n}\n\nexport interface IWiringEntry {\n readonly sourceId: string;\n readonly stateName: string;\n readonly path: string;\n readonly propName: string;\n readonly bindingType: string;\n readonly bindingRef: WeakRef<IBindingLike>;\n}\n\nexport type CoreChangeKind = \"sources\" | \"roster\" | \"wiring\" | \"timeline\";\nexport type CoreChangeListener = (kind: CoreChangeKind) => void;\n\nexport interface IDevtoolsCoreOptions {\n /** タイムライン ring buffer 件数(既定 500) */\n timelineCapacity?: number;\n /** 追加で除外する state 名(予約 prefix は常に除外) */\n hiddenStateNames?: readonly string[];\n}\n\nfunction pathKeyOf(stateName: string, path: string): string {\n return stateName + \"\\u0000\" + path;\n}\n\nexport class DevtoolsCore {\n private _timelineCapacity: number;\n private _hiddenStateNames: Set<string>;\n private _removeListener: (() => void) | null = null;\n private _sources: Map<string, IDevtoolsSourceLike> = new Map();\n private _roster: Map<string, IRosterEntry[]> = new Map();\n private _wiringByPathKey: Map<string, Set<IWiringEntry>> = new Map();\n private _wiringEntryByBinding: WeakMap<IBindingLike, IWiringEntry> = new WeakMap();\n private _timeline: ITimelineEntry[] = [];\n private _seq: number = 0;\n private _paused: boolean = false;\n private _changeListeners: Set<CoreChangeListener> = new Set();\n\n constructor(options?: IDevtoolsCoreOptions) {\n this._timelineCapacity = options?.timelineCapacity ?? DEFAULT_TIMELINE_CAPACITY;\n this._hiddenStateNames = new Set(options?.hiddenStateNames ?? []);\n }\n\n get connected(): boolean {\n return this._removeListener !== null;\n }\n\n get paused(): boolean {\n return this._paused;\n }\n\n set paused(value: boolean) {\n this._paused = value;\n }\n\n /** 表示から除外する state 名か(予約 prefix + hiddenStateNames、protocol §5) */\n isHiddenStateName(name: string | null): boolean {\n if (name === null) {\n return false;\n }\n return name.startsWith(RESERVED_STATE_NAME_PREFIX) || this._hiddenStateNames.has(name);\n }\n\n connect(): void {\n if (this._removeListener !== null) {\n return;\n }\n const registry = getOrCreateHookRegistry();\n this._removeListener = registry.addListener({\n onSourceRegistered: (source) => {\n this._sources.set(source.id, source);\n this._refreshRosterOf(source);\n this._notify(\"sources\");\n },\n onSourceUnregistered: (sourceId) => {\n this._sources.delete(sourceId);\n this._roster.delete(sourceId);\n this._notify(\"sources\");\n this._notify(\"roster\");\n },\n onEvent: (sourceId, event) => {\n this._ingest(sourceId, event);\n },\n });\n }\n\n /** 購読解除 + 台帳クリア(タイムラインは保持。protocol §7-2 の残留ゼロ) */\n disconnect(): void {\n if (this._removeListener === null) {\n return;\n }\n this._removeListener();\n this._removeListener = null;\n this._sources.clear();\n this._roster.clear();\n this._wiringByPathKey.clear();\n this._wiringEntryByBinding = new WeakMap();\n this._notify(\"sources\");\n this._notify(\"roster\");\n this._notify(\"wiring\");\n }\n\n onChange(listener: CoreChangeListener): () => void {\n this._changeListeners.add(listener);\n return () => {\n this._changeListeners.delete(listener);\n };\n }\n\n getSources(): IDevtoolsSourceLike[] {\n return [...this._sources.values()];\n }\n\n getRoster(): IRosterEntry[] {\n const entries: IRosterEntry[] = [];\n for (const list of this._roster.values()) {\n entries.push(...list);\n }\n return entries;\n }\n\n /** 全 source の state 要素一覧を pull で取り直す */\n refreshRoster(): void {\n for (const source of this._sources.values()) {\n this._refreshRosterOf(source);\n }\n this._notify(\"roster\");\n }\n\n getTimeline(): readonly ITimelineEntry[] {\n return this._timeline;\n }\n\n clearTimeline(): void {\n this._timeline = [];\n this._notify(\"timeline\");\n }\n\n /** 指定パスに束縛された配線(生存している binding のみ) */\n getWiringForPath(stateName: string, path: string): IWiringEntry[] {\n const set = this._wiringByPathKey.get(pathKeyOf(stateName, path));\n if (set === undefined) {\n return [];\n }\n return this._collectAlive(set);\n }\n\n /** 全配線のスナップショット(生存している binding のみ) */\n getAllWiring(): IWiringEntry[] {\n const result: IWiringEntry[] = [];\n for (const set of this._wiringByPathKey.values()) {\n result.push(...this._collectAlive(set));\n }\n return result;\n }\n\n /** 指定ノード(またはその子孫のバインドノード)に載る配線 */\n getWiringForNode(node: Node): IWiringEntry[] {\n const result: IWiringEntry[] = [];\n for (const set of this._wiringByPathKey.values()) {\n for (const entry of this._collectAlive(set)) {\n const binding = entry.bindingRef.deref()!;\n if (\n binding.node === node ||\n binding.replaceNode === node ||\n node.contains(binding.node) ||\n node.contains(binding.replaceNode)\n ) {\n result.push(entry);\n }\n }\n }\n return result;\n }\n\n /** roster entry の state からトップレベルキーを列挙(keys 未実装ランタイムは空) */\n keysOf(entry: IRosterEntry): string[] {\n const source = this._sources.get(entry.sourceId);\n if (source === undefined || typeof source.keys !== \"function\") {\n return [];\n }\n return source.keys(entry.name, entry.rootNode);\n }\n\n readValue(entry: IRosterEntry, path: string, indexes?: number[]): unknown {\n const source = this._sources.get(entry.sourceId);\n if (source === undefined) {\n return undefined;\n }\n return source.read(entry.name, entry.rootNode, path, indexes);\n }\n\n writeValue(entry: IRosterEntry, path: string, value: unknown, indexes?: number[]): void {\n const source = this._sources.get(entry.sourceId);\n if (source === undefined) {\n return;\n }\n source.write(entry.name, entry.rootNode, path, value, indexes);\n }\n\n // --- internal ---\n\n private _notify(kind: CoreChangeKind): void {\n for (const listener of this._changeListeners) {\n listener(kind);\n }\n }\n\n private _refreshRosterOf(source: IDevtoolsSourceLike): void {\n const entries: IRosterEntry[] = [];\n for (const summary of source.getStateElements()) {\n if (this.isHiddenStateName(summary.name)) {\n continue;\n }\n entries.push({\n sourceId: source.id,\n name: summary.name,\n rootNode: summary.rootNode,\n summary,\n });\n }\n this._roster.set(source.id, entries);\n }\n\n private _collectAlive(set: Set<IWiringEntry>): IWiringEntry[] {\n const alive: IWiringEntry[] = [];\n for (const entry of set) {\n if (entry.bindingRef.deref() === undefined) {\n // GC 済み binding は遅延剪定(detach 漏れで DOM を残さないための WeakRef 側)\n set.delete(entry);\n continue;\n }\n alive.push(entry);\n }\n return alive;\n }\n\n private _appendTimeline(entry: Omit<ITimelineEntry, \"seq\" | \"time\">): void {\n if (this._paused) {\n return;\n }\n this._timeline.push({\n ...entry,\n seq: this._seq++,\n time: performance.now(),\n });\n const overflow = this._timeline.length - this._timelineCapacity;\n if (overflow > 0) {\n this._timeline.splice(0, overflow);\n }\n this._notify(\"timeline\");\n }\n\n private _labelOf(address: IAbsoluteAddressLike): string {\n const indexes = address.listIndex?.indexes;\n const path = address.absolutePathInfo.pathInfo.path;\n return indexes !== undefined ? `${path}[${indexes.join(\",\")}]` : path;\n }\n\n private _ingest(sourceId: string, event: DevtoolsEventLike): void {\n switch (event.type) {\n case \"state:element-registered\": {\n if (this.isHiddenStateName(event.name)) {\n return;\n }\n const source = this._sources.get(sourceId);\n if (source !== undefined) {\n this._refreshRosterOf(source);\n this._notify(\"roster\");\n }\n this._appendTimeline({\n sourceId,\n kind: \"element-registered\",\n stateName: event.name,\n label: event.name,\n detail: \"\",\n subscriberCount: null,\n });\n return;\n }\n case \"state:element-unregistered\": {\n if (this.isHiddenStateName(event.name)) {\n return;\n }\n const source = this._sources.get(sourceId);\n if (source !== undefined) {\n this._refreshRosterOf(source);\n this._notify(\"roster\");\n }\n this._appendTimeline({\n sourceId,\n kind: \"element-unregistered\",\n stateName: event.name,\n label: event.name,\n detail: \"\",\n subscriberCount: null,\n });\n return;\n }\n case \"state:write\": {\n const stateName = event.absoluteAddress.absolutePathInfo.stateName;\n if (this.isHiddenStateName(stateName)) {\n return;\n }\n const detail = event.hasOldValue\n ? `${formatValue(event.value)} (was ${formatValue(event.oldValue)})`\n : formatValue(event.value);\n this._appendTimeline({\n sourceId,\n kind: \"write\",\n stateName,\n label: this._labelOf(event.absoluteAddress),\n detail,\n subscriberCount: null,\n });\n return;\n }\n case \"state:update-batch\": {\n const labels: string[] = [];\n let total = 0;\n for (const address of event.addresses) {\n if (this.isHiddenStateName(address.absolutePathInfo.stateName)) {\n continue;\n }\n total++;\n if (labels.length < 3) {\n labels.push(this._labelOf(address));\n }\n }\n if (total === 0) {\n return;\n }\n const rest = total > labels.length ? `, …(${total})` : \"\";\n this._appendTimeline({\n sourceId,\n kind: \"batch\",\n stateName: null,\n label: `${total} address${total === 1 ? \"\" : \"es\"}`,\n detail: `${labels.join(\", \")}${rest}`,\n subscriberCount: null,\n });\n return;\n }\n case \"state:binding-added\": {\n const stateName = event.absoluteAddress.absolutePathInfo.stateName;\n if (this.isHiddenStateName(stateName)) {\n return;\n }\n const path = event.absoluteAddress.absolutePathInfo.pathInfo.path;\n const key = pathKeyOf(stateName, path);\n let set = this._wiringByPathKey.get(key);\n if (set === undefined) {\n set = new Set();\n this._wiringByPathKey.set(key, set);\n }\n const entry: IWiringEntry = {\n sourceId,\n stateName,\n path,\n propName: event.binding.propName,\n bindingType: event.binding.bindingType,\n bindingRef: new WeakRef(event.binding),\n };\n set.add(entry);\n this._wiringEntryByBinding.set(event.binding, entry);\n this._notify(\"wiring\");\n return;\n }\n case \"state:binding-removed\": {\n const entry = this._wiringEntryByBinding.get(event.binding);\n if (entry === undefined) {\n return;\n }\n this._wiringEntryByBinding.delete(event.binding);\n const key = pathKeyOf(entry.stateName, entry.path);\n const set = this._wiringByPathKey.get(key);\n if (set !== undefined) {\n set.delete(entry);\n if (set.size === 0) {\n this._wiringByPathKey.delete(key);\n }\n }\n this._notify(\"wiring\");\n return;\n }\n case \"state:binding-cleared\": {\n const stateName = event.absoluteAddress.absolutePathInfo.stateName;\n const path = event.absoluteAddress.absolutePathInfo.pathInfo.path;\n const key = pathKeyOf(stateName, path);\n if (this._wiringByPathKey.delete(key)) {\n this._notify(\"wiring\");\n }\n return;\n }\n case \"state:token-emit\": {\n if (this.isHiddenStateName(event.stateName)) {\n return;\n }\n this._appendTimeline({\n sourceId,\n kind: event.kind,\n stateName: event.stateName,\n label: event.tokenName,\n detail: formatArgs(event.args),\n subscriberCount: event.subscriberCount,\n });\n return;\n }\n case \"state:watch-error\": {\n if (this.isHiddenStateName(event.stateName)) {\n return;\n }\n // ランタイム側は例外を握って drain を守るため、ここに出ないと失敗が\n // どこにも現れない(console を見ていない限り)。phase を detail の先頭に\n // 置くのは、getter の評価失敗とハンドラの失敗で直し方が違うため。\n this._appendTimeline({\n sourceId,\n kind: \"watch-error\",\n stateName: event.stateName,\n label: event.path,\n detail: `${event.phase}: ${formatError(event.error)}`,\n subscriberCount: null,\n });\n return;\n }\n case \"state:watch-chain-limit\": {\n this._appendTimeline({\n sourceId,\n kind: \"watch-chain-limit\",\n stateName: null,\n // 打ち切りはバッチ単位で state 名を持たない(複数 state のアドレスが\n // 載りうる)ため、hidden 判定はここでは行わない。\n label: `depth > ${event.maxDepth}`,\n detail: event.paths.join(\", \"),\n subscriberCount: null,\n });\n return;\n }\n case \"propagation:suppressed\": {\n // two-way エコーの辺単位抑止。state 名を持たない(node+member が主語)\n // ため hidden 判定はここでは行わない。\n this._appendTimeline({\n sourceId,\n kind: \"propagation-suppressed\",\n stateName: null,\n label: event.member,\n detail: `${event.reason} (tx ${event.transactionId}, edge ${event.edgeId})`,\n subscriberCount: null,\n });\n return;\n }\n case \"propagation:coalesced\": {\n const stateName = event.absoluteAddress.absolutePathInfo.stateName;\n if (this.isHiddenStateName(stateName)) {\n return;\n }\n this._appendTimeline({\n sourceId,\n kind: \"propagation-coalesced\",\n stateName,\n label: this._labelOf(event.absoluteAddress),\n detail: `tx ${event.droppedTransactionId} dropped (winner tx ${event.winnerTransactionId})`,\n subscriberCount: null,\n });\n return;\n }\n case \"propagation:hop-limit\": {\n const stateName = event.absoluteAddress.absolutePathInfo.stateName;\n if (this.isHiddenStateName(stateName)) {\n return;\n }\n this._appendTimeline({\n sourceId,\n kind: \"propagation-hop-limit\",\n stateName,\n label: this._labelOf(event.absoluteAddress),\n detail: `hop ${event.hop} (tx ${event.transactionId})`,\n subscriberCount: null,\n });\n return;\n }\n case \"contract:drift\": {\n // sidecar と live wcBindable の乖離。live が正本(wcstack-manifest-schema.md)。\n // sidecarEvent / liveEvent は型上 optional(reason と結合されていない構造的\n // 型付け)のため、欠落 payload でも \"undefined\" を表示しない防御を入れる。\n const memberPart = event.member !== undefined ? `: ${event.member}` : \"\";\n const eventPart =\n event.reason === \"event-mismatch\"\n ? ` (sidecar ${event.sidecarEvent ?? \"?\"} / live ${event.liveEvent ?? \"?\"})`\n : \"\";\n this._appendTimeline({\n sourceId,\n kind: \"contract-drift\",\n stateName: null,\n label: event.tag,\n detail: `${event.reason}${memberPart}${eventPart}`,\n subscriberCount: null,\n });\n return;\n }\n case \"contract:manifest-read\":\n case \"contract:unsupported-extension\": {\n // 情報イベント。contract analyzer の戻り値 API から取得でき、timeline は\n // 活動ログに絞る(static-wiring-dx-design.md §6 の行 4 種)。union に\n // 載せることで「型に無いイベントを黙って捨てる」状態だけを解消する。\n return;\n }\n }\n // 全 union メンバーは上の case で return する。ここに到達するのは union 外の\n // 未知イベント(新しいランタイム)だけで、additive プロトコルの意図どおり素通し。\n // union にメンバーを足して case を書き忘れると、この代入が型エラーで止める\n // (watch 2 種 → PR#161、propagation/contract 6 種 → 本修正、の再々発防止)。\n const _exhaustive: never = event;\n void _exhaustive;\n }\n}\n","/**\n * core/declaredScan.ts\n *\n * 遅延アタッチ時の declared ビュー(protocol §6)。\n *\n * binding 台帳はフック接続前の分を復元できないため、DOM に残っている\n * `data-wcs` 属性と `<!--wcs-*: -->` コメントを再スキャンして\n * 「宣言レベルの配線ビュー」を組む。ライブ台帳と違い binding 実体・\n * 接続状態は分からない(UI では \"declared\" バッジで区別する)。\n *\n * パースは表示目的の簡易版(`prop[#mod]: path[@state][|filters]` を\n * `;` 区切りで分解するだけ)。正確なセマンティクスの正本は\n * @wcstack/state の bindTextParser であり、ここでは追随しない。\n */\n\nexport interface IDeclaredBinding {\n /** 宣言が載っている要素(コメント由来の場合は親要素) */\n readonly element: Element;\n readonly propName: string;\n readonly path: string;\n readonly stateName: string;\n readonly filters: readonly string[];\n /** 宣言ソース: data-wcs 属性か comment ノードか */\n readonly origin: \"attribute\" | \"comment\";\n readonly raw: string;\n}\n\nconst DEFAULT_BIND_ATTRIBUTE = \"data-wcs\";\nconst COMMENT_PREFIXES = [\"wcs-text\", \"wcs-for\", \"wcs-if\", \"wcs-elseif\", \"wcs-else\"];\n\nfunction parseEntry(\n element: Element,\n raw: string,\n origin: \"attribute\" | \"comment\"\n): IDeclaredBinding | null {\n const trimmed = raw.trim();\n if (trimmed.length === 0) {\n return null;\n }\n const colon = trimmed.indexOf(\":\");\n if (colon < 0) {\n return null;\n }\n const propName = trimmed.slice(0, colon).trim();\n const rhs = trimmed.slice(colon + 1).trim();\n if (propName.length === 0 || rhs.length === 0) {\n return null;\n }\n const [pathPart, ...filterParts] = rhs.split(\"|\").map((part) => part.trim());\n let path = pathPart;\n let stateName = \"default\";\n const at = pathPart.lastIndexOf(\"@\");\n if (at > 0) {\n path = pathPart.slice(0, at).trim();\n stateName = pathPart.slice(at + 1).trim();\n }\n return {\n element,\n propName,\n path,\n stateName,\n filters: filterParts.filter((part) => part.length > 0),\n origin,\n raw: trimmed,\n };\n}\n\n/**\n * rootNode 配下の宣言配線を列挙する。\n * @param root 走査起点(Document / ShadowRoot / Element)\n * @param bindAttributeName バインド属性名(既定 data-wcs。setConfig で変えたページ用)\n */\nexport function scanDeclaredBindings(\n root: ParentNode,\n bindAttributeName: string = DEFAULT_BIND_ATTRIBUTE\n): IDeclaredBinding[] {\n const result: IDeclaredBinding[] = [];\n\n // data-wcs 属性(template の for/if 宣言もこの属性に載る)\n for (const element of root.querySelectorAll(`[${bindAttributeName}]`)) {\n // querySelectorAll の一致条件上、属性は必ず存在する\n const raw = element.getAttribute(bindAttributeName)!;\n for (const part of raw.split(\";\")) {\n const entry = parseEntry(element, part, \"attribute\");\n if (entry !== null) {\n result.push(entry);\n }\n }\n }\n\n // <!--wcs-text: path--> 等のコメントノード(mustache 展開後の姿)\n const document = root.ownerDocument ?? (root as Document);\n const walker = document.createTreeWalker(root as Node, NodeFilter.SHOW_COMMENT);\n let comment = walker.nextNode();\n while (comment !== null) {\n // コメントノードの textContent は常に文字列\n const text = comment.textContent!.trim();\n const prefix = COMMENT_PREFIXES.find(\n (candidate) => text === candidate || text.startsWith(candidate + \":\")\n );\n if (prefix !== undefined) {\n const parentElement =\n comment.parentNode instanceof Element ? comment.parentNode : null;\n if (parentElement !== null) {\n const body = text === prefix ? \"\" : text.slice(prefix.length + 1).trim();\n if (body.length > 0) {\n const propName = prefix === \"wcs-text\" ? \"textContent\" : prefix.slice(\"wcs-\".length);\n // propName / body とも非空のため parseEntry は必ず成功する\n result.push(parseEntry(parentElement, `${propName}: ${body}`, \"comment\")!);\n }\n }\n }\n comment = walker.nextNode();\n }\n\n return result;\n}\n","/**\n * shell/WcsDevtools.ts\n *\n * `<wcs-devtools>` — ページ内オーバーレイ DevTools 本体(devtools-tag-design.md)。\n *\n * - ShadowRoot 内で完結(ページの CSS/DOM を変更しない)\n * - ハイライトはページ要素の style/class を触らず、fixed 配置の\n * オーバーレイ枠で描く(devtools-tag-design.md §2)\n * - UI レンダリングは vanilla DOM(記録済み決定: inspected ランタイムの\n * updater キューに devtools 描画負荷を混ぜない = 観測者効果の排除。\n * wcs-state ドッグフーディングは Phase 2 で再評価)\n * - 描画は Core の change 通知を rAF で 1 回に合流(イベント毎 DOM 追加禁止、\n * devtools-tag-design.md §3.3)\n */\n\nimport { DevtoolsCore, IRosterEntry, ITimelineEntry, IWiringEntry } from \"../core/DevtoolsCore\";\nimport { formatValue } from \"../core/formatValue\";\nimport { IDeclaredBinding, scanDeclaredBindings } from \"../core/declaredScan\";\n\nconst STYLE_TEXT = /* css */ `\n:host {\n all: initial;\n position: fixed;\n z-index: 2147483647;\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 12px;\n inset: auto 0 0 auto;\n}\n* { box-sizing: border-box; }\n.badge {\n position: fixed;\n right: 12px;\n bottom: 12px;\n width: 40px;\n height: 40px;\n border-radius: 20px;\n border: 1px solid #2b4f78;\n background: #10263f;\n color: #9fd0ff;\n font-weight: 700;\n cursor: pointer;\n}\n.panel {\n position: fixed;\n display: flex;\n flex-direction: column;\n background: #0d1b2a;\n color: #d7e3f4;\n border: 1px solid #2b4f78;\n box-shadow: 0 0 24px rgba(0,0,0,.5);\n}\n.panel.dock-bottom { left: 0; right: 0; bottom: 0; height: 45vh; }\n.panel.dock-right { top: 0; right: 0; bottom: 0; width: 420px; }\n.panel[hidden] { display: none; }\nheader {\n display: flex;\n gap: 6px;\n align-items: center;\n padding: 6px 8px;\n border-bottom: 1px solid #2b4f78;\n background: #10263f;\n}\nheader .title { font-weight: 700; color: #9fd0ff; margin-right: 4px; }\nheader select, header button {\n font: inherit;\n background: #16324f;\n color: #d7e3f4;\n border: 1px solid #2b4f78;\n border-radius: 4px;\n padding: 2px 8px;\n cursor: pointer;\n}\nheader button[aria-pressed=\"true\"] { background: #2b5d8f; }\nheader .spacer { flex: 1; }\n.panes { display: flex; flex: 1; min-height: 0; }\n.pane { flex: 1; min-width: 0; overflow: auto; padding: 6px 8px; border-right: 1px solid #1d3a5c; }\n.pane:last-child { border-right: none; }\n.pane h3 {\n margin: 0 0 6px;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: .08em;\n color: #7ba7d4;\n}\n.tree-row { display: flex; gap: 6px; padding: 1px 0; align-items: baseline; white-space: nowrap; }\n.tree-row .toggle { width: 14px; cursor: pointer; color: #7ba7d4; user-select: none; }\n.tree-row .key { color: #9fd0ff; cursor: pointer; }\n.tree-row .value { color: #ffd9a0; overflow: hidden; text-overflow: ellipsis; }\n.tree-row .value.editable { cursor: pointer; }\n.tree-row input { font: inherit; background: #16324f; color: #ffd9a0; border: 1px solid #2b4f78; }\n.badge-tag {\n display: inline-block;\n padding: 0 4px;\n border-radius: 3px;\n font-size: 10px;\n background: #26456a;\n color: #a8c6e8;\n}\n.badge-tag.warn { background: #6a3326; color: #ffb3a0; }\n.badge-tag.declared { background: #4a4426; color: #efe3a0; }\n.wiring-row, .timeline-row { padding: 1px 0; white-space: nowrap; }\n.wiring-row .prop { color: #b7f0c0; }\n.wiring-row .path { color: #9fd0ff; }\n.timeline-row .t { color: #6f88a3; }\n.timeline-row .label { color: #9fd0ff; }\n.timeline-row .detail { color: #ffd9a0; }\n.timeline-row .kind { display: inline-block; min-width: 52px; text-align: center; }\n.empty { color: #6f88a3; font-style: italic; padding: 4px 0; }\n.notice { color: #efe3a0; padding: 2px 0 6px; }\n.notice button { font: inherit; margin-left: 6px; cursor: pointer; }\n.hl-box {\n position: fixed;\n pointer-events: none;\n border: 1px solid #58c2ff;\n background: rgba(88,194,255,.18);\n}\n`;\n\ntype PaneName = \"state\" | \"wiring\" | \"timeline\";\n\n/** タイムラインの DOM 描画上限(buffer とは別。§3.3 のバースト圧縮の一部) */\nconst TIMELINE_RENDER_LIMIT = 200;\n/** リスト展開の 1 階層あたり表示件数上限 */\nconst LIST_CHILD_LIMIT = 20;\n\ninterface ITreeNodeRef {\n readonly path: string;\n readonly indexes: number[];\n}\n\nfunction nodeKeyOf(ref: ITreeNodeRef): string {\n return `${ref.path}#${ref.indexes.join(\",\")}`;\n}\n\nfunction isExpandable(value: unknown): boolean {\n if (Array.isArray(value)) {\n return true;\n }\n if (value === null || typeof value !== \"object\") {\n return false;\n }\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\nfunction coerceInput(text: string): unknown {\n const trimmed = text.trim();\n try {\n return JSON.parse(trimmed);\n } catch {\n return text;\n }\n}\n\nexport class WcsDevtools extends HTMLElement {\n static get observedAttributes(): string[] {\n return [\"open\", \"dock\", \"hotkey\"];\n }\n\n private _core: DevtoolsCore | null = null;\n private _removeCoreListener: (() => void) | null = null;\n private _panel: HTMLElement | null = null;\n private _badge: HTMLButtonElement | null = null;\n private _stateSelect: HTMLSelectElement | null = null;\n private _paneElements: Partial<Record<PaneName, HTMLElement>> = {};\n private _highlightLayer: HTMLElement | null = null;\n private _dirtyPanes: Set<PaneName> = new Set();\n private _renderScheduled: boolean = false;\n private _selectedRosterKey: string | null = null;\n private _selectedPath: string | null = null;\n private _pickedNode: Node | null = null;\n private _pickMode: boolean = false;\n private _expanded: Set<string> = new Set();\n private _hotkeyHandler: ((event: KeyboardEvent) => void) | null = null;\n private _pickHandler: ((event: MouseEvent) => void) | null = null;\n\n get core(): DevtoolsCore | null {\n return this._core;\n }\n\n connectedCallback(): void {\n // SSR では不活性(protocol 原則 6)\n if (document.documentElement.hasAttribute(\"data-wcs-server\")) {\n return;\n }\n if (this.shadowRoot === null) {\n this._buildShadow();\n }\n const capacity = Number(this.getAttribute(\"buffer\") ?? \"\");\n const hidden = (this.getAttribute(\"hidden-states\") ?? \"\")\n .split(\",\")\n .map((name) => name.trim())\n .filter((name) => name.length > 0);\n this._core = new DevtoolsCore({\n timelineCapacity: Number.isFinite(capacity) && capacity > 0 ? capacity : undefined,\n hiddenStateNames: hidden,\n });\n this._removeCoreListener = this._core.onChange((kind) => {\n if (kind === \"roster\" || kind === \"sources\") {\n this._markDirty(\"state\");\n this._markDirty(\"wiring\");\n } else if (kind === \"wiring\") {\n this._markDirty(\"wiring\");\n } else {\n this._markDirty(\"timeline\");\n }\n });\n this._core.connect();\n this._applyDock();\n this._applyOpen();\n this._installHotkey();\n this._markDirty(\"state\");\n this._markDirty(\"wiring\");\n this._markDirty(\"timeline\");\n }\n\n disconnectedCallback(): void {\n this._removeCoreListener?.();\n this._removeCoreListener = null;\n this._core?.disconnect();\n this._core = null;\n this._uninstallHotkey();\n this._exitPickMode();\n }\n\n attributeChangedCallback(name: string): void {\n if (this.shadowRoot === null) {\n return;\n }\n if (name === \"open\") {\n this._applyOpen();\n } else if (name === \"dock\") {\n this._applyDock();\n } else if (name === \"hotkey\") {\n this._uninstallHotkey();\n this._installHotkey();\n }\n }\n\n /** テスト用: rAF を待たずに保留中の描画を実行する */\n __flushRenderForTest(): void {\n this._renderDirty();\n }\n\n // --- shadow construction ---\n\n private _buildShadow(): void {\n const shadow = this.attachShadow({ mode: \"open\" });\n const style = document.createElement(\"style\");\n style.textContent = STYLE_TEXT;\n shadow.append(style);\n\n const badge = document.createElement(\"button\");\n badge.className = \"badge\";\n badge.title = \"wcstack DevTools\";\n badge.textContent = \"WCS\";\n badge.addEventListener(\"click\", () => this.toggle());\n shadow.append(badge);\n this._badge = badge;\n\n const panel = document.createElement(\"div\");\n panel.className = \"panel dock-bottom\";\n panel.hidden = true;\n\n const header = document.createElement(\"header\");\n const title = document.createElement(\"span\");\n title.className = \"title\";\n title.textContent = \"wcstack devtools\";\n header.append(title);\n\n const stateSelect = document.createElement(\"select\");\n stateSelect.title = \"state element\";\n stateSelect.addEventListener(\"change\", () => {\n this._selectedRosterKey = stateSelect.value || null;\n this._selectedPath = null;\n this._expanded.clear();\n this._markDirty(\"state\");\n this._markDirty(\"wiring\");\n });\n header.append(stateSelect);\n this._stateSelect = stateSelect;\n\n const pickButton = this._headerButton(header, \"⌖ pick\", \"pick a page element\");\n pickButton.addEventListener(\"click\", () => {\n if (this._pickMode) {\n this._exitPickMode();\n } else {\n this._enterPickMode();\n }\n pickButton.setAttribute(\"aria-pressed\", String(this._pickMode));\n });\n pickButton.dataset[\"role\"] = \"pick\";\n\n const pauseButton = this._headerButton(header, \"⏸\", \"pause timeline\");\n pauseButton.addEventListener(\"click\", () => {\n const core = this._core;\n if (core === null) {\n return;\n }\n core.paused = !core.paused;\n pauseButton.setAttribute(\"aria-pressed\", String(core.paused));\n });\n pauseButton.dataset[\"role\"] = \"pause\";\n\n const clearButton = this._headerButton(header, \"🗑\", \"clear timeline\");\n clearButton.addEventListener(\"click\", () => {\n this._core?.clearTimeline();\n });\n clearButton.dataset[\"role\"] = \"clear\";\n\n const spacer = document.createElement(\"span\");\n spacer.className = \"spacer\";\n header.append(spacer);\n\n const dockButton = this._headerButton(header, \"dock\", \"toggle dock position\");\n dockButton.addEventListener(\"click\", () => {\n const next = (this.getAttribute(\"dock\") ?? \"bottom\") === \"bottom\" ? \"right\" : \"bottom\";\n this.setAttribute(\"dock\", next);\n });\n dockButton.dataset[\"role\"] = \"dock\";\n\n const closeButton = this._headerButton(header, \"×\", \"close\");\n closeButton.addEventListener(\"click\", () => this.toggle(false));\n closeButton.dataset[\"role\"] = \"close\";\n\n panel.append(header);\n\n const panes = document.createElement(\"div\");\n panes.className = \"panes\";\n for (const [name, heading] of [\n [\"state\", \"State\"],\n [\"wiring\", \"Wiring\"],\n [\"timeline\", \"Timeline\"],\n ] as const) {\n const pane = document.createElement(\"section\");\n pane.className = `pane pane-${name}`;\n const h3 = document.createElement(\"h3\");\n h3.textContent = heading;\n const body = document.createElement(\"div\");\n body.className = \"pane-body\";\n pane.append(h3, body);\n panes.append(pane);\n this._paneElements[name] = body;\n }\n panel.append(panes);\n shadow.append(panel);\n this._panel = panel;\n\n const highlightLayer = document.createElement(\"div\");\n highlightLayer.className = \"hl-layer\";\n shadow.append(highlightLayer);\n this._highlightLayer = highlightLayer;\n }\n\n private _headerButton(header: HTMLElement, label: string, title: string): HTMLButtonElement {\n const button = document.createElement(\"button\");\n button.textContent = label;\n button.title = title;\n button.setAttribute(\"aria-pressed\", \"false\");\n header.append(button);\n return button;\n }\n\n // --- open/close/dock/hotkey ---\n\n get open(): boolean {\n return this.hasAttribute(\"open\");\n }\n\n toggle(force?: boolean): void {\n const next = force ?? !this.open;\n if (next) {\n this.setAttribute(\"open\", \"\");\n } else {\n this.removeAttribute(\"open\");\n }\n }\n\n private _applyOpen(): void {\n // shadowRoot 構築後にしか呼ばれない(attributeChangedCallback 側でガード済み)\n this._panel!.hidden = !this.open;\n this._badge!.hidden = this.open;\n if (this.open) {\n this._markDirty(\"state\");\n this._markDirty(\"wiring\");\n this._markDirty(\"timeline\");\n }\n }\n\n private _applyDock(): void {\n // shadowRoot 構築後にしか呼ばれない(attributeChangedCallback 側でガード済み)\n const dock = this.getAttribute(\"dock\") === \"right\" ? \"right\" : \"bottom\";\n this._panel!.classList.toggle(\"dock-right\", dock === \"right\");\n this._panel!.classList.toggle(\"dock-bottom\", dock === \"bottom\");\n }\n\n private _installHotkey(): void {\n const spec = this.getAttribute(\"hotkey\") ?? \"Alt+Shift+D\";\n if (spec === \"none\") {\n return;\n }\n const parts = spec.split(\"+\").map((part) => part.trim().toLowerCase());\n const key = parts[parts.length - 1];\n const alt = parts.includes(\"alt\");\n const shift = parts.includes(\"shift\");\n const ctrl = parts.includes(\"ctrl\");\n const meta = parts.includes(\"meta\");\n this._hotkeyHandler = (event: KeyboardEvent) => {\n if (\n event.key.toLowerCase() === key &&\n event.altKey === alt &&\n event.shiftKey === shift &&\n event.ctrlKey === ctrl &&\n event.metaKey === meta\n ) {\n event.preventDefault();\n this.toggle();\n }\n };\n window.addEventListener(\"keydown\", this._hotkeyHandler);\n }\n\n private _uninstallHotkey(): void {\n if (this._hotkeyHandler !== null) {\n window.removeEventListener(\"keydown\", this._hotkeyHandler);\n this._hotkeyHandler = null;\n }\n }\n\n // --- pick mode ---\n\n private _enterPickMode(): void {\n // 呼び出し元(pick ボタン)が toggle 済みのため、ここでは常に開始でよい\n this._pickMode = true;\n // click を capture で奪う(誤操作防止、devtools-tag-design.md G-U2 の既定側)\n this._pickHandler = (event: MouseEvent) => {\n const target = event.target as Node;\n // devtools 自身(実ブラウザでは retarget されて host、shadow 非 retarget 環境では\n // shadow 内ノード)は pick 対象外\n if (target.getRootNode() === this.shadowRoot || target === this) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n this._pickedNode = target;\n this._selectedPath = null;\n this._exitPickMode();\n this._markDirty(\"wiring\");\n };\n document.addEventListener(\"click\", this._pickHandler, { capture: true });\n }\n\n private _exitPickMode(): void {\n if (this._pickHandler !== null) {\n document.removeEventListener(\"click\", this._pickHandler, { capture: true });\n this._pickHandler = null;\n }\n this._pickMode = false;\n const pickButton = this.shadowRoot?.querySelector('button[data-role=\"pick\"]');\n pickButton?.setAttribute(\"aria-pressed\", \"false\");\n }\n\n // --- rendering ---\n\n private _markDirty(pane: PaneName): void {\n this._dirtyPanes.add(pane);\n if (this._renderScheduled) {\n return;\n }\n this._renderScheduled = true;\n requestAnimationFrame(() => {\n this._renderDirty();\n });\n }\n\n private _renderDirty(): void {\n this._renderScheduled = false;\n if (this._core === null || this.shadowRoot === null) {\n this._dirtyPanes.clear();\n return;\n }\n const dirty = this._dirtyPanes;\n this._dirtyPanes = new Set();\n if (dirty.has(\"state\")) {\n this._renderStatePane();\n }\n if (dirty.has(\"wiring\")) {\n this._renderWiringPane();\n }\n if (dirty.has(\"timeline\")) {\n this._renderTimelinePane();\n }\n }\n\n private _rosterKey(entry: IRosterEntry): string {\n return `${entry.sourceId}:${entry.name}`;\n }\n\n private _selectedRoster(): IRosterEntry | null {\n const core = this._core!;\n const roster = core.getRoster();\n if (roster.length === 0) {\n return null;\n }\n const found = roster.find((entry) => this._rosterKey(entry) === this._selectedRosterKey);\n return found ?? roster[0];\n }\n\n private _renderStatePane(): void {\n const core = this._core!;\n const body = this._paneElements[\"state\"]!;\n const select = this._stateSelect!;\n const roster = core.getRoster();\n const selected = this._selectedRoster();\n\n select.replaceChildren(\n ...roster.map((entry) => {\n const option = document.createElement(\"option\");\n option.value = this._rosterKey(entry);\n option.textContent = `${entry.name} (${entry.sourceId.slice(0, 12)})`;\n option.selected = selected !== null && this._rosterKey(entry) === this._rosterKey(selected);\n return option;\n })\n );\n\n body.replaceChildren();\n if (selected === null) {\n body.append(this._emptyRow(\"no <wcs-state> elements observed\"));\n return;\n }\n this._selectedRosterKey = this._rosterKey(selected);\n const keys = core.keysOf(selected);\n if (keys.length === 0) {\n body.append(this._emptyRow(\"no readable keys (runtime without keys() API?)\"));\n return;\n }\n for (const key of keys) {\n this._renderTreeNode(body, selected, { path: key, indexes: [] }, key, 0);\n }\n }\n\n private _renderTreeNode(\n container: HTMLElement,\n entry: IRosterEntry,\n ref: ITreeNodeRef,\n label: string,\n depth: number\n ): void {\n const core = this._core!;\n let value: unknown;\n let readable = true;\n try {\n value = core.readValue(entry, ref.path, ref.indexes);\n } catch {\n readable = false;\n }\n\n const row = document.createElement(\"div\");\n row.className = \"tree-row\";\n row.style.paddingLeft = `${depth * 14}px`;\n\n const expandable = readable && isExpandable(value);\n const key = nodeKeyOf(ref);\n const expanded = expandable && this._expanded.has(key);\n\n const toggle = document.createElement(\"span\");\n toggle.className = \"toggle\";\n toggle.textContent = expandable ? (expanded ? \"▾\" : \"▸\") : \"\";\n if (expandable) {\n toggle.addEventListener(\"click\", () => {\n if (this._expanded.has(key)) {\n this._expanded.delete(key);\n } else {\n this._expanded.add(key);\n }\n this._markDirty(\"state\");\n });\n }\n row.append(toggle);\n\n const keySpan = document.createElement(\"span\");\n keySpan.className = \"key\";\n keySpan.textContent = `${label}:`;\n keySpan.title = ref.path;\n keySpan.addEventListener(\"click\", () => {\n this._selectedPath = ref.path;\n this._pickedNode = null;\n this._markDirty(\"wiring\");\n this._highlightPath(entry, ref.path);\n });\n row.append(keySpan);\n\n const valueSpan = document.createElement(\"span\");\n valueSpan.className = \"value\";\n if (!readable) {\n valueSpan.textContent = \"(unreadable getter)\";\n } else {\n valueSpan.textContent = formatValue(value, 1);\n const editable = value === null || typeof value !== \"object\";\n if (editable && typeof value !== \"function\") {\n valueSpan.classList.add(\"editable\");\n valueSpan.title = \"click to edit\";\n valueSpan.addEventListener(\"click\", () => {\n this._beginEdit(row, valueSpan, entry, ref, value);\n });\n }\n }\n row.append(valueSpan);\n container.append(row);\n\n if (expanded) {\n if (Array.isArray(value)) {\n const limit = Math.min(value.length, LIST_CHILD_LIMIT);\n for (let index = 0; index < limit; index++) {\n this._renderTreeNode(\n container,\n entry,\n { path: `${ref.path}.*`, indexes: [...ref.indexes, index] },\n `[${index}]`,\n depth + 1\n );\n }\n if (value.length > limit) {\n const more = this._emptyRow(`…(${value.length} items)`);\n more.style.paddingLeft = `${(depth + 1) * 14}px`;\n container.append(more);\n }\n } else {\n for (const childKey of Object.keys(value as Record<string, unknown>)) {\n this._renderTreeNode(\n container,\n entry,\n { path: `${ref.path}.${childKey}`, indexes: ref.indexes },\n childKey,\n depth + 1\n );\n }\n }\n }\n }\n\n private _beginEdit(\n row: HTMLElement,\n valueSpan: HTMLElement,\n entry: IRosterEntry,\n ref: ITreeNodeRef,\n current: unknown\n ): void {\n const input = document.createElement(\"input\");\n input.value = typeof current === \"string\" ? current : String(current);\n const commit = (): void => {\n // 編集は通常のリアクティブパイプラインを通る(devtools-tag-design.md §3.1)\n this._core?.writeValue(entry, ref.path, coerceInput(input.value), ref.indexes);\n this._markDirty(\"state\");\n };\n input.addEventListener(\"keydown\", (event) => {\n if (event.key === \"Enter\") {\n commit();\n } else if (event.key === \"Escape\") {\n this._markDirty(\"state\");\n }\n });\n row.replaceChild(input, valueSpan);\n input.focus();\n }\n\n private _renderWiringPane(): void {\n const core = this._core!;\n const body = this._paneElements[\"wiring\"]!;\n body.replaceChildren();\n\n let entries: IWiringEntry[];\n let contextLabel: string;\n if (this._pickedNode !== null) {\n entries = core.getWiringForNode(this._pickedNode);\n const target = this._pickedNode;\n contextLabel =\n target instanceof Element ? `<${target.tagName.toLowerCase()}>` : target.nodeName;\n } else if (this._selectedPath !== null) {\n const selected = this._selectedRoster();\n entries =\n selected !== null ? core.getWiringForPath(selected.name, this._selectedPath) : [];\n contextLabel = this._selectedPath;\n } else {\n entries = core.getAllWiring();\n contextLabel = \"all\";\n }\n\n const info = document.createElement(\"div\");\n info.textContent = `context: ${contextLabel} — ${entries.length} live binding${entries.length === 1 ? \"\" : \"s\"}`;\n body.append(info);\n\n if (entries.length > 0) {\n for (const entry of entries) {\n body.append(this._wiringRow(entry));\n }\n return;\n }\n\n // ライブ台帳が空 → declared ビューへフォールバック(protocol §6)\n const selected = this._selectedRoster();\n const declared =\n selected !== null ? scanDeclaredBindings(this._scanRootOf(selected)) : [];\n if (declared.length === 0) {\n body.append(this._emptyRow(\"no bindings observed\"));\n return;\n }\n const notice = document.createElement(\"div\");\n notice.className = \"notice\";\n const tag = document.createElement(\"span\");\n tag.className = \"badge-tag declared\";\n tag.textContent = \"declared\";\n notice.append(tag, document.createTextNode(\" attached late — reload to capture live bindings \"));\n const reload = document.createElement(\"button\");\n reload.textContent = \"reload\";\n reload.addEventListener(\"click\", () => {\n location.reload();\n });\n notice.append(reload);\n body.append(notice);\n for (const entry of declared) {\n body.append(this._declaredRow(entry));\n }\n }\n\n private _scanRootOf(entry: IRosterEntry): ParentNode {\n // instanceof はテスト環境(happy-dom)の Document 実体と一致しないことがあるため\n // nodeType で判定する(DOCUMENT_FRAGMENT_NODE は ShadowRoot を含む)\n const rootNode = entry.rootNode;\n if (\n rootNode.nodeType === Node.DOCUMENT_NODE ||\n rootNode.nodeType === Node.DOCUMENT_FRAGMENT_NODE\n ) {\n return rootNode as unknown as ParentNode;\n }\n return document;\n }\n\n private _wiringRow(entry: IWiringEntry): HTMLElement {\n const row = document.createElement(\"div\");\n row.className = \"wiring-row\";\n const prop = document.createElement(\"span\");\n prop.className = \"prop\";\n prop.textContent = entry.propName;\n const arrow = document.createTextNode(\" ← \");\n const path = document.createElement(\"span\");\n path.className = \"path\";\n path.textContent = `${entry.path}@${entry.stateName}`;\n const type = document.createElement(\"span\");\n type.className = \"badge-tag\";\n type.textContent = entry.bindingType;\n row.append(type, document.createTextNode(\" \"), prop, arrow, path);\n row.addEventListener(\"click\", () => {\n const binding = entry.bindingRef.deref();\n if (binding !== undefined) {\n this._highlightNodes([binding.node, binding.replaceNode]);\n }\n });\n return row;\n }\n\n private _declaredRow(entry: IDeclaredBinding): HTMLElement {\n const row = document.createElement(\"div\");\n row.className = \"wiring-row\";\n const type = document.createElement(\"span\");\n type.className = \"badge-tag declared\";\n type.textContent = entry.origin;\n const prop = document.createElement(\"span\");\n prop.className = \"prop\";\n prop.textContent = entry.propName;\n const path = document.createElement(\"span\");\n path.className = \"path\";\n path.textContent = `${entry.path}@${entry.stateName}`;\n row.append(type, document.createTextNode(\" \"), prop, document.createTextNode(\" ← \"), path);\n row.addEventListener(\"click\", () => {\n this._highlightNodes([entry.element]);\n });\n return row;\n }\n\n private _renderTimelinePane(): void {\n const core = this._core!;\n const body = this._paneElements[\"timeline\"]!;\n const timeline = core.getTimeline();\n const start = Math.max(0, timeline.length - TIMELINE_RENDER_LIMIT);\n const rows: HTMLElement[] = [];\n if (start > 0) {\n rows.push(this._emptyRow(`…(${start} earlier entries)`));\n }\n for (let index = start; index < timeline.length; index++) {\n rows.push(this._timelineRow(timeline[index]));\n }\n if (rows.length === 0) {\n rows.push(this._emptyRow(\"no activity yet\"));\n }\n body.replaceChildren(...rows);\n body.scrollTop = body.scrollHeight;\n }\n\n private _timelineRow(entry: ITimelineEntry): HTMLElement {\n const row = document.createElement(\"div\");\n row.className = \"timeline-row\";\n const time = document.createElement(\"span\");\n time.className = \"t\";\n time.textContent = `${(entry.time / 1000).toFixed(3)}s `;\n const kind = document.createElement(\"span\");\n kind.className = \"badge-tag kind\";\n kind.textContent = entry.kind;\n // subscriber 0 の command/event 空撃ちは警告表示(devtools-tag-design.md §3.2)\n if (entry.subscriberCount === 0) {\n kind.classList.add(\"warn\");\n kind.title = \"emitted with no subscribers\";\n }\n // `$watch` の失敗はランタイムが握って drain を守るため、ここが唯一の\n // 「気づける場所」になる。空撃ちと同じ warn 表示に乗せる。\n if (entry.kind === \"watch-error\" || entry.kind === \"watch-chain-limit\") {\n kind.classList.add(\"warn\");\n kind.title = entry.kind === \"watch-error\"\n ? \"a $watch threw; the runtime isolated it (console.error only)\"\n : \"a $watch write chain hit the depth limit and was cut off\";\n }\n // 伝播の打ち切りと契約 drift も「黙って起きる異常」なので warn に乗せる。\n // suppressed / coalesced は定常動作(エコー抑止・合流)のため通常表示。\n if (entry.kind === \"propagation-hop-limit\" || entry.kind === \"contract-drift\") {\n kind.classList.add(\"warn\");\n kind.title = entry.kind === \"propagation-hop-limit\"\n ? \"a two-way propagation chain hit the hop limit and was cut off\"\n : \"sidecar manifest drifted from the live wcBindable declaration (live wins)\";\n }\n const label = document.createElement(\"span\");\n label.className = \"label\";\n const stateName = entry.stateName !== null ? `@${entry.stateName}` : \"\";\n label.textContent = ` ${entry.label}${stateName} `;\n const detail = document.createElement(\"span\");\n detail.className = \"detail\";\n detail.textContent = entry.detail;\n row.append(time, kind, label, detail);\n return row;\n }\n\n private _emptyRow(text: string): HTMLElement {\n const row = document.createElement(\"div\");\n row.className = \"empty\";\n row.textContent = text;\n return row;\n }\n\n // --- highlight ---\n\n private _highlightPath(entry: IRosterEntry, path: string): void {\n const core = this._core!;\n const nodes: Node[] = [];\n for (const wiring of core.getWiringForPath(entry.name, path)) {\n const binding = wiring.bindingRef.deref();\n if (binding !== undefined) {\n nodes.push(binding.node, binding.replaceNode);\n }\n }\n this._highlightNodes(nodes);\n }\n\n private _highlightNodes(nodes: readonly Node[]): void {\n // shadowRoot 構築後にしか呼ばれない(各リスナーは _buildShadow 内で配線される)\n const layer = this._highlightLayer!;\n layer.replaceChildren();\n const seen = new Set<Element>();\n for (const node of nodes) {\n const element = node instanceof Element ? node : node.parentElement;\n if (element === null || seen.has(element) || !element.isConnected) {\n continue;\n }\n seen.add(element);\n const rect = element.getBoundingClientRect();\n const box = document.createElement(\"div\");\n box.className = \"hl-box\";\n box.style.left = `${rect.left}px`;\n box.style.top = `${rect.top}px`;\n box.style.width = `${rect.width}px`;\n box.style.height = `${rect.height}px`;\n layer.append(box);\n }\n // 2 秒後に自動で消す(追従はしない — クリック時スナップショット表示)\n setTimeout(() => {\n layer.replaceChildren();\n }, 2000);\n }\n}\n","/**\n * bootstrapDevtools.ts\n *\n * `<wcs-devtools>` の登録と自動挿入(devtools-tag-design.md §2)。\n * - 既に定義済みなら再定義しない\n * - ページに `<wcs-devtools>` が無ければ body 末尾に 1 つ挿入\n * (手動で書かれていれば挿入しない)\n * - SSR では何もしない\n */\n\nimport { WcsDevtools } from \"./shell/WcsDevtools\";\n\nconst TAG_NAME = \"wcs-devtools\";\n\nfunction insertIfAbsent(): void {\n if (document.querySelector(TAG_NAME) !== null) {\n return;\n }\n document.body.appendChild(document.createElement(TAG_NAME));\n}\n\nexport function bootstrapDevtools(): void {\n if (document.documentElement.hasAttribute(\"data-wcs-server\")) {\n return;\n }\n if (!customElements.get(TAG_NAME)) {\n customElements.define(TAG_NAME, WcsDevtools);\n }\n if (document.body !== null) {\n insertIfAbsent();\n } else {\n document.addEventListener(\"DOMContentLoaded\", insertIfAbsent, { once: true });\n }\n}\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wcstack/devtools",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.28.0",
|
|
4
4
|
"description": "In-page DevTools overlay for wcstack. Inspect state trees, bindings/wiring and update timelines via the DevTools Hook Protocol - one script tag, no build step.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.esm.js",
|