@wcstack/router 1.8.5 → 1.8.6

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.
@@ -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/testPath.ts","../src/matchRoutes.ts","../src/hideRoute.ts","../src/showRoute.ts","../src/showRouteContent.ts","../src/applyRoute.ts","../src/Navigation.ts","../src/components/Router.ts","../src/components/Link.ts","../src/components/Head.ts","../src/registerComponents.ts","../src/bootstrapRouter.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): never {\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, IWcBindable } 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\nexport class RouteCore extends EventTarget {\n static wcBindable: IWcBindable = {\n protocol: \"wc-bindable\",\n version: 1,\n properties: [\n { name: \"params\", event: \"wcs-route:params-changed\" },\n { name: \"typedParams\", event: \"wcs-route:params-changed\", getter: (e: Event) => (e as CustomEvent).detail.typedParams },\n { name: \"active\", event: \"wcs-route:active-changed\" },\n ],\n };\n\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\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 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 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 }\n\n clearParams(): void {\n this._params = {};\n this._typedParams = {};\n this._active = false;\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 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._resolveSetGuardHandler?.();\n this._guardHandler = value;\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 }\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\";\nimport { IWcBindable } from \"../types.js\";\n\nexport class Route extends HTMLElement implements IRoute {\n static wcBindable: IWcBindable = RouteCore.wcBindable;\n\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\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 get routes(): IRoute[] {\n if (this.routeParentNode) {\n return this.routeParentNode.routes.concat(this);\n } else {\n return [this];\n }\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 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 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\nexport class Layout extends HTMLElement implements ILayout {\n private _uuid: string = getUUID();\n private _initialized: boolean = false;\n constructor() {\n super();\n }\n\n private async _loadTemplateFromSource(source: string): Promise<string | null> {\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 raiseError(`${config.tagNames.layout} failed to load layout from source: ${source}, error: ${error}`);\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 template.innerHTML = await this._loadTemplateFromSource(source) || '';\n cache.set(source, template.innerHTML);\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 private _initialize() {\n this._initialized = true;\n }\n\n connectedCallback() {\n if (!this._initialized) {\n this._initialize();\n }\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 private _initialize() {\n if (config.enableShadowRoot) {\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\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 element.setAttribute(key, value);\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(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 _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._initialized = true;\n if (this.layout.enableShadowRoot) {\n this.attachShadow({ mode: 'open' });\n }\n const template = await this.layout.loadTemplate();\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 } \n\n async connectedCallback() {\n if (!this._initialized) {\n await this._initialize();\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\";\n\ntype ScriptModule = { default?: unknown };\n\nasync function importModule(script: HTMLScriptElement): Promise<GuardHandler | null> {\n let scriptModule: ScriptModule | null = null;\n const sourceComment = `\\n//# sourceURL=wcs-guard-handler\\n`;\n const scriptText = script.text + sourceComment;\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 {\n // Blob URL import failed (e.g. happy-dom), fall through to data: URL\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 scriptModule = await import(`data:application/javascript;base64,${b64}`) as ScriptModule;\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).then(handler => {\n if (handler) {\n route.guardHandler = handler;\n }\n });\n}\n","import { ILayout, 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\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 map: Map<string, IRoute | ILayout>,\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 map.set(route.uuid, 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 === config.tagNames.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, map, 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 map: Map<string, IRoute | ILayout> = new Map();\n const routesByPath: Map<string, IRoute[]> = new Map();\n const fr = await _parseNode(routerNode, routerNode.template.content, [], map, routesByPath);\n return fr;\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 finalResult = true;\n } else if (i === route.absoluteSegmentInfos.length && segIndex === segments.length - 1 && segments.at(-1) === '') {\n // 末尾スラッシュ対応: /users/ -> ['', 'users', '']\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 routerNode: IRouter, \n routeNode: IRoute, \n routes: IRoute[], \n normalizedPath: string,\n segments: string[],\n results: IRouteMatchResult[]\n): void {\n const nextRoutes = routes.concat(routeNode);\n const matchResult = testPath(routeNode, normalizedPath, segments);\n if (matchResult) {\n results.push(matchResult);\n }\n for(const childRoute of routeNode.routeChildNodes) {\n _matchRoutes(routerNode, childRoute, nextRoutes, normalizedPath, segments, results);\n }\n}\n\nexport function matchRoutes(routerNode: IRouter, normalizedPath: string): IRouteMatchResult | null {\n const routes: IRoute[] = [];\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(routerNode, route, routes, 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 { 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\nexport function showRoute(route: IRoute, matchResult: IRouteMatchResult): boolean {\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 const parentNode = route.placeHolder.parentNode;\n const nextSibling = route.placeHolder.nextSibling;\n for (const node of route.childNodeArray) {\n // connectedCallbackが呼ばれる前に、プロパティにパラメータを割り当てる\n // connectedCallbackを実行するときにパラメータはすでに設定されている必要があるため\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 if (nextSibling) {\n parentNode?.insertBefore(node, nextSibling);\n } else {\n parentNode?.appendChild(node);\n }\n }\n return true;\n}\n","import { IRoute, IRouteMatchResult, IRouter } from \"./components/types\";\nimport { hideRoute } from \"./hideRoute\";\nimport { showRoute } from \"./showRoute\";\nimport { IGuardCancel } from \"./types\";\n\nexport async function showRouteContent(\n routerNode: IRouter,\n matchResult: IRouteMatchResult,\n lastRoutes: IRoute[], \n): Promise<void> {\n // Hide previous routes\n const routesSet = new Set<IRoute>(matchResult.routes);\n for (const route of lastRoutes) {\n if (!routesSet.has(route)) {\n hideRoute(route);\n }\n }\n try {\n for (const route of matchResult.routes) {\n await route.guardCheck(matchResult);\n }\n } catch (e) {\n const err = e as Error;\n if (\"fallbackPath\" in err) {\n const guardCancel = err as IGuardCancel;\n console.warn(`Navigation cancelled: ${err.message}. Redirecting to ${guardCancel.fallbackPath}`);\n queueMicrotask(() => {\n routerNode.navigate(guardCancel.fallbackPath);\n });\n return;\n } else {\n throw e;\n }\n }\n const lastRouteSet = new Set<IRoute>(lastRoutes);\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 }\n }\n}\n","import { IOutlet, IRouter } from \"./components/types\";\nimport { config } from \"./config\";\nimport { matchRoutes } from \"./matchRoutes\";\nimport { raiseError } from \"./raiseError\";\nimport { showRouteContent } from \"./showRouteContent\";\n\nexport async function applyRoute(\n routerNode: IRouter, \n outlet: IOutlet, \n fullPath: string,\n lastPath: string\n): Promise<void> {\n const basename = routerNode.basename;\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 const path = sliced === \"\" ? \"/\" : sliced;\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 await showRouteContent(routerNode, matchResult, lastRoutes);\n // if successful, update router and outlet state\n routerNode.path = path;\n outlet.lastRoutes = matchResult.routes;\n}\n","export type NavigationLike = {\n navigate?: (url: string) => void;\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","import { parse } from \"../parse.js\";\nimport { createOutlet, Outlet } from \"./Outlet.js\";\nimport { config } from \"../config.js\";\nimport { raiseError } from \"../raiseError.js\";\nimport { IOutlet, IRoute, IRouter } from \"./types.js\";\nimport { IWcBindable } from \"../types.js\";\nimport { applyRoute } from \"../applyRoute.js\";\nimport { getNavigation } from \"../Navigation.js\";\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 static wcBindable: IWcBindable = {\n protocol: \"wc-bindable\",\n version: 1,\n properties: [\n { name: \"navigateUrl\", event: \"wcs-router:navigate-url-changed\" },\n { name: \"path\", event: \"wcs-router:path-changed\" },\n ],\n };\n\n private static _instance: IRouter | null = null;\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 _navigateUrl: string | null = null;\n\n constructor() {\n super();\n if (Router._instance) {\n raiseError(`${config.tagNames.router} can only be instantiated once.`);\n }\n Router._instance = this;\n }\n\n /**\n * Normalize a URL pathname to a route path.\n * - ensure leading slash\n * - collapse multiple slashes\n * - treat trailing file extensions (e.g. .html) as directory root\n * - remove trailing slash except root \"/\"\n */\n private _normalizePathname(_path: string): string {\n let path = _path || \"/\";\n if (!path.startsWith(\"/\")) path = \"/\" + path;\n path = path.replace(/\\/{2,}/g, \"/\");\n // e.g. \"/app/index.html\" -> \"/app\"\n const exts = config.basenameFileExtensions;\n if (exts.length > 0) {\n const extPattern = new RegExp(\n `\\\\/[^/]+(?:${exts.map(e => e.replace(/\\./g, '\\\\.')).join('|')})$`,\n 'i'\n );\n path = path.replace(extPattern, \"\");\n }\n if (path === \"\") path = \"/\";\n if (path.length > 1 && path.endsWith(\"/\")) path = path.slice(0, -1);\n return path;\n }\n\n /**\n * Normalize basename.\n * - \"\" or \"/\" -> \"\"\n * - \"/app/\" -> \"/app\"\n * - \"/app/index.html\" -> \"/app\"\n */\n private _normalizeBasename(_path: string): string {\n let path = _path || \"\";\n if (!path) return \"\";\n if (!path.startsWith(\"/\")) path = \"/\" + path;\n path = path.replace(/\\/{2,}/g, \"/\");\n const exts = config.basenameFileExtensions;\n if (exts.length > 0) {\n const extPattern = new RegExp(\n `\\\\/[^/]+(?:${exts.map(e => e.replace(/\\./g, '\\\\.')).join('|')})$`,\n 'i'\n );\n path = path.replace(extPattern, \"\");\n }\n if (path.length > 1 && path.endsWith(\"/\")) path = path.slice(0, -1);\n if (path === \"/\") return \"\";\n return 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 static get instance(): IRouter {\n if (!Router._instance) {\n raiseError(`${config.tagNames.router} has not been instantiated.`);\n }\n return Router._instance;\n }\n\n static navigate(path: string): void {\n Router.instance.navigate(path);\n }\n\n get basename(): string {\n return this._basename;\n }\n\n private _getOutlet(): IOutlet {\n let outlet = document.querySelector<Outlet>(config.tagNames.outlet);\n if (!outlet) {\n outlet = createOutlet();\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 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 this._navigateUrl = value;\n this.navigate(value).then(() => {\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 async navigate(path: string): Promise<void> {\n const fullPath = this._joinInternalPath(this._basename, path);\n const navigation = getNavigation();\n if (navigation?.navigate) {\n navigation.navigate(fullPath);\n } else {\n history.pushState(null, '', fullPath);\n await applyRoute(this, this.outlet, fullPath, this._path);\n this._notifyLocationChange();\n }\n }\n\n private _onNavigateFunc(navEvent: any) {\n if (\n !navEvent.canIntercept ||\n navEvent.hashChange ||\n navEvent.downloadRequest !== null\n ) {\n return;\n }\n const routesNode = this;\n navEvent.intercept({\n handler: async () => {\n const url = new URL(navEvent.destination.url);\n const fullPath = routesNode._normalizePathname(url.pathname);\n await applyRoute(routesNode, routesNode.outlet, fullPath, routesNode.path);\n },\n });\n }\n\n private _onNavigate = this._onNavigateFunc.bind(this);\n\n private _onPopState = async () => {\n // back/forward for environments without Navigation API\n const fullPath = this._normalizePathname(window.location.pathname);\n await applyRoute(this, this.outlet, fullPath, this._path);\n this._notifyLocationChange();\n };\n\n private async _initialize(): Promise<void> {\n this._initialized = true;\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 const fragment = await parse(this);\n this._outlet.rootNode.appendChild(fragment);\n if (this.routeChildNodes.length === 0) {\n raiseError(`${config.tagNames.router} has no route definitions.`);\n }\n\n const fullPath = this._normalizePathname(window.location.pathname);\n await applyRoute(this, this.outlet, fullPath, this._path);\n this._notifyLocationChange();\n\n }\n\n async connectedCallback() {\n if (!this._initialized) {\n await this._initialize();\n }\n getNavigation()?.addEventListener(\"navigate\", this._onNavigate);\n // Fallback for browsers without Navigation API\n if (!getNavigation()?.addEventListener && !this._listeningPopState) {\n window.addEventListener(\"popstate\", this._onPopState);\n this._listeningPopState = true;\n }\n }\n\n disconnectedCallback() {\n getNavigation()?.removeEventListener(\"navigate\", this._onNavigate);\n if (this._listeningPopState) {\n window.removeEventListener(\"popstate\", this._onPopState);\n this._listeningPopState = false;\n }\n if (Router._instance === this) {\n Router._instance = null;\n }\n }\n}\n","import { config } from \"../config\";\nimport { getUUID } from \"../getUUID\";\nimport { raiseError } from \"../raiseError\";\nimport { getNavigation } from \"../Navigation\";\nimport { Router } from \"./Router\";\nimport { ILink } from \"./types\";\n\nexport class Link extends HTMLElement implements ILink {\n static get observedAttributes(): string[] {\n return ['to'];\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 get router(): Router {\n if (this._router) {\n return this._router;\n }\n const router = document.querySelector<Router>(config.tagNames.router);\n if (router) {\n return (this._router = router);\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 private _normalizePathname(path: string): string {\n let p = path || \"/\";\n if (!p.startsWith(\"/\")) p = \"/\" + p;\n p = p.replace(/\\/{2,}/g, \"/\");\n if (p.length > 1 && p.endsWith(\"/\")) p = p.slice(0, -1);\n return p;\n }\n\n private _joinInternalPath(basename: string, to: string): string {\n const base = (basename || \"\").replace(/\\/{2,}/g, \"/\").replace(/\\/$/, \"\");\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 private _setAnchorHref(anchor: HTMLAnchorElement,path: string) {\n if (path.startsWith('/')) {\n anchor.href = this._joinInternalPath(this.router.basename, path);\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 (!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 nextSibling = this.nextSibling;\n const link = document.createElement('a');\n this._setAnchorHref(link, this._path);\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 this._anchorElement = link;\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 if (this._path.startsWith('/') && !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 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 if (this._anchorElement) {\n if (this._onClick) {\n this._anchorElement.removeEventListener('click', this._onClick);\n this._onClick = undefined;\n }\n this._anchorElement.remove();\n this._anchorElement = null;\n }\n for(const childNode of this._childNodeArray) {\n childNode.parentNode?.removeChild(childNode);\n }\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 }\n }\n\n private _updateActiveState = () => {\n const currentPath = this._normalizePathname(new URL(window.location.href).pathname);\n const linkPath = this._normalizePathname(\n this._path.startsWith('/') ? this._joinInternalPath(this.router.basename, this._path) : this._path\n );\n \n if (this._anchorElement) {\n if (currentPath === linkPath) {\n this._anchorElement.classList.add('active');\n } else {\n this._anchorElement.classList.remove('active');\n }\n }\n };\n\n get anchorElement(): HTMLAnchorElement | null {\n return this._anchorElement;\n }\n}","import { raiseError } from \"../raiseError\";\n\n/**\n * グローバルHeadスタック\n * 最後に接続されたHeadが優先される\n */\nconst headStack: Head[] = [];\n\n/**\n * 初期の<head>内容を記憶(最初のHead接続時に保存)\n */\nconst initialHeadValues: Map<string, Element | null> = new Map();\nlet initialHeadCaptured = false;\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 * 要素の一意キーを生成\n */\n private _getKey(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 return `link:${rel}:${href}:${media}`;\n }\n\n if (tag === 'base') {\n return 'base';\n }\n\n // script, style等はouterHTMLの先頭で識別(フォールバック)\n return `${tag}:${el.outerHTML.slice(0, 100)}`;\n }\n\n /**\n * head内で指定のキーに一致する要素を検索\n */\n private _findInHead(key: string): Element | null {\n const head = document.head;\n for (const el of Array.from(head.children)) {\n if (this._getKey(el) === key) {\n return el;\n }\n }\n return null;\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 for (const child of Array.from(document.head.children)) {\n allKeys.add(this._getKey(child));\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 = this._findInHead(key);\n if (targetElement) {\n if (current) {\n current.replaceWith(targetElement);\n } else {\n document.head.appendChild(targetElement);\n }\n } else {\n // 初期値もスタックにもない場合は削除\n current?.remove();\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\nexport function registerComponents() {\n // Register custom element\n if (!customElements.get(config.tagNames.layout)) {\n customElements.define(config.tagNames.layout, Layout);\n }\n if (!customElements.get(config.tagNames.layoutOutlet)) {\n customElements.define(config.tagNames.layoutOutlet, LayoutOutlet);\n }\n if (!customElements.get(config.tagNames.outlet)) {\n customElements.define(config.tagNames.outlet, Outlet);\n }\n if (!customElements.get(config.tagNames.route)) {\n customElements.define(config.tagNames.route, Route);\n }\n if (!customElements.get(config.tagNames.router)) {\n customElements.define(config.tagNames.router, Router);\n }\n if (!customElements.get(config.tagNames.link)) {\n customElements.define(config.tagNames.link, Link);\n }\n if (!customElements.get(config.tagNames.head)) {\n customElements.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>): void {\n if (config) {\n setConfig(config);\n }\n registerComponents();\n}\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/testPath.ts","../src/matchRoutes.ts","../src/hideRoute.ts","../src/showRoute.ts","../src/showRouteContent.ts","../src/applyRoute.ts","../src/Navigation.ts","../src/components/Router.ts","../src/components/Link.ts","../src/components/Head.ts","../src/registerComponents.ts","../src/bootstrapRouter.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): never {\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, IWcBindable } 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\nexport class RouteCore extends EventTarget {\n static wcBindable: IWcBindable = {\n protocol: \"wc-bindable\",\n version: 1,\n properties: [\n { name: \"params\", event: \"wcs-route:params-changed\" },\n { name: \"typedParams\", event: \"wcs-route:params-changed\", getter: (e: Event) => (e as CustomEvent).detail.typedParams },\n { name: \"active\", event: \"wcs-route:active-changed\" },\n ],\n };\n\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\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 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 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 }\n\n clearParams(): void {\n this._params = {};\n this._typedParams = {};\n this._active = false;\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 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._resolveSetGuardHandler?.();\n this._guardHandler = value;\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 }\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\";\nimport { IWcBindable } from \"../types.js\";\n\nexport class Route extends HTMLElement implements IRoute {\n static wcBindable: IWcBindable = RouteCore.wcBindable;\n\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\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 get routes(): IRoute[] {\n if (this.routeParentNode) {\n return this.routeParentNode.routes.concat(this);\n } else {\n return [this];\n }\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 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 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\nexport class Layout extends HTMLElement implements ILayout {\n private _uuid: string = getUUID();\n private _initialized: boolean = false;\n constructor() {\n super();\n }\n\n private async _loadTemplateFromSource(source: string): Promise<string | null> {\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 raiseError(`${config.tagNames.layout} failed to load layout from source: ${source}, error: ${error}`);\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 template.innerHTML = await this._loadTemplateFromSource(source) || '';\n cache.set(source, template.innerHTML);\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 private _initialize() {\n this._initialized = true;\n }\n\n connectedCallback() {\n if (!this._initialized) {\n this._initialize();\n }\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 private _initialize() {\n if (config.enableShadowRoot) {\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\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 element.setAttribute(key, value);\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(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 _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._initialized = true;\n if (this.layout.enableShadowRoot) {\n this.attachShadow({ mode: 'open' });\n }\n const template = await this.layout.loadTemplate();\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 } \n\n async connectedCallback() {\n if (!this._initialized) {\n await this._initialize();\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\";\n\ntype ScriptModule = { default?: unknown };\n\nasync function importModule(script: HTMLScriptElement): Promise<GuardHandler | null> {\n let scriptModule: ScriptModule | null = null;\n const sourceComment = `\\n//# sourceURL=wcs-guard-handler\\n`;\n const scriptText = script.text + sourceComment;\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 {\n // Blob URL import failed (e.g. happy-dom), fall through to data: URL\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 scriptModule = await import(`data:application/javascript;base64,${b64}`) as ScriptModule;\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).then(handler => {\n if (handler) {\n route.guardHandler = handler;\n }\n });\n}\n","import { ILayout, 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\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 map: Map<string, IRoute | ILayout>,\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 map.set(route.uuid, 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 === config.tagNames.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, map, 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 map: Map<string, IRoute | ILayout> = new Map();\n const routesByPath: Map<string, IRoute[]> = new Map();\n const fr = await _parseNode(routerNode, routerNode.template.content, [], map, routesByPath);\n return fr;\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 finalResult = true;\n } else if (i === route.absoluteSegmentInfos.length && segIndex === segments.length - 1 && segments.at(-1) === '') {\n // 末尾スラッシュ対応: /users/ -> ['', 'users', '']\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 routerNode: IRouter, \n routeNode: IRoute, \n routes: IRoute[], \n normalizedPath: string,\n segments: string[],\n results: IRouteMatchResult[]\n): void {\n const nextRoutes = routes.concat(routeNode);\n const matchResult = testPath(routeNode, normalizedPath, segments);\n if (matchResult) {\n results.push(matchResult);\n }\n for(const childRoute of routeNode.routeChildNodes) {\n _matchRoutes(routerNode, childRoute, nextRoutes, normalizedPath, segments, results);\n }\n}\n\nexport function matchRoutes(routerNode: IRouter, normalizedPath: string): IRouteMatchResult | null {\n const routes: IRoute[] = [];\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(routerNode, route, routes, 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 { 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\nexport function showRoute(route: IRoute, matchResult: IRouteMatchResult): boolean {\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 const parentNode = route.placeHolder.parentNode;\n const nextSibling = route.placeHolder.nextSibling;\n for (const node of route.childNodeArray) {\n // connectedCallbackが呼ばれる前に、プロパティにパラメータを割り当てる\n // connectedCallbackを実行するときにパラメータはすでに設定されている必要があるため\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 if (nextSibling) {\n parentNode?.insertBefore(node, nextSibling);\n } else {\n parentNode?.appendChild(node);\n }\n }\n return true;\n}\n","import { IRoute, IRouteMatchResult, IRouter } from \"./components/types\";\nimport { hideRoute } from \"./hideRoute\";\nimport { showRoute } from \"./showRoute\";\nimport { IGuardCancel } from \"./types\";\n\nexport async function showRouteContent(\n routerNode: IRouter,\n matchResult: IRouteMatchResult,\n lastRoutes: IRoute[], \n): Promise<void> {\n // Hide previous routes\n const routesSet = new Set<IRoute>(matchResult.routes);\n for (const route of lastRoutes) {\n if (!routesSet.has(route)) {\n hideRoute(route);\n }\n }\n try {\n for (const route of matchResult.routes) {\n await route.guardCheck(matchResult);\n }\n } catch (e) {\n const err = e as Error;\n if (\"fallbackPath\" in err) {\n const guardCancel = err as IGuardCancel;\n console.warn(`Navigation cancelled: ${err.message}. Redirecting to ${guardCancel.fallbackPath}`);\n queueMicrotask(() => {\n routerNode.navigate(guardCancel.fallbackPath);\n });\n return;\n } else {\n throw e;\n }\n }\n const lastRouteSet = new Set<IRoute>(lastRoutes);\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 }\n }\n}\n","import { IOutlet, IRouter } from \"./components/types\";\nimport { config } from \"./config\";\nimport { matchRoutes } from \"./matchRoutes\";\nimport { raiseError } from \"./raiseError\";\nimport { showRouteContent } from \"./showRouteContent\";\n\nexport async function applyRoute(\n routerNode: IRouter, \n outlet: IOutlet, \n fullPath: string,\n lastPath: string\n): Promise<void> {\n const basename = routerNode.basename;\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 const path = sliced === \"\" ? \"/\" : sliced;\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 await showRouteContent(routerNode, matchResult, lastRoutes);\n // if successful, update router and outlet state\n routerNode.path = path;\n outlet.lastRoutes = matchResult.routes;\n}\n","export type NavigationLike = {\n navigate?: (url: string) => void;\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","import { parse } from \"../parse.js\";\nimport { createOutlet, Outlet } from \"./Outlet.js\";\nimport { config } from \"../config.js\";\nimport { raiseError } from \"../raiseError.js\";\nimport { IOutlet, IRoute, IRouter } from \"./types.js\";\nimport { IWcBindable } from \"../types.js\";\nimport { applyRoute } from \"../applyRoute.js\";\nimport { getNavigation } from \"../Navigation.js\";\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 static wcBindable: IWcBindable = {\n protocol: \"wc-bindable\",\n version: 1,\n properties: [\n { name: \"navigateUrl\", event: \"wcs-router:navigate-url-changed\" },\n { name: \"path\", event: \"wcs-router:path-changed\" },\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 _navigateUrl: string | null = null;\n\n constructor() {\n super();\n }\n\n /**\n * Normalize a URL pathname to a route path.\n * - ensure leading slash\n * - collapse multiple slashes\n * - treat trailing file extensions (e.g. .html) as directory root\n * - remove trailing slash except root \"/\"\n */\n private _normalizePathname(_path: string): string {\n let path = _path || \"/\";\n if (!path.startsWith(\"/\")) path = \"/\" + path;\n path = path.replace(/\\/{2,}/g, \"/\");\n // e.g. \"/app/index.html\" -> \"/app\"\n const exts = config.basenameFileExtensions;\n if (exts.length > 0) {\n const extPattern = new RegExp(\n `\\\\/[^/]+(?:${exts.map(e => e.replace(/\\./g, '\\\\.')).join('|')})$`,\n 'i'\n );\n path = path.replace(extPattern, \"\");\n }\n if (path === \"\") path = \"/\";\n if (path.length > 1 && path.endsWith(\"/\")) path = path.slice(0, -1);\n return path;\n }\n\n /**\n * Normalize basename.\n * - \"\" or \"/\" -> \"\"\n * - \"/app/\" -> \"/app\"\n * - \"/app/index.html\" -> \"/app\"\n */\n private _normalizeBasename(_path: string): string {\n let path = _path || \"\";\n if (!path) return \"\";\n if (!path.startsWith(\"/\")) path = \"/\" + path;\n path = path.replace(/\\/{2,}/g, \"/\");\n const exts = config.basenameFileExtensions;\n if (exts.length > 0) {\n const extPattern = new RegExp(\n `\\\\/[^/]+(?:${exts.map(e => e.replace(/\\./g, '\\\\.')).join('|')})$`,\n 'i'\n );\n path = path.replace(extPattern, \"\");\n }\n if (path.length > 1 && path.endsWith(\"/\")) path = path.slice(0, -1);\n if (path === \"/\") return \"\";\n return 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 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 this._navigateUrl = value;\n this.navigate(value).then(() => {\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 async navigate(path: string): Promise<void> {\n const fullPath = this._joinInternalPath(this._basename, path);\n const navigation = getNavigation();\n if (navigation?.navigate) {\n navigation.navigate(fullPath);\n } else {\n history.pushState(null, '', fullPath);\n await applyRoute(this, this.outlet, fullPath, this._path);\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: any) {\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 const routesNode = this;\n navEvent.intercept({\n handler: async () => {\n await applyRoute(routesNode, routesNode.outlet, fullPath, routesNode.path);\n },\n });\n }\n\n private _onNavigate = this._onNavigateFunc.bind(this);\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 await applyRoute(this, this.outlet, fullPath, this._path);\n this._notifyLocationChange();\n };\n\n private async _initialize(): Promise<void> {\n this._initialized = true;\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 const fragment = await parse(this);\n this._outlet.rootNode.appendChild(fragment);\n if (this.routeChildNodes.length === 0) {\n raiseError(`${config.tagNames.router} has no route definitions.`);\n }\n\n const fullPath = this._normalizePathname(window.location.pathname);\n await applyRoute(this, this.outlet, fullPath, this._path);\n this._notifyLocationChange();\n\n }\n\n async connectedCallback() {\n if (!this._initialized) {\n await this._initialize();\n }\n getNavigation()?.addEventListener(\"navigate\", this._onNavigate);\n // Fallback for browsers without Navigation API\n if (!getNavigation()?.addEventListener && !this._listeningPopState) {\n window.addEventListener(\"popstate\", this._onPopState);\n this._listeningPopState = true;\n }\n }\n\n disconnectedCallback() {\n getNavigation()?.removeEventListener(\"navigate\", this._onNavigate);\n if (this._listeningPopState) {\n window.removeEventListener(\"popstate\", this._onPopState);\n this._listeningPopState = false;\n }\n }\n}\n","import { config } from \"../config\";\nimport { getUUID } from \"../getUUID\";\nimport { raiseError } from \"../raiseError\";\nimport { getNavigation } from \"../Navigation\";\nimport { ILink } from \"./types\";\nimport type { Router } from \"./Router\";\n\nexport class Link extends HTMLElement implements ILink {\n static get observedAttributes(): string[] {\n return ['to'];\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 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 private _normalizePathname(path: string): string {\n let p = path || \"/\";\n if (!p.startsWith(\"/\")) p = \"/\" + p;\n p = p.replace(/\\/{2,}/g, \"/\");\n if (p.length > 1 && p.endsWith(\"/\")) p = p.slice(0, -1);\n return p;\n }\n\n private _joinInternalPath(basename: string, to: string): string {\n const base = (basename || \"\").replace(/\\/{2,}/g, \"/\").replace(/\\/$/, \"\");\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 private _setAnchorHref(anchor: HTMLAnchorElement,path: string) {\n if (path.startsWith('/')) {\n anchor.href = this._joinInternalPath(this.router.basename, path);\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 (!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 nextSibling = this.nextSibling;\n const link = document.createElement('a');\n this._setAnchorHref(link, this._path);\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 this._anchorElement = link;\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 if (this._path.startsWith('/') && !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 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 if (this._anchorElement) {\n if (this._onClick) {\n this._anchorElement.removeEventListener('click', this._onClick);\n this._onClick = undefined;\n }\n this._anchorElement.remove();\n this._anchorElement = null;\n }\n for(const childNode of this._childNodeArray) {\n childNode.parentNode?.removeChild(childNode);\n }\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 }\n }\n\n private _updateActiveState = () => {\n const currentPath = this._normalizePathname(new URL(window.location.href).pathname);\n const linkPath = this._normalizePathname(\n this._path.startsWith('/') ? this._joinInternalPath(this.router.basename, this._path) : this._path\n );\n \n if (this._anchorElement) {\n if (currentPath === linkPath) {\n this._anchorElement.classList.add('active');\n } else {\n this._anchorElement.classList.remove('active');\n }\n }\n };\n\n get anchorElement(): HTMLAnchorElement | null {\n return this._anchorElement;\n }\n}","import { raiseError } from \"../raiseError\";\n\n/**\n * グローバルHeadスタック\n * 最後に接続されたHeadが優先される\n */\nconst headStack: Head[] = [];\n\n/**\n * 初期の<head>内容を記憶(最初のHead接続時に保存)\n */\nconst initialHeadValues: Map<string, Element | null> = new Map();\nlet initialHeadCaptured = false;\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 * 要素の一意キーを生成\n */\n private _getKey(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 return `link:${rel}:${href}:${media}`;\n }\n\n if (tag === 'base') {\n return 'base';\n }\n\n // script, style等はouterHTMLの先頭で識別(フォールバック)\n return `${tag}:${el.outerHTML.slice(0, 100)}`;\n }\n\n /**\n * head内で指定のキーに一致する要素を検索\n */\n private _findInHead(key: string): Element | null {\n const head = document.head;\n for (const el of Array.from(head.children)) {\n if (this._getKey(el) === key) {\n return el;\n }\n }\n return null;\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 for (const child of Array.from(document.head.children)) {\n allKeys.add(this._getKey(child));\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 = this._findInHead(key);\n if (targetElement) {\n if (current) {\n current.replaceWith(targetElement);\n } else {\n document.head.appendChild(targetElement);\n }\n } else {\n // 初期値もスタックにもない場合は削除\n current?.remove();\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\nexport function registerComponents() {\n // Register custom element\n if (!customElements.get(config.tagNames.layout)) {\n customElements.define(config.tagNames.layout, Layout);\n }\n if (!customElements.get(config.tagNames.layoutOutlet)) {\n customElements.define(config.tagNames.layoutOutlet, LayoutOutlet);\n }\n if (!customElements.get(config.tagNames.outlet)) {\n customElements.define(config.tagNames.outlet, Outlet);\n }\n if (!customElements.get(config.tagNames.route)) {\n customElements.define(config.tagNames.route, Route);\n }\n if (!customElements.get(config.tagNames.router)) {\n customElements.define(config.tagNames.router, Router);\n }\n if (!customElements.get(config.tagNames.link)) {\n customElements.define(config.tagNames.link, Link);\n }\n if (!customElements.get(config.tagNames.head)) {\n customElements.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>): void {\n if (config) {\n setConfig(config);\n }\n registerComponents();\n}\n"],"names":[],"mappings":"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"}