@wcstack/router 1.32.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auto.min.js +1 -1
- package/dist/auto.min.js.map +1 -1
- package/dist/index.d.ts +175 -0
- package/dist/index.esm.js +37 -6
- 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/config.ts","../../src/getUUID.ts","../../src/raiseError.ts","../../src/GuardCancel.ts","../../src/builtinParamTypes.ts","../../src/core/RouteCore.ts","../../src/components/Route.ts","../../src/components/Layout.ts","../../src/components/Outlet.ts","../../src/getCustomTagName.ts","../../src/assignParams.ts","../../src/components/LayoutOutlet.ts","../../src/loadGuardHandler.ts","../../src/parse.ts","../../src/a11yPolicies.ts","../../src/testPath.ts","../../src/matchRoutes.ts","../../src/normalizePathname.ts","../../src/hideRoute.ts","../../src/showRoute.ts","../../src/protocol/transitionRunner.ts","../../src/protocol/binder.ts","../../src/unboundMarkupWarning.ts","../../src/showRouteContent.ts","../../src/applyRoute.ts","../../src/Navigation.ts","../../src/searchParams.ts","../../src/splitUrlTarget.ts","../../src/protocol/upgradeProperties.ts","../../src/inSsr.ts","../../src/ssrMarkers.ts","../../src/components/Router.ts","../../src/components/Link.ts","../../src/components/Head.ts","../../src/registerComponents.ts","../../src/bootstrapRouter.ts","../../src/version.ts"],"sourcesContent":["import { IConfig, IWritableConfig } from \"./types\";\n\ninterface IInternalConfig {\n tagNames: {\n route: string;\n router: string;\n outlet: string;\n layout: string;\n layoutOutlet: string;\n link: string;\n head: string;\n guardHandler: string;\n };\n enableShadowRoot: boolean;\n basenameFileExtensions: string[];\n}\n\nconst _config: IInternalConfig = {\n tagNames: {\n route: \"wcs-route\",\n router: \"wcs-router\",\n outlet: \"wcs-outlet\",\n layout: \"wcs-layout\",\n layoutOutlet: \"wcs-layout-outlet\",\n link: \"wcs-link\",\n head: \"wcs-head\",\n guardHandler: \"wcs-guard-handler\"\n },\n enableShadowRoot: false,\n basenameFileExtensions: [\".html\"]\n};\n\nfunction deepFreeze<T>(obj: T): T {\n if (obj === null || typeof obj !== \"object\") return obj;\n Object.freeze(obj);\n for (const key of Object.keys(obj)) {\n deepFreeze((obj as Record<string, unknown>)[key]);\n }\n return obj;\n}\n\nfunction deepClone<T>(obj: T): T {\n if (obj === null || typeof obj !== \"object\") return obj;\n const clone: Record<string, unknown> = {};\n for (const key of Object.keys(obj)) {\n clone[key] = deepClone((obj as Record<string, unknown>)[key]);\n }\n return clone as T;\n}\n\nlet frozenConfig: IConfig | null = null;\n\n// 後方互換のため config もエクスポート(読み取り専用として使用)\nexport const config: IConfig = _config as IConfig;\n\nexport function getConfig(): IConfig {\n if (!frozenConfig) {\n frozenConfig = deepFreeze(deepClone(_config));\n }\n return frozenConfig;\n}\n\nexport function setConfig(partialConfig: IWritableConfig): void {\n if (partialConfig.tagNames) {\n Object.assign(_config.tagNames, partialConfig.tagNames);\n }\n if (typeof partialConfig.enableShadowRoot === \"boolean\") {\n _config.enableShadowRoot = partialConfig.enableShadowRoot;\n }\n if (Array.isArray(partialConfig.basenameFileExtensions)) {\n _config.basenameFileExtensions = partialConfig.basenameFileExtensions;\n }\n frozenConfig = null;\n}\n","\nexport function getUUID(): string {\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n // Simple UUID generator\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n const r = (Math.random() * 16) | 0,\n v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}","\nexport function raiseError(message: string, options?: { cause?: unknown }): never {\n if (options && 'cause' in options) {\n throw new Error(`[@wcstack/router] ${message}`, { cause: options.cause });\n }\n throw new Error(`[@wcstack/router] ${message}`);\n}","import { IGuardCancel } from \"./types\";\n\nexport class GuardCancel extends Error implements IGuardCancel {\n fallbackPath: string;\n\n constructor(message: string, fallbackPath: string) {\n super(message);\n this.fallbackPath = fallbackPath;\n }\n}","import { BuiltinParamTypes, IParamTypeInfo } from \"./types\";\n\nexport const builtinParamTypes = {\n \"int\": {\n typeName: \"int\",\n pattern: /^-?\\d+$/,\n parse(value: string): number | undefined {\n if (!this.pattern.test(value)) {\n return undefined;\n }\n return parseInt(value, 10);\n }\n },\n\n \"float\": {\n typeName: \"float\",\n pattern: /^-?\\d+(?:\\.\\d+)?$/,\n parse(value: string): number | undefined {\n if (!this.pattern.test(value)) {\n return undefined;\n }\n return parseFloat(value);\n }\n },\n\n \"bool\": {\n typeName: \"bool\",\n pattern: /^(true|false|0|1)$/,\n parse(value: string): boolean | undefined {\n if (!this.pattern.test(value)) {\n return undefined;\n }\n return value === \"true\" || value === \"1\";\n }\n },\n\n \"uuid\": {\n typeName: \"uuid\",\n pattern: /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,\n parse(value: string): string | undefined {\n if (!this.pattern.test(value)) {\n return undefined;\n }\n return value;\n }\n },\n\n \"slug\": {\n typeName: \"slug\",\n pattern: /^[a-z0-9]+(?:-[a-z0-9]+)*$/,\n parse(value: string): string | undefined {\n if (!this.pattern.test(value)) {\n return undefined;\n }\n return value;\n }\n },\n\n \"isoDate\": {\n typeName: \"isoDate\",\n pattern: /^\\d{4}-\\d{2}-\\d{2}$/,\n parse(value: string): Date | undefined {\n if (!this.pattern.test(value)) {\n return undefined;\n }\n const [year, month, day] = value.split(\"-\").map(Number);\n const date = new Date(year, month - 1, day);\n // 元の値と一致するか確認(補正されていないか)\n if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {\n return undefined;\n }\n return date;\n }\n },\n\n \"any\": {\n typeName: \"any\",\n pattern: /^.+$/,\n parse(value: string): string | undefined {\n if (!this.pattern.test(value)) {\n return undefined;\n }\n return value;\n }\n },\n} satisfies Record<BuiltinParamTypes, IParamTypeInfo<unknown>>;\n","import { GuardCancel } from \"../GuardCancel.js\";\nimport { builtinParamTypes } from \"../builtinParamTypes.js\";\nimport { raiseError } from \"../raiseError.js\";\nimport { config } from \"../config.js\";\nimport { ISegmentInfo, SegmentType, IRouteMatchResult, GuardHandler } from \"../components/types.js\";\nimport { BuiltinParamTypes } from \"../types.js\";\n\nconst weights: Record<SegmentType, number> = {\n 'static': 2,\n 'param': 1,\n 'catch-all': 0\n};\n\nexport interface RouteParseOptions {\n isIndex?: boolean;\n isFallback?: boolean;\n hasGuard?: boolean;\n guardFallback?: string | null;\n name?: string;\n}\n\n/**\n * NOTE: RouteCore / Route は `static wcBindable` を**宣言しない**\n * (docs/router-state-contract-design.md §5.1 / D2)。\n *\n * `<wcs-route>` は parse 時に clone された detached コントローラであり、live DOM に\n * 入るのは placeholder コメントとスタンプされた子ノードだけ。data-wcs は live DOM\n * 上の属性走査で結線する仕組みなので、宣言しても構造的に到達不能な「果たせない\n * 約束」になる。params / typedParams / routeName の観測面は live DOM に居る\n * `<wcs-router>` に集約した(Router.wcBindable)。\n *\n * `wcs-route:params-changed` / `wcs-route:active-changed` の dispatch は存置する —\n * RouteCore は EventTarget であり、Core 直接消費(signals の正式推奨形)と\n * ユニットテストの観測面として生きている。\n */\nexport class RouteCore extends EventTarget {\n private _target: EventTarget;\n private _parentCore: RouteCore | null = null;\n private _path: string = '';\n private _name: string = '';\n private _isFallbackRoute: boolean = false;\n private _segmentInfos: ISegmentInfo[] = [];\n private _absoluteSegmentInfos: ISegmentInfo[] | undefined;\n private _paramNames: string[] | undefined;\n private _absoluteParamNames: string[] | undefined;\n private _weight: number | undefined;\n private _absoluteWeight: number | undefined;\n private _segmentCount: number | undefined;\n private _params: Record<string, string> = {};\n private _typedParams: Record<string, any> = {};\n private _active: boolean = false;\n\n // Guard\n private _hasGuard: boolean = false;\n private _guardHandler: GuardHandler | null = null;\n private _guardFallbackPath: string = '';\n private _waitForSetGuardHandler: Promise<void> | null = null;\n private _resolveSetGuardHandler: (() => void) | null = null;\n private _guardHandlerLoadFailed: boolean = false;\n\n constructor(target?: EventTarget) {\n super();\n this._target = target ?? this;\n }\n\n get parentCore(): RouteCore | null {\n return this._parentCore;\n }\n\n set parentCore(value: RouteCore | null) {\n this._parentCore = value;\n }\n\n get path(): string {\n return this._path;\n }\n\n get name(): string {\n return this._name;\n }\n\n get isFallbackRoute(): boolean {\n return this._isFallbackRoute;\n }\n\n get isRelative(): boolean {\n return !this._path.startsWith('/');\n }\n\n get segmentInfos(): ISegmentInfo[] {\n return this._segmentInfos;\n }\n\n private _checkParentCore<T>(\n hasParentCallback: (parentCore: RouteCore) => T,\n noParentCallback: () => T\n ): T {\n if (!this._isFallbackRoute) {\n if (this.isRelative && !this._parentCore) {\n raiseError(`${config.tagNames.route} is relative but has no parent route.`);\n }\n if (!this.isRelative && this._parentCore) {\n raiseError(`${config.tagNames.route} is absolute but has a parent route.`);\n }\n }\n if (this.isRelative && this._parentCore) {\n return hasParentCallback(this._parentCore);\n } else {\n return noParentCallback();\n }\n }\n\n get absolutePath(): string {\n return this._checkParentCore<string>((parentCore) => {\n const parentPath = parentCore.absolutePath;\n return parentPath.endsWith('/')\n ? parentPath + this._path\n : parentPath + '/' + this._path;\n }, () => {\n return this._path;\n });\n }\n\n get absoluteSegmentInfos(): ISegmentInfo[] {\n if (typeof this._absoluteSegmentInfos === 'undefined') {\n this._absoluteSegmentInfos = this._checkParentCore<ISegmentInfo[]>((parentCore) => {\n return [\n ...parentCore.absoluteSegmentInfos,\n ...this._segmentInfos\n ];\n }, () => {\n return [...this._segmentInfos];\n });\n }\n return this._absoluteSegmentInfos;\n }\n\n get params(): Record<string, string> {\n return this._params;\n }\n\n get typedParams(): Record<string, any> {\n return this._typedParams;\n }\n\n get active(): boolean {\n return this._active;\n }\n\n get paramNames(): string[] {\n if (typeof this._paramNames === 'undefined') {\n const names: string[] = [];\n for (const info of this._segmentInfos) {\n if (info.paramName) {\n names.push(info.paramName);\n }\n }\n this._paramNames = names;\n }\n return this._paramNames;\n }\n\n get absoluteParamNames(): string[] {\n if (typeof this._absoluteParamNames === 'undefined') {\n this._absoluteParamNames = this._checkParentCore<string[]>((parentCore) => {\n return [\n ...parentCore.absoluteParamNames,\n ...this.paramNames\n ];\n }, () => {\n return [...this.paramNames];\n });\n }\n return this._absoluteParamNames;\n }\n\n get weight(): number {\n if (typeof this._weight === 'undefined') {\n let weight = 0;\n for (const info of this._segmentInfos) {\n weight += weights[info.type];\n }\n this._weight = weight;\n }\n return this._weight;\n }\n\n get absoluteWeight(): number {\n if (typeof this._absoluteWeight === 'undefined') {\n this._absoluteWeight = this._checkParentCore<number>((parentCore) => {\n return parentCore.absoluteWeight + this.weight;\n }, () => {\n return this.weight;\n });\n }\n return this._absoluteWeight;\n }\n\n get segmentCount(): number {\n if (typeof this._segmentCount === 'undefined') {\n let count = 0;\n for (const info of this._segmentInfos) {\n if (info.type !== 'catch-all') {\n count++;\n }\n }\n this._segmentCount = this._path === \"\" ? 0 : count;\n }\n return this._segmentCount;\n }\n\n get absoluteSegmentCount(): number {\n return this._checkParentCore<number>((parentCore) => {\n return parentCore.absoluteSegmentCount + this.segmentCount;\n }, () => {\n return this.segmentCount;\n });\n }\n\n parsePath(path: string, options: RouteParseOptions = {}): void {\n // 連続呼び出し時のセグメント累積を防ぐためリセット\n this._segmentInfos = [];\n this._absoluteSegmentInfos = undefined;\n this._paramNames = undefined;\n this._absoluteParamNames = undefined;\n this._weight = undefined;\n this._absoluteWeight = undefined;\n this._segmentCount = undefined;\n this._path = path;\n this._name = options.name || '';\n this._isFallbackRoute = options.isFallback || false;\n\n if (options.isIndex) {\n this._segmentInfos.push({\n type: 'static',\n segmentText: '',\n paramName: null,\n pattern: /^$/,\n isIndex: true\n });\n }\n\n const segments = path.split('/');\n for (let idx = 0; idx < segments.length; idx++) {\n const segment = segments[idx];\n // 末尾の空セグメントはスキップ(/parent/ のような場合)\n if (segment === '' && idx === segments.length - 1 && idx > 0) {\n continue;\n }\n if (segment === '*') {\n this._segmentInfos.push({\n type: 'catch-all',\n segmentText: segment,\n paramName: '*',\n pattern: new RegExp('^(.*)$')\n });\n // Catch-all: matches remaining path segments\n break; // Ignore subsequent segments\n } else if (segment.startsWith(':')) {\n const matchType = segment.match(/^:([^()]+)(\\(([^)]+)\\))?$/);\n let paramName: string;\n let typeName: BuiltinParamTypes = 'any';\n if (matchType) {\n paramName = matchType[1];\n if (matchType[3] && Object.keys(builtinParamTypes).includes(matchType[3])) {\n typeName = matchType[3] as BuiltinParamTypes;\n }\n } else {\n paramName = segment.substring(1);\n }\n\n this._segmentInfos.push({\n type: 'param',\n segmentText: segment,\n paramName: paramName,\n pattern: new RegExp('^([^\\\\/]+)$'),\n paramType: typeName\n });\n } else if (segment !== '' || !options.isIndex) {\n // 空セグメントはindex以外の場合のみ追加(絶対パスの先頭 '' など)\n this._segmentInfos.push({\n type: 'static',\n segmentText: segment,\n paramName: null,\n pattern: new RegExp(`^${segment}$`)\n });\n }\n }\n\n this._hasGuard = options.hasGuard || false;\n if (this._hasGuard) {\n this._guardFallbackPath = options.guardFallback || '/';\n this._waitForSetGuardHandler = new Promise((resolve) => {\n this._resolveSetGuardHandler = resolve;\n });\n }\n }\n\n setParams(params: Record<string, string>, typedParams: Record<string, any>): void {\n const wasActive = this._active;\n this._params = params;\n this._typedParams = typedParams;\n this._active = true;\n this._target.dispatchEvent(new CustomEvent(\"wcs-route:params-changed\", {\n detail: { params, typedParams },\n bubbles: true,\n }));\n if (!wasActive) {\n this._target.dispatchEvent(new CustomEvent(\"wcs-route:active-changed\", {\n detail: true,\n bubbles: true,\n }));\n }\n }\n\n clearParams(): void {\n const wasActive = this._active;\n this._params = {};\n this._typedParams = {};\n this._active = false;\n if (wasActive) {\n this._target.dispatchEvent(new CustomEvent(\"wcs-route:active-changed\", {\n detail: false,\n bubbles: true,\n }));\n }\n }\n\n shouldChange(newParams: Record<string, string>): boolean {\n for (const key of this.paramNames) {\n if (this._params[key] !== newParams[key]) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * guard 属性の有無(parsePath の options.hasGuard)。SSR の guard バリア\n * — guard 付きルートはサーバーで描かない(docs/ssr-router-design.md §2-4)—\n * がハンドラのロードを待たずに判定するために使う。\n */\n get hasGuard(): boolean {\n return this._hasGuard;\n }\n\n get guardHandler(): GuardHandler {\n if (!this._guardHandler) {\n raiseError(`${config.tagNames.route} has no guardHandler.`);\n }\n return this._guardHandler!;\n }\n\n set guardHandler(value: GuardHandler) {\n this._guardHandler = value;\n this._resolveSetGuardHandler?.();\n }\n\n /**\n * Guardハンドラのロードに失敗したことを通知し、guardCheck の待ちを解除する。\n * 解除後の guardCheck は guardHandler が未設定のため fallback パスへリダイレクトする。\n */\n notifyGuardHandlerLoadFailed(): void {\n this._guardHandlerLoadFailed = true;\n this._resolveSetGuardHandler?.();\n }\n\n async guardCheck(matchResult: IRouteMatchResult): Promise<void> {\n if (this._hasGuard && this._waitForSetGuardHandler) {\n await this._waitForSetGuardHandler;\n }\n if (this._guardHandler) {\n const toPath = matchResult.path;\n const fromPath = matchResult.lastPath;\n const allowed = await this._guardHandler(toPath, fromPath);\n if (!allowed) {\n throw new GuardCancel('Navigation cancelled by guard.', this._guardFallbackPath);\n }\n } else if (this._hasGuard && this._guardHandlerLoadFailed) {\n // guardHandler のロードに失敗した場合は fallback パスへ\n throw new GuardCancel('Navigation cancelled: guard handler failed to load.', this._guardFallbackPath);\n }\n }\n}\n","import { getUUID } from \"../getUUID.js\";\nimport { config } from \"../config.js\";\nimport { raiseError } from \"../raiseError.js\";\nimport { IRouteMatchResult, IRoute, IRouter, GuardHandler, ISegmentInfo } from \"./types.js\";\nimport { RouteCore } from \"../core/RouteCore.js\";\n\n// NOTE: `static wcBindable` は宣言しない — RouteCore.ts 冒頭の NOTE を参照\n// (docs/router-state-contract-design.md §5.1 / D2)。\nexport class Route extends HTMLElement implements IRoute {\n private _core: RouteCore;\n private _routeParentNode: IRoute | null = null;\n private _routeChildNodes: IRoute[] = [];\n private _routerNode: IRouter | null = null;\n private _uuid: string = getUUID();\n private _placeHolder: Comment = document.createComment(`@@route:${this._uuid}`);\n private _childNodeArray: Node[] | undefined;\n private _childIndex: number = 0;\n private _initialized: boolean = false;\n private _routes: IRoute[] | undefined;\n\n constructor() {\n super();\n this._core = new RouteCore(this);\n }\n\n // Shell-only properties\n\n get routeParentNode(): IRoute | null {\n return this._routeParentNode;\n }\n\n get routeChildNodes(): IRoute[] {\n return this._routeChildNodes;\n }\n\n get routerNode(): IRouter {\n if (!this._routerNode) {\n raiseError(`${config.tagNames.route} has no routerNode.`);\n }\n return this._routerNode;\n }\n\n get uuid(): string {\n return this._uuid;\n }\n\n get placeHolder(): Comment {\n return this._placeHolder;\n }\n\n get childNodeArray(): Node[] {\n if (typeof this._childNodeArray === 'undefined') {\n this._childNodeArray = Array.from(this.childNodes);\n }\n return this._childNodeArray;\n }\n\n /**\n * SSR ハイドレーションの採用(docs/ssr-router-design.md §4)。\n * サーバー描画済みの DOM ノード列をこのルートの内容として引き取る。\n * 以後の hideRoute / showRoute は採用ノードに対して従来どおり動く。\n * template 由来の fresh クローン(自身の childNodes)は不要になるため破棄する。\n */\n adoptChildNodes(nodes: Node[]): void {\n this._childNodeArray = [...nodes];\n while (this.firstChild) {\n this.removeChild(this.firstChild);\n }\n }\n\n get routes(): IRoute[] {\n // matchRoutes / testPath のホットパスで再帰的に呼ばれるため遅延キャッシュする。\n // initialize 後は routeParentNode が固定されるためキャッシュしても安全。\n if (typeof this._routes === 'undefined') {\n this._routes = this.routeParentNode\n ? this.routeParentNode.routes.concat(this)\n : [this];\n }\n return this._routes;\n }\n\n get childIndex(): number {\n return this._childIndex;\n }\n\n // Core delegates\n\n get path(): string {\n return this._core.path;\n }\n\n get name(): string {\n return this._core.name;\n }\n\n get isRelative(): boolean {\n return this._core.isRelative;\n }\n\n get absolutePath(): string {\n return this._core.absolutePath;\n }\n\n get segmentInfos(): ISegmentInfo[] {\n return this._core.segmentInfos;\n }\n\n get absoluteSegmentInfos(): ISegmentInfo[] {\n return this._core.absoluteSegmentInfos;\n }\n\n get params(): Record<string, string> {\n return this._core.params;\n }\n\n get typedParams(): Record<string, any> {\n return this._core.typedParams;\n }\n\n get paramNames(): string[] {\n return this._core.paramNames;\n }\n\n get absoluteParamNames(): string[] {\n return this._core.absoluteParamNames;\n }\n\n get weight(): number {\n return this._core.weight;\n }\n\n get absoluteWeight(): number {\n return this._core.absoluteWeight;\n }\n\n get segmentCount(): number {\n return this._core.segmentCount;\n }\n\n get absoluteSegmentCount(): number {\n return this._core.absoluteSegmentCount;\n }\n\n get fullpath(): string {\n return this.absolutePath;\n }\n\n get hasGuard(): boolean {\n return this._core.hasGuard;\n }\n\n get guardHandler(): GuardHandler {\n return this._core.guardHandler;\n }\n\n set guardHandler(value: GuardHandler) {\n this._core.guardHandler = value;\n }\n\n setParams(params: Record<string, string>, typedParams: Record<string, any>): void {\n this._core.setParams(params, typedParams);\n }\n\n clearParams(): void {\n this._core.clearParams();\n }\n\n shouldChange(newParams: Record<string, string>): boolean {\n return this._core.shouldChange(newParams);\n }\n\n async guardCheck(matchResult: IRouteMatchResult): Promise<void> {\n return this._core.guardCheck(matchResult);\n }\n\n notifyGuardHandlerLoadFailed(): void {\n this._core.notifyGuardHandlerLoadFailed();\n }\n\n /**\n * Shell(Route)の routeParentNode を辿って祖先関係を判定する。\n *\n * 責務の分担:\n * - Route(このクラス)は DOM ツリー上の親子関係(routeParentNode)を管理する。\n * - RouteCore はパスやパラメータといった論理的な親子関係(parentCore)を管理する。\n * DOM ツリーは Shell 層、論理ツリーは Core 層という分離のため、両者を独立に保持する。\n */\n testAncestorNode(ancestorNode: IRoute): boolean {\n let currentNode: IRoute | null = this._routeParentNode;\n while (currentNode) {\n if (currentNode === ancestorNode) {\n return true;\n }\n currentNode = currentNode.routeParentNode;\n }\n return false;\n }\n\n initialize(routerNode: IRouter, routeParentNode: IRoute | null): void {\n if (this._initialized) {\n return;\n }\n this._initialized = true;\n\n // 属性からパス情報を読み取り\n let path: string;\n let isIndex = false;\n let isFallback = false;\n\n if (this.hasAttribute('path')) {\n path = this.getAttribute('path') || '';\n } else if (this.hasAttribute('index')) {\n path = '';\n isIndex = true;\n } else if (this.hasAttribute('fallback')) {\n path = '';\n isFallback = true;\n } else {\n raiseError(`${config.tagNames.route} should have a \"path\" or \"index\" attribute.`);\n }\n\n // ルートツリーの構築\n this._routerNode = routerNode;\n this._routeParentNode = routeParentNode;\n const routeChildContainer = routeParentNode || routerNode;\n routeChildContainer.routeChildNodes.push(this);\n this._childIndex = routeChildContainer.routeChildNodes.length - 1;\n\n // Fallback検証\n if (isFallback) {\n if (routeParentNode) {\n raiseError(`${config.tagNames.route} with fallback attribute must be a direct child of ${config.tagNames.router}.`);\n }\n if (routerNode.fallbackRoute) {\n raiseError(`${config.tagNames.router} can have only one fallback route.`);\n }\n routerNode.fallbackRoute = this;\n }\n\n // 親CoreをCoreに設定\n if (routeParentNode) {\n this._core.parentCore = (routeParentNode as Route)._core;\n }\n\n // Coreでパス解析\n this._core.parsePath(path!, {\n isIndex,\n isFallback,\n hasGuard: this.hasAttribute('guard'),\n guardFallback: this.getAttribute('guard'),\n name: this.getAttribute('name') || '',\n });\n\n this.setAttribute('fullpath', this.absolutePath);\n }\n}\n","import { getUUID } from \"../getUUID.js\";\nimport { config } from \"../config.js\";\nimport { raiseError } from \"../raiseError.js\";\nimport { ILayout } from \"./types.js\";\n\nconst cache = new Map<string, string>();\n\n/**\n * Layout テンプレートキャッシュをクリアする。\n * テストや長時間 SPA でメモリリークを避けるため、リセットしたい場合に利用する。\n */\nexport function _clearLayoutCache(): void {\n cache.clear();\n}\n\nexport class Layout extends HTMLElement implements ILayout {\n private _uuid: string = getUUID();\n constructor() {\n super();\n }\n\n private async _loadTemplateFromSource(source: string): Promise<string> {\n try {\n const response = await fetch(source);\n if (!response.ok) {\n raiseError(`${config.tagNames.layout} failed to fetch layout from source: ${source}, status: ${response.status}`);\n }\n const templateContent = await response.text();\n cache.set(source, templateContent);\n return templateContent;\n } catch (error) {\n // 元の例外を cause として伝播し、スタックトレースを保持する\n raiseError(\n `${config.tagNames.layout} failed to load layout from source: ${source}, error: ${error}`,\n { cause: error }\n );\n }\n }\n\n private _loadTemplateFromDocument(id: string): string | null {\n const element = document.getElementById(`${id}`) as HTMLElement | null;\n if (element) {\n if (element instanceof HTMLTemplateElement) {\n return element.innerHTML;\n }\n }\n return null;\n }\n\n async loadTemplate(): Promise<HTMLTemplateElement> {\n const source = this.getAttribute('src');\n const layoutId = this.getAttribute('layout');\n if (source && layoutId) {\n console.warn(`${config.tagNames.layout} have both \"src\" and \"layout\" attributes.`);\n }\n const template = document.createElement('template');\n if (source) {\n if (cache.has(source)) {\n template.innerHTML = cache.get(source) || '';\n } else {\n // _loadTemplateFromSource は内部で cache.set を実行する\n template.innerHTML = await this._loadTemplateFromSource(source) || '';\n }\n } else if (layoutId) {\n const templateContent = this._loadTemplateFromDocument(layoutId);\n if (templateContent) {\n template.innerHTML = templateContent;\n } else {\n console.warn(`${config.tagNames.layout} could not find template with id \"${layoutId}\".`);\n }\n }\n return template;\n }\n\n get uuid(): string {\n return this._uuid;\n }\n\n get enableShadowRoot(): boolean {\n if (this.hasAttribute('enable-shadow-root')) {\n return true;\n } else if (this.hasAttribute('disable-shadow-root')) {\n return false;\n }\n return config.enableShadowRoot;\n }\n\n get name(): string {\n // Layout 要素が DOM に挿入されないケース(parseで置換)でも name を取れるようにする\n return this.getAttribute('name') || '';\n }\n}\n","import { config } from \"../config.js\";\nimport { raiseError } from \"../raiseError.js\";\nimport { IOutlet, IRoute, IRouter } from \"./types.js\";\n\nexport class Outlet extends HTMLElement implements IOutlet {\n private _routesNode: IRouter | null = null;\n private _lastRoutes: IRoute[] = [];\n private _initialized: boolean = false;\n constructor() {\n super();\n }\n\n get routesNode(): IRouter {\n if (!this._routesNode) {\n raiseError(`${config.tagNames.outlet} has no routesNode.`);\n }\n return this._routesNode;\n }\n set routesNode(value: IRouter) {\n this._routesNode = value;\n }\n\n get rootNode(): HTMLElement | ShadowRoot {\n if (this.shadowRoot) {\n return this.shadowRoot;\n }\n return this;\n }\n\n get lastRoutes(): IRoute[] {\n return this._lastRoutes;\n }\n set lastRoutes(value: IRoute[]) {\n this._lastRoutes = [ ...value ];\n }\n\n /**\n * shadowRoot 有効化判定。Layout と挙動を揃え、属性で個別オーバーライド可能にする。\n * - `enable-shadow-root` 属性あり → true\n * - `disable-shadow-root` 属性あり → false\n * - いずれもなし → config.enableShadowRoot を尊重\n */\n private _resolveEnableShadowRoot(): boolean {\n if (this.hasAttribute('enable-shadow-root')) {\n return true;\n }\n if (this.hasAttribute('disable-shadow-root')) {\n return false;\n }\n return config.enableShadowRoot;\n }\n\n private _initialize() {\n if (this._resolveEnableShadowRoot()) {\n this.attachShadow({ mode: 'open' });\n }\n this._initialized = true;\n }\n\n connectedCallback() {\n if (!this._initialized) {\n this._initialize();\n }\n }\n\n /**\n * Outlet が disconnect された際の状態クリーンアップ。\n *\n * `_lastRoutes` をクリアすることで、再接続後の applyRoute における diff\n * (既に show 済みのルートは show を skip する判定)が、切断中に外部から\n * 操作された DOM と整合しなくなる事故を防ぐ。\n *\n * 仕様前提として Outlet は Router と一体運用される(Router が `_getOutlet()` で\n * 自身の兄弟に Outlet を配置・参照する)。それでも単独で再接続される\n * エッジケースに備える防衛的措置として `_lastRoutes` のみクリアする。\n * `_initialized` と shadowRoot は維持し、再 attachShadow による\n * InvalidStateError を回避する。\n */\n disconnectedCallback() {\n this._lastRoutes = [];\n }\n}\n\nexport function createOutlet(): Outlet {\n return document.createElement(config.tagNames.outlet) as Outlet;\n}\n","\nexport function getCustomTagName(element: Element): string | null {\n const tagName = element.tagName.toLowerCase();\n if (tagName.includes(\"-\")) {\n return tagName;\n }\n const isAttr = element.getAttribute(\"is\");\n if (isAttr && isAttr.includes(\"-\")) {\n return isAttr;\n }\n return null;\n}","import { BindType } from \"./components/types\";\nimport { getCustomTagName } from \"./getCustomTagName\";\nimport { raiseError } from \"./raiseError\";\n\nconst bindTypeSet: Set<BindType> = new Set([ \"props\", \"states\", \"attr\", \"\" ]);\n\nfunction _assignParams(element: Element, params: Record<string, any>, bindType: BindType) {\n for(const [key, value] of Object.entries(params)) {\n switch(bindType) {\n case \"props\":\n (element as any).props = {\n ...(element as any).props,\n [key]: value\n };\n break;\n case \"states\":\n (element as any).states = {\n ...(element as any).states,\n [key]: value\n };\n break;\n case \"attr\":\n // null/undefined は属性削除として扱う(文字列 \"null\"/\"undefined\" になる事故を防ぐ)。\n // boolean/number は setAttribute の標準挙動に従って文字列化される。\n if (value === null || value === undefined) {\n element.removeAttribute(key);\n } else {\n element.setAttribute(key, String(value));\n }\n break;\n case \"\":\n (element as any)[key] = value;\n break;\n }\n }\n}\n\nexport function assignParams(element: Element, params: Record<string, any>) {\n if (!element.hasAttribute('data-bind')) {\n raiseError(`${element.tagName} has no 'data-bind' attribute.`);\n }\n const bindTypeText = element.getAttribute('data-bind') || '';\n if (!bindTypeSet.has(bindTypeText as BindType)) {\n raiseError(`${element.tagName} has invalid 'data-bind' attribute: ${bindTypeText}`);\n }\n const bindType = bindTypeText as BindType;\n const customTagName = getCustomTagName(element);\n if (customTagName && customElements.get(customTagName) === undefined) {\n // 注意: customElements.whenDefined(tag) は当該タグが define されるまで pending のままになる。\n // element が削除されてもこの Promise は GC されず、closure に保持される element/params は\n // 解放されない(弱い参照を持つ手段がないため)。define されないまま要素のみが大量に作られる\n // ようなケースではリークになりうるが、通常の Web Components 利用では autoloader が\n // 一括 define するため実用上問題にならない。明示的にキャンセルしたい場合は将来 AbortSignal を\n // サポートすることを検討する。\n customElements.whenDefined(customTagName).then(() => {\n if (element.isConnected) {\n // 要素が削除されていない場合のみ割り当てを行う\n _assignParams(element, params, bindType);\n }\n }).catch(() => {\n raiseError(`Failed to define custom element: ${customTagName}`);\n });\n } else {\n _assignParams(element, params, bindType);\n }\n}","import { assignParams } from \"../assignParams.js\";\nimport { config } from \"../config.js\";\nimport { raiseError } from \"../raiseError.js\";\nimport { ILayout, ILayoutOutlet } from \"./types.js\";\n\nexport class LayoutOutlet extends HTMLElement implements ILayoutOutlet {\n private _layout: (ILayout & Pick<Element,'childNodes'>) | null = null;\n private _initialized: boolean = false;\n private _initializing: boolean = false;\n private _disconnectedDuringInit: boolean = false;\n private _layoutChildNodes: Node[] = [];\n constructor() {\n super();\n }\n\n get layout(): ILayout {\n if (!this._layout) {\n raiseError(`${config.tagNames.layoutOutlet} has no layout.`);\n }\n return this._layout;\n }\n set layout(value: ILayout) {\n this._layout = value;\n this.setAttribute('name', value.name);\n }\n \n get name(): string {\n return this.layout.name;\n }\n\n private async _initialize(): Promise<void> {\n this._initializing = true;\n try {\n this._initialized = true;\n // attachShadow は冪等にする: 一度 await loadTemplate() 中に切断されると\n // _initialized = false で戻され、再 connect 時に _initialize() が再度走るが、\n // その時点で shadowRoot は既に存在しているため、再度 attachShadow すると\n // InvalidStateError になる。\n if (this.layout.enableShadowRoot && !this.shadowRoot) {\n this.attachShadow({ mode: 'open' });\n }\n const template = await this.layout.loadTemplate();\n // await 中に切断された場合は DOM 副作用を残さず、次回再接続時に再初期化させる\n if (!this.isConnected) {\n this._initialized = false;\n return;\n }\n if (this.shadowRoot) {\n this.shadowRoot.appendChild(template.content.cloneNode(true));\n for(const childNode of Array.from(this.layout.childNodes)) {\n this._layoutChildNodes.push(childNode);\n this.appendChild(childNode);\n }\n } else {\n const fragmentForTemplate = template.content.cloneNode(true) as DocumentFragment;\n const slotElementBySlotName: Map<string, Element> = new Map();\n fragmentForTemplate.querySelectorAll('slot').forEach((slotElement) => {\n const slotName = slotElement.getAttribute('name') || '';\n if (!slotElementBySlotName.has(slotName)) {\n slotElementBySlotName.set(slotName, slotElement);\n } else {\n console.warn(`${config.tagNames.layoutOutlet} duplicate slot name \"${slotName}\" in layout template.`);\n }\n });\n\n const fragmentBySlotName: Map<string, DocumentFragment> = new Map();\n const fragmentForChildNodes = document.createDocumentFragment();\n for(const childNode of Array.from(this.layout.childNodes)) {\n this._layoutChildNodes.push(childNode);\n if (childNode instanceof Element) {\n const slotName = childNode.getAttribute('slot') || '';\n if (slotName.length > 0 && slotElementBySlotName.has(slotName)) {\n if (!fragmentBySlotName.has(slotName)) {\n fragmentBySlotName.set(slotName, document.createDocumentFragment());\n }\n fragmentBySlotName.get(slotName)?.appendChild(childNode);\n continue;\n }\n }\n fragmentForChildNodes.appendChild(childNode);\n }\n for(const [slotName, slotElement] of slotElementBySlotName) {\n const fragment = fragmentBySlotName.get(slotName);\n if (fragment) {\n slotElement.replaceWith(fragment);\n }\n }\n const defaultSlot = slotElementBySlotName.get('');\n if (defaultSlot) {\n defaultSlot.replaceWith(fragmentForChildNodes);\n }\n\n this.appendChild(fragmentForTemplate);\n }\n } finally {\n this._initializing = false;\n }\n }\n\n async connectedCallback() {\n if (!this._initialized) {\n this._disconnectedDuringInit = false;\n await this._initialize();\n // 初期化中(await 中)に切断された場合は副作用を残さない\n if (this._disconnectedDuringInit || !this.isConnected) {\n return;\n }\n }\n }\n\n disconnectedCallback() {\n // _initialize 中(await 中)に呼ばれた場合はフラグを立てて再 connect 時に init を許可する\n if (this._initializing) {\n this._disconnectedDuringInit = true;\n }\n }\n\n assignParams(params: Record<string, any>): void {\n for(const childNode of this._layoutChildNodes) {\n if (childNode instanceof Element) {\n childNode.querySelectorAll('[data-bind]').forEach((e) => {\n // 子要素にパラメータを割り当て\n assignParams(e, params);\n });\n if (childNode.hasAttribute('data-bind')) {\n // 子要素にパラメータを割り当て\n assignParams(childNode, params);\n }\n }\n }\n }\n}\n\nexport function createLayoutOutlet(): LayoutOutlet {\n return document.createElement(config.tagNames.layoutOutlet) as LayoutOutlet;\n}","import { GuardHandler } from \"./components/types.js\";\nimport { IRoute } from \"./components/types.js\";\nimport { raiseError } from \"./raiseError.js\";\n\ntype ScriptModule = { default?: unknown };\n\nconst CSP_GUIDE = \"https://github.com/wcstack/wcstack/blob/main/docs/csp.md\";\n\n/**\n * ガードスクリプトの評価失敗を、原因の分かるメッセージに変換する。\n *\n * CSP にブロックされた動的 import の rejection は CSP に一切言及しないため、\n * ブロックされた事実は securitypolicyviolation の観測(`cspBlocked`)でしか取れない。\n * 真ならブロック確定として対処方法を書き、偽なら構文エラー等と区別できないので\n * 元のエラーを主にして CSP は参照先を添えるに留める。\n *\n * ガードは state と違ってインライン専用(`<wcs-route>` 直下の `<script>`)なので、\n * `src=` に逃がすという回避策が無い。CSP を敷くなら blob: の許可が必須になる。\n */\nfunction describeImportFailure(error: unknown, firstError: unknown, cspBlocked: boolean): string {\n if (cspBlocked) {\n return `The guard <script> was blocked by Content-Security-Policy. ` +\n `Guard scripts are inline-only and are evaluated through a blob: URL, ` +\n `so script-src must allow blob:. See ${CSP_GUIDE}`;\n }\n return `loadGuardHandler: failed to import guard script. ` +\n `data: URL error: ${(error as Error)?.message ?? String(error)}` +\n (firstError ? `. Blob URL error: ${(firstError as Error)?.message ?? String(firstError)}` : '') +\n `. If this page sets a Content-Security-Policy, see ${CSP_GUIDE}`;\n}\n\nasync function importModule(script: HTMLScriptElement, route: IRoute): Promise<GuardHandler | null> {\n let scriptModule: ScriptModule | null = null;\n let firstError: unknown = null;\n // devtools での識別用 sourceURL suffix。\n // uuid を使う: Route インスタンスでは constructor で getUUID() により必ず設定される。\n // partial mock 等で undefined の可能性に備えて空文字列フォールバックを置く。\n const routeTag = route.uuid || \"\";\n const sourceURL = routeTag ? `wcs-guard-handler:${routeTag}` : `wcs-guard-handler`;\n const sourceComment = `\\n//# sourceURL=${sourceURL}\\n`;\n const scriptText = script.text + sourceComment;\n // import() の失敗が CSP 由来かを判別するため、評価の間だけ違反を購読する。\n // blob: と data: はどちらも script-src で拒否されるので、両分岐を1つの観測で覆える。\n let cspBlocked = false;\n const onViolation = (event: Event) => {\n if ((event as SecurityPolicyViolationEvent).effectiveDirective.startsWith(\"script-src\")) {\n cspBlocked = true;\n }\n };\n document.addEventListener(\"securitypolicyviolation\", onViolation);\n try {\n if (typeof URL.createObjectURL === 'function') {\n const blob = new Blob([scriptText], { type: \"application/javascript\" });\n const url = URL.createObjectURL(blob);\n try {\n scriptModule = await import(url) as ScriptModule;\n } catch (e) {\n // Blob URL import failed (e.g. happy-dom), fall through to data: URL\n firstError = e;\n } finally {\n URL.revokeObjectURL(url);\n }\n }\n if (!scriptModule) {\n // Fallback: Base64 data: URL (for test environments)\n const b64 = btoa(String.fromCodePoint(...new TextEncoder().encode(scriptText)));\n try {\n scriptModule = await import(`data:application/javascript;base64,${b64}`) as ScriptModule;\n } catch (e) {\n // 両 import が失敗した場合、Blob URL 側の元エラーを cause として失わないように包む\n // (Blob URL も失敗していなければ firstError は null)\n raiseError(describeImportFailure(e, firstError, cspBlocked), { cause: firstError ?? e });\n }\n }\n } finally {\n document.removeEventListener(\"securitypolicyviolation\", onViolation);\n }\n if (scriptModule && typeof scriptModule.default === 'function') {\n return scriptModule.default as GuardHandler;\n }\n return null;\n}\n\nexport function loadGuardHandler(script: HTMLScriptElement, route: IRoute): void {\n importModule(script, route).then(handler => {\n if (handler) {\n route.guardHandler = handler;\n } else {\n // ハンドラが取得できなかった場合は guardCheck の待ちを解除する\n route.notifyGuardHandlerLoadFailed();\n }\n }).catch(err => {\n console.error('loadGuardHandler failed:', err);\n // import 失敗時も guardCheck の待ちを解除する\n route.notifyGuardHandlerLoadFailed();\n });\n}\n","import { IRoute, IRouter } from \"./components/types.js\";\nimport { Layout } from \"./components/Layout.js\";\nimport { createLayoutOutlet } from \"./components/LayoutOutlet.js\";\nimport { Route } from \"./components/Route.js\";\nimport { config } from \"./config.js\";\nimport { loadGuardHandler } from \"./loadGuardHandler.js\";\n\n\n/**\n * 同一の絶対パスを持つ Route が複数定義された場合に警告を出力する。\n *\n * 仕様: 同一 absolutePath ごとに 1 回だけ警告する(複数重複でも警告は 1 件)。\n * これは過剰なログを避けるための意図的な設計。\n * テストでは Vitest の console.warn spy で 1 回出力を確認する。\n */\nfunction _duplicateCheck(routesByPath: Map<string, IRoute[]>, route: IRoute): void {\n let routes = routesByPath.get(route.absolutePath);\n if (!routes) {\n routes = [];\n }\n for(const existingRoute of routes) {\n if (!route.testAncestorNode(existingRoute)) {\n console.warn(`Duplicate route path detected: '${route.absolutePath}' (defined as '${route.path}')`);\n break;\n }\n }\n routes.push(route);\n if (routes.length === 1) {\n routesByPath.set(route.absolutePath, routes);\n }\n}\n\nasync function _parseNode(\n routerNode: IRouter,\n node: Node,\n routes: IRoute[],\n routesByPath: Map<string, IRoute[]>\n): Promise<DocumentFragment> {\n const routeParentNode: IRoute | null = routes.length > 0 ? routes[routes.length - 1] : null;\n const fragment = document.createDocumentFragment();\n const childNodes = Array.from(node.childNodes);\n for(const childNode of childNodes) {\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n let appendNode = childNode\n let element = childNode as HTMLElement;\n const tagName = element.tagName.toLowerCase();\n if (tagName === config.tagNames.route) {\n const childFragment = document.createDocumentFragment();\n // Move child nodes to fragment to avoid duplication of\n for(const childNode of Array.from(element.childNodes)) {\n childFragment.appendChild(childNode);\n }\n const cloneElement = document.importNode<Route>(element as Route, true);\n customElements.upgrade(cloneElement);\n cloneElement.appendChild(childFragment);\n const route = cloneElement;\n route.initialize(routerNode, routeParentNode);\n _duplicateCheck(routesByPath, route);\n routes.push(route);\n appendNode = route.placeHolder;\n element = route;\n } else if (tagName === config.tagNames.guardHandler) {\n if (routes.length > 0) {\n const route = routes[routes.length - 1];\n const script = element.querySelector('script[type=\"module\"]');\n if (script) {\n loadGuardHandler(script as HTMLScriptElement, route);\n }\n }\n continue;\n } else if (tagName === \"template\") {\n // 不透明な葉として扱う。<template> の子は childNodes ではなく .content に\n // 居るため、汎用の再構築(_parseNode → innerHTML = \"\" → appendChild)に\n // 通すと content が空になり、ルート内容に書かれた state の構造テンプレート\n // (for / if)を黙って破壊する。route 定義は template の中には置けない\n // (inert)ので、中を辿る理由も無い。\n fragment.appendChild(element);\n continue;\n } else if (tagName === config.tagNames.layout) {\n // <wcs-layout> は他の case と異なり element と appendNode が別物になる。\n // - element: cloneElement (Layout 本体)。後続の `element.innerHTML = \"\"; element.appendChild(children)`\n // で再帰結果が Layout 内に流し込まれる。Layout はそれを slot 投影に使う。\n // - appendNode: layoutOutlet。最終的に fragment へ挿入されるのは layoutOutlet で、\n // layoutOutlet が element (Layout) を参照して投影を行う。\n const childFragment = document.createDocumentFragment();\n // Move child nodes to fragment to avoid duplication of\n for(const childNode of Array.from(element.childNodes)) {\n childFragment.appendChild(childNode);\n }\n const cloneElement = document.importNode(element, true);\n customElements.upgrade(cloneElement);\n cloneElement.appendChild(childFragment);\n const layout = cloneElement;\n const layoutOutlet = createLayoutOutlet();\n layoutOutlet.layout = layout as Layout;\n appendNode = layoutOutlet;\n element = cloneElement;\n }\n const children = await _parseNode(routerNode, element, routes, routesByPath);\n element.innerHTML = \"\";\n element.appendChild(children);\n fragment.appendChild(appendNode);\n } else {\n fragment.appendChild(childNode);\n }\n }\n return fragment;\n}\n\nexport async function parse(routerNode: IRouter): Promise<DocumentFragment> {\n const routesByPath: Map<string, IRoute[]> = new Map();\n const fr = await _parseNode(routerNode, routerNode.template.content, [], routesByPath);\n return fr;\n}","import { IRouteMatchResult, IRouter } from \"./components/types\";\n\n/**\n * route commit 後のオプトイン a11y ポリシー適用(docs/a11y-design.md §3-4 / D1〜D3)。\n *\n * 呼び出しは applyRoute の committed 判定後・mutate() の外・初回描画\n * (lastRoutes が空)を除く。guard 拒否はここに到達しない(D4)。\n *\n * - `announce=\"title\"`: commit 時点の document.title のスナップショットを\n * live region へ書き込む(D2)。<wcs-head> の静的 title は mutate() 内で同期に\n * 差し替わるため、ここでは必ず新ルートの値が読める。バインド title の遅延窓・\n * ナビゲーション外の title 変化には追従しない(README の明記された制限)。\n * - `focus=\"heading\"`: リーフ route が挿入した内容の最初の h1〜h6 に\n * tabindex=\"-1\" を付けて focus() する。見出し不在時は何もしない — 旧フォーカス\n * 要素が遷移で消えていればブラウザが body へ落とすため、結果は仕様既定の\n * focusReset と同等に収束する(§3-4 の規定)。\n */\nexport function applyA11yPolicies(routerNode: IRouter, matchResult: IRouteMatchResult): void {\n if (routerNode.announcePolicy === \"title\") {\n const region = routerNode.a11yRegion;\n if (region !== null) {\n region.textContent = document.title;\n }\n }\n if (routerNode.focusPolicy === \"heading\") {\n // matchRoutes / fallbackRoute の構成上 routes は常に 1 件以上\n const leaf = matchResult.routes[matchResult.routes.length - 1];\n const heading = findFirstHeading(leaf.childNodeArray);\n if (heading !== null) {\n if (!heading.hasAttribute(\"tabindex\")) {\n heading.setAttribute(\"tabindex\", \"-1\");\n }\n heading.focus();\n }\n }\n}\n\n/**\n * リーフ route のトップレベルノード列を document order で走査し、最初の見出しを\n * 返す。祖先 route の内容へは遡らない — 読者が「新しい画面」と認識する単位は\n * リーフである(docs/a11y-design.md §3-4)。ルート内容は Comment placeholder の\n * 兄弟として挿入されるため安定した「箱」が無く、内容から探すのが唯一の現実解。\n */\nfunction findFirstHeading(nodes: Node[]): HTMLElement | null {\n for (const node of nodes) {\n if (node.nodeType !== Node.ELEMENT_NODE) continue;\n const element = node as Element;\n if (/^H[1-6]$/.test(element.tagName)) {\n return element as HTMLElement;\n }\n const descendant = element.querySelector<HTMLElement>(\"h1,h2,h3,h4,h5,h6\");\n if (descendant !== null) {\n return descendant;\n }\n }\n return null;\n}\n","import { builtinParamTypes } from \"./builtinParamTypes\";\nimport { IRoute, IRouteMatchResult } from \"./components/types\";\n\nexport function testPath(route: IRoute, path: string, segments: string[]): IRouteMatchResult | null {\n const params: Record<string, string> = {};\n const typedParams: Record<string, any> = {};\n let testResult = true;\n let catchAllFound = false;\n let i = 0, segIndex = 0;\n while (i < route.absoluteSegmentInfos.length) {\n const segmentInfo = route.absoluteSegmentInfos[i];\n // index属性のルートはセグメントを消費しないのでスキップ\n if (segmentInfo.isIndex) {\n i++;\n continue;\n }\n // 先頭の空セグメント(絶対パスの /)はsegmentsから除外されているのでスキップ\n if (i === 0 && segmentInfo.segmentText === '' && segmentInfo.type === 'static') {\n i++;\n continue;\n }\n const segment = segments[segIndex];\n if (segment === undefined) {\n // セグメントが足りない\n testResult = false;\n break;\n }\n let match: boolean = false;\n if (segmentInfo.type === \"param\") {\n const paramType = segmentInfo.paramType || 'any';\n const builtinParamType = builtinParamTypes[paramType];\n const value = builtinParamType.parse(segment);\n if (typeof value !== 'undefined') {\n if (segmentInfo.paramName) {\n params[segmentInfo.paramName] = segment;\n typedParams[segmentInfo.paramName] = value;\n }\n match = true;\n }\n } else {\n match = segmentInfo.pattern.exec(segment) !== null;\n }\n if (match) {\n if (segmentInfo.type === 'catch-all') {\n // Catch-all: match remaining segments\n const remainingSegments = segments.slice(segIndex).join('/');\n params['*'] = remainingSegments;\n typedParams['*'] = remainingSegments;\n catchAllFound = true;\n break; // No more segments to process\n }\n } else {\n testResult = false;\n break; \n }\n i++;\n segIndex++;\n }\n let finalResult = false;\n if (testResult) {\n if (catchAllFound) {\n // catch-all は残り全部マッチ済み\n finalResult = true;\n } else if (i === route.absoluteSegmentInfos.length && segIndex === segments.length) {\n // 全セグメントが消費された。\n // 末尾スラッシュ(例: /users/)は matchRoutes 側で処理済み: normalizePathname が\n // ルート以外の末尾スラッシュを除去し、matchRoutes の filter が末尾の空セグメントを\n // 落とすため、testPath に渡る segments に末尾 '' は含まれない。よってここで\n // 末尾スラッシュ用の分岐は不要(trailing-slash の結合テストは matchRoutes.test.ts 参照)。\n finalResult = true;\n }\n }\n \n if (finalResult) {\n return {\n path: path,\n routes: route.routes,\n params: params,\n typedParams: typedParams,\n lastPath: \"\"\n };\n }\n return null;\n}","import { IRoute, IRouteMatchResult, IRouter } from \"./components/types.js\";\nimport { testPath } from \"./testPath.js\";\n\nfunction _matchRoutes(\n routeNode: IRoute,\n normalizedPath: string,\n segments: string[],\n results: IRouteMatchResult[]\n): void {\n const matchResult = testPath(routeNode, normalizedPath, segments);\n if (matchResult) {\n results.push(matchResult);\n }\n for(const childRoute of routeNode.routeChildNodes) {\n _matchRoutes(childRoute, normalizedPath, segments, results);\n }\n}\n\nexport function matchRoutes(routerNode: IRouter, normalizedPath: string): IRouteMatchResult | null {\n const topLevelRoutes = routerNode.routeChildNodes;\n const results: IRouteMatchResult[] = [];\n // セグメント配列を作成(先頭の/は除去せずにそのまま分割)\n // '/' => ['', ''] → filter → ['']\n // '/home' => ['', 'home'] → filter → ['home']\n // '/home/about' => ['', 'home', 'about'] → filter → ['home', 'about']\n // '' => ['']\n const rawSegments = normalizedPath.split('/');\n // 先頭の空セグメント(絶対パスの/)と末尾の空セグメント(/で終わるパス)を除去\n const segments = rawSegments.filter((s, i) => {\n if (i === 0 && s === '') return false; // 先頭の空セグメントをスキップ\n if (i === rawSegments.length - 1 && s === '' && rawSegments.length > 1) return false; // 末尾の空セグメントをスキップ\n return true;\n });\n for (const route of topLevelRoutes) {\n _matchRoutes(route, normalizedPath, segments, results);\n }\n results.sort((a, b) => {\n const lastRouteA = a.routes.at(-1)!;\n const lastRouteB = b.routes.at(-1)!;\n const diffSegmentCount = lastRouteA.absoluteSegmentCount - lastRouteB.absoluteSegmentCount;\n if (diffSegmentCount !== 0) {\n return -diffSegmentCount;\n }\n const diffWeight = lastRouteA.absoluteWeight - lastRouteB.absoluteWeight;\n if (diffWeight !== 0) {\n return -diffWeight;\n }\n const diffIndex = lastRouteA.childIndex - lastRouteB.childIndex;\n return diffIndex;\n });\n if (results.length > 0) {\n return results[0];\n }\n return null;\n}","import { config } from \"./config.js\";\n\n// basenameFileExtensions ベースの正規表現をキャッシュ(config 変更時のみ再生成)。\nlet _cachedExtensions: ReadonlyArray<string> | null = null;\nlet _cachedExtPattern: RegExp | null = null;\n\n/**\n * config.basenameFileExtensions から拡張子削除用の正規表現を生成(キャッシュ付き)。\n * config 変更が検知された場合のみ再生成する。\n */\nexport function getExtPattern(): RegExp | null {\n const exts = config.basenameFileExtensions;\n if (exts.length === 0) return null;\n if (_cachedExtensions === exts && _cachedExtPattern) {\n return _cachedExtPattern;\n }\n _cachedExtensions = exts;\n _cachedExtPattern = new RegExp(\n `\\\\/[^/]+(?:${exts.map(e => e.replace(/\\./g, '\\\\.')).join('|')})$`,\n 'i'\n );\n return _cachedExtPattern;\n}\n\n/**\n * URL pathname を route path に正規化する。\n * - 先頭スラッシュを保証\n * - 連続スラッシュを単一化\n * - 末尾のファイル拡張子(例: .html)をディレクトリルートとして扱う\n * - ルート以外の末尾スラッシュを除去\n */\nexport function normalizePathname(path: string): string {\n let p = path || \"/\";\n if (!p.startsWith(\"/\")) p = \"/\" + p;\n p = p.replace(/\\/{2,}/g, \"/\");\n const extPattern = getExtPattern();\n if (extPattern) {\n p = p.replace(extPattern, \"\");\n }\n if (p === \"\") p = \"/\";\n if (p.length > 1 && p.endsWith(\"/\")) p = p.slice(0, -1);\n return p;\n}\n\n/**\n * fullPath から basename を取り除いた route path を返す。\n *\n * applyRoute のマッチング入力と same-match 判定\n * (docs/router-state-contract-design.md §4.4)で共有する。same-match の比較は\n * **basename スライス後の path 同士**で行う規範 — `router.path` に格納されるのは\n * スライス後のパスであり、スライス前の fullPath と比較すると basename 運用で\n * same-match が決して成立しない。\n */\nexport function sliceBasename(fullPath: string, basename: string): string {\n let sliced = fullPath;\n if (basename !== \"\") {\n if (fullPath === basename) {\n sliced = \"\";\n } else if (fullPath.startsWith(basename + \"/\")) {\n sliced = fullPath.slice(basename.length);\n }\n }\n // when fullPath === basename (e.g. \"/app\"), treat it as root \"/\"\n return sliced === \"\" ? \"/\" : sliced;\n}\n\n/**\n * basename を正規化する。\n * - \"\" or \"/\" -> \"\"\n * - \"/app/\" -> \"/app\"\n * - \"/app/index.html\" -> \"/app\"\n */\nexport function normalizeBasename(path: string): string {\n let p = path || \"\";\n if (!p) return \"\";\n if (!p.startsWith(\"/\")) p = \"/\" + p;\n p = p.replace(/\\/{2,}/g, \"/\");\n const extPattern = getExtPattern();\n if (extPattern) {\n p = p.replace(extPattern, \"\");\n }\n if (p.length > 1 && p.endsWith(\"/\")) p = p.slice(0, -1);\n if (p === \"/\") return \"\";\n return p;\n}\n","import { IRoute } from \"./components/types\";\n\nexport function hideRoute(route: IRoute) {\n route.clearParams();\n for(const node of route.childNodeArray) {\n node.parentNode?.removeChild(node);\n }\n}\n","import { assignParams } from \"./assignParams\";\nimport { LayoutOutlet } from \"./components/LayoutOutlet\";\nimport { IRoute, IRouteMatchResult } from \"./components/types\";\nimport { config } from \"./config\";\n\n/**\n * ルートへのパラメータ割り当て(setParams + 内容ノードへの data-bind /\n * LayoutOutlet 配送)。挿入とは独立に呼べるよう showRoute から抽出 —\n * SSR ハイドレーション(採用時は内容が既に DOM に居るため挿入しない)が\n * 同じ配送規則を共有する(docs/ssr-router-design.md §4)。\n *\n * connectedCallback が呼ばれる前に、プロパティにパラメータを割り当てる必要が\n * あるため(挿入時にパラメータはすでに設定されている必要がある)、showRoute は\n * これを挿入より先に呼ぶ。\n */\nexport function assignRouteParams(route: IRoute, matchResult: IRouteMatchResult): void {\n const params: Record<string, string> = {};\n const typedParams: Record<string, any> = {};\n for(const key of route.paramNames) {\n params[key] = matchResult.params[key];\n typedParams[key] = matchResult.typedParams[key];\n }\n route.setParams(params, typedParams);\n for (const node of route.childNodeArray) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as Element;\n element.querySelectorAll('[data-bind]').forEach((e) => {\n assignParams(e, route.typedParams);\n });\n if (element.hasAttribute('data-bind')) {\n assignParams(element, route.typedParams);\n }\n element.querySelectorAll<LayoutOutlet>(config.tagNames.layoutOutlet).forEach((layoutOutlet) => {\n layoutOutlet.assignParams(route.typedParams);\n });\n if (element.tagName.toLowerCase() === config.tagNames.layoutOutlet) {\n (element as LayoutOutlet).assignParams(route.typedParams);\n }\n }\n }\n}\n\nexport function showRoute(route: IRoute, matchResult: IRouteMatchResult): boolean {\n assignRouteParams(route, matchResult);\n const parentNode = route.placeHolder.parentNode;\n const nextSibling = route.placeHolder.nextSibling;\n for (const node of route.childNodeArray) {\n if (nextSibling) {\n parentNode?.insertBefore(node, nextSibling);\n } else {\n parentNode?.appendChild(node);\n }\n }\n return true;\n}\n","// ===========================================================================\n// AUTO-GENERATED FILE - DO NOT EDIT.\n// Generated from /protocol/transition-runner.ts by scripts/sync-protocol-types.mjs.\n// Run `node scripts/sync-protocol-types.mjs` after editing the source.\n// ===========================================================================\n\n// transition-runner protocol — how a package that mutates the DOM hands that\n// mutation to whoever is arbitrating view transitions on the page.\n//\n// @wcstack/state and @wcstack/router must not depend on @wcstack/view-transition\n// (zero runtime dependencies, independently publishable), so the arbiter installs\n// itself on a well-known global symbol and the participants look it up lazily.\n// No arbiter installed means the mutation is invoked directly, synchronously —\n// byte-for-byte the behavior these packages had before the protocol existed.\n//\n// docs/view-transition-design.md §4 is the normative description.\n//\n// SINGLE SOURCE OF TRUTH: edit only this file (/protocol/transition-runner.ts), then run\n// `node scripts/sync-protocol-types.mjs` to regenerate the per-package copies\n// (packages/<pkg>/src/protocol/transitionRunner.ts). Those copies are generated — do not edit them.\n\n/**\n * Global key the arbiter installs itself under. `Symbol.for` so independently\n * loaded copies of this file (two CDN bundles on one page) still agree.\n */\nexport const TRANSITION_RUNNER_KEY = Symbol.for(\"wcstack.transition-runner\");\n\n/** Who is asking. Backs the arbiter's `for=` participant gate. */\nexport type TransitionSource = \"router\" | \"state\";\n\n/** `view-transition-name` assignment policy the arbiter declares for participants. */\nexport type TransitionNaming = \"manual\" | \"auto\";\n\nexport interface IWcsTransitionRunOptions {\n /** Participant id, for the `for=` gate and for diagnostics. */\n readonly source?: string;\n /** Transition types, where the environment supports `startViewTransition({ types })`. */\n readonly types?: readonly string[];\n}\n\nexport interface IWcsTransitionRunner {\n readonly protocol: \"wcs-transition-runner\";\n /** Integer protocol version. All versions >= 1 are participant-compatible. */\n readonly version: number;\n /** `\"auto\"` licenses a participant to assign `view-transition-name` itself. */\n readonly naming: TransitionNaming;\n /** Upper bound on auto-assigned names; past it a participant stops naming. */\n readonly namingLimit: number;\n /** Whether this participant animates at all. */\n accepts(source: string): boolean;\n /**\n * Invoke `mutate` inside a view transition when one is possible.\n *\n * Contract (docs/view-transition-design.md §4):\n * - `mutate` is invoked exactly once, whatever happens to the transition.\n * - The promise resolves once `mutate` has run — never waits for the animation.\n * - When no transition is started, `mutate` runs synchronously inside `run()`.\n * - It rejects only if `mutate` threw.\n */\n run(mutate: () => void, options?: IWcsTransitionRunOptions): Promise<void>;\n}\n\n/**\n * The installed arbiter, or null when there is none, it speaks a version this\n * reader does not, or it does not accept this participant.\n *\n * Looked up on every call rather than cached: the tag can be added, removed, or\n * reconfigured at any point in a page's life, and a stale cache would either\n * animate what the author just switched off or miss what they switched on.\n */\nexport function getTransitionRunner(source: string): IWcsTransitionRunner | null {\n const candidate = (globalThis as Record<symbol, unknown>)[TRANSITION_RUNNER_KEY] as\n | IWcsTransitionRunner\n | undefined;\n if (candidate === undefined || candidate === null) return null;\n if (candidate.protocol !== \"wcs-transition-runner\") return null;\n if (typeof candidate.version !== \"number\" || candidate.version < 1) return null;\n if (typeof candidate.run !== \"function\") return null;\n if (typeof candidate.accepts !== \"function\" || !candidate.accepts(source)) return null;\n return candidate;\n}\n\n/**\n * Run `mutate` under the installed arbiter, or directly when there is none.\n *\n * Returns `undefined` in the no-arbiter case instead of a resolved promise: the\n * state drain calls this on every batch, and awaiting is a caller's choice, not\n * an allocation the common path should pay for. `await` accepts both.\n */\nexport function runTransition(\n source: string,\n mutate: () => void,\n types?: readonly string[],\n): Promise<void> | undefined {\n const runner = getTransitionRunner(source);\n if (runner === null) {\n mutate();\n return undefined;\n }\n return runner.run(mutate, { source, types });\n}\n","// ===========================================================================\n// AUTO-GENERATED FILE - DO NOT EDIT.\n// Generated from /protocol/binder.ts by scripts/sync-protocol-types.mjs.\n// Run `node scripts/sync-protocol-types.mjs` after editing the source.\n// ===========================================================================\n\n// binder protocol — how a package that inserts DOM hands those nodes to whoever\n// owns data bindings on the page.\n//\n// The dual of transition-runner: that one hands a *mutation* to whoever animates\n// it, this one hands *new nodes* to whoever binds them.\n//\n// A `data-wcs` binding exists only for nodes @wcstack/state walked when it built\n// its bindings. Nodes that arrive later — the content of a route that was not\n// active at that moment, a <wcs-head> child reflected into <head> — were never\n// walked, so their bindings silently do nothing, however often they are inserted.\n// @wcstack/router must not depend on @wcstack/state (zero runtime dependencies,\n// independently publishable), so state installs a binder on a well-known global\n// symbol and inserters look it up lazily.\n//\n// No binder installed means nothing happens — byte-for-byte the behavior these\n// packages had before the protocol existed.\n//\n// docs/binder-protocol-design.md is the normative description.\n//\n// SINGLE SOURCE OF TRUTH: edit only this file (/protocol/binder.ts), then run\n// `node scripts/sync-protocol-types.mjs` to regenerate the per-package copies\n// (packages/<pkg>/src/protocol/binder.ts). Those copies are generated — do not edit them.\n\n/**\n * Global key the binder installs itself under. `Symbol.for` so independently\n * loaded copies of this file (two CDN bundles on one page) still agree.\n */\nexport const BINDER_KEY = Symbol.for(\"wcstack.binder\");\n\nexport interface IWcsBinder {\n readonly protocol: \"wcs-binder\";\n /** Integer protocol version. All versions >= 1 are participant-compatible. */\n readonly version: number;\n /**\n * Take a subtree that has just entered the document and bind whatever\n * declarations it carries.\n *\n * Contract (docs/binder-protocol-design.md §2):\n * - Synchronous. Initial values are applied before this returns, so the\n * caller never shows one frame of unbound markup.\n * - Idempotent. A subtree that is already bound is left alone, so a caller\n * may hand over the same nodes on every insertion without tracking which\n * ones are new.\n * - Binding survives later relocation, so this need not be called again when\n * the same nodes are moved (measured: design doc §8-3).\n * - Never throws for markup reasons; a subtree with no declarations is a\n * no-op.\n */\n bind(subtree: Node): void;\n}\n\n/**\n * The installed binder, or null when there is none or it speaks a version this\n * reader does not.\n *\n * Looked up on every call rather than cached, for the same reason\n * transition-runner does: the page's composition can change at any point, and a\n * stale cache would keep calling into a binder that is no longer there.\n */\nexport function getBinder(): IWcsBinder | null {\n const candidate = (globalThis as Record<symbol, unknown>)[BINDER_KEY] as IWcsBinder | undefined;\n if (candidate === undefined || candidate === null) return null;\n if (candidate.protocol !== \"wcs-binder\") return null;\n if (typeof candidate.version !== \"number\" || candidate.version < 1) return null;\n if (typeof candidate.bind !== \"function\") return null;\n return candidate;\n}\n\n/**\n * Subtrees offered before a binder existed, and the set of everything a binder\n * has taken. Both live on global symbols so that independently loaded copies of\n * this file — the router's and state's — share one queue.\n *\n * The queue is needed because of load order: the router's auto bundle runs\n * before state's, so `<wcs-head>` reflects its children into `<head>` while\n * there is still nothing to bind them. Offering them to a binder that arrives\n * later is the difference between working and silently blank.\n */\nconst PENDING_KEY = Symbol.for(\"wcstack.binder.pending\");\nconst TAKEN_KEY = Symbol.for(\"wcstack.binder.taken\");\n\nfunction pendingQueue(): Node[] {\n const globals = globalThis as Record<symbol, unknown>;\n let queue = globals[PENDING_KEY] as Node[] | undefined;\n if (queue === undefined) {\n queue = [];\n globals[PENDING_KEY] = queue;\n }\n return queue;\n}\n\nfunction takenSet(): WeakSet<Node> {\n const globals = globalThis as Record<symbol, unknown>;\n let taken = globals[TAKEN_KEY] as WeakSet<Node> | undefined;\n if (taken === undefined) {\n taken = new WeakSet<Node>();\n globals[TAKEN_KEY] = taken;\n }\n return taken;\n}\n\n/**\n * Hand `subtree` to the installed binder, or hold it for one that arrives later.\n *\n * Returns whether a binder took it *now*. A `false` does not yet mean the markup\n * is doomed — check {@link wasBoundBy} once module scripts have run.\n */\nexport function bindSubtree(subtree: Node): boolean {\n const binder = getBinder();\n if (binder === null) {\n pendingQueue().push(subtree);\n return false;\n }\n takenSet().add(subtree);\n binder.bind(subtree);\n return true;\n}\n\n/** Whether any binder has taken this subtree. */\nexport function wasBoundBy(subtree: Node): boolean {\n return takenSet().has(subtree);\n}\n\n/**\n * Bind everything offered before this binder existed. Called by the binder right\n * after it installs itself.\n */\nexport function flushPendingBinds(): void {\n const binder = getBinder();\n if (binder === null) return;\n const queue = pendingQueue();\n if (queue.length === 0) return;\n const pending = queue.splice(0, queue.length);\n const taken = takenSet();\n for (const subtree of pending) {\n taken.add(subtree);\n binder.bind(subtree);\n }\n}\n","/**\n * 「後から差し込んだノードのバインドは効かない」ことを loud に報告する。\n *\n * `data-wcs` のバインドは、`@wcstack/state` がバインドを構築した時点で document に\n * 居たノードにしか作られない。router が後から差し込むノード —— 非活性ルートの内容\n * (`hideRoute` が切り離しているので走査されない)と `<wcs-head>` が head へ映す\n * クローン(元ノードとは別物)—— はどちらもその時点に存在せず、バインドは決して\n * 届かない。何度ナビゲーションを往復しても回復しない。\n *\n * **挙動は変えない。** 変えるのは「黙って空になる」を「原因を指す警告」にすること\n * だけである。症状(見出しが空・`<title>` が消える)は原因(バインド構築の時点)から\n * 遠く、しかも例外も出ないため、これまで気づく手立てが無かった。\n *\n * 恒久的な解決は binder プロトコル(docs/binder-protocol-design.md)で別途決める。\n *\n * 警告は要素ごとに 1 回。壊れている場合にのみ走るので、正常系のコストはゼロ。\n */\nimport { getBinder, wasBoundBy } from \"./protocol/binder\";\n\nconst warned = new WeakSet<Element>();\n\n/** `data-wcs`。router は state の config を読めないので既定名を直接持つ */\nconst BIND_ATTRIBUTE = \"data-wcs\";\n\nfunction hasBinding(element: Element): boolean {\n return element.hasAttribute(BIND_ATTRIBUTE) || element.querySelector(`[${BIND_ATTRIBUTE}]`) !== null;\n}\n\n/**\n * @param element 差し込まれるサブツリーの根\n * @param where 利用者が原因を特定できる位置の説明(例: `<wcs-route path=\"/about\">`)\n * @param remedy その位置に固有の回避策\n */\nexport function warnUnboundMarkup(element: Element, where: string, remedy: string): void {\n if (warned.has(element) || !hasBinding(element)) {\n return;\n }\n warned.add(element);\n // 判定は **DOMContentLoaded まで**遅らせる。router の auto バンドルは state の\n // ものより先に走るので、`<wcs-head>` が差し出す時点では binder がまだ居ない。\n // そこで即断すると、この直後に正しく束ねられるノードを「壊れている」と報告する。\n //\n // タイマーでは足りない。deferred な module script はパース完了後に実行されるので、\n // `setTimeout(0)` は state の auto バンドルより**先に発火しうる**(実測)。\n // DOMContentLoaded は全 deferred script の実行後に発火するので、そこでは決着している。\n //\n // 見るのは「束ね終わったか」ではなく **binder が居るか**。バインド構築は\n // インライン state モジュールの読み込みを挟むので完了はさらに後になりうるが、\n // binder が居るなら保留キューはいずれ引き取られるので報告する理由が無い。\n whenLoadOrderSettled(() => {\n if (getBinder() !== null || wasBoundBy(element)) {\n return;\n }\n console.warn(\n `[@wcstack/router] ${where} contains ${BIND_ATTRIBUTE} bindings that will never be applied. ` +\n `A binding exists only for nodes that were in the document when @wcstack/state built its ` +\n `bindings, and these nodes were not. They will render empty. ${remedy}`\n );\n });\n}\n\nfunction whenLoadOrderSettled(check: () => void): void {\n if (document.readyState !== \"complete\") {\n // `load` を待つ。`DOMContentLoaded` では足りない —— deferred script の実行中は\n // readyState が既に `\"interactive\"` なので「まだ loading か」では判別できず、\n // DOMContentLoaded を待つつもりが即断になる(実測)。`load` は必ず発火し、\n // 全 deferred script より確実に後に来る。診断なので多少遅くて構わない。\n window.addEventListener(\"load\", check, { once: true });\n return;\n }\n // 起動後の挿入(ナビゲーション)。読み込み順はとうに決着している。\n check();\n}\n\n/** テスト用: 警告の「1 要素 1 回」を跨いで検証するためのリセット */\nexport function _resetUnboundMarkupWarnings(elements: Iterable<Element>): void {\n for (const element of elements) {\n warned.delete(element);\n }\n}\n","import { IRoute, IRouteMatchResult, IRouter } from \"./components/types\";\nimport { hideRoute } from \"./hideRoute\";\nimport { showRoute } from \"./showRoute\";\nimport { GuardCancel } from \"./GuardCancel\";\nimport { runTransition } from \"./protocol/transitionRunner\";\nimport { warnUnboundMarkup } from \"./unboundMarkupWarning\";\nimport { bindSubtree } from \"./protocol/binder\";\n\n/**\n * 差し込んだルート内容を binder へ渡す。binder が居なければ、バインドが効かない\n * ことを 1 回だけ報告する。\n *\n * 挿入の**後**に呼ぶ。`bind()` は初期値の適用まで同期で行うので、挿入前に呼ぶと\n * まだ document に居ないノードを走査することになる。\n *\n * binder が居ないのは state を読み込んでいないページで、そこでは `data-wcs` が\n * そもそも動かない。報告に直し方まで書くのは、これが仕様の穴ではなく**分担の\n * 境界**だからである(examples/router-spa と examples/router-i18n が同じ分担)。\n */\nfunction bindRouteContent(route: IRoute): void {\n for (const node of route.childNodeArray) {\n if (node.nodeType !== 1) continue;\n if (bindSubtree(node)) continue;\n warnUnboundMarkup(\n node as Element,\n `<${(node as Element).tagName.toLowerCase()}> inside a route`,\n `Load @wcstack/state on this page, or render data-driven markup outside ` +\n `<wcs-router> — bind the router's \\`path\\` into state and gate the markup ` +\n `with <template data-wcs=\"if: …\">. See examples/router-i18n.`,\n );\n }\n}\n\n/**\n * ガード相の単独実装。何も触らずに全ルートの guardCheck を待ち、GuardCancel なら\n * フォールバックへの再ナビゲートを microtask で予約して false を返す。\n *\n * showRouteContent の相 1 であると同時に、SSR ハイドレーション\n * (docs/ssr-router-design.md §4 — 採用はレンダリング最適化であって認可の\n * スキップではない)からも同じ規則で呼ばれるため抽出した。\n */\nexport async function runGuardPhase(\n routerNode: IRouter,\n matchResult: IRouteMatchResult,\n): Promise<boolean> {\n try {\n for (const route of matchResult.routes) {\n await route.guardCheck(matchResult);\n }\n } catch (e) {\n if (e instanceof GuardCancel) {\n console.warn(`Navigation cancelled: ${e.message}. Redirecting to ${e.fallbackPath}`);\n queueMicrotask(() => {\n routerNode.navigate(e.fallbackPath).catch((err) => {\n console.error('Fallback navigation failed:', err);\n });\n });\n return false;\n } else {\n throw e;\n }\n }\n return true;\n}\n\n/**\n * ルートコンテンツを表示する。\n *\n * 二相構成(docs/view-transition-design.md §7.1):\n * 1. ガード相 — 何も触らずに全ルートの guardCheck を待つ。\n * 2. 変更相 — 旧ルートの hide と新ルートの show を「ひとまとまりの DOM 変更」\n * として transition arbiter に渡す。arbiter が居なければ同期実行され、\n * 従来と同じ挙動になる。ただし初回描画は渡さない(下記)。\n *\n * ガードを変更相の中に入れないのは、更新コールバックの中で任意の await を\n * 走らせると遷移が開きっぱなしになるため(ブラウザの猶予は約 4 秒)。\n * 相を分けたことで「ガードが拒否したのに旧ルートだけ先に消えている」という\n * 順序の歪みも同時に解消している。\n *\n * @returns ガードチェックを通過してコンテンツ表示が成立した場合 true、\n * GuardCancel により中断(フォールバックへ再ナビゲート)した場合 false。\n * 呼び出し側(applyRoute)は false の場合、router.path / outlet.lastRoutes を\n * 更新しないことで「拒否されたパスでの path-changed 発火」を防ぐ。\n */\nexport async function showRouteContent(\n routerNode: IRouter,\n matchResult: IRouteMatchResult,\n lastRoutes: IRoute[],\n): Promise<boolean> {\n // --- ガード相 ---\n if (!(await runGuardPhase(routerNode, matchResult))) {\n return false;\n }\n\n // --- 変更相 ---\n const routesSet = new Set<IRoute>(matchResult.routes);\n const lastRouteSet = new Set<IRoute>(lastRoutes);\n const mutate = (): void => {\n // Hide previous routes\n for (const route of lastRoutes) {\n if (!routesSet.has(route)) {\n hideRoute(route);\n }\n }\n let force = false;\n for (const route of matchResult.routes) {\n if (!lastRouteSet.has(route) || route.shouldChange(matchResult.params) || force) {\n force = showRoute(route, matchResult);\n // 挿入の後。初回描画(lastRoutes が空)の内容は state のバインド構築時に\n // document に居るので、そこは binder に渡す必要も報告する必要も無い。\n // `bind()` 自体は冪等なので渡しても壊れないが、渡さないほうが安い。\n if (lastRoutes.length > 0 && !lastRouteSet.has(route)) {\n bindRouteContent(route);\n }\n }\n }\n };\n // 初回描画(=置き換える旧ルートが無い)は遷移に渡さない。state 側の\n // 「初期レンダリングは決して包まない、包むのは drain だけ」と同じ規則で、\n // 理由も同じ: 差し替えではなく入場であり、対比すべき旧状態が無い。入場は\n // @starting-style の担当(docs/view-transition-design.md §1)。\n //\n // これは好みの問題ではない。router の初期化は最初のルート適用を await するが、\n // その時点のドキュメントはまだ最初の描画を終えていない。そこで開始した遷移は\n // Chromium で更新コールバックが呼ばれないまま留まることがあり、_initialize が\n // 永久に解決しなくなる(ページが白いまま・path が空のまま)。実ブラウザでのみ\n // 再現するので e2e/tests/view-transition.spec.ts が唯一の回帰テストになる。\n let pending: Promise<void> | undefined;\n if (lastRoutes.length === 0) {\n mutate();\n } else {\n pending = runTransition(\"router\", mutate);\n }\n // arbiter が居ないときは同期適用済みで undefined が返る。そこで await すると\n // 無条件に 1 tick 増えて、既存のナビゲーション完了タイミングが変わってしまう。\n if (pending !== undefined) {\n await pending;\n }\n return true;\n}\n","import { applyA11yPolicies } from \"./a11yPolicies\";\nimport { IOutlet, IRouter } from \"./components/types\";\nimport { config } from \"./config\";\nimport { matchRoutes } from \"./matchRoutes\";\nimport { sliceBasename } from \"./normalizePathname\";\nimport { raiseError } from \"./raiseError\";\nimport { showRouteContent } from \"./showRouteContent\";\n\n/**\n * ルートを適用する。返り値は committed — guard 拒否(GuardCancel)で中断された\n * 場合のみ false。呼び出し側はこれで commit 後の処理(フォールバック経路の\n * スクロール等)をゲートできる(docs/a11y-design.md §3-2 / D4)。\n *\n * `search` は現在 URL のクエリ(\"?k=v\" 形式または \"\")。隠れた `window.location`\n * 読みにせず呼び出し元が明示供給する(docs/router-state-contract-design.md §3.6 —\n * テスト容易性と権威の明示のため)。\n */\nexport async function applyRoute(\n routerNode: IRouter,\n outlet: IOutlet,\n fullPath: string,\n lastPath: string,\n search: string = \"\"\n): Promise<boolean> {\n const path = sliceBasename(fullPath, routerNode.basename);\n\n // same-match 高速パス(docs/router-state-contract-design.md §4.4)。\n // guard はルートへの進入を守るものであり、クエリ変化は進入ではない —\n // matchRoutes / guard 相 / showRouteContent をスキップし、transition-runner にも\n // 渡さず(DOM mutation が無いのに arbiter へ空遷移を依頼しない)、a11y の\n // 再アナウンスもしない。search を commit し、§3.4 の規範で発火する\n // (この場合 search-changed のみが発火し得る)。\n if (routerNode.isSameMatch(path)) {\n routerNode.commitNavigation({\n params: routerNode.params,\n typedParams: routerNode.typedParams,\n routeName: routerNode.routeName,\n search,\n path,\n });\n return true;\n }\n\n let matchResult = matchRoutes(routerNode, path);\n if (!matchResult) {\n if (routerNode.fallbackRoute) {\n matchResult = {\n routes: [routerNode.fallbackRoute],\n params: {},\n typedParams: {},\n path: path,\n lastPath: lastPath\n };\n } else {\n raiseError(`${config.tagNames.router} No route matched for path: ${path}`);\n }\n }\n matchResult.lastPath = lastPath;\n const lastRoutes = outlet.lastRoutes;\n const committed = await showRouteContent(routerNode, matchResult, lastRoutes);\n // GuardCancel により中断された場合は state を更新しない\n // (拒否されたパスでの wcs-router:path-changed 発火を防ぐため)\n if (!committed) return false;\n // if successful, update router and outlet state\n // routeName は最深マッチの name。fallback 時は fallback ルートの name(D8)。\n routerNode.commitNavigation({\n params: matchResult.params,\n typedParams: matchResult.typedParams,\n routeName: matchResult.routes[matchResult.routes.length - 1]?.name ?? \"\",\n search,\n path,\n });\n outlet.lastRoutes = matchResult.routes;\n // オプトインの focus/announce は commit 直後・mutate() の外で適用する(D3)。\n // 初回描画(lastRoutes が空)では動かない — ページロードはブラウザの担当で、\n // view-transition の「初回は包まない」と同じ判定・同じ理由(§3-5)。\n // guard 拒否は上の return false で既に抜けている(D4)。\n if (lastRoutes.length > 0) {\n applyA11yPolicies(routerNode, matchResult);\n }\n return true;\n}\n","/**\n * Navigation API の `navigate()` 戻り値(NavigationResult)。\n * - `committed`: URL がアドレスバーに反映された時点で resolve\n * - `finished`: 全 intercept handler 完了で resolve\n * Polyfill や mock 環境では戻り値が undefined のケースもあるため、\n * 戻り値全体を optional として扱う。\n */\nexport type NavigationResultLike = {\n committed?: Promise<unknown>;\n finished?: Promise<unknown>;\n};\n\nexport type NavigationNavigateOptions = {\n history?: \"auto\" | \"push\" | \"replace\";\n};\n\nexport type NavigationLike = {\n navigate?: (url: string, options?: NavigationNavigateOptions) => NavigationResultLike | void | undefined;\n addEventListener: (type: string, listener: EventListenerOrEventListenerObject) => void;\n removeEventListener: (type: string, listener: EventListenerOrEventListenerObject) => void;\n};\n\nexport function getNavigation(): NavigationLike | null {\n const nav = (window as any).navigation as NavigationLike | undefined;\n if (!nav) {\n return null;\n }\n if (typeof nav.addEventListener !== \"function\" || typeof nav.removeEventListener !== \"function\") {\n return null;\n }\n return nav;\n}\n","/**\n * searchParams の正規化(docs/router-state-contract-design.md §3.5)。\n *\n * - 読み取り形状は `Record<string, string>`。`URLSearchParams` の生ハンドルは\n * 露出しない(生ハンドルを state に入れない規範)。\n * - キー重複(`?tag=a&tag=b`)は **last-wins**。\n * - 値のデコードは `URLSearchParams` に委ねる(`+` → space を含む)。\n * - 露出オブジェクトは freeze したスナップショット(消費側の変異は loud failure)。\n */\nexport function parseSearchParams(search: string): Record<string, string> {\n const result: Record<string, string> = {};\n for (const [key, value] of new URLSearchParams(search)) {\n result[key] = value;\n }\n return Object.freeze(result);\n}\n\n/**\n * Record の shallow 比較。params の変化判定(§3.3: 文字列値の shallow 比較)と\n * searchParams の変化判定(§3.5: キーをソートした pair 列の比較 = 順序非依存)に\n * 共通で使う。\n */\nexport function shallowEqualRecords(\n a: Record<string, unknown>,\n b: Record<string, unknown>\n): boolean {\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) return false;\n for (const key of aKeys) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (a[key] !== b[key]) return false;\n }\n return true;\n}\n","/**\n * ナビゲーションターゲット文字列の分解(docs/router-state-contract-design.md §4.1)。\n *\n * ナビゲーションターゲットを受理する全地点(Router.navigate / Link の href 組み立て・\n * active 判定)で使う共通規範。最初の `#` より後を hash、残りの最初の `?` より後を\n * search として分離する。normalizePathname / basename 結合は pathname にのみ適用し、\n * search / hash は再結合して URL を組み立てる。\n *\n * 受理形:\n * - `/path` / `path` — クエリ無し遷移(現在のクエリは引き継がない)\n * - `/path?k=v` — パス遷移+クエリ指定\n * - `?k=v` — クエリのみ遷移(pathname 空 = 現在値を維持する合図)\n * - `?` — クエリの全消去(pathname 維持)\n */\nexport interface IUrlTarget {\n /** クエリ・ハッシュを除いたパス部。クエリのみ遷移では \"\" */\n pathname: string;\n /** \"?k=v\" 形式(先頭 `?` 込み)。無ければ \"\" */\n search: string;\n /** \"#x\" 形式(先頭 `#` 込み)。無ければ \"\" */\n hash: string;\n}\n\nexport function splitUrlTarget(to: string): IUrlTarget {\n let rest = to;\n let hash = \"\";\n const hashIndex = rest.indexOf(\"#\");\n if (hashIndex >= 0) {\n hash = rest.slice(hashIndex);\n rest = rest.slice(0, hashIndex);\n }\n let search = \"\";\n const searchIndex = rest.indexOf(\"?\");\n if (searchIndex >= 0) {\n search = rest.slice(searchIndex);\n rest = rest.slice(0, searchIndex);\n }\n return { pathname: rest, search, hash };\n}\n\n/**\n * URL 再結合時の search。`?` 単独は「クエリの全消去」の合図なので \"\" にする。\n */\nexport function effectiveSearch(search: string): string {\n return search === \"?\" ? \"\" : search;\n}\n","// ===========================================================================\n// AUTO-GENERATED FILE - DO NOT EDIT.\n// Generated from /protocol/upgrade-properties.ts by scripts/sync-protocol-types.mjs.\n// Run `node scripts/sync-protocol-types.mjs` after editing the source.\n// ===========================================================================\n\n// custom element の property upgrade — `static wcBindable.inputs` に宣言した入力のうち、\n// 要素が upgrade される前に代入された own データプロパティを取り込み直す。\n//\n// なぜ必要か:\n// 未定義タグの要素は素の HTMLElement なので、`el.url = \"...\"` は own データプロパティを作る。\n// upgrade 後にクラスの accessor が prototype へ入っても own プロパティが優先されるため、\n// setter は二度と呼ばれず、値は要素へ届かないまま消える(エラーも警告も出ない)。\n// 常にプロパティ代入を行う framework(Angular の `[prop]`、Lit の `.prop=`、\n// Solid の `prop:`、Vue の `.prop` 修飾子)× 遅延定義(autoloader / CDN / code-split)で\n// 常態的に起きる。docs/architecture-hardening/13-framework-adapter-binding-constraints.md §1.2。\n//\n// 安全側の判定:\n// own プロパティがあっても、prototype チェーンに accessor が無ければ「シャドウ」ではなく\n// その own プロパティ自体が正規の格納先なので触らない(public class field を壊さない)。\n//\n// SINGLE SOURCE OF TRUTH: edit only this file (/protocol/upgrade-properties.ts), then run\n// `node scripts/sync-protocol-types.mjs` to regenerate the per-package copies\n// (packages/<pkg>/src/protocol/upgradeProperties.ts). Those copies are generated — do not edit them.\nimport { IWcBindable } from \"./wcBindable.js\";\n\nfunction hasAccessorOnPrototype(target: object, name: string): boolean {\n let proto = Object.getPrototypeOf(target);\n while (proto !== null) {\n const descriptor = Object.getOwnPropertyDescriptor(proto, name);\n if (descriptor !== undefined) {\n return typeof descriptor.get === \"function\" || typeof descriptor.set === \"function\";\n }\n proto = Object.getPrototypeOf(proto);\n }\n return false;\n}\n\n/**\n * `connectedCallback` の先頭で呼ぶ。宣言済み input のうち upgrade 前の代入で\n * accessor をシャドウしている own プロパティを、delete → 再代入で setter に通し直す。\n *\n * - 冪等: 再代入は accessor を通るので own プロパティは残らず、2 回目以降は no-op。\n * - 宣言に `inputs` が無い要素、`wcBindable` を持たない要素では何もしない。\n * - 値の意味は変えない。今まで捨てられていた代入が届くようになる一方向の変化。\n */\nexport function upgradeProperties(element: object): void {\n const declaration = (element as { constructor?: { wcBindable?: IWcBindable } }).constructor?.wcBindable;\n const inputs = declaration?.inputs;\n if (inputs === undefined) return;\n for (const input of inputs) {\n const name = input.name;\n if (!Object.prototype.hasOwnProperty.call(element, name)) continue;\n if (!hasAccessorOnPrototype(element, name)) continue;\n const record = element as Record<string, unknown>;\n const value = record[name];\n delete record[name];\n record[name] = value;\n }\n}\n","/**\n * SSR モード判定。@wcstack/server の renderToString がレンダリング中の document\n * 要素へ `data-wcs-server` 属性を設定する。state 側(packages/state/src/config.ts の\n * inSsr)と同じ規約 — パッケージ間 import はせず、属性規約で合意する\n * (docs/ssr-router-design.md §3.2)。\n *\n * キャッシュしない: SSR モードはプロセスの属性ではなく「現在の document」の属性。\n * サーバーレンダリングの後、同一プロセスでクライアント側の起動(SSR→hydrate の\n * e2e)が走り得るため、呼び出しごとに現在の document を見る。\n */\nexport function inSsr(): boolean {\n const html = document.documentElement;\n return html ? html.hasAttribute('data-wcs-server') : false;\n}\n","/**\n * SSR ハイドレーションマーカー(docs/ssr-router-design.md §3.3 / §4)。\n *\n * サーバー(_renderForSsr)が書き、クライアント(_hydrateFromSsr / Link の採用)が\n * 読む。キーは route の absolutePath — placeholder の UUID はパースごとに再生成され\n * サーバーとクライアントで一致しないため、同一 template から決定的に導ける\n * absolutePath だけが突合キーになれる。\n */\n\n/** サーバー描画済み outlet の目印(要素属性) */\nexport const SSR_OUTLET_ATTR = 'data-wcs-ssr';\n\n/** Link がサーバーで生成した anchor の目印(要素属性)。クライアントが採用して外す */\nexport const SSR_LINK_ATTR = 'data-wcs-ssr-link';\n\n/** route placeholder コメントの安定キー形式(`@@wcs-route-ph:<absolutePath>`) */\nexport const ROUTE_PH_PREFIX = '@@wcs-route-ph:';\n\n/** 表示中ルート内容の開始マーカー(`@@wcs-route-start:<absolutePath>`) */\nexport const ROUTE_START_PREFIX = '@@wcs-route-start:';\n\n/** 表示中ルート内容の終了マーカー(`@@wcs-route-end:<absolutePath>`) */\nexport const ROUTE_END_PREFIX = '@@wcs-route-end:';\n","import { parse } from \"../parse.js\";\nimport { createOutlet } from \"./Outlet.js\";\nimport { config } from \"../config.js\";\nimport { raiseError } from \"../raiseError.js\";\nimport { ILink, IOutlet, IRoute, IRouteChildContainer, IRouteMatchResult, IRouter, IRouterCommit } from \"./types.js\";\nimport { IWcBindable } from \"../types.js\";\nimport { applyRoute } from \"../applyRoute.js\";\nimport { getNavigation } from \"../Navigation.js\";\nimport { matchRoutes } from \"../matchRoutes.js\";\nimport { normalizeBasename, normalizePathname, sliceBasename } from \"../normalizePathname.js\";\nimport { parseSearchParams, shallowEqualRecords } from \"../searchParams.js\";\nimport { splitUrlTarget, effectiveSearch } from \"../splitUrlTarget.js\";\nimport { upgradeProperties } from \"../protocol/upgradeProperties.js\";\nimport { bindSubtree } from \"../protocol/binder.js\";\nimport { inSsr } from \"../inSsr.js\";\nimport { runGuardPhase } from \"../showRouteContent.js\";\nimport { assignRouteParams } from \"../showRoute.js\";\nimport {\n ROUTE_END_PREFIX,\n ROUTE_PH_PREFIX,\n ROUTE_START_PREFIX,\n SSR_OUTLET_ATTR,\n} from \"../ssrMarkers.js\";\n\ninterface NavigateEventLike {\n canIntercept: boolean;\n hashChange: boolean;\n downloadRequest: string | null;\n destination: { url: string };\n /** Navigation API の navigationType。mock / polyfill では欠け得る */\n navigationType?: \"push\" | \"replace\" | \"traverse\" | \"reload\";\n intercept: (options: {\n handler: () => Promise<void>;\n scroll?: \"after-transition\" | \"manual\";\n focusReset?: \"after-transition\" | \"manual\";\n }) => void;\n}\n\nconst EMPTY_RECORD: Record<string, never> = Object.freeze({});\n\n/**\n * AppRoutes - Root component for @wcstack/router\n *\n * Container element that manages route definitions and navigation.\n */\nexport class Router extends HTMLElement implements IRouter {\n /**\n * @wcstack/server の待機プロトコル(docs/ssr-router-design.md §3.2)。\n * renderToString はこのフラグを持つ要素の connectedCallbackPromise を待って\n * からシリアライズする — 初期ルート適用の完了がサーバー出力に反映される。\n */\n static hasConnectedCallbackPromise = true;\n\n static wcBindable: IWcBindable = {\n protocol: \"wc-bindable\",\n version: 1,\n properties: [\n { name: \"navigateUrl\", event: \"wcs-router:navigate-url-changed\", semantics: \"state\" },\n { name: \"replaceUrl\", event: \"wcs-router:replace-url-changed\", semantics: \"state\" },\n { name: \"path\", event: \"wcs-router:path-changed\", semantics: \"state\" },\n // 観測面(docs/router-state-contract-design.md §3.1)— output-only\n // (properties のみ・inputs に無い)。state 側の既存規範により authority は\n // element(attach 時に要素の現在値を読む)となり、state→element 書き込みは\n // 恒久ブロックされる。params-changed の detail は { params, typedParams }\n // なので、両プロパティとも getter で分派する。\n { name: \"params\", event: \"wcs-router:params-changed\", semantics: \"state\",\n getter: (e: Event) => (e as CustomEvent).detail.params },\n { name: \"typedParams\", event: \"wcs-router:params-changed\", semantics: \"state\",\n getter: (e: Event) => (e as CustomEvent).detail.typedParams },\n { name: \"searchParams\", event: \"wcs-router:search-changed\", semantics: \"state\" },\n { name: \"routeName\", event: \"wcs-router:route-name-changed\", semantics: \"state\" },\n ],\n // `navigateUrl` は observable output であると同時に settable な書き込み面でもある\n // (setter が navigate() を起動し、完了後に自分で null へ戻す)。properties にだけ\n // 宣言すると binding core は output-only とみなし、state → element の書き込みを\n // 抑止するため、state 経由のプログラム遷移が成立しなくなる。`path` は setter が\n // navigate せず内部値の反映だけなので、意図的に output のままにしている。\n inputs: [\n { name: \"basename\", attribute: \"basename\" },\n { name: \"navigateUrl\" },\n { name: \"replaceUrl\" },\n ],\n commands: [\n { name: \"navigate\", async: true },\n { name: \"replace\", async: true },\n ],\n };\n\n private _outlet: IOutlet | null = null;\n private _template: HTMLTemplateElement | null = null;\n private _routeChildNodes: IRoute[] = [];\n private _basename: string = '';\n private _path: string = '';\n private _initialized: boolean = false;\n private _fallbackRoute: IRoute | null = null;\n private _listeningPopState: boolean = false;\n private _listeningNavigate: boolean = false;\n private _navigateUrl: string | null = null;\n private _replaceUrl: string | null = null;\n private _disconnectedDuringInit: boolean = false;\n private _initializing: boolean = false;\n private _a11yRegion: HTMLElement | null = null;\n // 観測面の内部値(docs/router-state-contract-design.md §3)。露出オブジェクトは\n // frozen スナップショット — params は router の所有物であり、消費側の変異は\n // silent corruption ではなく loud failure にする。\n private _params: Record<string, string> = EMPTY_RECORD;\n private _typedParams: Record<string, any> = EMPTY_RECORD;\n private _searchParams: Record<string, string> = EMPTY_RECORD;\n private _routeName: string = '';\n /** 最初の成功 commit を通過したか(§4.4 の初回ガード) */\n private _hasCommitted: boolean = false;\n private _connectedCallbackPromise: Promise<void>;\n private _resolveConnectedCallback: (() => void) | null = null;\n private _rejectConnectedCallback: ((reason?: unknown) => void) | null = null;\n\n constructor() {\n super();\n this._connectedCallbackPromise = new Promise<void>((resolve, reject) => {\n this._resolveConnectedCallback = resolve;\n this._rejectConnectedCallback = reject;\n });\n }\n\n get connectedCallbackPromise(): Promise<void> {\n return this._connectedCallbackPromise;\n }\n\n get a11yRegion(): HTMLElement | null {\n return this._a11yRegion;\n }\n\n get focusPolicy(): string | null {\n return this.getAttribute('focus');\n }\n\n get announcePolicy(): string | null {\n return this.getAttribute('announce');\n }\n\n /**\n * `announce=` 用 live region を <wcs-router> 直下に空のまま用意する\n * (docs/a11y-design.md §3-4)。\n * - 告知より**前**から DOM に居ないと SR に読まれないため、announce 時の\n * 遅延生成はできない。\n * - outlet 配下はナビゲーションごとに破棄され、オプトインで shadow root にも\n * なる。document.body 直下は router の寿命を超えて漏れ、マルチ router で\n * 競合する。よって配置は <wcs-router> 直下の一択。\n * - display:none は live region を殺すため、sr-only クリップで隠す。\n */\n private _ensureA11yRegion(): void {\n if (this._a11yRegion !== null) {\n return;\n }\n const region = document.createElement('div');\n region.setAttribute('role', 'status');\n region.style.position = 'absolute';\n region.style.width = '1px';\n region.style.height = '1px';\n region.style.overflow = 'hidden';\n region.style.clipPath = 'inset(50%)';\n region.style.whiteSpace = 'nowrap';\n this.appendChild(region);\n this._a11yRegion = region;\n }\n\n /**\n * Normalize a URL pathname to a route path.\n * 共通実装は normalizePathname.ts を参照(Link との挙動整合のため)。\n */\n private _normalizePathname(_path: string): string {\n return normalizePathname(_path);\n }\n\n /**\n * Normalize basename.\n * 共通実装は normalizePathname.ts を参照。\n */\n private _normalizeBasename(_path: string): string {\n return normalizeBasename(_path);\n }\n\n private _joinInternalPath(basename: string, to: string): string {\n const base = this._normalizeBasename(basename);\n // accept \"about\" as \"/about\"\n let path = to.startsWith(\"/\") ? to : \"/\" + to;\n path = this._normalizePathname(path);\n if (!base) return path;\n // keep \"/app/\" for root\n if (path === \"/\") return base + \"/\";\n return base + path;\n }\n\n private _notifyLocationChange(): void {\n // For environments without Navigation API (and for Link active-state updates)\n window.dispatchEvent(new CustomEvent(\"wcs:navigate\"));\n }\n\n private _getBasename(): string {\n const base = new URL(document.baseURI);\n let path = base.pathname || \"/\";\n if (path === \"/\") {\n return \"\";\n }\n return this._normalizeBasename(path);\n }\n\n get basename(): string {\n return this._basename;\n }\n\n private _getOutlet(): IOutlet {\n // 自身を起点に兄弟・子孫から Outlet を探す(マルチ Router 対応)\n const next = this.nextElementSibling;\n if (next && next.matches(config.tagNames.outlet)) {\n return next as unknown as IOutlet;\n }\n // なければ新規作成して自身の直後に挿入\n const outlet = createOutlet();\n if (this.parentNode) {\n this.parentNode.insertBefore(outlet, this.nextSibling);\n } else {\n document.body.appendChild(outlet);\n }\n return outlet;\n }\n\n private _getTemplate() {\n const template = this.querySelector(\"template\");\n return template;\n }\n \n get outlet(): IOutlet {\n if (!this._outlet) {\n raiseError(`${config.tagNames.router} has no outlet.`);\n }\n return this._outlet;\n }\n\n get template(): HTMLTemplateElement {\n if (!this._template) {\n raiseError(`${config.tagNames.router} has no template.`);\n }\n return this._template;\n }\n\n get routeChildNodes(): IRoute[] {\n return this._routeChildNodes;\n }\n\n get path(): string {\n return this._path;\n }\n /**\n * applyRoute 内で設定される値です。\n */\n set path(value: string) {\n const changed = this._path !== value;\n this._path = value;\n if (changed) {\n this.dispatchEvent(new CustomEvent(\"wcs-router:path-changed\", {\n detail: value,\n bubbles: true,\n }));\n }\n }\n\n get params(): Record<string, string> {\n return this._params;\n }\n\n get typedParams(): Record<string, any> {\n return this._typedParams;\n }\n\n get searchParams(): Record<string, string> {\n return this._searchParams;\n }\n\n get routeName(): string {\n return this._routeName;\n }\n\n /**\n * same-match 判定(docs/router-state-contract-design.md §4.4)。\n *\n * 比較は **basename スライス後の path 同士**(`_path` はスライス後で保存済み)。\n * 判定が必要な地点は 2 箇所 — `_onNavigateFunc` の intercept オプション決定時と\n * `applyRoute` の入口分岐 — で、両方がこの単一実装を呼ぶ。\n *\n * 初回ガード: 最初の成功 commit より前には適用しない。初期 `_path = \"\"` が\n * 正規化後パス(常に `/` 始まり)と一致しないため偶然安全だが、\n * normalizePathname の実装詳細に依存させず規範として明示する。\n */\n isSameMatch(path: string): boolean {\n if (!this._hasCommitted) return false;\n return this._path === path;\n }\n\n /**\n * 観測面のコミットと発火(docs/router-state-contract-design.md §3.4)。\n *\n * 全内部値を先にコミットし、その後で初めてイベントを発火する — どのイベントの\n * リスナーから要素プロパティを読んでも、遷移後スナップショットの一貫した値が\n * 見える。発火順序は params → route-name → search → path。`path` を最後に\n * 置くのは、既存例で `path` が「ナビゲーション完了」の信号として使われている\n * ため。各イベントは変化した commit のみ発火する。\n */\n commitNavigation(commit: IRouterCommit): void {\n const nextParams = Object.freeze({ ...commit.params });\n const nextTypedParams = Object.freeze({ ...commit.typedParams });\n const nextSearchParams = parseSearchParams(commit.search);\n const paramsChanged = !shallowEqualRecords(this._params, nextParams);\n const routeNameChanged = this._routeName !== commit.routeName;\n const searchChanged = !shallowEqualRecords(this._searchParams, nextSearchParams);\n const pathChanged = this._path !== commit.path;\n // --- 先に全内部値をコミット ---\n // 変化した面だけ差し替える(ナビゲーションごとに新しいオブジェクトになるので\n // state の same-value guard を正しく通過する。不変の面は同一性を保つ)。\n if (paramsChanged) {\n this._params = nextParams;\n this._typedParams = nextTypedParams;\n }\n if (routeNameChanged) {\n this._routeName = commit.routeName;\n }\n if (searchChanged) {\n this._searchParams = nextSearchParams;\n }\n this._path = commit.path;\n this._hasCommitted = true;\n // --- その後で発火(順序規範: params → route-name → search → path) ---\n if (paramsChanged) {\n this.dispatchEvent(new CustomEvent(\"wcs-router:params-changed\", {\n detail: { params: this._params, typedParams: this._typedParams },\n bubbles: true,\n }));\n }\n if (routeNameChanged) {\n this.dispatchEvent(new CustomEvent(\"wcs-router:route-name-changed\", {\n detail: this._routeName,\n bubbles: true,\n }));\n }\n if (searchChanged) {\n this.dispatchEvent(new CustomEvent(\"wcs-router:search-changed\", {\n detail: this._searchParams,\n bubbles: true,\n }));\n }\n if (pathChanged) {\n this.dispatchEvent(new CustomEvent(\"wcs-router:path-changed\", {\n detail: commit.path,\n bubbles: true,\n }));\n }\n }\n\n get fallbackRoute(): IRoute | null {\n return this._fallbackRoute;\n }\n /**\n * Routeのfallback属性がある場合にそのルートを設定します。\n */\n set fallbackRoute(value: IRoute | null) {\n this._fallbackRoute = value;\n }\n\n get navigateUrl(): string | null {\n return this._navigateUrl;\n }\n\n set navigateUrl(value: string | null) {\n if (value === null || value === undefined || value === \"\") return;\n // 既に同一 URL の navigate 中なら再起動しない\n if (this._navigateUrl === value) return;\n this._navigateUrl = value;\n this.navigate(value).catch((err) => {\n console.error(`${config.tagNames.router} navigate failed:`, err);\n }).finally(() => {\n this._navigateUrl = null;\n this.dispatchEvent(new CustomEvent(\"wcs-router:navigate-url-changed\", {\n detail: null,\n bubbles: true,\n }));\n });\n }\n\n get replaceUrl(): string | null {\n return this._replaceUrl;\n }\n\n /**\n * navigateUrl と完全同型の null-idle transient(docs/router-state-contract-design.md §4.2)。\n * null は待機・書き込みで replace() を起動・完了で自己リセットして\n * `wcs-router:replace-url-changed`(detail: null)を発火する。\n */\n set replaceUrl(value: string | null) {\n if (value === null || value === undefined || value === \"\") return;\n // 既に同一 URL の replace 中なら再起動しない\n if (this._replaceUrl === value) return;\n this._replaceUrl = value;\n this.replace(value).catch((err) => {\n console.error(`${config.tagNames.router} replace failed:`, err);\n }).finally(() => {\n this._replaceUrl = null;\n this.dispatchEvent(new CustomEvent(\"wcs-router:replace-url-changed\", {\n detail: null,\n bubbles: true,\n }));\n });\n }\n\n async navigate(path: string): Promise<void> {\n await this._performNavigation(path, false);\n }\n\n /**\n * navigateUrl(push)の対になる replace 遷移(docs/router-state-contract-design.md §4.2)。\n * Navigation API では `navigation.navigate(url, { history: \"replace\" })`、\n * フォールバックでは `history.replaceState` + applyRoute + 通知。\n */\n async replace(path: string): Promise<void> {\n await this._performNavigation(path, true);\n }\n\n private async _performNavigation(path: string, replace: boolean): Promise<void> {\n // クエリ / ハッシュ込みターゲットの受理(docs/router-state-contract-design.md §4.1)。\n // normalizePathname / basename 結合は pathname にのみ適用し、search / hash は\n // 再結合して URL に渡す。pathname 空(\"?k=v\" / \"?\" / \"#x\")は現在の pathname を\n // 維持する。search / hash まで空(navigate(\"\"))は従来どおりルート扱い。\n const target = splitUrlTarget(path);\n const fullPath =\n target.pathname === \"\" && (target.search !== \"\" || target.hash !== \"\")\n ? window.location.pathname\n : this._joinInternalPath(this._basename, target.pathname);\n const url = fullPath + effectiveSearch(target.search) + target.hash;\n const navigation = getNavigation();\n if (navigation?.navigate) {\n // Navigation API は { committed, finished } を返す。\n // finished を await することで、navigate() の Promise が\n // 実際のナビゲーション完了まで pending となり、_navigateUrl / _replaceUrl の\n // 二重起動ガード (setter 内の同一値チェック) が適切な時間ウィンドウで機能する。\n // Polyfill や mock 環境で undefined / 戻り値なしのケースもあるため optional chaining。\n const result = replace\n ? navigation.navigate(url, { history: \"replace\" })\n : navigation.navigate(url);\n await result?.finished;\n } else {\n if (replace) {\n history.replaceState(null, '', url);\n } else {\n history.pushState(null, '', url);\n }\n // セグメントマッチにはクエリ・ハッシュを渡さない(渡すと 404 に落ちる —\n // §1.1 欠陥 6 の修理)。search は明示引数で供給する(§3.6)。\n const normalizedFullPath = this._normalizePathname(fullPath);\n const sameMatch = this.isSameMatch(sliceBasename(normalizedFullPath, this._basename));\n const committed = await applyRoute(\n this, this.outlet, normalizedFullPath, this._path, effectiveSearch(target.search)\n );\n // 修理・既定オン(docs/a11y-design.md §3-2): Navigation API 経路の仕様既定\n // (scroll: \"after-transition\" — push はトップへ)とフォールバック経路を揃える。\n // guard 拒否(committed === false)では動かさない。_onPopState 側は\n // history.scrollRestoration によるブラウザ復元が正解なので、決してスクロールしない。\n // same-match(クエリのみ遷移)でも動かさない — 1 打鍵ごとにトップへ戻る事故の\n // 防止(docs/router-state-contract-design.md §4.4)。\n if (committed && !sameMatch) {\n window.scrollTo(0, 0);\n }\n this._notifyLocationChange();\n }\n }\n\n /**\n * basename 配下の URL かどうかを判定する。\n * basename が空の場合はすべての URL にマッチする。\n */\n private _isOwnPath(fullPath: string): boolean {\n if (this._basename === \"\") return true;\n return fullPath === this._basename || fullPath.startsWith(this._basename + \"/\");\n }\n\n private _onNavigateFunc(navEvent: NavigateEventLike) {\n if (\n !navEvent.canIntercept ||\n navEvent.hashChange ||\n navEvent.downloadRequest !== null\n ) {\n return;\n }\n const url = new URL(navEvent.destination.url);\n const fullPath = this._normalizePathname(url.pathname);\n // basename 配下でない URL は無視(マルチ Router 対応)\n if (!this._isOwnPath(fullPath)) return;\n // same-match 判定は applyRoute 内の分岐と同じ共有実装(§4.4: スライス後比較)。\n // intercept オプションは applyRoute 実行前に決める必要があるためここでも判定する。\n const sameMatch = this.isSameMatch(sliceBasename(fullPath, this._basename));\n // scroll は navigationType で分岐する: push / replace の same-match は \"manual\"\n // (検索ボックスにバインドした書き込みの 1 打鍵ごとにスクロールがトップへ戻る\n // 事故の防止)。traverse(戻る/進む)は仕様既定 = ブラウザのスクロール位置復元を\n // 維持する — ?page=2 から戻る操作でスクロールが固定される事故を防ぐ。\n const sameMatchScrollManual =\n sameMatch &&\n (navEvent.navigationType === \"push\" || navEvent.navigationType === \"replace\");\n const search = url.search;\n const routesNode = this;\n navEvent.intercept({\n handler: async () => {\n try {\n await applyRoute(routesNode, routesNode.outlet, fullPath, routesNode.path, search);\n } catch (err) {\n console.error(`${config.tagNames.router} applyRoute failed:`, err);\n throw err;\n }\n },\n // 仕様既定の明示(same-match 以外は挙動変更なし)。scroll: push はトップへ /\n // traverse はスクロール位置復元、focusReset: [autofocus] か body へ。この委譲が\n // router のアクセシビリティ契約であり、ここを \"manual\" に変える変更は\n // 契約の変更にあたる(docs/a11y-design.md §3-1)。same-match の扱いは\n // docs/router-state-contract-design.md §4.4 / D6b。\n scroll: sameMatchScrollManual ? \"manual\" : \"after-transition\",\n // focus= 指定時のみ manual。渡さないと router のフォーカス移動とブラウザの\n // after-transition リセットが二重処理になる(docs/a11y-design.md §3-5)。\n // same-match は常に manual — 1 打鍵ごとにフォーカスが body へ飛ぶ事故の防止。\n focusReset: sameMatch || routesNode.focusPolicy !== null ? \"manual\" : \"after-transition\",\n });\n }\n\n private _onNavigate = this._onNavigateFunc.bind(this) as unknown as EventListener;\n\n private _onPopState = async () => {\n // back/forward for environments without Navigation API\n const fullPath = this._normalizePathname(window.location.pathname);\n // basename 配下でない URL は無視(マルチ Router 対応)\n if (!this._isOwnPath(fullPath)) return;\n // search は明示引数で供給(§3.6)。mock / 特殊環境で欠ける場合は \"\" 扱い\n await applyRoute(this, this.outlet, fullPath, this._path, window.location.search || \"\");\n this._notifyLocationChange();\n };\n\n private async _initialize(): Promise<void> {\n this._initializing = true;\n try {\n const ssr = inSsr();\n this._basename = this._normalizeBasename(\n this.getAttribute(\"basename\") || this._getBasename() || \"\"\n );\n const hasBaseTag = document.querySelector('base[href]') !== null;\n const url = new URL(window.location.href);\n if (this._basename === \"\" && !hasBaseTag && url.pathname !== \"/\") {\n raiseError(`${config.tagNames.router} basename is empty, but current path is not \"/\".`);\n }\n\n this._outlet = this._getOutlet();\n this._outlet.routesNode = this;\n this._template = this._getTemplate();\n if (!this._template) {\n raiseError(`${config.tagNames.router} should have a <template> child element.`);\n }\n // SSR: parse は template.content を破壊的に消費する(route 要素は中身を\n // 移された抜け殻になり、非 route ノードは fragment へ移動する)。\n // シリアライズ出力に完全なルート定義を残してクライアントが従来どおり\n // 起動できるよう、退避してパース後に復元する(docs/ssr-router-design.md §3.2)。\n const templateSnapshot = ssr ? this._template.content.cloneNode(true) : null;\n const fragment = await parse(this);\n // クライアント側でサーバー描画済み outlet(data-wcs-ssr)を見つけたら\n // 採用(adoption)を試みる。fragment はまだ入れない — 採用が成立すれば\n // fresh クローンは不要で、失敗したときだけ従来どおり流し込む(§4)。\n const adoptable = !ssr &&\n (this._outlet as unknown as Element).hasAttribute(SSR_OUTLET_ATTR);\n if (!adoptable) {\n this._outlet.rootNode.appendChild(fragment);\n }\n if (templateSnapshot !== null) {\n const content = this._template.content;\n while (content.firstChild) {\n content.removeChild(content.firstChild);\n }\n content.appendChild(templateSnapshot);\n }\n if (this.routeChildNodes.length === 0) {\n raiseError(`${config.tagNames.router} has no route definitions.`);\n }\n if (!ssr) {\n // 最初のナビゲーションより十分前に accessibility tree へ載せておく。\n // サーバーでは作らない — 初回描画はアナウンスしない既存規則により不要で、\n // 作るとクライアントの初期化が二重生成する(docs/ssr-router-design.md §3.2)。\n this._ensureA11yRegion();\n }\n\n const fullPath = this._normalizePathname(window.location.pathname);\n if (ssr) {\n await this._renderForSsr(fullPath);\n this._initialized = true;\n return;\n }\n if (adoptable) {\n const hydrated = await this._hydrateFromSsr(fullPath);\n if (hydrated) {\n this._notifyLocationChange();\n this._initialized = true;\n return;\n }\n // 採用不能: サーバー DOM を破棄して従来経路で描き直す。安全側は常に CSR\n // (state の hydrateBindings →失敗→ buildBindings と同じ二段構え、§2-3)。\n const outletEl = this._outlet as unknown as Element;\n outletEl.removeAttribute(SSR_OUTLET_ATTR);\n const rootNode = this._outlet.rootNode;\n while (rootNode.firstChild) {\n rootNode.removeChild(rootNode.firstChild);\n }\n rootNode.appendChild(fragment);\n }\n await applyRoute(this, this.outlet, fullPath, this._path, window.location.search || \"\");\n if (adoptable) {\n // 描き直したノードを binder へ差し出す。state がサーバー DOM を既に\n // ハイドレート済み(初期走査完了後)の場合、破棄と同時にそのバインドは\n // 死んでおり、「初期描画は走査時に DOM に居る」前提も崩れているため。\n this._offerInitialContentToBinder();\n }\n this._notifyLocationChange();\n this._initialized = true;\n } finally {\n this._initializing = false;\n }\n }\n\n /**\n * サーバー描画済み outlet の採用(docs/ssr-router-design.md §4)。\n *\n * 検証(一意な absolutePath・マーカーの整合・現在 URL のマッチとの一致)を\n * **すべて DOM 変更の前に**行い、途中で断念しても半採用状態を残さない。\n * 成立すれば DOM 変更ゼロで「すでにナビゲート済み」の状態を確立する —\n * state がハイドレートしたバインディングは採用ノード上で生きたままになる。\n *\n * @returns 採用が成立した場合 true。false は呼び出し側(_initialize)が\n * サーバー DOM を破棄して従来描画にフォールバックする。\n */\n private async _hydrateFromSsr(fullPath: string): Promise<boolean> {\n const outletRoot = this.outlet.rootNode;\n\n // --- 検証相 ---\n\n // absolutePath → route の一意対応。重複定義(parse が警告するケース)は\n // マーカーの突合キーが曖昧になるため採用不能\n const routesByPath = new Map<string, IRoute>();\n let duplicated = false;\n this._forEachRoute((route) => {\n if (routesByPath.has(route.absolutePath)) {\n duplicated = true;\n return;\n }\n routesByPath.set(route.absolutePath, route);\n });\n if (duplicated) return false;\n\n // layout は採用の初版スコープ外 — slot 投影の状態はマーカーだけでは\n // 再構築できない(§4)。検出したらフォールバック\n if ((outletRoot as Element | ShadowRoot).querySelector(config.tagNames.layoutOutlet) !== null) {\n return false;\n }\n\n // マーカー走査(文書順の添字も記録し、start < end と範囲交差の検証に使う)\n const phByPath = new Map<string, Comment>();\n const startByPath = new Map<string, { comment: Comment, index: number }>();\n const endByPath = new Map<string, { comment: Comment, index: number }>();\n const walker = document.createTreeWalker(outletRoot, NodeFilter.SHOW_COMMENT);\n let index = 0;\n while (walker.nextNode()) {\n const comment = walker.currentNode as Comment;\n const data = comment.data;\n index++;\n if (data.startsWith(ROUTE_PH_PREFIX)) {\n const key = data.slice(ROUTE_PH_PREFIX.length);\n if (phByPath.has(key) || !routesByPath.has(key)) return false;\n phByPath.set(key, comment);\n } else if (data.startsWith(ROUTE_START_PREFIX)) {\n const key = data.slice(ROUTE_START_PREFIX.length);\n if (startByPath.has(key) || !routesByPath.has(key)) return false;\n startByPath.set(key, { comment, index });\n } else if (data.startsWith(ROUTE_END_PREFIX)) {\n const key = data.slice(ROUTE_END_PREFIX.length);\n if (endByPath.has(key) || !routesByPath.has(key)) return false;\n endByPath.set(key, { comment, index });\n }\n }\n // start / end は対で、同じ親の下で start が先。範囲同士は交差しない\n // (交差していると内容収集の兄弟走査が他ルートの領域へはみ出す)\n if (startByPath.size !== endByPath.size) return false;\n const ranges: { start: number, end: number }[] = [];\n for (const [key, start] of startByPath) {\n const end = endByPath.get(key);\n if (!end) return false;\n if (end.comment.parentNode !== start.comment.parentNode) return false;\n if (end.index <= start.index) return false;\n ranges.push({ start: start.index, end: end.index });\n }\n for (const a of ranges) {\n for (const b of ranges) {\n if (a.start < b.start && b.start < a.end && a.end < b.end) return false;\n }\n }\n\n // 現在 URL のマッチとマーカー集合の一致検証。サーバーが描いた集合と\n // クライアントが今マッチする集合が違えば、URL か template が変わっている\n const path = sliceBasename(fullPath, this._basename);\n let matchResult: IRouteMatchResult | null = matchRoutes(this, path);\n if (!matchResult) {\n if (this._fallbackRoute === null) return false;\n matchResult = {\n routes: [this._fallbackRoute],\n params: {},\n typedParams: {},\n path,\n lastPath: this._path,\n };\n }\n matchResult.lastPath = this._path;\n if (matchResult.routes.length !== startByPath.size) return false;\n for (const route of matchResult.routes) {\n if (!startByPath.has(route.absolutePath)) return false;\n }\n\n // placeholder の集合はサーバー出力の形と**完全一致**でなければならない。\n // serialize される placeholder = トップレベルルート + 各マッチルートの直接の子。\n // 不足を許すと、そのルートへの後続ナビゲーションが anchor を失って無言で\n // 空描画になる。過剰(非活性ルートの子孫の ph)を許すと、再設置がその\n // placeholder を fresh クローンの内容から奪い、当該ルートを到達不能にする\n const requiredPh = new Set<string>();\n for (const route of this.routeChildNodes) {\n requiredPh.add(route.absolutePath);\n }\n for (const matched of matchResult.routes) {\n for (const child of matched.routeChildNodes) {\n requiredPh.add(child.absolutePath);\n }\n }\n if (phByPath.size !== requiredPh.size) return false;\n for (const key of requiredPh) {\n if (!phByPath.has(key)) return false;\n }\n\n // --- 採用相(以後は成立が確定している) ---\n\n // placeholder をクライアント側インスタンスへ差し替える。以後のナビゲーションの\n // anchor がサーバーの位置にそのまま据わる\n for (const [key, comment] of phByPath) {\n const route = routesByPath.get(key)!;\n comment.parentNode!.replaceChild(route.placeHolder, comment);\n }\n\n // 各マッチルートの内容 = 自分の start/end マーカー間の兄弟ノード。ただし:\n // - 子ルートの範囲(start〜end)は**丸ごと除外**する — CSR で親の childNodeArray に\n // 入るのは子の placeholder だけで、子の内容は子が所有する(hideRoute の重複\n // 除去と showRoute の誤再挿入を防ぐ)\n // - Link が所有する anchor も除外する — CSR では anchor は Link の cc が後から\n // 生成する Link の所有物で、childNodeArray には決して入らない。入れると\n // hide → show の往復で Link 自身の anchor 管理と二重になり anchor が重複する\n for (const route of matchResult.routes) {\n const start = startByPath.get(route.absolutePath)!.comment;\n const end = endByPath.get(route.absolutePath)!.comment;\n const nodes: Node[] = [];\n const linkOwnedAnchors = new Set<Node>();\n let node: Node | null = start.nextSibling;\n while (node !== null && node !== end) {\n if (node.nodeType === Node.COMMENT_NODE) {\n const data = (node as Comment).data;\n if (data.startsWith(ROUTE_START_PREFIX)) {\n const childKey = data.slice(ROUTE_START_PREFIX.length);\n node = endByPath.get(childKey)!.comment.nextSibling;\n continue;\n }\n }\n if (linkOwnedAnchors.has(node)) {\n node = node.nextSibling;\n continue;\n }\n if (node.nodeType === Node.ELEMENT_NODE &&\n (node as Element).tagName.toLowerCase() === config.tagNames.link) {\n // anchor は host より後ろに居るので、先に登録してから host を収集する\n const anchor = (node as unknown as ILink).anchorElement;\n if (anchor !== null) {\n linkOwnedAnchors.add(anchor);\n }\n }\n nodes.push(node);\n node = node.nextSibling;\n }\n route.adoptChildNodes(nodes);\n }\n\n // マーカー除去と目印の撤去\n for (const { comment } of startByPath.values()) comment.remove();\n for (const { comment } of endByPath.values()) comment.remove();\n (this.outlet as unknown as Element).removeAttribute(SSR_OUTLET_ATTR);\n\n // 表示済み状態の確立。内容は既に見えているので挿入はしない — パラメータ\n // 配送(setParams / data-bind / active イベント)だけ CSR と同じ規則で行う。\n // lastRoutes を guard より先に立てるのは、guard 拒否後の fallback 遷移が\n // 採用済み内容を hideRoute できるようにするため(CSR と異なり、内容は\n // guard の結果を待たずにサーバーが既に見せている)\n for (const route of matchResult.routes) {\n assignRouteParams(route, matchResult);\n }\n this.outlet.lastRoutes = matchResult.routes;\n\n // guard 相 — 採用はレンダリング最適化であって認可のスキップではない(§4-3)。\n // 自前のサーバー出力は guard 付きルートを描かない(§2-4)ため通常は素通り\n // するが、手書きや他システム由来の SSR HTML に対する防衛として実行する\n if (!(await runGuardPhase(this, matchResult))) {\n // fallback へのナビゲーションが microtask で予約済み。lastRoutes は\n // 立っているので、その遷移が採用済み内容を隠す。commit はしない\n //(拒否されたパスでの path-changed 発火を防ぐ — applyRoute と同じ規範)\n return true;\n }\n\n // 観測面の commit(applyRoute と同じ規範・同じ順序)。\n // routes はマッチ結果か [fallback] で必ず非空(検証相で確定済み)\n this.commitNavigation({\n params: matchResult.params,\n typedParams: matchResult.typedParams,\n routeName: matchResult.routes[matchResult.routes.length - 1].name,\n search: window.location.search || \"\",\n path,\n });\n return true;\n }\n\n /**\n * SSR モードの初期ルート描画(docs/ssr-router-design.md §3.2)。\n * 初回描画は transition arbiter に渡らない既存規則(showRouteContent)により\n * 常に同期適用される。navigate / popstate リスナ・a11y region・\n * `wcs:navigate` 通知はサーバーでは不要(connectedCallback 側で登録しない)。\n */\n private async _renderForSsr(fullPath: string): Promise<void> {\n // guard バリア: guard 付きルートを含むマッチはサーバーで描かない(§2-4)。\n // guard は進入を守る認可点で、サーバーには判断材料(cookie 等)を渡す設計が\n // 無い。outlet を空・マーカー無しのまま返し、クライアントが従来どおり guard を\n // 実行して描く。ハンドラのロードは待たず属性の有無(hasGuard)で判定する。\n const path = sliceBasename(fullPath, this._basename);\n const matchResult = matchRoutes(this, path);\n const routes = matchResult?.routes\n ?? (this._fallbackRoute !== null ? [this._fallbackRoute] : []);\n if (routes.length === 0) {\n // マッチ無しかつ fallback 無し: クライアント(applyRoute)と同じ loud failure\n raiseError(`${config.tagNames.router} No route matched for path: ${path}`);\n }\n if (routes.some((route) => route.hasGuard)) {\n return;\n }\n await applyRoute(this, this.outlet, fullPath, this._path, window.location.search || \"\");\n // 表示済みルート内容を binder へ差し出す。クライアント初回描画の\n // 「state の走査時に既に document に居る」前提はサーバーでは成立しない —\n // state のロード方式(json 属性は I/O 無し・inline script は dynamic import)と\n // 文書順次第で、state の初回走査が router の挿入より先に完了し得る。binder は\n // 「未構築なら保留して構築末尾で引き取る/構築済みなら同期バインド」の両側を\n // 吸収する。bindRouteContent(showRouteContent 側)は使わない — binder 不在の\n // 警告はサーバーでは誤誘導になるため、warn 無しで直接差し出す。\n this._offerInitialContentToBinder();\n // ハイドレーションマーカー(Phase 2 の入力、§3.3)。キーは placeholder の\n // UUID ではなく absolutePath — UUID はパースごとに再生成されクライアントと\n // 一致しない。absolutePath は同一 template から決定的に導ける。\n // placeholder コメントも同じ理由で安定キーへ書き換える — クライアントの採用は\n // これを自分の placeholder(クライアント側インスタンス)と差し替える。\n this._forEachRoute((route) => {\n route.placeHolder.data = `${ROUTE_PH_PREFIX}${route.absolutePath}`;\n });\n (this.outlet as unknown as Element).setAttribute(SSR_OUTLET_ATTR, '');\n for (const route of this.outlet.lastRoutes) {\n // applyRoute 成功後の placeholder は必ず outlet 配下の DOM に居る\n const parentNode = route.placeHolder.parentNode!;\n const contentNodes = route.childNodeArray;\n const start = document.createComment(`${ROUTE_START_PREFIX}${route.absolutePath}`);\n const end = document.createComment(`${ROUTE_END_PREFIX}${route.absolutePath}`);\n parentNode.insertBefore(start, contentNodes[0] ?? route.placeHolder.nextSibling);\n const last = contentNodes[contentNodes.length - 1];\n parentNode.insertBefore(end, last ? last.nextSibling : start.nextSibling);\n }\n }\n\n /**\n * 初期表示ルートの内容を binder プロトコルへ差し出す。SSR 描画(_renderForSsr)と\n * ハイドレーション不能時の描き直し(state が先にハイドレートを終えている可能性が\n * ある)の両方から呼ぶ。bind() は冪等なので余分に差し出しても壊れない。\n */\n private _offerInitialContentToBinder(): void {\n for (const route of this.outlet.lastRoutes) {\n for (const node of route.childNodeArray) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n bindSubtree(node);\n }\n }\n }\n }\n\n /** ルートツリー全体(ネスト含む)への走査 */\n private _forEachRoute(\n callback: (route: IRoute) => void,\n container: IRouteChildContainer = this,\n ): void {\n for (const route of container.routeChildNodes) {\n callback(route);\n this._forEachRoute(callback, route);\n }\n }\n\n async connectedCallback() {\n // upgrade 前に代入された input を取り込み直す(doc 13 §1.2 / Phase A1)。\n // await より前に同期で行い、初期化が古い値を読まないようにする。\n upgradeProperties(this);\n // SSR モード(docs/ssr-router-design.md §3.2):\n // - enable-ssr 無し → サーバーでは一切初期化しない(クライアント専用 = 部分 CSR)\n // - enable-ssr あり → SSR 初期化のみ。navigate / popstate リスナは登録しない\n // どちらも connectedCallbackPromise を必ず決着させる — reject を配管しないと\n // renderToString が mutex を握ったまま無言ハングする(state 側と同じ理由)。\n if (inSsr()) {\n try {\n // happy-dom のパーサは開始タグの時点で connectedCallback を呼ぶため、\n // この時点では子(<template>)がまだパースされていない。パース自体は\n // 同期完了するので、1 microtask 譲れば子が揃う。クライアントでは\n // deferred な auto バンドルの upgrade 時に子が揃っているため不要\n // (サーバー専用の待避、docs/ssr-router-design.md §3.2)。\n await Promise.resolve();\n if (this.hasAttribute('enable-ssr') && !this._initialized) {\n await this._initialize();\n }\n } catch (error) {\n this._rejectConnectedCallback?.(error);\n throw error;\n }\n this._resolveConnectedCallback?.();\n return;\n }\n if (!this._initialized) {\n this._disconnectedDuringInit = false;\n await this._initialize();\n // 初期化中に disconnectedCallback が呼ばれた場合はイベントリスナを登録しない\n if (this._disconnectedDuringInit) {\n this._resolveConnectedCallback?.();\n return;\n }\n }\n // 再接続時は disconnect で撤去された live region を回復する\n // (初回接続では _initialize が生成済みなので no-op)\n if (this._initialized) {\n this._ensureA11yRegion();\n }\n const navigation = getNavigation();\n if (navigation && !this._listeningNavigate) {\n navigation.addEventListener(\"navigate\", this._onNavigate);\n this._listeningNavigate = true;\n }\n // Fallback for browsers without Navigation API\n if (!navigation && !this._listeningPopState) {\n window.addEventListener(\"popstate\", this._onPopState);\n this._listeningPopState = true;\n }\n this._resolveConnectedCallback?.();\n }\n\n disconnectedCallback() {\n // _initialize 中(await 中)に呼ばれた場合はフラグを立ててリスナ登録をスキップさせる\n if (this._initializing) {\n this._disconnectedDuringInit = true;\n }\n if (this._listeningNavigate) {\n getNavigation()?.removeEventListener(\"navigate\", this._onNavigate);\n this._listeningNavigate = false;\n }\n if (this._listeningPopState) {\n window.removeEventListener(\"popstate\", this._onPopState);\n this._listeningPopState = false;\n }\n // live region は router の寿命に同期して撤去する(body 直下に置かない理由と同根)\n if (this._a11yRegion !== null) {\n this._a11yRegion.remove();\n this._a11yRegion = null;\n }\n }\n}\n","import { config } from \"../config\";\nimport { getUUID } from \"../getUUID\";\nimport { raiseError } from \"../raiseError\";\nimport { getNavigation } from \"../Navigation\";\nimport { normalizeBasename, normalizePathname } from \"../normalizePathname\";\nimport { splitUrlTarget, effectiveSearch } from \"../splitUrlTarget\";\nimport { inSsr } from \"../inSsr\";\nimport { SSR_LINK_ATTR } from \"../ssrMarkers\";\nimport { ILink } from \"./types\";\nimport type { Router } from \"./Router\";\n\n// 生成 anchor へミラーする固定属性(docs/a11y-design.md §5)。`aria-*` は開集合なので\n// observedAttributes には載せられず、anchor 生成時の一括コピーのみ(接続後の動的\n// aria-* 変更 — data-wcs バインド経由を含む — には追従しない。README の明記された制限)。\nconst MIRRORED_ATTRIBUTES: readonly string[] = ['title', 'rel', 'target', 'download', 'hreflang'];\n\nexport class Link extends HTMLElement implements ILink {\n static get observedAttributes(): string[] {\n return ['to', ...MIRRORED_ATTRIBUTES];\n }\n\n private _childNodeArray: Node[] = [];\n private _uuid: string = getUUID();\n private _path: string = \"\";\n private _router: Router | null = null;\n private _anchorElement: HTMLAnchorElement | null = null;\n private _initialized: boolean = false;\n private _onClick?: (e: MouseEvent) => void;\n\n constructor() {\n super();\n }\n\n get uuid(): string {\n return this._uuid;\n }\n \n /**\n * 最寄りの Router を返す。\n *\n * 注意: この getter は DOM 走査で Router を探すため、\n * Router がまだ upgrade されていない場合は HTMLElement として返る可能性がある。\n * 通常は registerComponents() で Router を Link より先に upgrade することを推奨する。\n */\n get router(): Router {\n if (this._router) {\n return this._router;\n }\n // DOM 祖先走査で最寄りの Router を探す(マルチ Router 対応)\n const ancestor = this.closest<Router>(config.tagNames.router);\n if (ancestor) {\n return (this._router = ancestor);\n }\n // 祖先にない場合は ownerDocument 内の Router を探す\n const root = this.getRootNode() as Document | ShadowRoot;\n const found = root.querySelector?.<Router>(config.tagNames.router);\n if (found) {\n return (this._router = found);\n }\n raiseError(`${config.tagNames.link} is not connected to a router.`);\n }\n\n private _initialize() {\n this.style.display = \"none\";\n this._childNodeArray = Array.from(this.childNodes);\n this._path = this.getAttribute('to') || '';\n this._initialized = true;\n }\n\n /**\n * URL pathname を正規化する。Router と共通実装を使うことで\n * basenameFileExtensions の取り扱いを揃え、active 判定の取りこぼしを防ぐ。\n */\n private _normalizePathname(path: string): string {\n return normalizePathname(path);\n }\n\n private _joinInternalPath(basename: string, to: string): string {\n // Router._joinInternalPath と挙動を揃える\n const base = normalizeBasename(basename);\n const internal = to.startsWith(\"/\") ? to : \"/\" + to;\n const path = this._normalizePathname(internal);\n if (!base) return path;\n if (path === \"/\") return base + \"/\";\n return base + path;\n }\n\n /**\n * router が扱う内部ターゲットか。`/` 始まりに加え、`?` 始まり(クエリのみ遷移 —\n * docs/router-state-contract-design.md §4.1)も内部ターゲットとして受理する。\n */\n private _isInternalTarget(path: string): boolean {\n return path.startsWith('/') || path.startsWith('?');\n }\n\n private _setAnchorHref(anchor: HTMLAnchorElement,path: string) {\n if (this._isInternalTarget(path)) {\n // basename 結合・正規化は pathname にのみ適用し、search / hash は再結合する。\n // pathname 空(to=\"?k=v\")は「現在 pathname + 指定クエリ」で組み立てる。\n const { pathname, search, hash } = splitUrlTarget(path);\n const joined = pathname === \"\"\n ? window.location.pathname\n : this._joinInternalPath(this.router.basename, pathname);\n anchor.href = joined + effectiveSearch(search) + hash;\n } else {\n try {\n anchor.href = new URL(path).toString();\n } catch {\n raiseError(`[${config.tagNames.link}] Invalid URL in 'to' attribute: ${path}`);\n }\n }\n }\n\n connectedCallback() {\n if (inSsr()) {\n // SSR(docs/ssr-router-design.md §3.2 / §4): happy-dom のパーサは開始タグ\n // 時点で cc を呼ぶため、同期のまま進めると静的 Link の子が空のまま\n // anchor 化される。パースは同期完了するので 1 microtask 譲る。\n // renderToString は待機プロトコル要素(state / router)の await で\n // microtask を消化するため、serialize より先にこの初期化は完了する。\n queueMicrotask(() => {\n if (this.isConnected) {\n this._connect();\n }\n });\n return;\n }\n this._connect();\n }\n\n /**\n * サーバーが生成した目印付き anchor(直後の兄弟)。クライアントの採用対象\n */\n private _findSsrAnchor(): HTMLAnchorElement | null {\n const next = this.nextElementSibling;\n if (next !== null && next.tagName === 'A' && next.hasAttribute(SSR_LINK_ATTR)) {\n return next as HTMLAnchorElement;\n }\n return null;\n }\n\n private _connect(): void {\n if (!this._initialized) {\n this._initialize();\n }\n const parentNode = this.parentNode;\n if (!parentNode) {\n // should not happen if connected\n return;\n }\n const ssrAnchor = this._findSsrAnchor();\n let link: HTMLAnchorElement;\n if (ssrAnchor !== null) {\n // SSR 採用: サーバーの anchor をそのまま自分の anchor にする。\n // 生成経路(cc)でホストの子は anchor へ移動済みなので、子の正本は anchor 側\n link = ssrAnchor;\n link.removeAttribute(SSR_LINK_ATTR);\n this._childNodeArray = Array.from(link.childNodes);\n // href はクライアント側の解決で引き直す(basename / config の検算)\n this._setAnchorHref(link, this._path);\n } else {\n const nextSibling = this.nextSibling;\n link = document.createElement('a');\n this._setAnchorHref(link, this._path);\n // ホスト属性の転送: `aria-*` prefix + 固定 5 名の一括コピー。\n // to / style / class は除外 — ホストは display:none であり、class は active 契約を持つ。\n for (const attr of Array.from(this.attributes)) {\n if (attr.name.startsWith('aria-') || MIRRORED_ATTRIBUTES.includes(attr.name)) {\n link.setAttribute(attr.name, attr.value);\n }\n }\n for(const childNode of this._childNodeArray) {\n link.appendChild(childNode);\n }\n if (nextSibling) {\n parentNode.insertBefore(link, nextSibling);\n } else {\n parentNode.appendChild(link);\n }\n }\n this._anchorElement = link;\n\n if (inSsr()) {\n // サーバー: リスナは登録しない(レンダリングウィンドウは serialize 後に\n // 閉じる)。active 状態は SSR 出力に載せ、クライアントの採用が引き取る\n // 目印を付ける\n this._updateActiveState();\n link.setAttribute(SSR_LINK_ATTR, '');\n return;\n }\n\n // ロケーション変更を監視\n getNavigation()?.addEventListener('currententrychange', this._updateActiveState);\n window.addEventListener('wcs:navigate', this._updateActiveState as EventListener);\n window.addEventListener('popstate', this._updateActiveState as EventListener);\n\n // Navigation API が無い場合は、クリックで router.navigate にフォールバック\n // (`?` 始まりのクエリのみリンクも対象 — 素の href だとフルページ遷移になる)\n if (this._isInternalTarget(this._path) && !getNavigation()?.navigate) {\n this._onClick = async (e: MouseEvent) => {\n // only left-click without modifiers\n if (e.defaultPrevented) return;\n if (e.button !== 0) return;\n if (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) return;\n // 動的に外部URLに変わった場合はブラウザのデフォルト挙動に委ねる\n if (!this._isInternalTarget(this._path)) return;\n e.preventDefault();\n await this.router.navigate(this._path);\n this._updateActiveState();\n };\n link.addEventListener('click', this._onClick);\n }\n this._updateActiveState();\n }\n\n disconnectedCallback() {\n getNavigation()?.removeEventListener('currententrychange', this._updateActiveState);\n window.removeEventListener('wcs:navigate', this._updateActiveState as EventListener);\n window.removeEventListener('popstate', this._updateActiveState as EventListener);\n const anchor = this._anchorElement;\n if (anchor) {\n if (this._onClick) {\n anchor.removeEventListener('click', this._onClick);\n this._onClick = undefined;\n }\n anchor.remove();\n this._anchorElement = null;\n }\n // anchor 配下のままだった子要素のみ取り除く(別の親に移動されていた場合に誤って strip しないため)\n for(const childNode of this._childNodeArray) {\n if (anchor && childNode.parentNode === anchor) {\n anchor.removeChild(childNode);\n }\n }\n // Router キャッシュをクリア。別の Router 配下に動的に移動された場合や\n // Router 自体が入れ替わった場合に古い参照を返さないようにする。\n this._router = null;\n }\n\n attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null) {\n if (name === 'to' && oldValue !== newValue) {\n this._path = newValue || '';\n if (this._anchorElement) {\n this._setAnchorHref(this._anchorElement, this._path);\n this._updateActiveState();\n }\n } else if (MIRRORED_ATTRIBUTES.includes(name)) {\n // 固定名のみ接続後も追従する。anchor 生成前(upgrade 前発火)は何もしない。\n const anchor = this._anchorElement;\n if (anchor) {\n if (newValue === null) {\n anchor.removeAttribute(name);\n } else {\n anchor.setAttribute(name, newValue);\n }\n }\n }\n }\n\n private _updateActiveState = () => {\n // クエリのみリンク(to=\"?k=v\")の href は現在 pathname に依存するため、\n // active 判定と同じリスナー経路でロケーション変更に追従させる(§4.1)。\n if (this._path.startsWith('?') && this._anchorElement) {\n this._setAnchorHref(this._anchorElement, this._path);\n }\n // active 判定は pathname のみの比較(クエリ非感応 — §1.1 欠陥 7 の修理)。\n const currentPath = this._normalizePathname(new URL(window.location.href).pathname);\n const { pathname } = splitUrlTarget(this._path);\n const linkPath = this._normalizePathname(\n this._isInternalTarget(this._path)\n ? (pathname === \"\"\n ? window.location.pathname\n : this._joinInternalPath(this.router.basename, pathname))\n : pathname\n );\n\n if (this._anchorElement) {\n if (currentPath === linkPath) {\n this._anchorElement.classList.add('active');\n // 修理・既定オン(docs/a11y-design.md §3-3): active class と同じ事実の ARIA 表現。\n // 鮮度保証は active class と同一(同じ分岐・同じ呼び出し経路)。\n this._anchorElement.setAttribute('aria-current', 'page');\n } else {\n this._anchorElement.classList.remove('active');\n this._anchorElement.removeAttribute('aria-current');\n }\n }\n };\n\n get anchorElement(): HTMLAnchorElement | null {\n return this._anchorElement;\n }\n}","import { raiseError } from \"../raiseError\";\nimport { config } from \"../config\";\nimport { warnUnboundMarkup } from \"../unboundMarkupWarning\";\nimport { bindSubtree } from \"../protocol/binder\";\n\n/**\n * グローバルHeadスタック\n * 最後に接続されたHeadが優先される\n */\nconst headStack: Head[] = [];\n\n/**\n * 初期の<head>内容を記憶(最初のHead接続時に保存)\n *\n * 設計仕様: `initialHeadCaptured` は最初の Head 接続時に一度だけ true になる。\n * SPA ライフタイム中の初期 head 状態は、最初の Head が接続された瞬間がベースラインで、\n * それ以降に追加された <head> 要素は「初期値」ではなく「現在の値」として扱う。\n * テストや SPA リセットで初期値を再キャプチャしたい場合は `_resetHeadStack()` を呼ぶ。\n */\nconst initialHeadValues: Map<string, Element | null> = new Map();\nlet initialHeadCaptured = false;\n\n/**\n * 要素ごとの `_getKey` 結果のキャッシュ。\n * 初期化時/キャプチャ時に算出し、以降の `_reapplyHead` ループで再計算しないようにする。\n * 要素の属性変更には追随しない(Head 内要素は初期化時に固定される前提)。\n */\nconst keyCache: WeakMap<Element, string> = new WeakMap();\n\nexport class Head extends HTMLElement {\n private _initialized: boolean = false;\n private _childElementArray: Element[] = [];\n\n constructor() {\n super();\n this.style.display = 'none';\n }\n\n private _initialize(): void {\n if (this._initialized) {\n return;\n }\n this._initialized = true;\n this._childElementArray = Array.from(this.children);\n for (const child of this._childElementArray) {\n this.removeChild(child);\n }\n }\n\n connectedCallback(): void {\n this._initialize();\n \n // 初回のみ初期状態を保存\n if (!initialHeadCaptured) {\n this._captureInitialHead();\n initialHeadCaptured = true;\n }\n \n // スタックに追加\n headStack.push(this);\n \n // headを再適用\n this._reapplyHead();\n }\n\n disconnectedCallback(): void {\n // スタックから削除\n const index = headStack.indexOf(this);\n if (index !== -1) {\n headStack.splice(index, 1);\n }\n \n // headを再適用(スタックが空なら初期状態に戻す)\n this._reapplyHead();\n }\n\n get childElementArray(): Element[] {\n if (!this._initialized) {\n raiseError('Head component is not initialized yet.');\n }\n return this._childElementArray;\n }\n\n /**\n * 要素の一意キーを生成(WeakMap でキャッシュ)\n */\n private _getKey(el: Element): string {\n const cached = keyCache.get(el);\n if (cached !== undefined) {\n return cached;\n }\n const key = this._computeKey(el);\n keyCache.set(el, key);\n return key;\n }\n\n /**\n * 要素の一意キーを計算(実体)\n */\n private _computeKey(el: Element): string {\n const tag = el.tagName.toLowerCase();\n\n if (tag === 'title') {\n return 'title';\n }\n\n if (tag === 'meta') {\n const name = el.getAttribute('name') || '';\n const property = el.getAttribute('property') || '';\n const httpEquiv = el.getAttribute('http-equiv') || '';\n const charset = el.hasAttribute('charset') ? 'charset' : '';\n const media = el.getAttribute('media') || '';\n return `meta:${name}:${property}:${httpEquiv}:${charset}:${media}`;\n }\n\n if (tag === 'link') {\n const rel = el.getAttribute('rel') || '';\n const href = el.getAttribute('href') || '';\n const media = el.getAttribute('media') || '';\n // hreflang もキーに含める。含めないと、代表ロケールと `x-default` を同じ\n // href で併記する `rel=\"alternate\"` の組が同一キーになり、片方が落ちる。\n // これは i18n の標準的な書き方(x-default は既定言語版を指す)なので、\n // 「同じ href の link は 1 本」という仮定はここで破れる。\n const hreflang = el.getAttribute('hreflang') || '';\n return `link:${rel}:${href}:${media}:${hreflang}`;\n }\n\n if (tag === 'base') {\n return 'base';\n }\n\n if (tag === 'script') {\n const src = el.getAttribute('src') || '';\n const id = el.getAttribute('id') || '';\n const type = el.getAttribute('type') || '';\n if (src || id) {\n return `script:${src}:${id}:${type}`;\n }\n // インライン script はおおまかな先頭で識別(同等性は完全一致でなく簡易判定)\n return `script::${type}:${el.outerHTML.slice(0, 100)}`;\n }\n\n if (tag === 'style') {\n const id = el.getAttribute('id') || '';\n const media = el.getAttribute('media') || '';\n if (id) {\n return `style:${id}:${media}`;\n }\n // インライン style はおおまかな先頭で識別(同等性は完全一致でなく簡易判定)\n return `style::${media}:${el.outerHTML.slice(0, 100)}`;\n }\n\n // その他要素はおおまかに識別(同等性は完全一致でなく簡易判定)\n return `${tag}:${el.outerHTML.slice(0, 100)}`;\n }\n\n /**\n * head 内の要素を key で引ける Map を構築する。\n * `_reapplyHead` のループ前に一度だけ呼び出し、O(N) lookup に置き換えるためのヘルパ。\n *\n * 設計仕様: 同一 key の要素が複数 `document.head` 内に存在する場合は **first-wins**\n * (DOM 順で最初の要素のみ採用)。これは `_captureInitialHead` および\n * `initialHeadValues` の挙動とも整合する。\n * 重複は基本的にユーザーの記述ミスだが、_getKey の粒度(href/name 等の主要属性のみ)に\n * よる「論理的重複」もあり得るため、サイレントに first-wins とする。\n * 厳密な重複検出が必要な場合は呼び出し側で行う。\n */\n private _buildHeadElementMap(): Map<string, Element> {\n const map = new Map<string, Element>();\n for (const el of Array.from(document.head.children)) {\n const key = this._getKey(el);\n if (!map.has(key)) {\n map.set(key, el);\n }\n }\n return map;\n }\n\n /**\n * 初期の<head>状態をキャプチャ\n * document.head内の全ての要素をスキャンして保存する\n */\n private _captureInitialHead(): void {\n const head = document.head;\n for (const child of Array.from(head.children)) {\n const key = this._getKey(child);\n if (!initialHeadValues.has(key)) {\n initialHeadValues.set(key, child.cloneNode(true) as Element);\n }\n }\n }\n\n /**\n * スタック全体からheadを再構築\n * 後のHeadが優先される(上書き)\n */\n private _reapplyHead(): void {\n // 全スタックのHeadが扱うキーを収集\n const allKeys = new Set<string>();\n for (const head of headStack) {\n for (const child of head._childElementArray) {\n allKeys.add(this._getKey(child));\n }\n }\n // 初期値にあるキーも追加\n for (const key of initialHeadValues.keys()) {\n allKeys.add(key);\n }\n\n // 現在のheadにある要素のキーも追加(管理下から外れたものを削除するため)\n // 同時に key -> Element の lookup map も構築する(O(N²) を避けるため)\n const headElementMap = this._buildHeadElementMap();\n for (const key of headElementMap.keys()) {\n allKeys.add(key);\n }\n\n // 各キーについて、最も優先度の高い値を決定\n for (const key of allKeys) {\n // スタックを逆順に見て、最初に見つかった値を使用\n let targetElement: Element | null = null;\n for (let i = headStack.length - 1; i >= 0; i--) {\n const head = headStack[i];\n for (const child of head._childElementArray) {\n if (this._getKey(child) === key) {\n targetElement = child.cloneNode(true) as Element;\n break;\n }\n }\n if (targetElement) break;\n }\n\n // スタックに該当がなければ初期値を使用\n if (!targetElement && initialHeadValues.has(key)) {\n const initial = initialHeadValues.get(key);\n // initialHeadValuesにはnullを保存しないため、has(key)がtrueならinitialは必ず存在しElementである\n targetElement = (initial as Element).cloneNode(true) as Element;\n }\n\n // headを更新\n const current = headElementMap.get(key) ?? null;\n if (targetElement) {\n if (current) {\n current.replaceWith(targetElement);\n } else {\n document.head.appendChild(targetElement);\n }\n // map を新しい要素に更新(後続の同 key 処理に備える)\n headElementMap.set(key, targetElement);\n // head へ入れたのは cloneNode なので、元ノードのバインドは引き継がれない。\n // `<title data-wcs=\"…\">` はページからタイトルを消すという、未翻訳より\n // 悪い形で失敗する。クローンを binder に渡して、そこで初めて束ねる。\n // 挿入後に呼ぶのは、`bind()` が初期値の適用まで同期で行うため。\n if (!bindSubtree(targetElement)) {\n warnUnboundMarkup(\n targetElement,\n `<${targetElement.tagName.toLowerCase()}> inside <${config.tagNames.head}>`,\n `<${config.tagNames.head}> reflects its children into <head> with cloneNode, ` +\n `so the clone is not the node that was bound. Load @wcstack/state on this ` +\n `page, or write the value statically here.`,\n );\n }\n } else {\n // 初期値もスタックにもない場合は削除\n current?.remove();\n headElementMap.delete(key);\n }\n }\n }\n}\n\n// テスト用にスタックをリセットする関数\nexport function _resetHeadStack(): void {\n headStack.length = 0;\n initialHeadValues.clear();\n initialHeadCaptured = false;\n}\n","import { Route } from './components/Route';\nimport { Layout } from './components/Layout';\nimport { Outlet } from './components/Outlet';\nimport { Router } from './components/Router';\nimport { LayoutOutlet } from './components/LayoutOutlet';\nimport { Link } from './components/Link';\nimport { Head } from './components/Head';\nimport { config } from './config';\n\n/**\n * Register this package's tags. Pass a scoped `CustomElementRegistry` to define\n * them for a single shadow tree -- scoped registries do not inherit the global\n * one, so a tree using one needs its own definitions.\n */\nexport function registerComponents(registry: CustomElementRegistry = customElements) {\n // Register custom element\n if (!registry.get(config.tagNames.layout)) {\n registry.define(config.tagNames.layout, Layout);\n }\n if (!registry.get(config.tagNames.layoutOutlet)) {\n registry.define(config.tagNames.layoutOutlet, LayoutOutlet);\n }\n if (!registry.get(config.tagNames.outlet)) {\n registry.define(config.tagNames.outlet, Outlet);\n }\n if (!registry.get(config.tagNames.route)) {\n registry.define(config.tagNames.route, Route);\n }\n if (!registry.get(config.tagNames.router)) {\n registry.define(config.tagNames.router, Router);\n }\n if (!registry.get(config.tagNames.link)) {\n registry.define(config.tagNames.link, Link);\n }\n if (!registry.get(config.tagNames.head)) {\n registry.define(config.tagNames.head, Head);\n }\n}","import { IWritableConfig } from \"./types\";\nimport { setConfig } from \"./config\";\nimport { registerComponents } from \"./registerComponents\";\n\n/**\n * Initialize the router with optional configuration.\n * This is the main entry point for setting up the router.\n * @param config - Optional partial configuration to override defaults\n */\nexport function bootstrapRouter(config?: Partial<IWritableConfig>, registry?: CustomElementRegistry): void {\n if (config) {\n setConfig(config);\n }\n registerComponents(registry);\n}\n","import pkg from \"../package.json\" with { type: \"json\" };\nexport const VERSION = pkg.version;\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../src/config.ts","../../src/getUUID.ts","../../src/raiseError.ts","../../src/GuardCancel.ts","../../src/builtinParamTypes.ts","../../src/core/RouteCore.ts","../../src/components/Route.ts","../../src/components/Layout.ts","../../src/components/Outlet.ts","../../src/getCustomTagName.ts","../../src/assignParams.ts","../../src/components/LayoutOutlet.ts","../../src/loadGuardHandler.ts","../../src/parse.ts","../../src/a11yPolicies.ts","../../src/testPath.ts","../../src/matchRoutes.ts","../../src/normalizePathname.ts","../../src/hideRoute.ts","../../src/showRoute.ts","../../src/protocol/transitionRunner.ts","../../src/protocol/binder.ts","../../src/unboundMarkupWarning.ts","../../src/showRouteContent.ts","../../src/applyRoute.ts","../../src/Navigation.ts","../../src/searchParams.ts","../../src/splitUrlTarget.ts","../../src/protocol/upgradeProperties.ts","../../src/inSsr.ts","../../src/ssrMarkers.ts","../../src/components/Router.ts","../../src/components/Link.ts","../../src/components/Head.ts","../../src/registerComponents.ts","../../src/bootstrapRouter.ts","../../src/version.ts"],"sourcesContent":["import { IConfig, IWritableConfig } from \"./types\";\n\ninterface IInternalConfig {\n tagNames: {\n route: string;\n router: string;\n outlet: string;\n layout: string;\n layoutOutlet: string;\n link: string;\n head: string;\n guardHandler: string;\n };\n enableShadowRoot: boolean;\n basenameFileExtensions: string[];\n}\n\nconst _config: IInternalConfig = {\n tagNames: {\n route: \"wcs-route\",\n router: \"wcs-router\",\n outlet: \"wcs-outlet\",\n layout: \"wcs-layout\",\n layoutOutlet: \"wcs-layout-outlet\",\n link: \"wcs-link\",\n head: \"wcs-head\",\n guardHandler: \"wcs-guard-handler\"\n },\n enableShadowRoot: false,\n basenameFileExtensions: [\".html\"]\n};\n\nfunction deepFreeze<T>(obj: T): T {\n if (obj === null || typeof obj !== \"object\") return obj;\n Object.freeze(obj);\n for (const key of Object.keys(obj)) {\n deepFreeze((obj as Record<string, unknown>)[key]);\n }\n return obj;\n}\n\nfunction deepClone<T>(obj: T): T {\n if (obj === null || typeof obj !== \"object\") return obj;\n const clone: Record<string, unknown> = {};\n for (const key of Object.keys(obj)) {\n clone[key] = deepClone((obj as Record<string, unknown>)[key]);\n }\n return clone as T;\n}\n\nlet frozenConfig: IConfig | null = null;\n\n// 後方互換のため config もエクスポート(読み取り専用として使用)\nexport const config: IConfig = _config as IConfig;\n\nexport function getConfig(): IConfig {\n if (!frozenConfig) {\n frozenConfig = deepFreeze(deepClone(_config));\n }\n return frozenConfig;\n}\n\nexport function setConfig(partialConfig: IWritableConfig): void {\n if (partialConfig.tagNames) {\n Object.assign(_config.tagNames, partialConfig.tagNames);\n }\n if (typeof partialConfig.enableShadowRoot === \"boolean\") {\n _config.enableShadowRoot = partialConfig.enableShadowRoot;\n }\n if (Array.isArray(partialConfig.basenameFileExtensions)) {\n _config.basenameFileExtensions = partialConfig.basenameFileExtensions;\n }\n frozenConfig = null;\n}\n","\nexport function getUUID(): string {\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n // Simple UUID generator\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n const r = (Math.random() * 16) | 0,\n v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}","\nexport function raiseError(message: string, options?: { cause?: unknown }): never {\n if (options && 'cause' in options) {\n throw new Error(`[@wcstack/router] ${message}`, { cause: options.cause });\n }\n throw new Error(`[@wcstack/router] ${message}`);\n}","import { IGuardCancel } from \"./types\";\n\nexport class GuardCancel extends Error implements IGuardCancel {\n fallbackPath: string;\n\n constructor(message: string, fallbackPath: string) {\n super(message);\n this.fallbackPath = fallbackPath;\n }\n}","import { BuiltinParamTypes, IParamTypeInfo } from \"./types\";\n\nexport const builtinParamTypes = {\n \"int\": {\n typeName: \"int\",\n pattern: /^-?\\d+$/,\n parse(value: string): number | undefined {\n if (!this.pattern.test(value)) {\n return undefined;\n }\n return parseInt(value, 10);\n }\n },\n\n \"float\": {\n typeName: \"float\",\n pattern: /^-?\\d+(?:\\.\\d+)?$/,\n parse(value: string): number | undefined {\n if (!this.pattern.test(value)) {\n return undefined;\n }\n return parseFloat(value);\n }\n },\n\n \"bool\": {\n typeName: \"bool\",\n pattern: /^(true|false|0|1)$/,\n parse(value: string): boolean | undefined {\n if (!this.pattern.test(value)) {\n return undefined;\n }\n return value === \"true\" || value === \"1\";\n }\n },\n\n \"uuid\": {\n typeName: \"uuid\",\n pattern: /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,\n parse(value: string): string | undefined {\n if (!this.pattern.test(value)) {\n return undefined;\n }\n return value;\n }\n },\n\n \"slug\": {\n typeName: \"slug\",\n pattern: /^[a-z0-9]+(?:-[a-z0-9]+)*$/,\n parse(value: string): string | undefined {\n if (!this.pattern.test(value)) {\n return undefined;\n }\n return value;\n }\n },\n\n \"isoDate\": {\n typeName: \"isoDate\",\n pattern: /^\\d{4}-\\d{2}-\\d{2}$/,\n parse(value: string): Date | undefined {\n if (!this.pattern.test(value)) {\n return undefined;\n }\n const [year, month, day] = value.split(\"-\").map(Number);\n const date = new Date(year, month - 1, day);\n // 元の値と一致するか確認(補正されていないか)\n if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {\n return undefined;\n }\n return date;\n }\n },\n\n \"any\": {\n typeName: \"any\",\n pattern: /^.+$/,\n parse(value: string): string | undefined {\n if (!this.pattern.test(value)) {\n return undefined;\n }\n return value;\n }\n },\n} satisfies Record<BuiltinParamTypes, IParamTypeInfo<unknown>>;\n","import { GuardCancel } from \"../GuardCancel.js\";\nimport { builtinParamTypes } from \"../builtinParamTypes.js\";\nimport { raiseError } from \"../raiseError.js\";\nimport { config } from \"../config.js\";\nimport { ISegmentInfo, SegmentType, IRouteMatchResult, GuardHandler } from \"../components/types.js\";\nimport { BuiltinParamTypes } from \"../types.js\";\n\nconst weights: Record<SegmentType, number> = {\n 'static': 2,\n 'param': 1,\n 'catch-all': 0\n};\n\nexport interface RouteParseOptions {\n isIndex?: boolean;\n isFallback?: boolean;\n hasGuard?: boolean;\n guardFallback?: string | null;\n name?: string;\n}\n\n/**\n * NOTE: RouteCore / Route は `static wcBindable` を**宣言しない**\n * (docs/router-state-contract-design.md §5.1 / D2)。\n *\n * `<wcs-route>` は parse 時に clone された detached コントローラであり、live DOM に\n * 入るのは placeholder コメントとスタンプされた子ノードだけ。data-wcs は live DOM\n * 上の属性走査で結線する仕組みなので、宣言しても構造的に到達不能な「果たせない\n * 約束」になる。params / typedParams / routeName の観測面は live DOM に居る\n * `<wcs-router>` に集約した(Router.wcBindable)。\n *\n * `wcs-route:params-changed` / `wcs-route:active-changed` の dispatch は存置する —\n * RouteCore は EventTarget であり、Core 直接消費(signals の正式推奨形)と\n * ユニットテストの観測面として生きている。\n */\nexport class RouteCore extends EventTarget {\n private _target: EventTarget;\n private _parentCore: RouteCore | null = null;\n private _path: string = '';\n private _name: string = '';\n private _isFallbackRoute: boolean = false;\n private _segmentInfos: ISegmentInfo[] = [];\n private _absoluteSegmentInfos: ISegmentInfo[] | undefined;\n private _paramNames: string[] | undefined;\n private _absoluteParamNames: string[] | undefined;\n private _weight: number | undefined;\n private _absoluteWeight: number | undefined;\n private _segmentCount: number | undefined;\n private _params: Record<string, string> = {};\n private _typedParams: Record<string, any> = {};\n private _active: boolean = false;\n\n // Guard\n private _hasGuard: boolean = false;\n private _guardHandler: GuardHandler | null = null;\n private _guardFallbackPath: string = '';\n private _waitForSetGuardHandler: Promise<void> | null = null;\n private _resolveSetGuardHandler: (() => void) | null = null;\n private _guardHandlerLoadFailed: boolean = false;\n\n constructor(target?: EventTarget) {\n super();\n this._target = target ?? this;\n }\n\n get parentCore(): RouteCore | null {\n return this._parentCore;\n }\n\n set parentCore(value: RouteCore | null) {\n this._parentCore = value;\n }\n\n get path(): string {\n return this._path;\n }\n\n get name(): string {\n return this._name;\n }\n\n get isFallbackRoute(): boolean {\n return this._isFallbackRoute;\n }\n\n get isRelative(): boolean {\n return !this._path.startsWith('/');\n }\n\n get segmentInfos(): ISegmentInfo[] {\n return this._segmentInfos;\n }\n\n private _checkParentCore<T>(\n hasParentCallback: (parentCore: RouteCore) => T,\n noParentCallback: () => T\n ): T {\n if (!this._isFallbackRoute) {\n if (this.isRelative && !this._parentCore) {\n raiseError(`${config.tagNames.route} is relative but has no parent route.`);\n }\n if (!this.isRelative && this._parentCore) {\n raiseError(`${config.tagNames.route} is absolute but has a parent route.`);\n }\n }\n if (this.isRelative && this._parentCore) {\n return hasParentCallback(this._parentCore);\n } else {\n return noParentCallback();\n }\n }\n\n get absolutePath(): string {\n return this._checkParentCore<string>((parentCore) => {\n const parentPath = parentCore.absolutePath;\n return parentPath.endsWith('/')\n ? parentPath + this._path\n : parentPath + '/' + this._path;\n }, () => {\n return this._path;\n });\n }\n\n get absoluteSegmentInfos(): ISegmentInfo[] {\n if (typeof this._absoluteSegmentInfos === 'undefined') {\n this._absoluteSegmentInfos = this._checkParentCore<ISegmentInfo[]>((parentCore) => {\n return [\n ...parentCore.absoluteSegmentInfos,\n ...this._segmentInfos\n ];\n }, () => {\n return [...this._segmentInfos];\n });\n }\n return this._absoluteSegmentInfos;\n }\n\n get params(): Record<string, string> {\n return this._params;\n }\n\n get typedParams(): Record<string, any> {\n return this._typedParams;\n }\n\n get active(): boolean {\n return this._active;\n }\n\n get paramNames(): string[] {\n if (typeof this._paramNames === 'undefined') {\n const names: string[] = [];\n for (const info of this._segmentInfos) {\n if (info.paramName) {\n names.push(info.paramName);\n }\n }\n this._paramNames = names;\n }\n return this._paramNames;\n }\n\n get absoluteParamNames(): string[] {\n if (typeof this._absoluteParamNames === 'undefined') {\n this._absoluteParamNames = this._checkParentCore<string[]>((parentCore) => {\n return [\n ...parentCore.absoluteParamNames,\n ...this.paramNames\n ];\n }, () => {\n return [...this.paramNames];\n });\n }\n return this._absoluteParamNames;\n }\n\n get weight(): number {\n if (typeof this._weight === 'undefined') {\n let weight = 0;\n for (const info of this._segmentInfos) {\n weight += weights[info.type];\n }\n this._weight = weight;\n }\n return this._weight;\n }\n\n get absoluteWeight(): number {\n if (typeof this._absoluteWeight === 'undefined') {\n this._absoluteWeight = this._checkParentCore<number>((parentCore) => {\n return parentCore.absoluteWeight + this.weight;\n }, () => {\n return this.weight;\n });\n }\n return this._absoluteWeight;\n }\n\n get segmentCount(): number {\n if (typeof this._segmentCount === 'undefined') {\n let count = 0;\n for (const info of this._segmentInfos) {\n if (info.type !== 'catch-all') {\n count++;\n }\n }\n this._segmentCount = this._path === \"\" ? 0 : count;\n }\n return this._segmentCount;\n }\n\n get absoluteSegmentCount(): number {\n return this._checkParentCore<number>((parentCore) => {\n return parentCore.absoluteSegmentCount + this.segmentCount;\n }, () => {\n return this.segmentCount;\n });\n }\n\n parsePath(path: string, options: RouteParseOptions = {}): void {\n // 連続呼び出し時のセグメント累積を防ぐためリセット\n this._segmentInfos = [];\n this._absoluteSegmentInfos = undefined;\n this._paramNames = undefined;\n this._absoluteParamNames = undefined;\n this._weight = undefined;\n this._absoluteWeight = undefined;\n this._segmentCount = undefined;\n this._path = path;\n this._name = options.name || '';\n this._isFallbackRoute = options.isFallback || false;\n\n if (options.isIndex) {\n this._segmentInfos.push({\n type: 'static',\n segmentText: '',\n paramName: null,\n pattern: /^$/,\n isIndex: true\n });\n }\n\n const segments = path.split('/');\n for (let idx = 0; idx < segments.length; idx++) {\n const segment = segments[idx];\n // 末尾の空セグメントはスキップ(/parent/ のような場合)\n if (segment === '' && idx === segments.length - 1 && idx > 0) {\n continue;\n }\n if (segment === '*') {\n this._segmentInfos.push({\n type: 'catch-all',\n segmentText: segment,\n paramName: '*',\n pattern: new RegExp('^(.*)$')\n });\n // Catch-all: matches remaining path segments\n break; // Ignore subsequent segments\n } else if (segment.startsWith(':')) {\n const matchType = segment.match(/^:([^()]+)(\\(([^)]+)\\))?$/);\n let paramName: string;\n let typeName: BuiltinParamTypes = 'any';\n if (matchType) {\n paramName = matchType[1];\n if (matchType[3] && Object.keys(builtinParamTypes).includes(matchType[3])) {\n typeName = matchType[3] as BuiltinParamTypes;\n }\n } else {\n paramName = segment.substring(1);\n }\n\n this._segmentInfos.push({\n type: 'param',\n segmentText: segment,\n paramName: paramName,\n pattern: new RegExp('^([^\\\\/]+)$'),\n paramType: typeName\n });\n } else if (segment !== '' || !options.isIndex) {\n // 空セグメントはindex以外の場合のみ追加(絶対パスの先頭 '' など)\n this._segmentInfos.push({\n type: 'static',\n segmentText: segment,\n paramName: null,\n pattern: new RegExp(`^${segment}$`)\n });\n }\n }\n\n this._hasGuard = options.hasGuard || false;\n if (this._hasGuard) {\n this._guardFallbackPath = options.guardFallback || '/';\n this._waitForSetGuardHandler = new Promise((resolve) => {\n this._resolveSetGuardHandler = resolve;\n });\n }\n }\n\n setParams(params: Record<string, string>, typedParams: Record<string, any>): void {\n const wasActive = this._active;\n this._params = params;\n this._typedParams = typedParams;\n this._active = true;\n this._target.dispatchEvent(new CustomEvent(\"wcs-route:params-changed\", {\n detail: { params, typedParams },\n bubbles: true,\n }));\n if (!wasActive) {\n this._target.dispatchEvent(new CustomEvent(\"wcs-route:active-changed\", {\n detail: true,\n bubbles: true,\n }));\n }\n }\n\n clearParams(): void {\n const wasActive = this._active;\n this._params = {};\n this._typedParams = {};\n this._active = false;\n if (wasActive) {\n this._target.dispatchEvent(new CustomEvent(\"wcs-route:active-changed\", {\n detail: false,\n bubbles: true,\n }));\n }\n }\n\n shouldChange(newParams: Record<string, string>): boolean {\n for (const key of this.paramNames) {\n if (this._params[key] !== newParams[key]) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * guard 属性の有無(parsePath の options.hasGuard)。SSR の guard バリア\n * — guard 付きルートはサーバーで描かない(docs/ssr-router-design.md §2-4)—\n * がハンドラのロードを待たずに判定するために使う。\n */\n get hasGuard(): boolean {\n return this._hasGuard;\n }\n\n get guardHandler(): GuardHandler {\n if (!this._guardHandler) {\n raiseError(`${config.tagNames.route} has no guardHandler.`);\n }\n return this._guardHandler!;\n }\n\n set guardHandler(value: GuardHandler) {\n this._guardHandler = value;\n this._resolveSetGuardHandler?.();\n }\n\n /**\n * Guardハンドラのロードに失敗したことを通知し、guardCheck の待ちを解除する。\n * 解除後の guardCheck は guardHandler が未設定のため fallback パスへリダイレクトする。\n */\n notifyGuardHandlerLoadFailed(): void {\n this._guardHandlerLoadFailed = true;\n this._resolveSetGuardHandler?.();\n }\n\n async guardCheck(matchResult: IRouteMatchResult): Promise<void> {\n if (this._hasGuard && this._waitForSetGuardHandler) {\n await this._waitForSetGuardHandler;\n }\n if (this._guardHandler) {\n const toPath = matchResult.path;\n const fromPath = matchResult.lastPath;\n const allowed = await this._guardHandler(toPath, fromPath);\n if (!allowed) {\n throw new GuardCancel('Navigation cancelled by guard.', this._guardFallbackPath);\n }\n } else if (this._hasGuard && this._guardHandlerLoadFailed) {\n // guardHandler のロードに失敗した場合は fallback パスへ\n throw new GuardCancel('Navigation cancelled: guard handler failed to load.', this._guardFallbackPath);\n }\n }\n}\n","import { getUUID } from \"../getUUID.js\";\nimport { config } from \"../config.js\";\nimport { raiseError } from \"../raiseError.js\";\nimport { IRouteMatchResult, IRoute, IRouter, GuardHandler, ISegmentInfo } from \"./types.js\";\nimport { RouteCore } from \"../core/RouteCore.js\";\n\n// NOTE: `static wcBindable` は宣言しない — RouteCore.ts 冒頭の NOTE を参照\n// (docs/router-state-contract-design.md §5.1 / D2)。\nexport class Route extends HTMLElement implements IRoute {\n private _core: RouteCore;\n private _routeParentNode: IRoute | null = null;\n private _routeChildNodes: IRoute[] = [];\n private _routerNode: IRouter | null = null;\n private _uuid: string = getUUID();\n private _placeHolder: Comment = document.createComment(`@@route:${this._uuid}`);\n private _childNodeArray: Node[] | undefined;\n private _childIndex: number = 0;\n private _initialized: boolean = false;\n private _routes: IRoute[] | undefined;\n\n constructor() {\n super();\n this._core = new RouteCore(this);\n }\n\n // Shell-only properties\n\n get routeParentNode(): IRoute | null {\n return this._routeParentNode;\n }\n\n get routeChildNodes(): IRoute[] {\n return this._routeChildNodes;\n }\n\n get routerNode(): IRouter {\n if (!this._routerNode) {\n raiseError(`${config.tagNames.route} has no routerNode.`);\n }\n return this._routerNode;\n }\n\n get uuid(): string {\n return this._uuid;\n }\n\n get placeHolder(): Comment {\n return this._placeHolder;\n }\n\n get childNodeArray(): Node[] {\n if (typeof this._childNodeArray === 'undefined') {\n this._childNodeArray = Array.from(this.childNodes);\n }\n return this._childNodeArray;\n }\n\n /**\n * SSR ハイドレーションの採用(docs/ssr-router-design.md §4)。\n * サーバー描画済みの DOM ノード列をこのルートの内容として引き取る。\n * 以後の hideRoute / showRoute は採用ノードに対して従来どおり動く。\n * template 由来の fresh クローン(自身の childNodes)は不要になるため破棄する。\n */\n adoptChildNodes(nodes: Node[]): void {\n this._childNodeArray = [...nodes];\n while (this.firstChild) {\n this.removeChild(this.firstChild);\n }\n }\n\n get routes(): IRoute[] {\n // matchRoutes / testPath のホットパスで再帰的に呼ばれるため遅延キャッシュする。\n // initialize 後は routeParentNode が固定されるためキャッシュしても安全。\n if (typeof this._routes === 'undefined') {\n this._routes = this.routeParentNode\n ? this.routeParentNode.routes.concat(this)\n : [this];\n }\n return this._routes;\n }\n\n get childIndex(): number {\n return this._childIndex;\n }\n\n // Core delegates\n\n get path(): string {\n return this._core.path;\n }\n\n get name(): string {\n return this._core.name;\n }\n\n get isRelative(): boolean {\n return this._core.isRelative;\n }\n\n get absolutePath(): string {\n return this._core.absolutePath;\n }\n\n get segmentInfos(): ISegmentInfo[] {\n return this._core.segmentInfos;\n }\n\n get absoluteSegmentInfos(): ISegmentInfo[] {\n return this._core.absoluteSegmentInfos;\n }\n\n get params(): Record<string, string> {\n return this._core.params;\n }\n\n get typedParams(): Record<string, any> {\n return this._core.typedParams;\n }\n\n get paramNames(): string[] {\n return this._core.paramNames;\n }\n\n get absoluteParamNames(): string[] {\n return this._core.absoluteParamNames;\n }\n\n get weight(): number {\n return this._core.weight;\n }\n\n get absoluteWeight(): number {\n return this._core.absoluteWeight;\n }\n\n get segmentCount(): number {\n return this._core.segmentCount;\n }\n\n get absoluteSegmentCount(): number {\n return this._core.absoluteSegmentCount;\n }\n\n get fullpath(): string {\n return this.absolutePath;\n }\n\n get hasGuard(): boolean {\n return this._core.hasGuard;\n }\n\n get guardHandler(): GuardHandler {\n return this._core.guardHandler;\n }\n\n set guardHandler(value: GuardHandler) {\n this._core.guardHandler = value;\n }\n\n setParams(params: Record<string, string>, typedParams: Record<string, any>): void {\n this._core.setParams(params, typedParams);\n }\n\n clearParams(): void {\n this._core.clearParams();\n }\n\n shouldChange(newParams: Record<string, string>): boolean {\n return this._core.shouldChange(newParams);\n }\n\n async guardCheck(matchResult: IRouteMatchResult): Promise<void> {\n return this._core.guardCheck(matchResult);\n }\n\n notifyGuardHandlerLoadFailed(): void {\n this._core.notifyGuardHandlerLoadFailed();\n }\n\n /**\n * Shell(Route)の routeParentNode を辿って祖先関係を判定する。\n *\n * 責務の分担:\n * - Route(このクラス)は DOM ツリー上の親子関係(routeParentNode)を管理する。\n * - RouteCore はパスやパラメータといった論理的な親子関係(parentCore)を管理する。\n * DOM ツリーは Shell 層、論理ツリーは Core 層という分離のため、両者を独立に保持する。\n */\n testAncestorNode(ancestorNode: IRoute): boolean {\n let currentNode: IRoute | null = this._routeParentNode;\n while (currentNode) {\n if (currentNode === ancestorNode) {\n return true;\n }\n currentNode = currentNode.routeParentNode;\n }\n return false;\n }\n\n initialize(routerNode: IRouter, routeParentNode: IRoute | null): void {\n if (this._initialized) {\n return;\n }\n this._initialized = true;\n\n // 属性からパス情報を読み取り\n let path: string;\n let isIndex = false;\n let isFallback = false;\n\n if (this.hasAttribute('path')) {\n path = this.getAttribute('path') || '';\n } else if (this.hasAttribute('index')) {\n path = '';\n isIndex = true;\n } else if (this.hasAttribute('fallback')) {\n path = '';\n isFallback = true;\n } else {\n raiseError(`${config.tagNames.route} should have a \"path\" or \"index\" attribute.`);\n }\n\n // ルートツリーの構築\n this._routerNode = routerNode;\n this._routeParentNode = routeParentNode;\n const routeChildContainer = routeParentNode || routerNode;\n routeChildContainer.routeChildNodes.push(this);\n this._childIndex = routeChildContainer.routeChildNodes.length - 1;\n\n // Fallback検証\n if (isFallback) {\n if (routeParentNode) {\n raiseError(`${config.tagNames.route} with fallback attribute must be a direct child of ${config.tagNames.router}.`);\n }\n if (routerNode.fallbackRoute) {\n raiseError(`${config.tagNames.router} can have only one fallback route.`);\n }\n routerNode.fallbackRoute = this;\n }\n\n // 親CoreをCoreに設定\n if (routeParentNode) {\n this._core.parentCore = (routeParentNode as Route)._core;\n }\n\n // Coreでパス解析\n this._core.parsePath(path!, {\n isIndex,\n isFallback,\n hasGuard: this.hasAttribute('guard'),\n guardFallback: this.getAttribute('guard'),\n name: this.getAttribute('name') || '',\n });\n\n this.setAttribute('fullpath', this.absolutePath);\n }\n}\n","import { getUUID } from \"../getUUID.js\";\nimport { config } from \"../config.js\";\nimport { raiseError } from \"../raiseError.js\";\nimport { ILayout } from \"./types.js\";\n\nconst cache = new Map<string, string>();\n\n/**\n * Layout テンプレートキャッシュをクリアする。\n * テストや長時間 SPA でメモリリークを避けるため、リセットしたい場合に利用する。\n */\nexport function _clearLayoutCache(): void {\n cache.clear();\n}\n\nexport class Layout extends HTMLElement implements ILayout {\n private _uuid: string = getUUID();\n constructor() {\n super();\n }\n\n private async _loadTemplateFromSource(source: string): Promise<string> {\n try {\n const response = await fetch(source);\n if (!response.ok) {\n raiseError(`${config.tagNames.layout} failed to fetch layout from source: ${source}, status: ${response.status}`);\n }\n const templateContent = await response.text();\n cache.set(source, templateContent);\n return templateContent;\n } catch (error) {\n // 元の例外を cause として伝播し、スタックトレースを保持する\n raiseError(\n `${config.tagNames.layout} failed to load layout from source: ${source}, error: ${error}`,\n { cause: error }\n );\n }\n }\n\n private _loadTemplateFromDocument(id: string): string | null {\n const element = document.getElementById(`${id}`) as HTMLElement | null;\n if (element) {\n if (element instanceof HTMLTemplateElement) {\n return element.innerHTML;\n }\n }\n return null;\n }\n\n async loadTemplate(): Promise<HTMLTemplateElement> {\n const source = this.getAttribute('src');\n const layoutId = this.getAttribute('layout');\n if (source && layoutId) {\n console.warn(`${config.tagNames.layout} have both \"src\" and \"layout\" attributes.`);\n }\n const template = document.createElement('template');\n if (source) {\n if (cache.has(source)) {\n template.innerHTML = cache.get(source) || '';\n } else {\n // _loadTemplateFromSource は内部で cache.set を実行する\n template.innerHTML = await this._loadTemplateFromSource(source) || '';\n }\n } else if (layoutId) {\n const templateContent = this._loadTemplateFromDocument(layoutId);\n if (templateContent) {\n template.innerHTML = templateContent;\n } else {\n console.warn(`${config.tagNames.layout} could not find template with id \"${layoutId}\".`);\n }\n }\n return template;\n }\n\n get uuid(): string {\n return this._uuid;\n }\n\n get enableShadowRoot(): boolean {\n if (this.hasAttribute('enable-shadow-root')) {\n return true;\n } else if (this.hasAttribute('disable-shadow-root')) {\n return false;\n }\n return config.enableShadowRoot;\n }\n\n get name(): string {\n // Layout 要素が DOM に挿入されないケース(parseで置換)でも name を取れるようにする\n return this.getAttribute('name') || '';\n }\n}\n","import { config } from \"../config.js\";\nimport { raiseError } from \"../raiseError.js\";\nimport { IOutlet, IRoute, IRouter } from \"./types.js\";\n\nexport class Outlet extends HTMLElement implements IOutlet {\n private _routesNode: IRouter | null = null;\n private _lastRoutes: IRoute[] = [];\n private _initialized: boolean = false;\n constructor() {\n super();\n }\n\n get routesNode(): IRouter {\n if (!this._routesNode) {\n raiseError(`${config.tagNames.outlet} has no routesNode.`);\n }\n return this._routesNode;\n }\n set routesNode(value: IRouter) {\n this._routesNode = value;\n }\n\n get rootNode(): HTMLElement | ShadowRoot {\n if (this.shadowRoot) {\n return this.shadowRoot;\n }\n return this;\n }\n\n get lastRoutes(): IRoute[] {\n return this._lastRoutes;\n }\n set lastRoutes(value: IRoute[]) {\n this._lastRoutes = [ ...value ];\n }\n\n /**\n * shadowRoot 有効化判定。Layout と挙動を揃え、属性で個別オーバーライド可能にする。\n * - `enable-shadow-root` 属性あり → true\n * - `disable-shadow-root` 属性あり → false\n * - いずれもなし → config.enableShadowRoot を尊重\n */\n private _resolveEnableShadowRoot(): boolean {\n if (this.hasAttribute('enable-shadow-root')) {\n return true;\n }\n if (this.hasAttribute('disable-shadow-root')) {\n return false;\n }\n return config.enableShadowRoot;\n }\n\n private _initialize() {\n if (this._resolveEnableShadowRoot()) {\n this.attachShadow({ mode: 'open' });\n }\n this._initialized = true;\n }\n\n connectedCallback() {\n if (!this._initialized) {\n this._initialize();\n }\n }\n\n /**\n * Outlet が disconnect された際の状態クリーンアップ。\n *\n * `_lastRoutes` をクリアすることで、再接続後の applyRoute における diff\n * (既に show 済みのルートは show を skip する判定)が、切断中に外部から\n * 操作された DOM と整合しなくなる事故を防ぐ。\n *\n * 仕様前提として Outlet は Router と一体運用される(Router が `_getOutlet()` で\n * 自身の兄弟に Outlet を配置・参照する)。それでも単独で再接続される\n * エッジケースに備える防衛的措置として `_lastRoutes` のみクリアする。\n * `_initialized` と shadowRoot は維持し、再 attachShadow による\n * InvalidStateError を回避する。\n */\n disconnectedCallback() {\n this._lastRoutes = [];\n }\n}\n\nexport function createOutlet(): Outlet {\n return document.createElement(config.tagNames.outlet) as Outlet;\n}\n","\nexport function getCustomTagName(element: Element): string | null {\n const tagName = element.tagName.toLowerCase();\n if (tagName.includes(\"-\")) {\n return tagName;\n }\n const isAttr = element.getAttribute(\"is\");\n if (isAttr && isAttr.includes(\"-\")) {\n return isAttr;\n }\n return null;\n}","import { BindType } from \"./components/types\";\nimport { getCustomTagName } from \"./getCustomTagName\";\nimport { raiseError } from \"./raiseError\";\n\nconst bindTypeSet: Set<BindType> = new Set([ \"props\", \"states\", \"attr\", \"\" ]);\n\nfunction _assignParams(element: Element, params: Record<string, any>, bindType: BindType) {\n for(const [key, value] of Object.entries(params)) {\n switch(bindType) {\n case \"props\":\n (element as any).props = {\n ...(element as any).props,\n [key]: value\n };\n break;\n case \"states\":\n (element as any).states = {\n ...(element as any).states,\n [key]: value\n };\n break;\n case \"attr\":\n // null/undefined は属性削除として扱う(文字列 \"null\"/\"undefined\" になる事故を防ぐ)。\n // boolean/number は setAttribute の標準挙動に従って文字列化される。\n if (value === null || value === undefined) {\n element.removeAttribute(key);\n } else {\n element.setAttribute(key, String(value));\n }\n break;\n case \"\":\n (element as any)[key] = value;\n break;\n }\n }\n}\n\nexport function assignParams(element: Element, params: Record<string, any>) {\n if (!element.hasAttribute('data-bind')) {\n raiseError(`${element.tagName} has no 'data-bind' attribute.`);\n }\n const bindTypeText = element.getAttribute('data-bind') || '';\n if (!bindTypeSet.has(bindTypeText as BindType)) {\n raiseError(`${element.tagName} has invalid 'data-bind' attribute: ${bindTypeText}`);\n }\n const bindType = bindTypeText as BindType;\n const customTagName = getCustomTagName(element);\n if (customTagName && customElements.get(customTagName) === undefined) {\n // 注意: customElements.whenDefined(tag) は当該タグが define されるまで pending のままになる。\n // element が削除されてもこの Promise は GC されず、closure に保持される element/params は\n // 解放されない(弱い参照を持つ手段がないため)。define されないまま要素のみが大量に作られる\n // ようなケースではリークになりうるが、通常の Web Components 利用では autoloader が\n // 一括 define するため実用上問題にならない。明示的にキャンセルしたい場合は将来 AbortSignal を\n // サポートすることを検討する。\n customElements.whenDefined(customTagName).then(() => {\n if (element.isConnected) {\n // 要素が削除されていない場合のみ割り当てを行う\n _assignParams(element, params, bindType);\n }\n }).catch(() => {\n raiseError(`Failed to define custom element: ${customTagName}`);\n });\n } else {\n _assignParams(element, params, bindType);\n }\n}","import { assignParams } from \"../assignParams.js\";\nimport { config } from \"../config.js\";\nimport { raiseError } from \"../raiseError.js\";\nimport { ILayout, ILayoutOutlet } from \"./types.js\";\n\nexport class LayoutOutlet extends HTMLElement implements ILayoutOutlet {\n private _layout: (ILayout & Pick<Element,'childNodes'>) | null = null;\n private _initialized: boolean = false;\n private _initializing: boolean = false;\n private _disconnectedDuringInit: boolean = false;\n private _layoutChildNodes: Node[] = [];\n constructor() {\n super();\n }\n\n get layout(): ILayout {\n if (!this._layout) {\n raiseError(`${config.tagNames.layoutOutlet} has no layout.`);\n }\n return this._layout;\n }\n set layout(value: ILayout) {\n this._layout = value;\n this.setAttribute('name', value.name);\n }\n \n get name(): string {\n return this.layout.name;\n }\n\n private async _initialize(): Promise<void> {\n this._initializing = true;\n try {\n this._initialized = true;\n // attachShadow は冪等にする: 一度 await loadTemplate() 中に切断されると\n // _initialized = false で戻され、再 connect 時に _initialize() が再度走るが、\n // その時点で shadowRoot は既に存在しているため、再度 attachShadow すると\n // InvalidStateError になる。\n if (this.layout.enableShadowRoot && !this.shadowRoot) {\n this.attachShadow({ mode: 'open' });\n }\n const template = await this.layout.loadTemplate();\n // await 中に切断された場合は DOM 副作用を残さず、次回再接続時に再初期化させる\n if (!this.isConnected) {\n this._initialized = false;\n return;\n }\n if (this.shadowRoot) {\n this.shadowRoot.appendChild(template.content.cloneNode(true));\n for(const childNode of Array.from(this.layout.childNodes)) {\n this._layoutChildNodes.push(childNode);\n this.appendChild(childNode);\n }\n } else {\n const fragmentForTemplate = template.content.cloneNode(true) as DocumentFragment;\n const slotElementBySlotName: Map<string, Element> = new Map();\n fragmentForTemplate.querySelectorAll('slot').forEach((slotElement) => {\n const slotName = slotElement.getAttribute('name') || '';\n if (!slotElementBySlotName.has(slotName)) {\n slotElementBySlotName.set(slotName, slotElement);\n } else {\n console.warn(`${config.tagNames.layoutOutlet} duplicate slot name \"${slotName}\" in layout template.`);\n }\n });\n\n const fragmentBySlotName: Map<string, DocumentFragment> = new Map();\n const fragmentForChildNodes = document.createDocumentFragment();\n for(const childNode of Array.from(this.layout.childNodes)) {\n this._layoutChildNodes.push(childNode);\n if (childNode instanceof Element) {\n const slotName = childNode.getAttribute('slot') || '';\n if (slotName.length > 0 && slotElementBySlotName.has(slotName)) {\n if (!fragmentBySlotName.has(slotName)) {\n fragmentBySlotName.set(slotName, document.createDocumentFragment());\n }\n fragmentBySlotName.get(slotName)?.appendChild(childNode);\n continue;\n }\n }\n fragmentForChildNodes.appendChild(childNode);\n }\n for(const [slotName, slotElement] of slotElementBySlotName) {\n const fragment = fragmentBySlotName.get(slotName);\n if (fragment) {\n slotElement.replaceWith(fragment);\n }\n }\n const defaultSlot = slotElementBySlotName.get('');\n if (defaultSlot) {\n defaultSlot.replaceWith(fragmentForChildNodes);\n }\n\n this.appendChild(fragmentForTemplate);\n }\n } finally {\n this._initializing = false;\n }\n }\n\n async connectedCallback() {\n if (!this._initialized) {\n this._disconnectedDuringInit = false;\n await this._initialize();\n // 初期化中(await 中)に切断された場合は副作用を残さない\n if (this._disconnectedDuringInit || !this.isConnected) {\n return;\n }\n }\n }\n\n disconnectedCallback() {\n // _initialize 中(await 中)に呼ばれた場合はフラグを立てて再 connect 時に init を許可する\n if (this._initializing) {\n this._disconnectedDuringInit = true;\n }\n }\n\n assignParams(params: Record<string, any>): void {\n for(const childNode of this._layoutChildNodes) {\n if (childNode instanceof Element) {\n childNode.querySelectorAll('[data-bind]').forEach((e) => {\n // 子要素にパラメータを割り当て\n assignParams(e, params);\n });\n if (childNode.hasAttribute('data-bind')) {\n // 子要素にパラメータを割り当て\n assignParams(childNode, params);\n }\n }\n }\n }\n}\n\nexport function createLayoutOutlet(): LayoutOutlet {\n return document.createElement(config.tagNames.layoutOutlet) as LayoutOutlet;\n}","import { GuardHandler } from \"./components/types.js\";\nimport { IRoute } from \"./components/types.js\";\nimport { raiseError } from \"./raiseError.js\";\n\ntype ScriptModule = { default?: unknown };\n\nconst CSP_GUIDE = \"https://github.com/wcstack/wcstack/blob/main/docs/csp.md\";\n\n/**\n * ガードスクリプトの評価失敗を、原因の分かるメッセージに変換する。\n *\n * CSP にブロックされた動的 import の rejection は CSP に一切言及しないため、\n * ブロックされた事実は securitypolicyviolation の観測(`cspBlocked`)でしか取れない。\n * 真ならブロック確定として対処方法を書き、偽なら構文エラー等と区別できないので\n * 元のエラーを主にして CSP は参照先を添えるに留める。\n *\n * ガードは state と違ってインライン専用(`<wcs-route>` 直下の `<script>`)なので、\n * `src=` に逃がすという回避策が無い。CSP を敷くなら blob: の許可が必須になる。\n */\nfunction describeImportFailure(error: unknown, firstError: unknown, cspBlocked: boolean): string {\n if (cspBlocked) {\n return `The guard <script> was blocked by Content-Security-Policy. ` +\n `Guard scripts are inline-only and are evaluated through a blob: URL, ` +\n `so script-src must allow blob:. See ${CSP_GUIDE}`;\n }\n return `loadGuardHandler: failed to import guard script. ` +\n `data: URL error: ${(error as Error)?.message ?? String(error)}` +\n (firstError ? `. Blob URL error: ${(firstError as Error)?.message ?? String(firstError)}` : '') +\n `. If this page sets a Content-Security-Policy, see ${CSP_GUIDE}`;\n}\n\nasync function importModule(script: HTMLScriptElement, route: IRoute): Promise<GuardHandler | null> {\n let scriptModule: ScriptModule | null = null;\n let firstError: unknown = null;\n // devtools での識別用 sourceURL suffix。\n // uuid を使う: Route インスタンスでは constructor で getUUID() により必ず設定される。\n // partial mock 等で undefined の可能性に備えて空文字列フォールバックを置く。\n const routeTag = route.uuid || \"\";\n const sourceURL = routeTag ? `wcs-guard-handler:${routeTag}` : `wcs-guard-handler`;\n const sourceComment = `\\n//# sourceURL=${sourceURL}\\n`;\n const scriptText = script.text + sourceComment;\n // import() の失敗が CSP 由来かを判別するため、評価の間だけ違反を購読する。\n // blob: と data: はどちらも script-src で拒否されるので、両分岐を1つの観測で覆える。\n let cspBlocked = false;\n const onViolation = (event: Event) => {\n if ((event as SecurityPolicyViolationEvent).effectiveDirective.startsWith(\"script-src\")) {\n cspBlocked = true;\n }\n };\n document.addEventListener(\"securitypolicyviolation\", onViolation);\n try {\n if (typeof URL.createObjectURL === 'function') {\n const blob = new Blob([scriptText], { type: \"application/javascript\" });\n const url = URL.createObjectURL(blob);\n try {\n scriptModule = await import(url) as ScriptModule;\n } catch (e) {\n // Blob URL import failed (e.g. happy-dom), fall through to data: URL\n firstError = e;\n } finally {\n URL.revokeObjectURL(url);\n }\n }\n if (!scriptModule) {\n // Fallback: Base64 data: URL (for test environments)\n const b64 = btoa(String.fromCodePoint(...new TextEncoder().encode(scriptText)));\n try {\n scriptModule = await import(`data:application/javascript;base64,${b64}`) as ScriptModule;\n } catch (e) {\n // 両 import が失敗した場合、Blob URL 側の元エラーを cause として失わないように包む\n // (Blob URL も失敗していなければ firstError は null)\n raiseError(describeImportFailure(e, firstError, cspBlocked), { cause: firstError ?? e });\n }\n }\n } finally {\n document.removeEventListener(\"securitypolicyviolation\", onViolation);\n }\n if (scriptModule && typeof scriptModule.default === 'function') {\n return scriptModule.default as GuardHandler;\n }\n return null;\n}\n\nexport function loadGuardHandler(script: HTMLScriptElement, route: IRoute): void {\n importModule(script, route).then(handler => {\n if (handler) {\n route.guardHandler = handler;\n } else {\n // ハンドラが取得できなかった場合は guardCheck の待ちを解除する\n route.notifyGuardHandlerLoadFailed();\n }\n }).catch(err => {\n console.error('loadGuardHandler failed:', err);\n // import 失敗時も guardCheck の待ちを解除する\n route.notifyGuardHandlerLoadFailed();\n });\n}\n","import { IRoute, IRouter } from \"./components/types.js\";\nimport { Layout } from \"./components/Layout.js\";\nimport { createLayoutOutlet } from \"./components/LayoutOutlet.js\";\nimport { Route } from \"./components/Route.js\";\nimport { config } from \"./config.js\";\nimport { loadGuardHandler } from \"./loadGuardHandler.js\";\n\n\n/**\n * 同一の絶対パスを持つ Route が複数定義された場合に警告を出力する。\n *\n * 仕様: 同一 absolutePath ごとに 1 回だけ警告する(複数重複でも警告は 1 件)。\n * これは過剰なログを避けるための意図的な設計。\n * テストでは Vitest の console.warn spy で 1 回出力を確認する。\n */\nfunction _duplicateCheck(routesByPath: Map<string, IRoute[]>, route: IRoute): void {\n let routes = routesByPath.get(route.absolutePath);\n if (!routes) {\n routes = [];\n }\n for(const existingRoute of routes) {\n if (!route.testAncestorNode(existingRoute)) {\n console.warn(`Duplicate route path detected: '${route.absolutePath}' (defined as '${route.path}')`);\n break;\n }\n }\n routes.push(route);\n if (routes.length === 1) {\n routesByPath.set(route.absolutePath, routes);\n }\n}\n\nasync function _parseNode(\n routerNode: IRouter,\n node: Node,\n routes: IRoute[],\n routesByPath: Map<string, IRoute[]>\n): Promise<DocumentFragment> {\n const routeParentNode: IRoute | null = routes.length > 0 ? routes[routes.length - 1] : null;\n const fragment = document.createDocumentFragment();\n const childNodes = Array.from(node.childNodes);\n for(const childNode of childNodes) {\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n let appendNode = childNode\n let element = childNode as HTMLElement;\n const tagName = element.tagName.toLowerCase();\n if (tagName === config.tagNames.route) {\n const childFragment = document.createDocumentFragment();\n // Move child nodes to fragment to avoid duplication of\n for(const childNode of Array.from(element.childNodes)) {\n childFragment.appendChild(childNode);\n }\n const cloneElement = document.importNode<Route>(element as Route, true);\n customElements.upgrade(cloneElement);\n cloneElement.appendChild(childFragment);\n const route = cloneElement;\n route.initialize(routerNode, routeParentNode);\n _duplicateCheck(routesByPath, route);\n routes.push(route);\n appendNode = route.placeHolder;\n element = route;\n } else if (tagName === config.tagNames.guardHandler) {\n if (routes.length > 0) {\n const route = routes[routes.length - 1];\n const script = element.querySelector('script[type=\"module\"]');\n if (script) {\n loadGuardHandler(script as HTMLScriptElement, route);\n }\n }\n continue;\n } else if (tagName === \"template\") {\n // 不透明な葉として扱う。<template> の子は childNodes ではなく .content に\n // 居るため、汎用の再構築(_parseNode → innerHTML = \"\" → appendChild)に\n // 通すと content が空になり、ルート内容に書かれた state の構造テンプレート\n // (for / if)を黙って破壊する。route 定義は template の中には置けない\n // (inert)ので、中を辿る理由も無い。\n fragment.appendChild(element);\n continue;\n } else if (tagName === config.tagNames.layout) {\n // <wcs-layout> は他の case と異なり element と appendNode が別物になる。\n // - element: cloneElement (Layout 本体)。後続の `element.innerHTML = \"\"; element.appendChild(children)`\n // で再帰結果が Layout 内に流し込まれる。Layout はそれを slot 投影に使う。\n // - appendNode: layoutOutlet。最終的に fragment へ挿入されるのは layoutOutlet で、\n // layoutOutlet が element (Layout) を参照して投影を行う。\n const childFragment = document.createDocumentFragment();\n // Move child nodes to fragment to avoid duplication of\n for(const childNode of Array.from(element.childNodes)) {\n childFragment.appendChild(childNode);\n }\n const cloneElement = document.importNode(element, true);\n customElements.upgrade(cloneElement);\n cloneElement.appendChild(childFragment);\n const layout = cloneElement;\n const layoutOutlet = createLayoutOutlet();\n layoutOutlet.layout = layout as Layout;\n appendNode = layoutOutlet;\n element = cloneElement;\n }\n const children = await _parseNode(routerNode, element, routes, routesByPath);\n element.innerHTML = \"\";\n element.appendChild(children);\n fragment.appendChild(appendNode);\n } else {\n fragment.appendChild(childNode);\n }\n }\n return fragment;\n}\n\nexport async function parse(routerNode: IRouter): Promise<DocumentFragment> {\n const routesByPath: Map<string, IRoute[]> = new Map();\n const fr = await _parseNode(routerNode, routerNode.template.content, [], routesByPath);\n return fr;\n}","import { IRouteMatchResult, IRouter } from \"./components/types\";\n\n/**\n * route commit 後のオプトイン a11y ポリシー適用(docs/a11y-design.md §3-4 / D1〜D3)。\n *\n * 呼び出しは applyRoute の committed 判定後・mutate() の外・初回描画\n * (lastRoutes が空)を除く。guard 拒否はここに到達しない(D4)。\n *\n * - `announce=\"title\"`: commit 時点の document.title のスナップショットを\n * live region へ書き込む(D2)。<wcs-head> の静的 title は mutate() 内で同期に\n * 差し替わるため、ここでは必ず新ルートの値が読める。バインド title の遅延窓・\n * ナビゲーション外の title 変化には追従しない(README の明記された制限)。\n * - `focus=\"heading\"`: リーフ route が挿入した内容の最初の h1〜h6 に\n * tabindex=\"-1\" を付けて focus() する。見出し不在時は何もしない — 旧フォーカス\n * 要素が遷移で消えていればブラウザが body へ落とすため、結果は仕様既定の\n * focusReset と同等に収束する(§3-4 の規定)。\n */\nexport function applyA11yPolicies(routerNode: IRouter, matchResult: IRouteMatchResult): void {\n if (routerNode.announcePolicy === \"title\") {\n const region = routerNode.a11yRegion;\n if (region !== null) {\n region.textContent = document.title;\n }\n }\n if (routerNode.focusPolicy === \"heading\") {\n // matchRoutes / fallbackRoute の構成上 routes は常に 1 件以上\n const leaf = matchResult.routes[matchResult.routes.length - 1];\n const heading = findFirstHeading(leaf.childNodeArray);\n if (heading !== null) {\n if (!heading.hasAttribute(\"tabindex\")) {\n heading.setAttribute(\"tabindex\", \"-1\");\n }\n heading.focus();\n }\n }\n}\n\n/**\n * リーフ route のトップレベルノード列を document order で走査し、最初の見出しを\n * 返す。祖先 route の内容へは遡らない — 読者が「新しい画面」と認識する単位は\n * リーフである(docs/a11y-design.md §3-4)。ルート内容は Comment placeholder の\n * 兄弟として挿入されるため安定した「箱」が無く、内容から探すのが唯一の現実解。\n */\nfunction findFirstHeading(nodes: Node[]): HTMLElement | null {\n for (const node of nodes) {\n if (node.nodeType !== Node.ELEMENT_NODE) continue;\n const element = node as Element;\n if (/^H[1-6]$/.test(element.tagName)) {\n return element as HTMLElement;\n }\n const descendant = element.querySelector<HTMLElement>(\"h1,h2,h3,h4,h5,h6\");\n if (descendant !== null) {\n return descendant;\n }\n }\n return null;\n}\n","import { builtinParamTypes } from \"./builtinParamTypes\";\nimport { IRoute, IRouteMatchResult } from \"./components/types\";\n\nexport function testPath(route: IRoute, path: string, segments: string[]): IRouteMatchResult | null {\n const params: Record<string, string> = {};\n const typedParams: Record<string, any> = {};\n let testResult = true;\n let catchAllFound = false;\n let i = 0, segIndex = 0;\n while (i < route.absoluteSegmentInfos.length) {\n const segmentInfo = route.absoluteSegmentInfos[i];\n // index属性のルートはセグメントを消費しないのでスキップ\n if (segmentInfo.isIndex) {\n i++;\n continue;\n }\n // 先頭の空セグメント(絶対パスの /)はsegmentsから除外されているのでスキップ\n if (i === 0 && segmentInfo.segmentText === '' && segmentInfo.type === 'static') {\n i++;\n continue;\n }\n const segment = segments[segIndex];\n if (segment === undefined) {\n // セグメントが足りない\n testResult = false;\n break;\n }\n let match: boolean = false;\n if (segmentInfo.type === \"param\") {\n const paramType = segmentInfo.paramType || 'any';\n const builtinParamType = builtinParamTypes[paramType];\n const value = builtinParamType.parse(segment);\n if (typeof value !== 'undefined') {\n if (segmentInfo.paramName) {\n params[segmentInfo.paramName] = segment;\n typedParams[segmentInfo.paramName] = value;\n }\n match = true;\n }\n } else {\n match = segmentInfo.pattern.exec(segment) !== null;\n }\n if (match) {\n if (segmentInfo.type === 'catch-all') {\n // Catch-all: match remaining segments\n const remainingSegments = segments.slice(segIndex).join('/');\n params['*'] = remainingSegments;\n typedParams['*'] = remainingSegments;\n catchAllFound = true;\n break; // No more segments to process\n }\n } else {\n testResult = false;\n break; \n }\n i++;\n segIndex++;\n }\n let finalResult = false;\n if (testResult) {\n if (catchAllFound) {\n // catch-all は残り全部マッチ済み\n finalResult = true;\n } else if (i === route.absoluteSegmentInfos.length && segIndex === segments.length) {\n // 全セグメントが消費された。\n // 末尾スラッシュ(例: /users/)は matchRoutes 側で処理済み: normalizePathname が\n // ルート以外の末尾スラッシュを除去し、matchRoutes の filter が末尾の空セグメントを\n // 落とすため、testPath に渡る segments に末尾 '' は含まれない。よってここで\n // 末尾スラッシュ用の分岐は不要(trailing-slash の結合テストは matchRoutes.test.ts 参照)。\n finalResult = true;\n }\n }\n \n if (finalResult) {\n return {\n path: path,\n routes: route.routes,\n params: params,\n typedParams: typedParams,\n lastPath: \"\"\n };\n }\n return null;\n}","import { IRoute, IRouteMatchResult, IRouter } from \"./components/types.js\";\nimport { testPath } from \"./testPath.js\";\n\nfunction _matchRoutes(\n routeNode: IRoute,\n normalizedPath: string,\n segments: string[],\n results: IRouteMatchResult[]\n): void {\n const matchResult = testPath(routeNode, normalizedPath, segments);\n if (matchResult) {\n results.push(matchResult);\n }\n for(const childRoute of routeNode.routeChildNodes) {\n _matchRoutes(childRoute, normalizedPath, segments, results);\n }\n}\n\nexport function matchRoutes(routerNode: IRouter, normalizedPath: string): IRouteMatchResult | null {\n const topLevelRoutes = routerNode.routeChildNodes;\n const results: IRouteMatchResult[] = [];\n // セグメント配列を作成(先頭の/は除去せずにそのまま分割)\n // '/' => ['', ''] → filter → ['']\n // '/home' => ['', 'home'] → filter → ['home']\n // '/home/about' => ['', 'home', 'about'] → filter → ['home', 'about']\n // '' => ['']\n const rawSegments = normalizedPath.split('/');\n // 先頭の空セグメント(絶対パスの/)と末尾の空セグメント(/で終わるパス)を除去\n const segments = rawSegments.filter((s, i) => {\n if (i === 0 && s === '') return false; // 先頭の空セグメントをスキップ\n if (i === rawSegments.length - 1 && s === '' && rawSegments.length > 1) return false; // 末尾の空セグメントをスキップ\n return true;\n });\n for (const route of topLevelRoutes) {\n _matchRoutes(route, normalizedPath, segments, results);\n }\n results.sort((a, b) => {\n const lastRouteA = a.routes.at(-1)!;\n const lastRouteB = b.routes.at(-1)!;\n const diffSegmentCount = lastRouteA.absoluteSegmentCount - lastRouteB.absoluteSegmentCount;\n if (diffSegmentCount !== 0) {\n return -diffSegmentCount;\n }\n const diffWeight = lastRouteA.absoluteWeight - lastRouteB.absoluteWeight;\n if (diffWeight !== 0) {\n return -diffWeight;\n }\n const diffIndex = lastRouteA.childIndex - lastRouteB.childIndex;\n return diffIndex;\n });\n if (results.length > 0) {\n return results[0];\n }\n return null;\n}","import { config } from \"./config.js\";\n\n// basenameFileExtensions ベースの正規表現をキャッシュ(config 変更時のみ再生成)。\nlet _cachedExtensions: ReadonlyArray<string> | null = null;\nlet _cachedExtPattern: RegExp | null = null;\n\n/**\n * config.basenameFileExtensions から拡張子削除用の正規表現を生成(キャッシュ付き)。\n * config 変更が検知された場合のみ再生成する。\n */\nexport function getExtPattern(): RegExp | null {\n const exts = config.basenameFileExtensions;\n if (exts.length === 0) return null;\n if (_cachedExtensions === exts && _cachedExtPattern) {\n return _cachedExtPattern;\n }\n _cachedExtensions = exts;\n _cachedExtPattern = new RegExp(\n `\\\\/[^/]+(?:${exts.map(e => e.replace(/\\./g, '\\\\.')).join('|')})$`,\n 'i'\n );\n return _cachedExtPattern;\n}\n\n/**\n * URL pathname を route path に正規化する。\n * - 先頭スラッシュを保証\n * - 連続スラッシュを単一化\n * - 末尾のファイル拡張子(例: .html)をディレクトリルートとして扱う\n * - ルート以外の末尾スラッシュを除去\n */\nexport function normalizePathname(path: string): string {\n let p = path || \"/\";\n if (!p.startsWith(\"/\")) p = \"/\" + p;\n p = p.replace(/\\/{2,}/g, \"/\");\n const extPattern = getExtPattern();\n if (extPattern) {\n p = p.replace(extPattern, \"\");\n }\n if (p === \"\") p = \"/\";\n if (p.length > 1 && p.endsWith(\"/\")) p = p.slice(0, -1);\n return p;\n}\n\n/**\n * fullPath から basename を取り除いた route path を返す。\n *\n * applyRoute のマッチング入力と same-match 判定\n * (docs/router-state-contract-design.md §4.4)で共有する。same-match の比較は\n * **basename スライス後の path 同士**で行う規範 — `router.path` に格納されるのは\n * スライス後のパスであり、スライス前の fullPath と比較すると basename 運用で\n * same-match が決して成立しない。\n */\nexport function sliceBasename(fullPath: string, basename: string): string {\n let sliced = fullPath;\n if (basename !== \"\") {\n if (fullPath === basename) {\n sliced = \"\";\n } else if (fullPath.startsWith(basename + \"/\")) {\n sliced = fullPath.slice(basename.length);\n }\n }\n // when fullPath === basename (e.g. \"/app\"), treat it as root \"/\"\n return sliced === \"\" ? \"/\" : sliced;\n}\n\n/**\n * basename を正規化する。\n * - \"\" or \"/\" -> \"\"\n * - \"/app/\" -> \"/app\"\n * - \"/app/index.html\" -> \"/app\"\n */\nexport function normalizeBasename(path: string): string {\n let p = path || \"\";\n if (!p) return \"\";\n if (!p.startsWith(\"/\")) p = \"/\" + p;\n p = p.replace(/\\/{2,}/g, \"/\");\n const extPattern = getExtPattern();\n if (extPattern) {\n p = p.replace(extPattern, \"\");\n }\n if (p.length > 1 && p.endsWith(\"/\")) p = p.slice(0, -1);\n if (p === \"/\") return \"\";\n return p;\n}\n","import { IRoute } from \"./components/types\";\n\nexport function hideRoute(route: IRoute) {\n route.clearParams();\n for(const node of route.childNodeArray) {\n node.parentNode?.removeChild(node);\n }\n}\n","import { assignParams } from \"./assignParams\";\nimport { LayoutOutlet } from \"./components/LayoutOutlet\";\nimport { IRoute, IRouteMatchResult } from \"./components/types\";\nimport { config } from \"./config\";\n\n/**\n * ルートへのパラメータ割り当て(setParams + 内容ノードへの data-bind /\n * LayoutOutlet 配送)。挿入とは独立に呼べるよう showRoute から抽出 —\n * SSR ハイドレーション(採用時は内容が既に DOM に居るため挿入しない)が\n * 同じ配送規則を共有する(docs/ssr-router-design.md §4)。\n *\n * connectedCallback が呼ばれる前に、プロパティにパラメータを割り当てる必要が\n * あるため(挿入時にパラメータはすでに設定されている必要がある)、showRoute は\n * これを挿入より先に呼ぶ。\n */\nexport function assignRouteParams(route: IRoute, matchResult: IRouteMatchResult): void {\n const params: Record<string, string> = {};\n const typedParams: Record<string, any> = {};\n for(const key of route.paramNames) {\n params[key] = matchResult.params[key];\n typedParams[key] = matchResult.typedParams[key];\n }\n route.setParams(params, typedParams);\n for (const node of route.childNodeArray) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as Element;\n element.querySelectorAll('[data-bind]').forEach((e) => {\n assignParams(e, route.typedParams);\n });\n if (element.hasAttribute('data-bind')) {\n assignParams(element, route.typedParams);\n }\n element.querySelectorAll<LayoutOutlet>(config.tagNames.layoutOutlet).forEach((layoutOutlet) => {\n layoutOutlet.assignParams(route.typedParams);\n });\n if (element.tagName.toLowerCase() === config.tagNames.layoutOutlet) {\n (element as LayoutOutlet).assignParams(route.typedParams);\n }\n }\n }\n}\n\nexport function showRoute(route: IRoute, matchResult: IRouteMatchResult): boolean {\n assignRouteParams(route, matchResult);\n const parentNode = route.placeHolder.parentNode;\n const nextSibling = route.placeHolder.nextSibling;\n for (const node of route.childNodeArray) {\n if (nextSibling) {\n parentNode?.insertBefore(node, nextSibling);\n } else {\n parentNode?.appendChild(node);\n }\n }\n return true;\n}\n","// ===========================================================================\n// AUTO-GENERATED FILE - DO NOT EDIT.\n// Generated from /protocol/transition-runner.ts by scripts/sync-protocol-types.mjs.\n// Run `node scripts/sync-protocol-types.mjs` after editing the source.\n// ===========================================================================\n\n// transition-runner protocol — how a package that mutates the DOM hands that\n// mutation to whoever is arbitrating view transitions on the page.\n//\n// @wcstack/state and @wcstack/router must not depend on @wcstack/view-transition\n// (zero runtime dependencies, independently publishable), so the arbiter installs\n// itself on a well-known global symbol and the participants look it up lazily.\n// No arbiter installed means the mutation is invoked directly, synchronously —\n// byte-for-byte the behavior these packages had before the protocol existed.\n//\n// docs/view-transition-design.md §4 is the normative description.\n//\n// SINGLE SOURCE OF TRUTH: edit only this file (/protocol/transition-runner.ts), then run\n// `node scripts/sync-protocol-types.mjs` to regenerate the per-package copies\n// (packages/<pkg>/src/protocol/transitionRunner.ts). Those copies are generated — do not edit them.\n\n/**\n * Global key the arbiter installs itself under. `Symbol.for` so independently\n * loaded copies of this file (two CDN bundles on one page) still agree.\n */\nexport const TRANSITION_RUNNER_KEY = Symbol.for(\"wcstack.transition-runner\");\n\n/** Who is asking. Backs the arbiter's `for=` participant gate. */\nexport type TransitionSource = \"router\" | \"state\";\n\n/** `view-transition-name` assignment policy the arbiter declares for participants. */\nexport type TransitionNaming = \"manual\" | \"auto\";\n\nexport interface IWcsTransitionRunOptions {\n /** Participant id, for the `for=` gate and for diagnostics. */\n readonly source?: string;\n /** Transition types, where the environment supports `startViewTransition({ types })`. */\n readonly types?: readonly string[];\n}\n\nexport interface IWcsTransitionRunner {\n readonly protocol: \"wcs-transition-runner\";\n /** Integer protocol version. All versions >= 1 are participant-compatible. */\n readonly version: number;\n /** `\"auto\"` licenses a participant to assign `view-transition-name` itself. */\n readonly naming: TransitionNaming;\n /** Upper bound on auto-assigned names; past it a participant stops naming. */\n readonly namingLimit: number;\n /** Whether this participant animates at all. */\n accepts(source: string): boolean;\n /**\n * Invoke `mutate` inside a view transition when one is possible.\n *\n * Contract (docs/view-transition-design.md §4):\n * - `mutate` is invoked exactly once, whatever happens to the transition.\n * - The promise resolves once `mutate` has run — never waits for the animation.\n * - When no transition is started, `mutate` runs synchronously inside `run()`.\n * - It rejects only if `mutate` threw.\n */\n run(mutate: () => void, options?: IWcsTransitionRunOptions): Promise<void>;\n}\n\n/**\n * The installed arbiter, or null when there is none, it speaks a version this\n * reader does not, or it does not accept this participant.\n *\n * Looked up on every call rather than cached: the tag can be added, removed, or\n * reconfigured at any point in a page's life, and a stale cache would either\n * animate what the author just switched off or miss what they switched on.\n */\nexport function getTransitionRunner(source: string): IWcsTransitionRunner | null {\n const candidate = (globalThis as Record<symbol, unknown>)[TRANSITION_RUNNER_KEY] as\n | IWcsTransitionRunner\n | undefined;\n if (candidate === undefined || candidate === null) return null;\n if (candidate.protocol !== \"wcs-transition-runner\") return null;\n if (typeof candidate.version !== \"number\" || candidate.version < 1) return null;\n if (typeof candidate.run !== \"function\") return null;\n if (typeof candidate.accepts !== \"function\" || !candidate.accepts(source)) return null;\n return candidate;\n}\n\n/**\n * Run `mutate` under the installed arbiter, or directly when there is none.\n *\n * Returns `undefined` in the no-arbiter case instead of a resolved promise: the\n * state drain calls this on every batch, and awaiting is a caller's choice, not\n * an allocation the common path should pay for. `await` accepts both.\n */\nexport function runTransition(\n source: string,\n mutate: () => void,\n types?: readonly string[],\n): Promise<void> | undefined {\n const runner = getTransitionRunner(source);\n if (runner === null) {\n mutate();\n return undefined;\n }\n return runner.run(mutate, { source, types });\n}\n","// ===========================================================================\n// AUTO-GENERATED FILE - DO NOT EDIT.\n// Generated from /protocol/binder.ts by scripts/sync-protocol-types.mjs.\n// Run `node scripts/sync-protocol-types.mjs` after editing the source.\n// ===========================================================================\n\n// binder protocol — how a package that inserts DOM hands those nodes to whoever\n// owns data bindings on the page.\n//\n// The dual of transition-runner: that one hands a *mutation* to whoever animates\n// it, this one hands *new nodes* to whoever binds them.\n//\n// A `data-wcs` binding exists only for nodes @wcstack/state walked when it built\n// its bindings. Nodes that arrive later — the content of a route that was not\n// active at that moment, a <wcs-head> child reflected into <head> — were never\n// walked, so their bindings silently do nothing, however often they are inserted.\n// @wcstack/router must not depend on @wcstack/state (zero runtime dependencies,\n// independently publishable), so state installs a binder on a well-known global\n// symbol and inserters look it up lazily.\n//\n// No binder installed means nothing happens — byte-for-byte the behavior these\n// packages had before the protocol existed.\n//\n// docs/binder-protocol-design.md is the normative description.\n//\n// SINGLE SOURCE OF TRUTH: edit only this file (/protocol/binder.ts), then run\n// `node scripts/sync-protocol-types.mjs` to regenerate the per-package copies\n// (packages/<pkg>/src/protocol/binder.ts). Those copies are generated — do not edit them.\n\n/**\n * Global key the binder installs itself under. `Symbol.for` so independently\n * loaded copies of this file (two CDN bundles on one page) still agree.\n */\nexport const BINDER_KEY = Symbol.for(\"wcstack.binder\");\n\nexport interface IWcsBinder {\n readonly protocol: \"wcs-binder\";\n /** Integer protocol version. All versions >= 1 are participant-compatible. */\n readonly version: number;\n /**\n * Take a subtree that has just entered the document and bind whatever\n * declarations it carries.\n *\n * Contract (docs/binder-protocol-design.md §2):\n * - Synchronous. Initial values are applied before this returns, so the\n * caller never shows one frame of unbound markup.\n * - Idempotent. A subtree that is already bound is left alone, so a caller\n * may hand over the same nodes on every insertion without tracking which\n * ones are new.\n * - Binding survives later relocation, so this need not be called again when\n * the same nodes are moved (measured: design doc §8-3).\n * - Never throws for markup reasons; a subtree with no declarations is a\n * no-op.\n */\n bind(subtree: Node): void;\n}\n\n/**\n * The installed binder, or null when there is none or it speaks a version this\n * reader does not.\n *\n * Looked up on every call rather than cached, for the same reason\n * transition-runner does: the page's composition can change at any point, and a\n * stale cache would keep calling into a binder that is no longer there.\n */\nexport function getBinder(): IWcsBinder | null {\n const candidate = (globalThis as Record<symbol, unknown>)[BINDER_KEY] as IWcsBinder | undefined;\n if (candidate === undefined || candidate === null) return null;\n if (candidate.protocol !== \"wcs-binder\") return null;\n if (typeof candidate.version !== \"number\" || candidate.version < 1) return null;\n if (typeof candidate.bind !== \"function\") return null;\n return candidate;\n}\n\n/**\n * Subtrees offered before a binder existed, and the set of everything a binder\n * has taken. Both live on global symbols so that independently loaded copies of\n * this file — the router's and state's — share one queue.\n *\n * The queue is needed because of load order: the router's auto bundle runs\n * before state's, so `<wcs-head>` reflects its children into `<head>` while\n * there is still nothing to bind them. Offering them to a binder that arrives\n * later is the difference between working and silently blank.\n */\nconst PENDING_KEY = Symbol.for(\"wcstack.binder.pending\");\nconst TAKEN_KEY = Symbol.for(\"wcstack.binder.taken\");\n\nfunction pendingQueue(): Node[] {\n const globals = globalThis as Record<symbol, unknown>;\n let queue = globals[PENDING_KEY] as Node[] | undefined;\n if (queue === undefined) {\n queue = [];\n globals[PENDING_KEY] = queue;\n }\n return queue;\n}\n\nfunction takenSet(): WeakSet<Node> {\n const globals = globalThis as Record<symbol, unknown>;\n let taken = globals[TAKEN_KEY] as WeakSet<Node> | undefined;\n if (taken === undefined) {\n taken = new WeakSet<Node>();\n globals[TAKEN_KEY] = taken;\n }\n return taken;\n}\n\n/**\n * Hand `subtree` to the installed binder, or hold it for one that arrives later.\n *\n * Returns whether a binder took it *now*. A `false` does not yet mean the markup\n * is doomed — check {@link wasBoundBy} once module scripts have run.\n */\nexport function bindSubtree(subtree: Node): boolean {\n const binder = getBinder();\n if (binder === null) {\n pendingQueue().push(subtree);\n return false;\n }\n takenSet().add(subtree);\n binder.bind(subtree);\n return true;\n}\n\n/** Whether any binder has taken this subtree. */\nexport function wasBoundBy(subtree: Node): boolean {\n return takenSet().has(subtree);\n}\n\n/**\n * Bind everything offered before this binder existed. Called by the binder right\n * after it installs itself.\n */\nexport function flushPendingBinds(): void {\n const binder = getBinder();\n if (binder === null) return;\n const queue = pendingQueue();\n if (queue.length === 0) return;\n const pending = queue.splice(0, queue.length);\n const taken = takenSet();\n for (const subtree of pending) {\n taken.add(subtree);\n binder.bind(subtree);\n }\n}\n","/**\n * 「後から差し込んだノードのバインドは効かない」ことを loud に報告する。\n *\n * `data-wcs` のバインドは、`@wcstack/state` がバインドを構築した時点で document に\n * 居たノードにしか作られない。router が後から差し込むノード —— 非活性ルートの内容\n * (`hideRoute` が切り離しているので走査されない)と `<wcs-head>` が head へ映す\n * クローン(元ノードとは別物)—— はどちらもその時点に存在せず、バインドは決して\n * 届かない。何度ナビゲーションを往復しても回復しない。\n *\n * **挙動は変えない。** 変えるのは「黙って空になる」を「原因を指す警告」にすること\n * だけである。症状(見出しが空・`<title>` が消える)は原因(バインド構築の時点)から\n * 遠く、しかも例外も出ないため、これまで気づく手立てが無かった。\n *\n * 恒久的な解決は binder プロトコル(docs/binder-protocol-design.md)で別途決める。\n *\n * 警告は要素ごとに 1 回。壊れている場合にのみ走るので、正常系のコストはゼロ。\n */\nimport { getBinder, wasBoundBy } from \"./protocol/binder\";\n\nconst warned = new WeakSet<Element>();\n\n/** `data-wcs`。router は state の config を読めないので既定名を直接持つ */\nconst BIND_ATTRIBUTE = \"data-wcs\";\n\nfunction hasBinding(element: Element): boolean {\n return element.hasAttribute(BIND_ATTRIBUTE) || element.querySelector(`[${BIND_ATTRIBUTE}]`) !== null;\n}\n\n/**\n * @param element 差し込まれるサブツリーの根\n * @param where 利用者が原因を特定できる位置の説明(例: `<wcs-route path=\"/about\">`)\n * @param remedy その位置に固有の回避策\n */\nexport function warnUnboundMarkup(element: Element, where: string, remedy: string): void {\n if (warned.has(element) || !hasBinding(element)) {\n return;\n }\n warned.add(element);\n // 判定は **DOMContentLoaded まで**遅らせる。router の auto バンドルは state の\n // ものより先に走るので、`<wcs-head>` が差し出す時点では binder がまだ居ない。\n // そこで即断すると、この直後に正しく束ねられるノードを「壊れている」と報告する。\n //\n // タイマーでは足りない。deferred な module script はパース完了後に実行されるので、\n // `setTimeout(0)` は state の auto バンドルより**先に発火しうる**(実測)。\n // DOMContentLoaded は全 deferred script の実行後に発火するので、そこでは決着している。\n //\n // 見るのは「束ね終わったか」ではなく **binder が居るか**。バインド構築は\n // インライン state モジュールの読み込みを挟むので完了はさらに後になりうるが、\n // binder が居るなら保留キューはいずれ引き取られるので報告する理由が無い。\n whenLoadOrderSettled(() => {\n if (getBinder() !== null || wasBoundBy(element)) {\n return;\n }\n console.warn(\n `[@wcstack/router] ${where} contains ${BIND_ATTRIBUTE} bindings that will never be applied. ` +\n `A binding exists only for nodes that were in the document when @wcstack/state built its ` +\n `bindings, and these nodes were not. They will render empty. ${remedy}`\n );\n });\n}\n\nfunction whenLoadOrderSettled(check: () => void): void {\n if (document.readyState !== \"complete\") {\n // `load` を待つ。`DOMContentLoaded` では足りない —— deferred script の実行中は\n // readyState が既に `\"interactive\"` なので「まだ loading か」では判別できず、\n // DOMContentLoaded を待つつもりが即断になる(実測)。`load` は必ず発火し、\n // 全 deferred script より確実に後に来る。診断なので多少遅くて構わない。\n window.addEventListener(\"load\", check, { once: true });\n return;\n }\n // 起動後の挿入(ナビゲーション)。読み込み順はとうに決着している。\n check();\n}\n\n/** テスト用: 警告の「1 要素 1 回」を跨いで検証するためのリセット */\nexport function _resetUnboundMarkupWarnings(elements: Iterable<Element>): void {\n for (const element of elements) {\n warned.delete(element);\n }\n}\n","import { IRoute, IRouteMatchResult, IRouter } from \"./components/types\";\nimport { hideRoute } from \"./hideRoute\";\nimport { showRoute } from \"./showRoute\";\nimport { GuardCancel } from \"./GuardCancel\";\nimport { runTransition } from \"./protocol/transitionRunner\";\nimport { warnUnboundMarkup } from \"./unboundMarkupWarning\";\nimport { bindSubtree } from \"./protocol/binder\";\n\n/**\n * 差し込んだルート内容を binder へ渡す。binder が居なければ、バインドが効かない\n * ことを 1 回だけ報告する。\n *\n * 挿入の**後**に呼ぶ。`bind()` は初期値の適用まで同期で行うので、挿入前に呼ぶと\n * まだ document に居ないノードを走査することになる。\n *\n * binder が居ないのは state を読み込んでいないページで、そこでは `data-wcs` が\n * そもそも動かない。報告に直し方まで書くのは、これが仕様の穴ではなく**分担の\n * 境界**だからである(examples/router-spa と examples/router-i18n が同じ分担)。\n */\nfunction bindRouteContent(route: IRoute): void {\n for (const node of route.childNodeArray) {\n if (node.nodeType !== 1) continue;\n if (bindSubtree(node)) continue;\n warnUnboundMarkup(\n node as Element,\n `<${(node as Element).tagName.toLowerCase()}> inside a route`,\n `Load @wcstack/state on this page, or render data-driven markup outside ` +\n `<wcs-router> — bind the router's \\`path\\` into state and gate the markup ` +\n `with <template data-wcs=\"if: …\">. See examples/router-i18n.`,\n );\n }\n}\n\n/**\n * ガード相の単独実装。何も触らずに全ルートの guardCheck を待ち、GuardCancel なら\n * フォールバックへの再ナビゲートを microtask で予約して false を返す。\n *\n * showRouteContent の相 1 であると同時に、SSR ハイドレーション\n * (docs/ssr-router-design.md §4 — 採用はレンダリング最適化であって認可の\n * スキップではない)からも同じ規則で呼ばれるため抽出した。\n */\nexport async function runGuardPhase(\n routerNode: IRouter,\n matchResult: IRouteMatchResult,\n): Promise<boolean> {\n try {\n for (const route of matchResult.routes) {\n await route.guardCheck(matchResult);\n }\n } catch (e) {\n if (e instanceof GuardCancel) {\n console.warn(`Navigation cancelled: ${e.message}. Redirecting to ${e.fallbackPath}`);\n queueMicrotask(() => {\n routerNode.navigate(e.fallbackPath).catch((err) => {\n console.error('Fallback navigation failed:', err);\n });\n });\n return false;\n } else {\n throw e;\n }\n }\n return true;\n}\n\n/**\n * ルートコンテンツを表示する。\n *\n * 二相構成(docs/view-transition-design.md §7.1):\n * 1. ガード相 — 何も触らずに全ルートの guardCheck を待つ。\n * 2. 変更相 — 旧ルートの hide と新ルートの show を「ひとまとまりの DOM 変更」\n * として transition arbiter に渡す。arbiter が居なければ同期実行され、\n * 従来と同じ挙動になる。ただし初回描画は渡さない(下記)。\n *\n * ガードを変更相の中に入れないのは、更新コールバックの中で任意の await を\n * 走らせると遷移が開きっぱなしになるため(ブラウザの猶予は約 4 秒)。\n * 相を分けたことで「ガードが拒否したのに旧ルートだけ先に消えている」という\n * 順序の歪みも同時に解消している。\n *\n * @returns ガードチェックを通過してコンテンツ表示が成立した場合 true、\n * GuardCancel により中断(フォールバックへ再ナビゲート)した場合 false。\n * 呼び出し側(applyRoute)は false の場合、router.path / outlet.lastRoutes を\n * 更新しないことで「拒否されたパスでの path-changed 発火」を防ぐ。\n */\nexport async function showRouteContent(\n routerNode: IRouter,\n matchResult: IRouteMatchResult,\n lastRoutes: IRoute[],\n): Promise<boolean> {\n // --- ガード相 ---\n if (!(await runGuardPhase(routerNode, matchResult))) {\n return false;\n }\n\n // --- 変更相 ---\n const routesSet = new Set<IRoute>(matchResult.routes);\n const lastRouteSet = new Set<IRoute>(lastRoutes);\n const mutate = (): void => {\n // Hide previous routes\n for (const route of lastRoutes) {\n if (!routesSet.has(route)) {\n hideRoute(route);\n }\n }\n let force = false;\n for (const route of matchResult.routes) {\n if (!lastRouteSet.has(route) || route.shouldChange(matchResult.params) || force) {\n force = showRoute(route, matchResult);\n // 挿入の後。初回描画(lastRoutes が空)の内容は state のバインド構築時に\n // document に居るので、そこは binder に渡す必要も報告する必要も無い。\n // `bind()` 自体は冪等なので渡しても壊れないが、渡さないほうが安い。\n if (lastRoutes.length > 0 && !lastRouteSet.has(route)) {\n bindRouteContent(route);\n }\n }\n }\n };\n // 初回描画(=置き換える旧ルートが無い)は遷移に渡さない。state 側の\n // 「初期レンダリングは決して包まない、包むのは drain だけ」と同じ規則で、\n // 理由も同じ: 差し替えではなく入場であり、対比すべき旧状態が無い。入場は\n // @starting-style の担当(docs/view-transition-design.md §1)。\n //\n // これは好みの問題ではない。router の初期化は最初のルート適用を await するが、\n // その時点のドキュメントはまだ最初の描画を終えていない。そこで開始した遷移は\n // Chromium で更新コールバックが呼ばれないまま留まることがあり、_initialize が\n // 永久に解決しなくなる(ページが白いまま・path が空のまま)。実ブラウザでのみ\n // 再現するので e2e/tests/view-transition.spec.ts が唯一の回帰テストになる。\n let pending: Promise<void> | undefined;\n if (lastRoutes.length === 0) {\n mutate();\n } else {\n pending = runTransition(\"router\", mutate);\n }\n // arbiter が居ないときは同期適用済みで undefined が返る。そこで await すると\n // 無条件に 1 tick 増えて、既存のナビゲーション完了タイミングが変わってしまう。\n if (pending !== undefined) {\n await pending;\n }\n return true;\n}\n","import { applyA11yPolicies } from \"./a11yPolicies\";\nimport { IOutlet, IRouter } from \"./components/types\";\nimport { config } from \"./config\";\nimport { matchRoutes } from \"./matchRoutes\";\nimport { sliceBasename } from \"./normalizePathname\";\nimport { raiseError } from \"./raiseError\";\nimport { showRouteContent } from \"./showRouteContent\";\n\n/**\n * ルートを適用する。返り値は committed — guard 拒否(GuardCancel)で中断された\n * 場合のみ false。呼び出し側はこれで commit 後の処理(フォールバック経路の\n * スクロール等)をゲートできる(docs/a11y-design.md §3-2 / D4)。\n *\n * `search` は現在 URL のクエリ(\"?k=v\" 形式または \"\")。隠れた `window.location`\n * 読みにせず呼び出し元が明示供給する(docs/router-state-contract-design.md §3.6 —\n * テスト容易性と権威の明示のため)。\n */\nexport async function applyRoute(\n routerNode: IRouter,\n outlet: IOutlet,\n fullPath: string,\n lastPath: string,\n search: string = \"\"\n): Promise<boolean> {\n const path = sliceBasename(fullPath, routerNode.basename);\n\n // same-match 高速パス(docs/router-state-contract-design.md §4.4)。\n // guard はルートへの進入を守るものであり、クエリ変化は進入ではない —\n // matchRoutes / guard 相 / showRouteContent をスキップし、transition-runner にも\n // 渡さず(DOM mutation が無いのに arbiter へ空遷移を依頼しない)、a11y の\n // 再アナウンスもしない。search を commit し、§3.4 の規範で発火する\n // (この場合 search-changed のみが発火し得る)。\n if (routerNode.isSameMatch(path)) {\n routerNode.commitNavigation({\n params: routerNode.params,\n typedParams: routerNode.typedParams,\n routeName: routerNode.routeName,\n search,\n path,\n });\n return true;\n }\n\n let matchResult = matchRoutes(routerNode, path);\n if (!matchResult) {\n if (routerNode.fallbackRoute) {\n matchResult = {\n routes: [routerNode.fallbackRoute],\n params: {},\n typedParams: {},\n path: path,\n lastPath: lastPath\n };\n } else {\n raiseError(`${config.tagNames.router} No route matched for path: ${path}`);\n }\n }\n matchResult.lastPath = lastPath;\n const lastRoutes = outlet.lastRoutes;\n const committed = await showRouteContent(routerNode, matchResult, lastRoutes);\n // GuardCancel により中断された場合は state を更新しない\n // (拒否されたパスでの wcs-router:path-changed 発火を防ぐため)\n if (!committed) return false;\n // if successful, update router and outlet state\n // routeName は最深マッチの name。fallback 時は fallback ルートの name(D8)。\n routerNode.commitNavigation({\n params: matchResult.params,\n typedParams: matchResult.typedParams,\n routeName: matchResult.routes[matchResult.routes.length - 1]?.name ?? \"\",\n search,\n path,\n });\n outlet.lastRoutes = matchResult.routes;\n // オプトインの focus/announce は commit 直後・mutate() の外で適用する(D3)。\n // 初回描画(lastRoutes が空)では動かない — ページロードはブラウザの担当で、\n // view-transition の「初回は包まない」と同じ判定・同じ理由(§3-5)。\n // guard 拒否は上の return false で既に抜けている(D4)。\n if (lastRoutes.length > 0) {\n applyA11yPolicies(routerNode, matchResult);\n }\n return true;\n}\n","/**\n * Navigation API の `navigate()` 戻り値(NavigationResult)。\n * - `committed`: URL がアドレスバーに反映された時点で resolve\n * - `finished`: 全 intercept handler 完了で resolve\n * Polyfill や mock 環境では戻り値が undefined のケースもあるため、\n * 戻り値全体を optional として扱う。\n */\nexport type NavigationResultLike = {\n committed?: Promise<unknown>;\n finished?: Promise<unknown>;\n};\n\nexport type NavigationNavigateOptions = {\n history?: \"auto\" | \"push\" | \"replace\";\n};\n\nexport type NavigationLike = {\n navigate?: (url: string, options?: NavigationNavigateOptions) => NavigationResultLike | void | undefined;\n addEventListener: (type: string, listener: EventListenerOrEventListenerObject) => void;\n removeEventListener: (type: string, listener: EventListenerOrEventListenerObject) => void;\n};\n\nexport function getNavigation(): NavigationLike | null {\n const nav = (window as any).navigation as NavigationLike | undefined;\n if (!nav) {\n return null;\n }\n if (typeof nav.addEventListener !== \"function\" || typeof nav.removeEventListener !== \"function\") {\n return null;\n }\n return nav;\n}\n","/**\n * searchParams の正規化(docs/router-state-contract-design.md §3.5)。\n *\n * - 読み取り形状は `Record<string, string>`。`URLSearchParams` の生ハンドルは\n * 露出しない(生ハンドルを state に入れない規範)。\n * - キー重複(`?tag=a&tag=b`)は **last-wins**。\n * - 値のデコードは `URLSearchParams` に委ねる(`+` → space を含む)。\n * - 露出オブジェクトは freeze したスナップショット(消費側の変異は loud failure)。\n */\nexport function parseSearchParams(search: string): Record<string, string> {\n const result: Record<string, string> = {};\n for (const [key, value] of new URLSearchParams(search)) {\n result[key] = value;\n }\n return Object.freeze(result);\n}\n\n/**\n * Record の shallow 比較。params の変化判定(§3.3: 文字列値の shallow 比較)と\n * searchParams の変化判定(§3.5: キーをソートした pair 列の比較 = 順序非依存)に\n * 共通で使う。\n */\nexport function shallowEqualRecords(\n a: Record<string, unknown>,\n b: Record<string, unknown>\n): boolean {\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) return false;\n for (const key of aKeys) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (a[key] !== b[key]) return false;\n }\n return true;\n}\n","/**\n * ナビゲーションターゲット文字列の分解(docs/router-state-contract-design.md §4.1)。\n *\n * ナビゲーションターゲットを受理する全地点(Router.navigate / Link の href 組み立て・\n * active 判定)で使う共通規範。最初の `#` より後を hash、残りの最初の `?` より後を\n * search として分離する。normalizePathname / basename 結合は pathname にのみ適用し、\n * search / hash は再結合して URL を組み立てる。\n *\n * 受理形:\n * - `/path` / `path` — クエリ無し遷移(現在のクエリは引き継がない)\n * - `/path?k=v` — パス遷移+クエリ指定\n * - `?k=v` — クエリのみ遷移(pathname 空 = 現在値を維持する合図)\n * - `?` — クエリの全消去(pathname 維持)\n */\nexport interface IUrlTarget {\n /** クエリ・ハッシュを除いたパス部。クエリのみ遷移では \"\" */\n pathname: string;\n /** \"?k=v\" 形式(先頭 `?` 込み)。無ければ \"\" */\n search: string;\n /** \"#x\" 形式(先頭 `#` 込み)。無ければ \"\" */\n hash: string;\n}\n\nexport function splitUrlTarget(to: string): IUrlTarget {\n let rest = to;\n let hash = \"\";\n const hashIndex = rest.indexOf(\"#\");\n if (hashIndex >= 0) {\n hash = rest.slice(hashIndex);\n rest = rest.slice(0, hashIndex);\n }\n let search = \"\";\n const searchIndex = rest.indexOf(\"?\");\n if (searchIndex >= 0) {\n search = rest.slice(searchIndex);\n rest = rest.slice(0, searchIndex);\n }\n return { pathname: rest, search, hash };\n}\n\n/**\n * URL 再結合時の search。`?` 単独は「クエリの全消去」の合図なので \"\" にする。\n */\nexport function effectiveSearch(search: string): string {\n return search === \"?\" ? \"\" : search;\n}\n","// ===========================================================================\n// AUTO-GENERATED FILE - DO NOT EDIT.\n// Generated from /protocol/upgrade-properties.ts by scripts/sync-protocol-types.mjs.\n// Run `node scripts/sync-protocol-types.mjs` after editing the source.\n// ===========================================================================\n\n// custom element の property upgrade — `static wcBindable.inputs` に宣言した入力のうち、\n// 要素が upgrade される前に代入された own データプロパティを取り込み直す。\n//\n// なぜ必要か:\n// 未定義タグの要素は素の HTMLElement なので、`el.url = \"...\"` は own データプロパティを作る。\n// upgrade 後にクラスの accessor が prototype へ入っても own プロパティが優先されるため、\n// setter は二度と呼ばれず、値は要素へ届かないまま消える(エラーも警告も出ない)。\n// 常にプロパティ代入を行う framework(Angular の `[prop]`、Lit の `.prop=`、\n// Solid の `prop:`、Vue の `.prop` 修飾子)× 遅延定義(autoloader / CDN / code-split)で\n// 常態的に起きる。docs/architecture-hardening/13-framework-adapter-binding-constraints.md §1.2。\n//\n// 安全側の判定:\n// own プロパティがあっても、prototype チェーンに accessor が無ければ「シャドウ」ではなく\n// その own プロパティ自体が正規の格納先なので触らない(public class field を壊さない)。\n//\n// SINGLE SOURCE OF TRUTH: edit only this file (/protocol/upgrade-properties.ts), then run\n// `node scripts/sync-protocol-types.mjs` to regenerate the per-package copies\n// (packages/<pkg>/src/protocol/upgradeProperties.ts). Those copies are generated — do not edit them.\nimport { IWcBindable } from \"./wcBindable.js\";\n\nfunction hasAccessorOnPrototype(target: object, name: string): boolean {\n let proto = Object.getPrototypeOf(target);\n while (proto !== null) {\n const descriptor = Object.getOwnPropertyDescriptor(proto, name);\n if (descriptor !== undefined) {\n return typeof descriptor.get === \"function\" || typeof descriptor.set === \"function\";\n }\n proto = Object.getPrototypeOf(proto);\n }\n return false;\n}\n\n/**\n * `connectedCallback` の先頭で呼ぶ。宣言済み input のうち upgrade 前の代入で\n * accessor をシャドウしている own プロパティを、delete → 再代入で setter に通し直す。\n *\n * - 冪等: 再代入は accessor を通るので own プロパティは残らず、2 回目以降は no-op。\n * - 宣言に `inputs` が無い要素、`wcBindable` を持たない要素では何もしない。\n * - 値の意味は変えない。今まで捨てられていた代入が届くようになる一方向の変化。\n */\nexport function upgradeProperties(element: object): void {\n const declaration = (element as { constructor?: { wcBindable?: IWcBindable } }).constructor?.wcBindable;\n const inputs = declaration?.inputs;\n if (inputs === undefined) return;\n for (const input of inputs) {\n const name = input.name;\n if (!Object.prototype.hasOwnProperty.call(element, name)) continue;\n if (!hasAccessorOnPrototype(element, name)) continue;\n const record = element as Record<string, unknown>;\n const value = record[name];\n delete record[name];\n record[name] = value;\n }\n}\n","/**\n * SSR モード判定。@wcstack/server の renderToString がレンダリング中の document\n * 要素へ `data-wcs-server` 属性を設定する。state 側(packages/state/src/config.ts の\n * inSsr)と同じ規約 — パッケージ間 import はせず、属性規約で合意する\n * (docs/ssr-router-design.md §3.2)。\n *\n * キャッシュしない: SSR モードはプロセスの属性ではなく「現在の document」の属性。\n * サーバーレンダリングの後、同一プロセスでクライアント側の起動(SSR→hydrate の\n * e2e)が走り得るため、呼び出しごとに現在の document を見る。\n */\nexport function inSsr(): boolean {\n const html = document.documentElement;\n return html ? html.hasAttribute('data-wcs-server') : false;\n}\n","/**\n * SSR ハイドレーションマーカー(docs/ssr-router-design.md §3.3 / §4)。\n *\n * サーバー(_renderForSsr)が書き、クライアント(_hydrateFromSsr / Link の採用)が\n * 読む。キーは route の absolutePath — placeholder の UUID はパースごとに再生成され\n * サーバーとクライアントで一致しないため、同一 template から決定的に導ける\n * absolutePath だけが突合キーになれる。\n */\n\n/** サーバー描画済み outlet の目印(要素属性) */\nexport const SSR_OUTLET_ATTR = 'data-wcs-ssr';\n\n/** Link がサーバーで生成した anchor の目印(要素属性)。クライアントが採用して外す */\nexport const SSR_LINK_ATTR = 'data-wcs-ssr-link';\n\n/** route placeholder コメントの安定キー形式(`@@wcs-route-ph:<absolutePath>`) */\nexport const ROUTE_PH_PREFIX = '@@wcs-route-ph:';\n\n/** 表示中ルート内容の開始マーカー(`@@wcs-route-start:<absolutePath>`) */\nexport const ROUTE_START_PREFIX = '@@wcs-route-start:';\n\n/** 表示中ルート内容の終了マーカー(`@@wcs-route-end:<absolutePath>`) */\nexport const ROUTE_END_PREFIX = '@@wcs-route-end:';\n","import { parse } from \"../parse.js\";\nimport { createOutlet } from \"./Outlet.js\";\nimport { config } from \"../config.js\";\nimport { raiseError } from \"../raiseError.js\";\nimport { ILink, IOutlet, IRoute, IRouteChildContainer, IRouteMatchResult, IRouter, IRouterCommit } from \"./types.js\";\nimport { IWcBindable } from \"../types.js\";\nimport { applyRoute } from \"../applyRoute.js\";\nimport { getNavigation } from \"../Navigation.js\";\nimport { matchRoutes } from \"../matchRoutes.js\";\nimport { normalizeBasename, normalizePathname, sliceBasename } from \"../normalizePathname.js\";\nimport { parseSearchParams, shallowEqualRecords } from \"../searchParams.js\";\nimport { splitUrlTarget, effectiveSearch } from \"../splitUrlTarget.js\";\nimport { upgradeProperties } from \"../protocol/upgradeProperties.js\";\nimport { bindSubtree, getBinder } from \"../protocol/binder.js\";\nimport { inSsr } from \"../inSsr.js\";\nimport { runGuardPhase } from \"../showRouteContent.js\";\nimport { assignRouteParams } from \"../showRoute.js\";\nimport {\n ROUTE_END_PREFIX,\n ROUTE_PH_PREFIX,\n ROUTE_START_PREFIX,\n SSR_OUTLET_ATTR,\n} from \"../ssrMarkers.js\";\n\ninterface NavigateEventLike {\n canIntercept: boolean;\n hashChange: boolean;\n downloadRequest: string | null;\n destination: { url: string };\n /** Navigation API の navigationType。mock / polyfill では欠け得る */\n navigationType?: \"push\" | \"replace\" | \"traverse\" | \"reload\";\n intercept: (options: {\n handler: () => Promise<void>;\n scroll?: \"after-transition\" | \"manual\";\n focusReset?: \"after-transition\" | \"manual\";\n }) => void;\n}\n\nconst EMPTY_RECORD: Record<string, never> = Object.freeze({});\n\n/**\n * AppRoutes - Root component for @wcstack/router\n *\n * Container element that manages route definitions and navigation.\n */\nexport class Router extends HTMLElement implements IRouter {\n /**\n * @wcstack/server の待機プロトコル(docs/ssr-router-design.md §3.2)。\n * renderToString はこのフラグを持つ要素の connectedCallbackPromise を待って\n * からシリアライズする — 初期ルート適用の完了がサーバー出力に反映される。\n */\n static hasConnectedCallbackPromise = true;\n\n static wcBindable: IWcBindable = {\n protocol: \"wc-bindable\",\n version: 1,\n properties: [\n { name: \"navigateUrl\", event: \"wcs-router:navigate-url-changed\", semantics: \"state\" },\n { name: \"replaceUrl\", event: \"wcs-router:replace-url-changed\", semantics: \"state\" },\n { name: \"path\", event: \"wcs-router:path-changed\", semantics: \"state\" },\n // 観測面(docs/router-state-contract-design.md §3.1)— output-only\n // (properties のみ・inputs に無い)。state 側の既存規範により authority は\n // element(attach 時に要素の現在値を読む)となり、state→element 書き込みは\n // 恒久ブロックされる。params-changed の detail は { params, typedParams }\n // なので、両プロパティとも getter で分派する。\n { name: \"params\", event: \"wcs-router:params-changed\", semantics: \"state\",\n getter: (e: Event) => (e as CustomEvent).detail.params },\n { name: \"typedParams\", event: \"wcs-router:params-changed\", semantics: \"state\",\n getter: (e: Event) => (e as CustomEvent).detail.typedParams },\n { name: \"searchParams\", event: \"wcs-router:search-changed\", semantics: \"state\" },\n { name: \"routeName\", event: \"wcs-router:route-name-changed\", semantics: \"state\" },\n ],\n // `navigateUrl` は observable output であると同時に settable な書き込み面でもある\n // (setter が navigate() を起動し、完了後に自分で null へ戻す)。properties にだけ\n // 宣言すると binding core は output-only とみなし、state → element の書き込みを\n // 抑止するため、state 経由のプログラム遷移が成立しなくなる。`path` は setter が\n // navigate せず内部値の反映だけなので、意図的に output のままにしている。\n inputs: [\n { name: \"basename\", attribute: \"basename\" },\n { name: \"navigateUrl\" },\n { name: \"replaceUrl\" },\n ],\n commands: [\n { name: \"navigate\", async: true },\n { name: \"replace\", async: true },\n ],\n };\n\n private _outlet: IOutlet | null = null;\n private _template: HTMLTemplateElement | null = null;\n private _routeChildNodes: IRoute[] = [];\n private _basename: string = '';\n private _path: string = '';\n private _initialized: boolean = false;\n private _fallbackRoute: IRoute | null = null;\n private _listeningPopState: boolean = false;\n private _listeningNavigate: boolean = false;\n private _navigateUrl: string | null = null;\n private _replaceUrl: string | null = null;\n private _disconnectedDuringInit: boolean = false;\n private _initializing: boolean = false;\n private _a11yRegion: HTMLElement | null = null;\n // 観測面の内部値(docs/router-state-contract-design.md §3)。露出オブジェクトは\n // frozen スナップショット — params は router の所有物であり、消費側の変異は\n // silent corruption ではなく loud failure にする。\n private _params: Record<string, string> = EMPTY_RECORD;\n private _typedParams: Record<string, any> = EMPTY_RECORD;\n private _searchParams: Record<string, string> = EMPTY_RECORD;\n private _routeName: string = '';\n /** 最初の成功 commit を通過したか(§4.4 の初回ガード) */\n private _hasCommitted: boolean = false;\n private _connectedCallbackPromise: Promise<void>;\n private _resolveConnectedCallback: (() => void) | null = null;\n private _rejectConnectedCallback: ((reason?: unknown) => void) | null = null;\n\n constructor() {\n super();\n this._connectedCallbackPromise = new Promise<void>((resolve, reject) => {\n this._resolveConnectedCallback = resolve;\n this._rejectConnectedCallback = reject;\n });\n // 初期化の失敗は reject として配管するが、この Promise は readiness プロトコルの\n // 消費者(renderToString / @wcstack/testing の mount)が居るときだけ await される。\n // 誰も await しない通常のページやユニットテストで reject を「未処理」として\n // 報告させないよう、ここで観測済みにしておく。await する側には従来どおり\n // reject が届く(別の consumer が付いても settled 結果は共有される)。\n this._connectedCallbackPromise.catch(() => {});\n }\n\n get connectedCallbackPromise(): Promise<void> {\n return this._connectedCallbackPromise;\n }\n\n get a11yRegion(): HTMLElement | null {\n return this._a11yRegion;\n }\n\n get focusPolicy(): string | null {\n return this.getAttribute('focus');\n }\n\n get announcePolicy(): string | null {\n return this.getAttribute('announce');\n }\n\n /**\n * `announce=` 用 live region を <wcs-router> 直下に空のまま用意する\n * (docs/a11y-design.md §3-4)。\n * - 告知より**前**から DOM に居ないと SR に読まれないため、announce 時の\n * 遅延生成はできない。\n * - outlet 配下はナビゲーションごとに破棄され、オプトインで shadow root にも\n * なる。document.body 直下は router の寿命を超えて漏れ、マルチ router で\n * 競合する。よって配置は <wcs-router> 直下の一択。\n * - display:none は live region を殺すため、sr-only クリップで隠す。\n */\n private _ensureA11yRegion(): void {\n if (this._a11yRegion !== null) {\n return;\n }\n const region = document.createElement('div');\n region.setAttribute('role', 'status');\n region.style.position = 'absolute';\n region.style.width = '1px';\n region.style.height = '1px';\n region.style.overflow = 'hidden';\n region.style.clipPath = 'inset(50%)';\n region.style.whiteSpace = 'nowrap';\n this.appendChild(region);\n this._a11yRegion = region;\n }\n\n /**\n * Normalize a URL pathname to a route path.\n * 共通実装は normalizePathname.ts を参照(Link との挙動整合のため)。\n */\n private _normalizePathname(_path: string): string {\n return normalizePathname(_path);\n }\n\n /**\n * Normalize basename.\n * 共通実装は normalizePathname.ts を参照。\n */\n private _normalizeBasename(_path: string): string {\n return normalizeBasename(_path);\n }\n\n private _joinInternalPath(basename: string, to: string): string {\n const base = this._normalizeBasename(basename);\n // accept \"about\" as \"/about\"\n let path = to.startsWith(\"/\") ? to : \"/\" + to;\n path = this._normalizePathname(path);\n if (!base) return path;\n // keep \"/app/\" for root\n if (path === \"/\") return base + \"/\";\n return base + path;\n }\n\n private _notifyLocationChange(): void {\n // For environments without Navigation API (and for Link active-state updates)\n window.dispatchEvent(new CustomEvent(\"wcs:navigate\"));\n }\n\n private _getBasename(): string {\n const base = new URL(document.baseURI);\n let path = base.pathname || \"/\";\n if (path === \"/\") {\n return \"\";\n }\n return this._normalizeBasename(path);\n }\n\n get basename(): string {\n return this._basename;\n }\n\n private _getOutlet(): IOutlet {\n // 自身を起点に兄弟・子孫から Outlet を探す(マルチ Router 対応)\n const next = this.nextElementSibling;\n if (next && next.matches(config.tagNames.outlet)) {\n return next as unknown as IOutlet;\n }\n // なければ新規作成して自身の直後に挿入\n const outlet = createOutlet();\n if (this.parentNode) {\n this.parentNode.insertBefore(outlet, this.nextSibling);\n } else {\n document.body.appendChild(outlet);\n }\n return outlet;\n }\n\n private _getTemplate() {\n const template = this.querySelector(\"template\");\n return template;\n }\n \n get outlet(): IOutlet {\n if (!this._outlet) {\n raiseError(`${config.tagNames.router} has no outlet.`);\n }\n return this._outlet;\n }\n\n get template(): HTMLTemplateElement {\n if (!this._template) {\n raiseError(`${config.tagNames.router} has no template.`);\n }\n return this._template;\n }\n\n get routeChildNodes(): IRoute[] {\n return this._routeChildNodes;\n }\n\n get path(): string {\n return this._path;\n }\n /**\n * applyRoute 内で設定される値です。\n */\n set path(value: string) {\n const changed = this._path !== value;\n this._path = value;\n if (changed) {\n this.dispatchEvent(new CustomEvent(\"wcs-router:path-changed\", {\n detail: value,\n bubbles: true,\n }));\n }\n }\n\n get params(): Record<string, string> {\n return this._params;\n }\n\n get typedParams(): Record<string, any> {\n return this._typedParams;\n }\n\n get searchParams(): Record<string, string> {\n return this._searchParams;\n }\n\n get routeName(): string {\n return this._routeName;\n }\n\n /**\n * same-match 判定(docs/router-state-contract-design.md §4.4)。\n *\n * 比較は **basename スライス後の path 同士**(`_path` はスライス後で保存済み)。\n * 判定が必要な地点は 2 箇所 — `_onNavigateFunc` の intercept オプション決定時と\n * `applyRoute` の入口分岐 — で、両方がこの単一実装を呼ぶ。\n *\n * 初回ガード: 最初の成功 commit より前には適用しない。初期 `_path = \"\"` が\n * 正規化後パス(常に `/` 始まり)と一致しないため偶然安全だが、\n * normalizePathname の実装詳細に依存させず規範として明示する。\n */\n isSameMatch(path: string): boolean {\n if (!this._hasCommitted) return false;\n return this._path === path;\n }\n\n /**\n * 観測面のコミットと発火(docs/router-state-contract-design.md §3.4)。\n *\n * 全内部値を先にコミットし、その後で初めてイベントを発火する — どのイベントの\n * リスナーから要素プロパティを読んでも、遷移後スナップショットの一貫した値が\n * 見える。発火順序は params → route-name → search → path。`path` を最後に\n * 置くのは、既存例で `path` が「ナビゲーション完了」の信号として使われている\n * ため。各イベントは変化した commit のみ発火する。\n */\n commitNavigation(commit: IRouterCommit): void {\n const nextParams = Object.freeze({ ...commit.params });\n const nextTypedParams = Object.freeze({ ...commit.typedParams });\n const nextSearchParams = parseSearchParams(commit.search);\n const paramsChanged = !shallowEqualRecords(this._params, nextParams);\n const routeNameChanged = this._routeName !== commit.routeName;\n const searchChanged = !shallowEqualRecords(this._searchParams, nextSearchParams);\n const pathChanged = this._path !== commit.path;\n // --- 先に全内部値をコミット ---\n // 変化した面だけ差し替える(ナビゲーションごとに新しいオブジェクトになるので\n // state の same-value guard を正しく通過する。不変の面は同一性を保つ)。\n if (paramsChanged) {\n this._params = nextParams;\n this._typedParams = nextTypedParams;\n }\n if (routeNameChanged) {\n this._routeName = commit.routeName;\n }\n if (searchChanged) {\n this._searchParams = nextSearchParams;\n }\n this._path = commit.path;\n this._hasCommitted = true;\n // --- その後で発火(順序規範: params → route-name → search → path) ---\n if (paramsChanged) {\n this.dispatchEvent(new CustomEvent(\"wcs-router:params-changed\", {\n detail: { params: this._params, typedParams: this._typedParams },\n bubbles: true,\n }));\n }\n if (routeNameChanged) {\n this.dispatchEvent(new CustomEvent(\"wcs-router:route-name-changed\", {\n detail: this._routeName,\n bubbles: true,\n }));\n }\n if (searchChanged) {\n this.dispatchEvent(new CustomEvent(\"wcs-router:search-changed\", {\n detail: this._searchParams,\n bubbles: true,\n }));\n }\n if (pathChanged) {\n this.dispatchEvent(new CustomEvent(\"wcs-router:path-changed\", {\n detail: commit.path,\n bubbles: true,\n }));\n }\n }\n\n get fallbackRoute(): IRoute | null {\n return this._fallbackRoute;\n }\n /**\n * Routeのfallback属性がある場合にそのルートを設定します。\n */\n set fallbackRoute(value: IRoute | null) {\n this._fallbackRoute = value;\n }\n\n get navigateUrl(): string | null {\n return this._navigateUrl;\n }\n\n set navigateUrl(value: string | null) {\n if (value === null || value === undefined || value === \"\") return;\n // 既に同一 URL の navigate 中なら再起動しない\n if (this._navigateUrl === value) return;\n this._navigateUrl = value;\n this.navigate(value).catch((err) => {\n console.error(`${config.tagNames.router} navigate failed:`, err);\n }).finally(() => {\n this._navigateUrl = null;\n this.dispatchEvent(new CustomEvent(\"wcs-router:navigate-url-changed\", {\n detail: null,\n bubbles: true,\n }));\n });\n }\n\n get replaceUrl(): string | null {\n return this._replaceUrl;\n }\n\n /**\n * navigateUrl と完全同型の null-idle transient(docs/router-state-contract-design.md §4.2)。\n * null は待機・書き込みで replace() を起動・完了で自己リセットして\n * `wcs-router:replace-url-changed`(detail: null)を発火する。\n */\n set replaceUrl(value: string | null) {\n if (value === null || value === undefined || value === \"\") return;\n // 既に同一 URL の replace 中なら再起動しない\n if (this._replaceUrl === value) return;\n this._replaceUrl = value;\n this.replace(value).catch((err) => {\n console.error(`${config.tagNames.router} replace failed:`, err);\n }).finally(() => {\n this._replaceUrl = null;\n this.dispatchEvent(new CustomEvent(\"wcs-router:replace-url-changed\", {\n detail: null,\n bubbles: true,\n }));\n });\n }\n\n async navigate(path: string): Promise<void> {\n await this._performNavigation(path, false);\n }\n\n /**\n * navigateUrl(push)の対になる replace 遷移(docs/router-state-contract-design.md §4.2)。\n * Navigation API では `navigation.navigate(url, { history: \"replace\" })`、\n * フォールバックでは `history.replaceState` + applyRoute + 通知。\n */\n async replace(path: string): Promise<void> {\n await this._performNavigation(path, true);\n }\n\n private async _performNavigation(path: string, replace: boolean): Promise<void> {\n // クエリ / ハッシュ込みターゲットの受理(docs/router-state-contract-design.md §4.1)。\n // normalizePathname / basename 結合は pathname にのみ適用し、search / hash は\n // 再結合して URL に渡す。pathname 空(\"?k=v\" / \"?\" / \"#x\")は現在の pathname を\n // 維持する。search / hash まで空(navigate(\"\"))は従来どおりルート扱い。\n const target = splitUrlTarget(path);\n const fullPath =\n target.pathname === \"\" && (target.search !== \"\" || target.hash !== \"\")\n ? window.location.pathname\n : this._joinInternalPath(this._basename, target.pathname);\n const url = fullPath + effectiveSearch(target.search) + target.hash;\n const navigation = getNavigation();\n if (navigation?.navigate) {\n // Navigation API は { committed, finished } を返す。\n // finished を await することで、navigate() の Promise が\n // 実際のナビゲーション完了まで pending となり、_navigateUrl / _replaceUrl の\n // 二重起動ガード (setter 内の同一値チェック) が適切な時間ウィンドウで機能する。\n // Polyfill や mock 環境で undefined / 戻り値なしのケースもあるため optional chaining。\n const result = replace\n ? navigation.navigate(url, { history: \"replace\" })\n : navigation.navigate(url);\n await result?.finished;\n } else {\n if (replace) {\n history.replaceState(null, '', url);\n } else {\n history.pushState(null, '', url);\n }\n // セグメントマッチにはクエリ・ハッシュを渡さない(渡すと 404 に落ちる —\n // §1.1 欠陥 6 の修理)。search は明示引数で供給する(§3.6)。\n const normalizedFullPath = this._normalizePathname(fullPath);\n const sameMatch = this.isSameMatch(sliceBasename(normalizedFullPath, this._basename));\n const committed = await applyRoute(\n this, this.outlet, normalizedFullPath, this._path, effectiveSearch(target.search)\n );\n // 修理・既定オン(docs/a11y-design.md §3-2): Navigation API 経路の仕様既定\n // (scroll: \"after-transition\" — push はトップへ)とフォールバック経路を揃える。\n // guard 拒否(committed === false)では動かさない。_onPopState 側は\n // history.scrollRestoration によるブラウザ復元が正解なので、決してスクロールしない。\n // same-match(クエリのみ遷移)でも動かさない — 1 打鍵ごとにトップへ戻る事故の\n // 防止(docs/router-state-contract-design.md §4.4)。\n if (committed && !sameMatch) {\n window.scrollTo(0, 0);\n }\n this._notifyLocationChange();\n }\n }\n\n /**\n * basename 配下の URL かどうかを判定する。\n * basename が空の場合はすべての URL にマッチする。\n */\n private _isOwnPath(fullPath: string): boolean {\n if (this._basename === \"\") return true;\n return fullPath === this._basename || fullPath.startsWith(this._basename + \"/\");\n }\n\n private _onNavigateFunc(navEvent: NavigateEventLike) {\n if (\n !navEvent.canIntercept ||\n navEvent.hashChange ||\n navEvent.downloadRequest !== null\n ) {\n return;\n }\n const url = new URL(navEvent.destination.url);\n const fullPath = this._normalizePathname(url.pathname);\n // basename 配下でない URL は無視(マルチ Router 対応)\n if (!this._isOwnPath(fullPath)) return;\n // same-match 判定は applyRoute 内の分岐と同じ共有実装(§4.4: スライス後比較)。\n // intercept オプションは applyRoute 実行前に決める必要があるためここでも判定する。\n const sameMatch = this.isSameMatch(sliceBasename(fullPath, this._basename));\n // scroll は navigationType で分岐する: push / replace の same-match は \"manual\"\n // (検索ボックスにバインドした書き込みの 1 打鍵ごとにスクロールがトップへ戻る\n // 事故の防止)。traverse(戻る/進む)は仕様既定 = ブラウザのスクロール位置復元を\n // 維持する — ?page=2 から戻る操作でスクロールが固定される事故を防ぐ。\n const sameMatchScrollManual =\n sameMatch &&\n (navEvent.navigationType === \"push\" || navEvent.navigationType === \"replace\");\n const search = url.search;\n const routesNode = this;\n navEvent.intercept({\n handler: async () => {\n try {\n await applyRoute(routesNode, routesNode.outlet, fullPath, routesNode.path, search);\n } catch (err) {\n console.error(`${config.tagNames.router} applyRoute failed:`, err);\n throw err;\n }\n },\n // 仕様既定の明示(same-match 以外は挙動変更なし)。scroll: push はトップへ /\n // traverse はスクロール位置復元、focusReset: [autofocus] か body へ。この委譲が\n // router のアクセシビリティ契約であり、ここを \"manual\" に変える変更は\n // 契約の変更にあたる(docs/a11y-design.md §3-1)。same-match の扱いは\n // docs/router-state-contract-design.md §4.4 / D6b。\n scroll: sameMatchScrollManual ? \"manual\" : \"after-transition\",\n // focus= 指定時のみ manual。渡さないと router のフォーカス移動とブラウザの\n // after-transition リセットが二重処理になる(docs/a11y-design.md §3-5)。\n // same-match は常に manual — 1 打鍵ごとにフォーカスが body へ飛ぶ事故の防止。\n focusReset: sameMatch || routesNode.focusPolicy !== null ? \"manual\" : \"after-transition\",\n });\n }\n\n private _onNavigate = this._onNavigateFunc.bind(this) as unknown as EventListener;\n\n private _onPopState = async () => {\n // back/forward for environments without Navigation API\n const fullPath = this._normalizePathname(window.location.pathname);\n // basename 配下でない URL は無視(マルチ Router 対応)\n if (!this._isOwnPath(fullPath)) return;\n // search は明示引数で供給(§3.6)。mock / 特殊環境で欠ける場合は \"\" 扱い\n await applyRoute(this, this.outlet, fullPath, this._path, window.location.search || \"\");\n this._notifyLocationChange();\n };\n\n private async _initialize(): Promise<void> {\n this._initializing = true;\n try {\n const ssr = inSsr();\n this._basename = this._normalizeBasename(\n this.getAttribute(\"basename\") || this._getBasename() || \"\"\n );\n const hasBaseTag = document.querySelector('base[href]') !== null;\n const url = new URL(window.location.href);\n if (this._basename === \"\" && !hasBaseTag && url.pathname !== \"/\") {\n raiseError(`${config.tagNames.router} basename is empty, but current path is not \"/\".`);\n }\n\n this._outlet = this._getOutlet();\n this._outlet.routesNode = this;\n this._template = this._getTemplate();\n if (!this._template) {\n raiseError(`${config.tagNames.router} should have a <template> child element.`);\n }\n // SSR: parse は template.content を破壊的に消費する(route 要素は中身を\n // 移された抜け殻になり、非 route ノードは fragment へ移動する)。\n // シリアライズ出力に完全なルート定義を残してクライアントが従来どおり\n // 起動できるよう、退避してパース後に復元する(docs/ssr-router-design.md §3.2)。\n const templateSnapshot = ssr ? this._template.content.cloneNode(true) : null;\n const fragment = await parse(this);\n // クライアント側でサーバー描画済み outlet(data-wcs-ssr)を見つけたら\n // 採用(adoption)を試みる。fragment はまだ入れない — 採用が成立すれば\n // fresh クローンは不要で、失敗したときだけ従来どおり流し込む(§4)。\n const adoptable = !ssr &&\n (this._outlet as unknown as Element).hasAttribute(SSR_OUTLET_ATTR);\n if (!adoptable) {\n this._outlet.rootNode.appendChild(fragment);\n }\n if (templateSnapshot !== null) {\n const content = this._template.content;\n while (content.firstChild) {\n content.removeChild(content.firstChild);\n }\n content.appendChild(templateSnapshot);\n }\n if (this.routeChildNodes.length === 0) {\n raiseError(`${config.tagNames.router} has no route definitions.`);\n }\n if (!ssr) {\n // 最初のナビゲーションより十分前に accessibility tree へ載せておく。\n // サーバーでは作らない — 初回描画はアナウンスしない既存規則により不要で、\n // 作るとクライアントの初期化が二重生成する(docs/ssr-router-design.md §3.2)。\n this._ensureA11yRegion();\n }\n\n const fullPath = this._normalizePathname(window.location.pathname);\n if (ssr) {\n await this._renderForSsr(fullPath);\n this._initialized = true;\n return;\n }\n if (adoptable) {\n const hydrated = await this._hydrateFromSsr(fullPath);\n if (hydrated) {\n this._notifyLocationChange();\n this._initialized = true;\n return;\n }\n // 採用不能: サーバー DOM を破棄して従来経路で描き直す。安全側は常に CSR\n // (state の hydrateBindings →失敗→ buildBindings と同じ二段構え、§2-3)。\n const outletEl = this._outlet as unknown as Element;\n outletEl.removeAttribute(SSR_OUTLET_ATTR);\n const rootNode = this._outlet.rootNode;\n while (rootNode.firstChild) {\n rootNode.removeChild(rootNode.firstChild);\n }\n rootNode.appendChild(fragment);\n }\n await applyRoute(this, this.outlet, fullPath, this._path, window.location.search || \"\");\n if (adoptable || getBinder() !== null) {\n // 初期描画の内容を binder へ差し出す。\n // - adoptable(描き直し): state がサーバー DOM を既にハイドレート済み(初期走査\n // 完了後)の場合、破棄と同時にそのバインドは死んでいる。\n // - binder が既に居る: state の初回走査が router の挿入より先に完了し得る\n // (`json=` の state は I/O 無しで走査を終える。/auto の文書順ではなく\n // bootstrap を先に済ませてから HTML を流し込むテストハーネス\n // — @wcstack/testing の mount() — で起きる。_renderForSsr と同じ理由)。\n // bind() は冪等なので、走査に間に合っていた分を再度渡しても壊れない。\n // binder が居なければ渡さない: state を読まないページで保留キューに\n // ノードを溜め続けないため(後から来る state は走査で拾う)。\n this._offerInitialContentToBinder();\n }\n this._notifyLocationChange();\n this._initialized = true;\n } finally {\n this._initializing = false;\n }\n }\n\n /**\n * サーバー描画済み outlet の採用(docs/ssr-router-design.md §4)。\n *\n * 検証(一意な absolutePath・マーカーの整合・現在 URL のマッチとの一致)を\n * **すべて DOM 変更の前に**行い、途中で断念しても半採用状態を残さない。\n * 成立すれば DOM 変更ゼロで「すでにナビゲート済み」の状態を確立する —\n * state がハイドレートしたバインディングは採用ノード上で生きたままになる。\n *\n * @returns 採用が成立した場合 true。false は呼び出し側(_initialize)が\n * サーバー DOM を破棄して従来描画にフォールバックする。\n */\n private async _hydrateFromSsr(fullPath: string): Promise<boolean> {\n const outletRoot = this.outlet.rootNode;\n\n // --- 検証相 ---\n\n // absolutePath → route の一意対応。重複定義(parse が警告するケース)は\n // マーカーの突合キーが曖昧になるため採用不能\n const routesByPath = new Map<string, IRoute>();\n let duplicated = false;\n this._forEachRoute((route) => {\n if (routesByPath.has(route.absolutePath)) {\n duplicated = true;\n return;\n }\n routesByPath.set(route.absolutePath, route);\n });\n if (duplicated) return false;\n\n // layout は採用の初版スコープ外 — slot 投影の状態はマーカーだけでは\n // 再構築できない(§4)。検出したらフォールバック\n if ((outletRoot as Element | ShadowRoot).querySelector(config.tagNames.layoutOutlet) !== null) {\n return false;\n }\n\n // マーカー走査(文書順の添字も記録し、start < end と範囲交差の検証に使う)\n const phByPath = new Map<string, Comment>();\n const startByPath = new Map<string, { comment: Comment, index: number }>();\n const endByPath = new Map<string, { comment: Comment, index: number }>();\n const walker = document.createTreeWalker(outletRoot, NodeFilter.SHOW_COMMENT);\n let index = 0;\n while (walker.nextNode()) {\n const comment = walker.currentNode as Comment;\n const data = comment.data;\n index++;\n if (data.startsWith(ROUTE_PH_PREFIX)) {\n const key = data.slice(ROUTE_PH_PREFIX.length);\n if (phByPath.has(key) || !routesByPath.has(key)) return false;\n phByPath.set(key, comment);\n } else if (data.startsWith(ROUTE_START_PREFIX)) {\n const key = data.slice(ROUTE_START_PREFIX.length);\n if (startByPath.has(key) || !routesByPath.has(key)) return false;\n startByPath.set(key, { comment, index });\n } else if (data.startsWith(ROUTE_END_PREFIX)) {\n const key = data.slice(ROUTE_END_PREFIX.length);\n if (endByPath.has(key) || !routesByPath.has(key)) return false;\n endByPath.set(key, { comment, index });\n }\n }\n // start / end は対で、同じ親の下で start が先。範囲同士は交差しない\n // (交差していると内容収集の兄弟走査が他ルートの領域へはみ出す)\n if (startByPath.size !== endByPath.size) return false;\n const ranges: { start: number, end: number }[] = [];\n for (const [key, start] of startByPath) {\n const end = endByPath.get(key);\n if (!end) return false;\n if (end.comment.parentNode !== start.comment.parentNode) return false;\n if (end.index <= start.index) return false;\n ranges.push({ start: start.index, end: end.index });\n }\n for (const a of ranges) {\n for (const b of ranges) {\n if (a.start < b.start && b.start < a.end && a.end < b.end) return false;\n }\n }\n\n // 現在 URL のマッチとマーカー集合の一致検証。サーバーが描いた集合と\n // クライアントが今マッチする集合が違えば、URL か template が変わっている\n const path = sliceBasename(fullPath, this._basename);\n let matchResult: IRouteMatchResult | null = matchRoutes(this, path);\n if (!matchResult) {\n if (this._fallbackRoute === null) return false;\n matchResult = {\n routes: [this._fallbackRoute],\n params: {},\n typedParams: {},\n path,\n lastPath: this._path,\n };\n }\n matchResult.lastPath = this._path;\n if (matchResult.routes.length !== startByPath.size) return false;\n for (const route of matchResult.routes) {\n if (!startByPath.has(route.absolutePath)) return false;\n }\n\n // placeholder の集合はサーバー出力の形と**完全一致**でなければならない。\n // serialize される placeholder = トップレベルルート + 各マッチルートの直接の子。\n // 不足を許すと、そのルートへの後続ナビゲーションが anchor を失って無言で\n // 空描画になる。過剰(非活性ルートの子孫の ph)を許すと、再設置がその\n // placeholder を fresh クローンの内容から奪い、当該ルートを到達不能にする\n const requiredPh = new Set<string>();\n for (const route of this.routeChildNodes) {\n requiredPh.add(route.absolutePath);\n }\n for (const matched of matchResult.routes) {\n for (const child of matched.routeChildNodes) {\n requiredPh.add(child.absolutePath);\n }\n }\n if (phByPath.size !== requiredPh.size) return false;\n for (const key of requiredPh) {\n if (!phByPath.has(key)) return false;\n }\n\n // --- 採用相(以後は成立が確定している) ---\n\n // placeholder をクライアント側インスタンスへ差し替える。以後のナビゲーションの\n // anchor がサーバーの位置にそのまま据わる\n for (const [key, comment] of phByPath) {\n const route = routesByPath.get(key)!;\n comment.parentNode!.replaceChild(route.placeHolder, comment);\n }\n\n // 各マッチルートの内容 = 自分の start/end マーカー間の兄弟ノード。ただし:\n // - 子ルートの範囲(start〜end)は**丸ごと除外**する — CSR で親の childNodeArray に\n // 入るのは子の placeholder だけで、子の内容は子が所有する(hideRoute の重複\n // 除去と showRoute の誤再挿入を防ぐ)\n // - Link が所有する anchor も除外する — CSR では anchor は Link の cc が後から\n // 生成する Link の所有物で、childNodeArray には決して入らない。入れると\n // hide → show の往復で Link 自身の anchor 管理と二重になり anchor が重複する\n for (const route of matchResult.routes) {\n const start = startByPath.get(route.absolutePath)!.comment;\n const end = endByPath.get(route.absolutePath)!.comment;\n const nodes: Node[] = [];\n const linkOwnedAnchors = new Set<Node>();\n let node: Node | null = start.nextSibling;\n while (node !== null && node !== end) {\n if (node.nodeType === Node.COMMENT_NODE) {\n const data = (node as Comment).data;\n if (data.startsWith(ROUTE_START_PREFIX)) {\n const childKey = data.slice(ROUTE_START_PREFIX.length);\n node = endByPath.get(childKey)!.comment.nextSibling;\n continue;\n }\n }\n if (linkOwnedAnchors.has(node)) {\n node = node.nextSibling;\n continue;\n }\n if (node.nodeType === Node.ELEMENT_NODE &&\n (node as Element).tagName.toLowerCase() === config.tagNames.link) {\n // anchor は host より後ろに居るので、先に登録してから host を収集する\n const anchor = (node as unknown as ILink).anchorElement;\n if (anchor !== null) {\n linkOwnedAnchors.add(anchor);\n }\n }\n nodes.push(node);\n node = node.nextSibling;\n }\n route.adoptChildNodes(nodes);\n }\n\n // マーカー除去と目印の撤去\n for (const { comment } of startByPath.values()) comment.remove();\n for (const { comment } of endByPath.values()) comment.remove();\n (this.outlet as unknown as Element).removeAttribute(SSR_OUTLET_ATTR);\n\n // 表示済み状態の確立。内容は既に見えているので挿入はしない — パラメータ\n // 配送(setParams / data-bind / active イベント)だけ CSR と同じ規則で行う。\n // lastRoutes を guard より先に立てるのは、guard 拒否後の fallback 遷移が\n // 採用済み内容を hideRoute できるようにするため(CSR と異なり、内容は\n // guard の結果を待たずにサーバーが既に見せている)\n for (const route of matchResult.routes) {\n assignRouteParams(route, matchResult);\n }\n this.outlet.lastRoutes = matchResult.routes;\n\n // guard 相 — 採用はレンダリング最適化であって認可のスキップではない(§4-3)。\n // 自前のサーバー出力は guard 付きルートを描かない(§2-4)ため通常は素通り\n // するが、手書きや他システム由来の SSR HTML に対する防衛として実行する\n if (!(await runGuardPhase(this, matchResult))) {\n // fallback へのナビゲーションが microtask で予約済み。lastRoutes は\n // 立っているので、その遷移が採用済み内容を隠す。commit はしない\n //(拒否されたパスでの path-changed 発火を防ぐ — applyRoute と同じ規範)\n return true;\n }\n\n // 観測面の commit(applyRoute と同じ規範・同じ順序)。\n // routes はマッチ結果か [fallback] で必ず非空(検証相で確定済み)\n this.commitNavigation({\n params: matchResult.params,\n typedParams: matchResult.typedParams,\n routeName: matchResult.routes[matchResult.routes.length - 1].name,\n search: window.location.search || \"\",\n path,\n });\n return true;\n }\n\n /**\n * SSR モードの初期ルート描画(docs/ssr-router-design.md §3.2)。\n * 初回描画は transition arbiter に渡らない既存規則(showRouteContent)により\n * 常に同期適用される。navigate / popstate リスナ・a11y region・\n * `wcs:navigate` 通知はサーバーでは不要(connectedCallback 側で登録しない)。\n */\n private async _renderForSsr(fullPath: string): Promise<void> {\n // guard バリア: guard 付きルートを含むマッチはサーバーで描かない(§2-4)。\n // guard は進入を守る認可点で、サーバーには判断材料(cookie 等)を渡す設計が\n // 無い。outlet を空・マーカー無しのまま返し、クライアントが従来どおり guard を\n // 実行して描く。ハンドラのロードは待たず属性の有無(hasGuard)で判定する。\n const path = sliceBasename(fullPath, this._basename);\n const matchResult = matchRoutes(this, path);\n const routes = matchResult?.routes\n ?? (this._fallbackRoute !== null ? [this._fallbackRoute] : []);\n if (routes.length === 0) {\n // マッチ無しかつ fallback 無し: クライアント(applyRoute)と同じ loud failure\n raiseError(`${config.tagNames.router} No route matched for path: ${path}`);\n }\n if (routes.some((route) => route.hasGuard)) {\n return;\n }\n await applyRoute(this, this.outlet, fullPath, this._path, window.location.search || \"\");\n // 表示済みルート内容を binder へ差し出す。クライアント初回描画の\n // 「state の走査時に既に document に居る」前提はサーバーでは成立しない —\n // state のロード方式(json 属性は I/O 無し・inline script は dynamic import)と\n // 文書順次第で、state の初回走査が router の挿入より先に完了し得る。binder は\n // 「未構築なら保留して構築末尾で引き取る/構築済みなら同期バインド」の両側を\n // 吸収する。bindRouteContent(showRouteContent 側)は使わない — binder 不在の\n // 警告はサーバーでは誤誘導になるため、warn 無しで直接差し出す。\n this._offerInitialContentToBinder();\n // ハイドレーションマーカー(Phase 2 の入力、§3.3)。キーは placeholder の\n // UUID ではなく absolutePath — UUID はパースごとに再生成されクライアントと\n // 一致しない。absolutePath は同一 template から決定的に導ける。\n // placeholder コメントも同じ理由で安定キーへ書き換える — クライアントの採用は\n // これを自分の placeholder(クライアント側インスタンス)と差し替える。\n this._forEachRoute((route) => {\n route.placeHolder.data = `${ROUTE_PH_PREFIX}${route.absolutePath}`;\n });\n (this.outlet as unknown as Element).setAttribute(SSR_OUTLET_ATTR, '');\n for (const route of this.outlet.lastRoutes) {\n // applyRoute 成功後の placeholder は必ず outlet 配下の DOM に居る\n const parentNode = route.placeHolder.parentNode!;\n const contentNodes = route.childNodeArray;\n const start = document.createComment(`${ROUTE_START_PREFIX}${route.absolutePath}`);\n const end = document.createComment(`${ROUTE_END_PREFIX}${route.absolutePath}`);\n parentNode.insertBefore(start, contentNodes[0] ?? route.placeHolder.nextSibling);\n const last = contentNodes[contentNodes.length - 1];\n parentNode.insertBefore(end, last ? last.nextSibling : start.nextSibling);\n }\n }\n\n /**\n * 初期表示ルートの内容を binder プロトコルへ差し出す。SSR 描画(_renderForSsr)と\n * ハイドレーション不能時の描き直し(state が先にハイドレートを終えている可能性が\n * ある)の両方から呼ぶ。bind() は冪等なので余分に差し出しても壊れない。\n */\n private _offerInitialContentToBinder(): void {\n for (const route of this.outlet.lastRoutes) {\n for (const node of route.childNodeArray) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n bindSubtree(node);\n }\n }\n }\n }\n\n /** ルートツリー全体(ネスト含む)への走査 */\n private _forEachRoute(\n callback: (route: IRoute) => void,\n container: IRouteChildContainer = this,\n ): void {\n for (const route of container.routeChildNodes) {\n callback(route);\n this._forEachRoute(callback, route);\n }\n }\n\n async connectedCallback() {\n // upgrade 前に代入された input を取り込み直す(doc 13 §1.2 / Phase A1)。\n // await より前に同期で行い、初期化が古い値を読まないようにする。\n upgradeProperties(this);\n // SSR モード(docs/ssr-router-design.md §3.2):\n // - enable-ssr 無し → サーバーでは一切初期化しない(クライアント専用 = 部分 CSR)\n // - enable-ssr あり → SSR 初期化のみ。navigate / popstate リスナは登録しない\n // どちらも connectedCallbackPromise を必ず決着させる — reject を配管しないと\n // renderToString が mutex を握ったまま無言ハングする(state 側と同じ理由)。\n if (inSsr()) {\n try {\n // happy-dom のパーサは開始タグの時点で connectedCallback を呼ぶため、\n // この時点では子(<template>)がまだパースされていない。パース自体は\n // 同期完了するので、1 microtask 譲れば子が揃う。クライアントでは\n // deferred な auto バンドルの upgrade 時に子が揃っているため不要\n // (サーバー専用の待避、docs/ssr-router-design.md §3.2)。\n await Promise.resolve();\n if (this.hasAttribute('enable-ssr') && !this._initialized) {\n await this._initialize();\n }\n } catch (error) {\n this._rejectConnectedCallback?.(error);\n throw error;\n }\n this._resolveConnectedCallback?.();\n return;\n }\n if (!this._initialized) {\n this._disconnectedDuringInit = false;\n try {\n // ストリーミング型パーサ(happy-dom: `document.body.innerHTML = ...` の途中)は\n // 開始タグの時点で connectedCallback を呼び、子(<template>)がまだ無い。\n // SSR 経路と同じく 1 microtask 譲れば同期パースが完走して子が揃う。\n // ブラウザの deferred なバンドルでは upgrade 時に子が揃っているので、\n // template が既にあるときは譲らない(従来どおり)。\n if (this._getTemplate() === null) {\n await Promise.resolve();\n }\n await this._initialize();\n } catch (error) {\n // reject を配管しないと、初期化の失敗(template 無し・ルート定義無し・\n // basename 不整合 …)が connectedCallbackPromise を永久に未決着にし、\n // waitForReady(@wcstack/server / @wcstack/testing)が無言でハングする。\n // SSR 経路と同じ扱いにする。\n this._rejectConnectedCallback?.(error);\n throw error;\n }\n // 初期化中に disconnectedCallback が呼ばれた場合はイベントリスナを登録しない\n if (this._disconnectedDuringInit) {\n this._resolveConnectedCallback?.();\n return;\n }\n }\n // 再接続時は disconnect で撤去された live region を回復する\n // (初回接続では _initialize が生成済みなので no-op)\n if (this._initialized) {\n this._ensureA11yRegion();\n }\n const navigation = getNavigation();\n if (navigation && !this._listeningNavigate) {\n navigation.addEventListener(\"navigate\", this._onNavigate);\n this._listeningNavigate = true;\n }\n // Fallback for browsers without Navigation API\n if (!navigation && !this._listeningPopState) {\n window.addEventListener(\"popstate\", this._onPopState);\n this._listeningPopState = true;\n }\n this._resolveConnectedCallback?.();\n }\n\n disconnectedCallback() {\n // _initialize 中(await 中)に呼ばれた場合はフラグを立ててリスナ登録をスキップさせる\n if (this._initializing) {\n this._disconnectedDuringInit = true;\n }\n if (this._listeningNavigate) {\n getNavigation()?.removeEventListener(\"navigate\", this._onNavigate);\n this._listeningNavigate = false;\n }\n if (this._listeningPopState) {\n window.removeEventListener(\"popstate\", this._onPopState);\n this._listeningPopState = false;\n }\n // live region は router の寿命に同期して撤去する(body 直下に置かない理由と同根)\n if (this._a11yRegion !== null) {\n this._a11yRegion.remove();\n this._a11yRegion = null;\n }\n }\n}\n","import { config } from \"../config\";\nimport { getUUID } from \"../getUUID\";\nimport { raiseError } from \"../raiseError\";\nimport { getNavigation } from \"../Navigation\";\nimport { normalizeBasename, normalizePathname } from \"../normalizePathname\";\nimport { splitUrlTarget, effectiveSearch } from \"../splitUrlTarget\";\nimport { inSsr } from \"../inSsr\";\nimport { SSR_LINK_ATTR } from \"../ssrMarkers\";\nimport { ILink } from \"./types\";\nimport type { Router } from \"./Router\";\n\n// 生成 anchor へミラーする固定属性(docs/a11y-design.md §5)。`aria-*` は開集合なので\n// observedAttributes には載せられず、anchor 生成時の一括コピーのみ(接続後の動的\n// aria-* 変更 — data-wcs バインド経由を含む — には追従しない。README の明記された制限)。\nconst MIRRORED_ATTRIBUTES: readonly string[] = ['title', 'rel', 'target', 'download', 'hreflang'];\n\nexport class Link extends HTMLElement implements ILink {\n static get observedAttributes(): string[] {\n return ['to', ...MIRRORED_ATTRIBUTES];\n }\n\n private _childNodeArray: Node[] = [];\n private _uuid: string = getUUID();\n private _path: string = \"\";\n private _router: Router | null = null;\n private _anchorElement: HTMLAnchorElement | null = null;\n private _initialized: boolean = false;\n private _onClick?: (e: MouseEvent) => void;\n\n constructor() {\n super();\n }\n\n get uuid(): string {\n return this._uuid;\n }\n \n /**\n * 最寄りの Router を返す。\n *\n * 注意: この getter は DOM 走査で Router を探すため、\n * Router がまだ upgrade されていない場合は HTMLElement として返る可能性がある。\n * 通常は registerComponents() で Router を Link より先に upgrade することを推奨する。\n */\n get router(): Router {\n if (this._router) {\n return this._router;\n }\n // DOM 祖先走査で最寄りの Router を探す(マルチ Router 対応)\n const ancestor = this.closest<Router>(config.tagNames.router);\n if (ancestor) {\n return (this._router = ancestor);\n }\n // 祖先にない場合は ownerDocument 内の Router を探す\n const root = this.getRootNode() as Document | ShadowRoot;\n const found = root.querySelector?.<Router>(config.tagNames.router);\n if (found) {\n return (this._router = found);\n }\n raiseError(`${config.tagNames.link} is not connected to a router.`);\n }\n\n private _initialize() {\n this.style.display = \"none\";\n this._childNodeArray = Array.from(this.childNodes);\n this._path = this.getAttribute('to') || '';\n this._initialized = true;\n }\n\n /**\n * URL pathname を正規化する。Router と共通実装を使うことで\n * basenameFileExtensions の取り扱いを揃え、active 判定の取りこぼしを防ぐ。\n */\n private _normalizePathname(path: string): string {\n return normalizePathname(path);\n }\n\n private _joinInternalPath(basename: string, to: string): string {\n // Router._joinInternalPath と挙動を揃える\n const base = normalizeBasename(basename);\n const internal = to.startsWith(\"/\") ? to : \"/\" + to;\n const path = this._normalizePathname(internal);\n if (!base) return path;\n if (path === \"/\") return base + \"/\";\n return base + path;\n }\n\n /**\n * router が扱う内部ターゲットか。`/` 始まりに加え、`?` 始まり(クエリのみ遷移 —\n * docs/router-state-contract-design.md §4.1)も内部ターゲットとして受理する。\n */\n private _isInternalTarget(path: string): boolean {\n return path.startsWith('/') || path.startsWith('?');\n }\n\n private _setAnchorHref(anchor: HTMLAnchorElement,path: string) {\n if (this._isInternalTarget(path)) {\n // basename 結合・正規化は pathname にのみ適用し、search / hash は再結合する。\n // pathname 空(to=\"?k=v\")は「現在 pathname + 指定クエリ」で組み立てる。\n const { pathname, search, hash } = splitUrlTarget(path);\n const joined = pathname === \"\"\n ? window.location.pathname\n : this._joinInternalPath(this.router.basename, pathname);\n anchor.href = joined + effectiveSearch(search) + hash;\n } else {\n try {\n anchor.href = new URL(path).toString();\n } catch {\n raiseError(`[${config.tagNames.link}] Invalid URL in 'to' attribute: ${path}`);\n }\n }\n }\n\n connectedCallback() {\n if (inSsr()) {\n // SSR(docs/ssr-router-design.md §3.2 / §4): happy-dom のパーサは開始タグ\n // 時点で cc を呼ぶため、同期のまま進めると静的 Link の子が空のまま\n // anchor 化される。パースは同期完了するので 1 microtask 譲る。\n // renderToString は待機プロトコル要素(state / router)の await で\n // microtask を消化するため、serialize より先にこの初期化は完了する。\n queueMicrotask(() => {\n if (this.isConnected) {\n this._connect();\n }\n });\n return;\n }\n this._connect();\n }\n\n /**\n * サーバーが生成した目印付き anchor(直後の兄弟)。クライアントの採用対象\n */\n private _findSsrAnchor(): HTMLAnchorElement | null {\n const next = this.nextElementSibling;\n if (next !== null && next.tagName === 'A' && next.hasAttribute(SSR_LINK_ATTR)) {\n return next as HTMLAnchorElement;\n }\n return null;\n }\n\n private _connect(): void {\n if (!this._initialized) {\n this._initialize();\n }\n const parentNode = this.parentNode;\n if (!parentNode) {\n // should not happen if connected\n return;\n }\n const ssrAnchor = this._findSsrAnchor();\n let link: HTMLAnchorElement;\n if (ssrAnchor !== null) {\n // SSR 採用: サーバーの anchor をそのまま自分の anchor にする。\n // 生成経路(cc)でホストの子は anchor へ移動済みなので、子の正本は anchor 側\n link = ssrAnchor;\n link.removeAttribute(SSR_LINK_ATTR);\n this._childNodeArray = Array.from(link.childNodes);\n // href はクライアント側の解決で引き直す(basename / config の検算)\n this._setAnchorHref(link, this._path);\n } else {\n const nextSibling = this.nextSibling;\n link = document.createElement('a');\n this._setAnchorHref(link, this._path);\n // ホスト属性の転送: `aria-*` prefix + 固定 5 名の一括コピー。\n // to / style / class は除外 — ホストは display:none であり、class は active 契約を持つ。\n for (const attr of Array.from(this.attributes)) {\n if (attr.name.startsWith('aria-') || MIRRORED_ATTRIBUTES.includes(attr.name)) {\n link.setAttribute(attr.name, attr.value);\n }\n }\n for(const childNode of this._childNodeArray) {\n link.appendChild(childNode);\n }\n if (nextSibling) {\n parentNode.insertBefore(link, nextSibling);\n } else {\n parentNode.appendChild(link);\n }\n }\n this._anchorElement = link;\n\n if (inSsr()) {\n // サーバー: リスナは登録しない(レンダリングウィンドウは serialize 後に\n // 閉じる)。active 状態は SSR 出力に載せ、クライアントの採用が引き取る\n // 目印を付ける\n this._updateActiveState();\n link.setAttribute(SSR_LINK_ATTR, '');\n return;\n }\n\n // ロケーション変更を監視\n getNavigation()?.addEventListener('currententrychange', this._updateActiveState);\n window.addEventListener('wcs:navigate', this._updateActiveState as EventListener);\n window.addEventListener('popstate', this._updateActiveState as EventListener);\n\n // Navigation API が無い場合は、クリックで router.navigate にフォールバック\n // (`?` 始まりのクエリのみリンクも対象 — 素の href だとフルページ遷移になる)\n if (this._isInternalTarget(this._path) && !getNavigation()?.navigate) {\n this._onClick = async (e: MouseEvent) => {\n // only left-click without modifiers\n if (e.defaultPrevented) return;\n if (e.button !== 0) return;\n if (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) return;\n // 動的に外部URLに変わった場合はブラウザのデフォルト挙動に委ねる\n if (!this._isInternalTarget(this._path)) return;\n e.preventDefault();\n await this.router.navigate(this._path);\n this._updateActiveState();\n };\n link.addEventListener('click', this._onClick);\n }\n this._updateActiveState();\n }\n\n disconnectedCallback() {\n getNavigation()?.removeEventListener('currententrychange', this._updateActiveState);\n window.removeEventListener('wcs:navigate', this._updateActiveState as EventListener);\n window.removeEventListener('popstate', this._updateActiveState as EventListener);\n const anchor = this._anchorElement;\n if (anchor) {\n if (this._onClick) {\n anchor.removeEventListener('click', this._onClick);\n this._onClick = undefined;\n }\n anchor.remove();\n this._anchorElement = null;\n }\n // anchor 配下のままだった子要素のみ取り除く(別の親に移動されていた場合に誤って strip しないため)\n for(const childNode of this._childNodeArray) {\n if (anchor && childNode.parentNode === anchor) {\n anchor.removeChild(childNode);\n }\n }\n // Router キャッシュをクリア。別の Router 配下に動的に移動された場合や\n // Router 自体が入れ替わった場合に古い参照を返さないようにする。\n this._router = null;\n }\n\n attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null) {\n if (name === 'to' && oldValue !== newValue) {\n this._path = newValue || '';\n if (this._anchorElement) {\n this._setAnchorHref(this._anchorElement, this._path);\n this._updateActiveState();\n }\n } else if (MIRRORED_ATTRIBUTES.includes(name)) {\n // 固定名のみ接続後も追従する。anchor 生成前(upgrade 前発火)は何もしない。\n const anchor = this._anchorElement;\n if (anchor) {\n if (newValue === null) {\n anchor.removeAttribute(name);\n } else {\n anchor.setAttribute(name, newValue);\n }\n }\n }\n }\n\n private _updateActiveState = () => {\n // クエリのみリンク(to=\"?k=v\")の href は現在 pathname に依存するため、\n // active 判定と同じリスナー経路でロケーション変更に追従させる(§4.1)。\n if (this._path.startsWith('?') && this._anchorElement) {\n this._setAnchorHref(this._anchorElement, this._path);\n }\n // active 判定は pathname のみの比較(クエリ非感応 — §1.1 欠陥 7 の修理)。\n const currentPath = this._normalizePathname(new URL(window.location.href).pathname);\n const { pathname } = splitUrlTarget(this._path);\n const linkPath = this._normalizePathname(\n this._isInternalTarget(this._path)\n ? (pathname === \"\"\n ? window.location.pathname\n : this._joinInternalPath(this.router.basename, pathname))\n : pathname\n );\n\n if (this._anchorElement) {\n if (currentPath === linkPath) {\n this._anchorElement.classList.add('active');\n // 修理・既定オン(docs/a11y-design.md §3-3): active class と同じ事実の ARIA 表現。\n // 鮮度保証は active class と同一(同じ分岐・同じ呼び出し経路)。\n this._anchorElement.setAttribute('aria-current', 'page');\n } else {\n this._anchorElement.classList.remove('active');\n this._anchorElement.removeAttribute('aria-current');\n }\n }\n };\n\n get anchorElement(): HTMLAnchorElement | null {\n return this._anchorElement;\n }\n}","import { raiseError } from \"../raiseError\";\nimport { config } from \"../config\";\nimport { warnUnboundMarkup } from \"../unboundMarkupWarning\";\nimport { bindSubtree } from \"../protocol/binder\";\n\n/**\n * グローバルHeadスタック\n * 最後に接続されたHeadが優先される\n */\nconst headStack: Head[] = [];\n\n/**\n * 初期の<head>内容を記憶(最初のHead接続時に保存)\n *\n * 設計仕様: `initialHeadCaptured` は最初の Head 接続時に一度だけ true になる。\n * SPA ライフタイム中の初期 head 状態は、最初の Head が接続された瞬間がベースラインで、\n * それ以降に追加された <head> 要素は「初期値」ではなく「現在の値」として扱う。\n * テストや SPA リセットで初期値を再キャプチャしたい場合は `_resetHeadStack()` を呼ぶ。\n */\nconst initialHeadValues: Map<string, Element | null> = new Map();\nlet initialHeadCaptured = false;\n\n/**\n * 要素ごとの `_getKey` 結果のキャッシュ。\n * 初期化時/キャプチャ時に算出し、以降の `_reapplyHead` ループで再計算しないようにする。\n * 要素の属性変更には追随しない(Head 内要素は初期化時に固定される前提)。\n */\nconst keyCache: WeakMap<Element, string> = new WeakMap();\n\nexport class Head extends HTMLElement {\n private _initialized: boolean = false;\n private _childElementArray: Element[] = [];\n\n constructor() {\n super();\n this.style.display = 'none';\n }\n\n private _initialize(): void {\n if (this._initialized) {\n return;\n }\n this._initialized = true;\n this._childElementArray = Array.from(this.children);\n for (const child of this._childElementArray) {\n this.removeChild(child);\n }\n }\n\n connectedCallback(): void {\n this._initialize();\n \n // 初回のみ初期状態を保存\n if (!initialHeadCaptured) {\n this._captureInitialHead();\n initialHeadCaptured = true;\n }\n \n // スタックに追加\n headStack.push(this);\n \n // headを再適用\n this._reapplyHead();\n }\n\n disconnectedCallback(): void {\n // スタックから削除\n const index = headStack.indexOf(this);\n if (index !== -1) {\n headStack.splice(index, 1);\n }\n \n // headを再適用(スタックが空なら初期状態に戻す)\n this._reapplyHead();\n }\n\n get childElementArray(): Element[] {\n if (!this._initialized) {\n raiseError('Head component is not initialized yet.');\n }\n return this._childElementArray;\n }\n\n /**\n * 要素の一意キーを生成(WeakMap でキャッシュ)\n */\n private _getKey(el: Element): string {\n const cached = keyCache.get(el);\n if (cached !== undefined) {\n return cached;\n }\n const key = this._computeKey(el);\n keyCache.set(el, key);\n return key;\n }\n\n /**\n * 要素の一意キーを計算(実体)\n */\n private _computeKey(el: Element): string {\n const tag = el.tagName.toLowerCase();\n\n if (tag === 'title') {\n return 'title';\n }\n\n if (tag === 'meta') {\n const name = el.getAttribute('name') || '';\n const property = el.getAttribute('property') || '';\n const httpEquiv = el.getAttribute('http-equiv') || '';\n const charset = el.hasAttribute('charset') ? 'charset' : '';\n const media = el.getAttribute('media') || '';\n return `meta:${name}:${property}:${httpEquiv}:${charset}:${media}`;\n }\n\n if (tag === 'link') {\n const rel = el.getAttribute('rel') || '';\n const href = el.getAttribute('href') || '';\n const media = el.getAttribute('media') || '';\n // hreflang もキーに含める。含めないと、代表ロケールと `x-default` を同じ\n // href で併記する `rel=\"alternate\"` の組が同一キーになり、片方が落ちる。\n // これは i18n の標準的な書き方(x-default は既定言語版を指す)なので、\n // 「同じ href の link は 1 本」という仮定はここで破れる。\n const hreflang = el.getAttribute('hreflang') || '';\n return `link:${rel}:${href}:${media}:${hreflang}`;\n }\n\n if (tag === 'base') {\n return 'base';\n }\n\n if (tag === 'script') {\n const src = el.getAttribute('src') || '';\n const id = el.getAttribute('id') || '';\n const type = el.getAttribute('type') || '';\n if (src || id) {\n return `script:${src}:${id}:${type}`;\n }\n // インライン script はおおまかな先頭で識別(同等性は完全一致でなく簡易判定)\n return `script::${type}:${el.outerHTML.slice(0, 100)}`;\n }\n\n if (tag === 'style') {\n const id = el.getAttribute('id') || '';\n const media = el.getAttribute('media') || '';\n if (id) {\n return `style:${id}:${media}`;\n }\n // インライン style はおおまかな先頭で識別(同等性は完全一致でなく簡易判定)\n return `style::${media}:${el.outerHTML.slice(0, 100)}`;\n }\n\n // その他要素はおおまかに識別(同等性は完全一致でなく簡易判定)\n return `${tag}:${el.outerHTML.slice(0, 100)}`;\n }\n\n /**\n * head 内の要素を key で引ける Map を構築する。\n * `_reapplyHead` のループ前に一度だけ呼び出し、O(N) lookup に置き換えるためのヘルパ。\n *\n * 設計仕様: 同一 key の要素が複数 `document.head` 内に存在する場合は **first-wins**\n * (DOM 順で最初の要素のみ採用)。これは `_captureInitialHead` および\n * `initialHeadValues` の挙動とも整合する。\n * 重複は基本的にユーザーの記述ミスだが、_getKey の粒度(href/name 等の主要属性のみ)に\n * よる「論理的重複」もあり得るため、サイレントに first-wins とする。\n * 厳密な重複検出が必要な場合は呼び出し側で行う。\n */\n private _buildHeadElementMap(): Map<string, Element> {\n const map = new Map<string, Element>();\n for (const el of Array.from(document.head.children)) {\n const key = this._getKey(el);\n if (!map.has(key)) {\n map.set(key, el);\n }\n }\n return map;\n }\n\n /**\n * 初期の<head>状態をキャプチャ\n * document.head内の全ての要素をスキャンして保存する\n */\n private _captureInitialHead(): void {\n const head = document.head;\n for (const child of Array.from(head.children)) {\n const key = this._getKey(child);\n if (!initialHeadValues.has(key)) {\n initialHeadValues.set(key, child.cloneNode(true) as Element);\n }\n }\n }\n\n /**\n * スタック全体からheadを再構築\n * 後のHeadが優先される(上書き)\n */\n private _reapplyHead(): void {\n // 全スタックのHeadが扱うキーを収集\n const allKeys = new Set<string>();\n for (const head of headStack) {\n for (const child of head._childElementArray) {\n allKeys.add(this._getKey(child));\n }\n }\n // 初期値にあるキーも追加\n for (const key of initialHeadValues.keys()) {\n allKeys.add(key);\n }\n\n // 現在のheadにある要素のキーも追加(管理下から外れたものを削除するため)\n // 同時に key -> Element の lookup map も構築する(O(N²) を避けるため)\n const headElementMap = this._buildHeadElementMap();\n for (const key of headElementMap.keys()) {\n allKeys.add(key);\n }\n\n // 各キーについて、最も優先度の高い値を決定\n for (const key of allKeys) {\n // スタックを逆順に見て、最初に見つかった値を使用\n let targetElement: Element | null = null;\n for (let i = headStack.length - 1; i >= 0; i--) {\n const head = headStack[i];\n for (const child of head._childElementArray) {\n if (this._getKey(child) === key) {\n targetElement = child.cloneNode(true) as Element;\n break;\n }\n }\n if (targetElement) break;\n }\n\n // スタックに該当がなければ初期値を使用\n if (!targetElement && initialHeadValues.has(key)) {\n const initial = initialHeadValues.get(key);\n // initialHeadValuesにはnullを保存しないため、has(key)がtrueならinitialは必ず存在しElementである\n targetElement = (initial as Element).cloneNode(true) as Element;\n }\n\n // headを更新\n const current = headElementMap.get(key) ?? null;\n if (targetElement) {\n if (current) {\n current.replaceWith(targetElement);\n } else {\n document.head.appendChild(targetElement);\n }\n // map を新しい要素に更新(後続の同 key 処理に備える)\n headElementMap.set(key, targetElement);\n // head へ入れたのは cloneNode なので、元ノードのバインドは引き継がれない。\n // `<title data-wcs=\"…\">` はページからタイトルを消すという、未翻訳より\n // 悪い形で失敗する。クローンを binder に渡して、そこで初めて束ねる。\n // 挿入後に呼ぶのは、`bind()` が初期値の適用まで同期で行うため。\n if (!bindSubtree(targetElement)) {\n warnUnboundMarkup(\n targetElement,\n `<${targetElement.tagName.toLowerCase()}> inside <${config.tagNames.head}>`,\n `<${config.tagNames.head}> reflects its children into <head> with cloneNode, ` +\n `so the clone is not the node that was bound. Load @wcstack/state on this ` +\n `page, or write the value statically here.`,\n );\n }\n } else {\n // 初期値もスタックにもない場合は削除\n current?.remove();\n headElementMap.delete(key);\n }\n }\n }\n}\n\n// テスト用にスタックをリセットする関数\nexport function _resetHeadStack(): void {\n headStack.length = 0;\n initialHeadValues.clear();\n initialHeadCaptured = false;\n}\n","import { Route } from './components/Route';\nimport { Layout } from './components/Layout';\nimport { Outlet } from './components/Outlet';\nimport { Router } from './components/Router';\nimport { LayoutOutlet } from './components/LayoutOutlet';\nimport { Link } from './components/Link';\nimport { Head } from './components/Head';\nimport { config } from './config';\n\n/**\n * Register this package's tags. Pass a scoped `CustomElementRegistry` to define\n * them for a single shadow tree -- scoped registries do not inherit the global\n * one, so a tree using one needs its own definitions.\n */\nexport function registerComponents(registry: CustomElementRegistry = customElements) {\n // Register custom element\n if (!registry.get(config.tagNames.layout)) {\n registry.define(config.tagNames.layout, Layout);\n }\n if (!registry.get(config.tagNames.layoutOutlet)) {\n registry.define(config.tagNames.layoutOutlet, LayoutOutlet);\n }\n if (!registry.get(config.tagNames.outlet)) {\n registry.define(config.tagNames.outlet, Outlet);\n }\n if (!registry.get(config.tagNames.route)) {\n registry.define(config.tagNames.route, Route);\n }\n if (!registry.get(config.tagNames.router)) {\n registry.define(config.tagNames.router, Router);\n }\n if (!registry.get(config.tagNames.link)) {\n registry.define(config.tagNames.link, Link);\n }\n if (!registry.get(config.tagNames.head)) {\n registry.define(config.tagNames.head, Head);\n }\n}","import { IWritableConfig } from \"./types\";\nimport { setConfig } from \"./config\";\nimport { registerComponents } from \"./registerComponents\";\n\n/**\n * Initialize the router with optional configuration.\n * This is the main entry point for setting up the router.\n * @param config - Optional partial configuration to override defaults\n */\nexport function bootstrapRouter(config?: Partial<IWritableConfig>, registry?: CustomElementRegistry): void {\n if (config) {\n setConfig(config);\n }\n registerComponents(registry);\n}\n","import pkg from \"../package.json\" with { type: \"json\" };\nexport const VERSION = pkg.version;\n"],"names":[],"mappings":"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"}
|