@weasel-js/forge 1.16.1 → 1.16.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{FrameController-D9CddmJg.d.ts → FrameController-DQTN1ytP.d.ts} +2 -1
- package/dist/{config-Ey2RPFrg.d.ts → config-BaC0Cbyj.d.ts} +3 -2
- package/dist/frame/index.d.ts +9 -6
- package/dist/index.d.ts +5 -4
- package/dist/{mountFrame-AZzyw6bu.d.ts → mountFrame-CrIdX6nD.d.ts} +3 -2
- package/dist/shell/index.d.ts +8 -5
- package/dist/test/index.d.ts +3 -2
- package/dist/vite/index.d.ts +2 -1
- package/dist/vite/index.js +1 -0
- package/dist/vite/index.js.map +1 -1
- package/package.json +15 -12
package/dist/vite/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/vite/html.ts","../../src/vite/build.ts","../../src/vite/componentOf.ts","../../src/vite/depGraph.ts","../../src/vite/history.ts","../../src/vite/ast.ts","../../src/vite/nativeExports.ts","../../src/vite/indexFile.ts","../../src/vite/storyGlob.ts","../../src/vite/autoTitle.ts","../../src/vite/foreignStories.ts","../../src/vite/trace.ts","../../src/vite/wrappers.ts","../../src/vite/indexStory.ts","../../src/vite/ownEntries.ts","../../src/vite/apiTable.ts","../../src/vite/propTypes.ts","../../src/vite/propControls.ts","../../src/vite/issues/endpoint.ts","../../src/vite/capture/browser.ts","../../src/vite/capture/cache.ts","../../src/vite/capture/endpoint.ts","../../src/vite/servePages.ts","../../src/vite/shellTitle.ts","../../src/vite/storybookShims.ts","../../src/vite/capture/entries.ts","../../src/vite/entries.ts","../../src/vite/virtualModules.ts","../../src/vite/watchRecovery.ts","../../src/vite/watchProbe.ts","../../src/vite/plugin.ts","../../src/vite/forgeTest.ts"],"names":["declaration","resolve","componentOf","dirname","join","parse","autoTitle","forge","posix","sep","relative","resolved","readFileSync","existsSync","record","prop","packageOf","docOf","IN_PACKAGES","MAX_DEPTH","execFile","body","keyOf","json","PAGES","fileURLToPath","fsWatch","settled","writeFileSync","SCRIPT","files","statSync","modules"],"mappings":"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","file":"index.js","sourcesContent":["import { DEFAULT_TITLE } from '../title.ts';\n\nconst escaped = (text: string): string => text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n\n/**\n * The document forge serves for `entry`, one of its `virtual:forge/*-entry.js` modules. A build hands the\n * bare id to its own resolver; the dev server needs the `/@id/` form a browser can request.\n */\nexport function html(entry: string, mode: 'serve' | 'build' = 'serve', title: string = DEFAULT_TITLE): string {\n const src = `${mode === 'serve' ? '/@id/' : ''}virtual:forge/${entry}`;\n return `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <title>${escaped(title)}</title>\n </head>\n <body>\n <div id=\"root\"></div>\n <script type=\"module\" src=\"${src}\"></script>\n </body>\n</html>\n`;\n}\n","import { mkdirSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { html } from './html.ts';\n\nconst DIR = 'node_modules/.forge';\ntype Source = string | Uint8Array;\n\nconst PAGES: Record<string, string> = { index: 'shell-entry.js', frame: 'frame-entry.js' };\n\n/** Writes a build document per forge page under `<root>/node_modules/.forge`, returning them as build inputs. */\nexport function writePages(root: string, title?: string): Record<string, string> {\n const dir = join(root, DIR);\n mkdirSync(dir, { recursive: true });\n return Object.fromEntries(\n Object.entries(PAGES).map(([name, entry]) => {\n const file = join(dir, `${name}.html`);\n writeFileSync(file, html(entry, 'build', title));\n return [name, file];\n }),\n );\n}\n\n/** Vite wrote a relative base's urls from two directories down; the documents now sit at the output root. */\nconst up = (source: Source) =>\n (typeof source === 'string' ? source : new TextDecoder().decode(source)).replace(/(\\s(?:src|href)=\")\\.\\.\\/\\.\\.\\//g, '$1./');\n\n/** Replaces the documents vite emitted at their input path with copies at the output root. */\nexport function hoistPages(\n bundle: Record<string, { type: string; source?: Source }>,\n emit: (file: { type: 'asset'; fileName: string; source: Source }) => void,\n): void {\n for (const name of Object.keys(PAGES)) {\n const from = `${DIR}/${name}.html`;\n const asset = bundle[from];\n if (asset?.type !== 'asset' || asset.source === undefined) continue;\n delete bundle[from];\n emit({ type: 'asset', fileName: `${name}.html`, source: up(asset.source) });\n }\n}\n","import type ts from 'typescript';\n\n/** The local name standing in for a component a meta does not name: its title's last segment, spaces dropped. */\nexport const titleStandIn = (title: string): string | undefined => title.split('/').pop()?.replace(/\\s+/g, '');\n\n/** A story file's component: its props type, null when it takes none, and the declaration its symbol names. */\nexport interface FoundComponent {\n props: ts.Type | null;\n declaration: ts.Declaration | undefined;\n}\n\n/**\n * The component a story file's default export names as `component`, else the import named `fallback`: a native\n * `meta()` names none, and a wrapper declared in the story file is not the component, so the title's last segment\n * stands in for either, as it does in the dependency graph.\n */\nexport function componentOf(\n tsm: typeof ts,\n checker: ts.TypeChecker,\n source: ts.SourceFile,\n fallback?: string,\n): FoundComponent | null {\n const module = checker.getSymbolAtLocation(source);\n const exported = module && checker.tryGetMemberInModuleExports('default', module);\n if (!exported) return null;\n const meta = checker.getTypeOfSymbolAtLocation(resolved(tsm, checker, exported), source);\n let named = meta.getProperty('component');\n let symbol = named && assigned(tsm, checker, resolved(tsm, checker, exported));\n // A wrapper the story file declares itself is the story's, not the component's, as the dependency graph reads it.\n const local = !symbol || symbol.getDeclarations()?.some((declaration) => declaration.getSourceFile() === source);\n const imported = local && fallback ? importNamed(tsm, checker, source, fallback) : undefined;\n if (imported) {\n named = undefined;\n symbol = imported;\n }\n if (!named && !symbol) return null;\n // The value's own type: a meta typed `Meta` alone would otherwise give a props type of `any`.\n const type = checker.getNonNullableType(checker.getTypeOfSymbolAtLocation(symbol ?? named!, source));\n const declaration = symbol?.getDeclarations()?.[0];\n for (const part of type.isUnion() ? type.types : [type]) {\n const [call] = part.getCallSignatures();\n const [param] = call?.getParameters() ?? [];\n if (call) return { props: param ? checker.getTypeOfSymbolAtLocation(param, source) : null, declaration };\n const instance = part.getConstructSignatures()[0]?.getReturnType();\n const held = instance?.getProperty('props');\n if (held) return { props: checker.getTypeOfSymbolAtLocation(held, source), declaration };\n }\n return null;\n}\n\nconst resolved = (tsm: typeof ts, checker: ts.TypeChecker, symbol: ts.Symbol): ts.Symbol =>\n symbol.flags & tsm.SymbolFlags.Alias ? checker.getAliasedSymbol(symbol) : symbol;\n\n/**\n * The symbol the meta object's `component` property is assigned, followed through imports: read from the object as\n * written, since a typed meta's property is declared by its type, not by the object.\n */\nfunction assigned(tsm: typeof ts, checker: ts.TypeChecker, meta: ts.Symbol): ts.Symbol | undefined {\n const declaration = meta.getDeclarations()?.[0];\n let node: ts.Node | undefined =\n declaration && tsm.isVariableDeclaration(declaration)\n ? declaration.initializer\n : declaration && tsm.isExportAssignment(declaration)\n ? declaration.expression\n : undefined;\n while (node && !tsm.isObjectLiteralExpression(node)) {\n if (tsm.isCallExpression(node)) node = node.arguments[0];\n else if (tsm.isParenthesizedExpression(node) || tsm.isAsExpression(node) || tsm.isSatisfiesExpression(node)) {\n node = node.expression;\n } else node = undefined;\n }\n const property = node?.properties.find((p) => p.name && tsm.isIdentifier(p.name) && p.name.text === 'component');\n let value: ts.Symbol | undefined;\n if (property && tsm.isShorthandPropertyAssignment(property)) value = checker.getShorthandAssignmentValueSymbol(property);\n else if (property && tsm.isPropertyAssignment(property)) value = checker.getSymbolAtLocation(property.initializer);\n return value && resolved(tsm, checker, value);\n}\n\nfunction importNamed(tsm: typeof ts, checker: ts.TypeChecker, source: ts.SourceFile, name: string): ts.Symbol | undefined {\n for (const statement of source.statements) {\n if (!tsm.isImportDeclaration(statement)) continue;\n const clause = statement.importClause;\n const bindings = clause?.namedBindings;\n const names = [\n ...(clause?.name ? [clause.name] : []),\n ...(bindings && tsm.isNamedImports(bindings) ? bindings.elements.map((element) => element.name) : []),\n ];\n const found = names.find((id) => id.text === name);\n const symbol = found && checker.getSymbolAtLocation(found);\n if (symbol) return resolved(tsm, checker, symbol);\n }\n return undefined;\n}\n","import { type ParserPlugin, parse } from '@babel/parser';\nimport type * as t from '@babel/types';\nimport { dirname, relative, sep } from 'node:path';\nimport { isGallery } from '../story/tags.ts';\nimport type { ComponentDeps, DepGraph, IndexEntry } from '../story/types.ts';\nimport { titleStandIn } from './componentOf.ts';\n\n/** Resolves an import as the bundler would: an absolute file, or null for anything that is not one. */\nexport type ResolveImport = (specifier: string, importer: string) => Promise<string | null>;\n\nexport interface DepGraphOptions {\n root: string;\n read: (file: string) => string;\n}\n\nexport interface DepGraphBuilder {\n build(entries: readonly IndexEntry[], resolve: ResolveImport): Promise<DepGraph>;\n /** Drops what was read from `file`. True when the graph had read it, so the graph may have changed. */\n invalidate(file: string): boolean;\n /** Drops every cached import resolution, keeping the parsed files. */\n reset(): void;\n}\n\ninterface Import {\n spec: string;\n /** `*` for a namespace import. */\n imported: string;\n}\n\ntype Export = { kind: 'local'; local: string } | { kind: 'from'; spec: string; imported: string };\n\nexport interface ModuleInfo {\n imports: Map<string, Import>;\n exports: Map<string, Export>;\n stars: string[];\n /** Per top-level binding, the names its declaration refers to. */\n refs: Map<string, Set<string>>;\n}\n\n/** A declared binding: the file declaring it and its name there. */\ntype Key = string;\nconst keyOf = (file: string, local: string): Key => `${file}#${local}`;\nconst fileOfKey = (key: Key): string => key.slice(0, key.lastIndexOf('#'));\n\nconst SCRIPT = /\\.[cm]?[jt]sx?$/;\nconst DEFAULT_LOCAL = '*default*';\n/** Keys holding types, which name no value a component could render. */\nconst TYPE_KEYS = new Set(['typeAnnotation', 'typeParameters', 'typeArguments', 'returnType', 'superTypeParameters', 'implements']);\n\n/**\n * The component graph of `entries`, derived from source: each component is the binding its story file's meta names\n * (or, when that is declared in the story file itself, the import the title's last segment names), found by\n * following imports and re-exports to the file declaring it. What a component uses is every listed component that\n * its own declaration reaches, directly or through the file's local helpers and the relative imports in its own\n * directory. Each file is read and parsed once and each import resolved once, until `invalidate` names it.\n */\nexport function createDepGraph({ root, read }: DepGraphOptions): DepGraphBuilder {\n const modules = new Map<string, ModuleInfo | null>();\n const resolutions = new Map<string, Map<string, Promise<string | null>>>();\n\n const info = (file: string): ModuleInfo | null => {\n if (!modules.has(file)) {\n let parsed: ModuleInfo | null = null;\n try {\n parsed = moduleInfo(read(file), file);\n } catch {\n parsed = null;\n }\n modules.set(file, parsed);\n }\n return modules.get(file) ?? null;\n };\n\n return {\n invalidate(file) {\n const known = modules.has(file) || resolutions.has(file);\n modules.delete(file);\n resolutions.delete(file);\n return known;\n },\n\n reset() {\n resolutions.clear();\n },\n\n async build(entries, resolve) {\n const resolveFrom = (spec: string, importer: string): Promise<string | null> => {\n let byImporter = resolutions.get(importer);\n if (!byImporter) {\n byImporter = new Map();\n resolutions.set(importer, byImporter);\n }\n let pending = byImporter.get(spec);\n if (!pending) {\n pending = resolve(spec, importer).then(\n (id) => {\n const file = id?.split('?')[0];\n return file && !file.startsWith('\\0') && SCRIPT.test(file) && !file.split(/[\\\\/]/).includes('node_modules') ? file : null;\n },\n () => null,\n );\n byImporter.set(spec, pending);\n }\n return pending;\n };\n\n /** The binding `name` exported from `file` is declared as, through re-exports. */\n const declaring = async (file: string, name: string, depth = 0): Promise<Key | null> => {\n const mod = info(file);\n if (!mod || depth > 32) return null;\n const exp = mod.exports.get(name);\n if (exp?.kind === 'local') {\n const imp = mod.imports.get(exp.local);\n return imp ? importKey(file, imp, depth + 1) : keyOf(file, exp.local);\n }\n if (exp?.kind === 'from') {\n const target = await resolveFrom(exp.spec, file);\n return target ? declaring(target, exp.imported, depth + 1) : null;\n }\n if (name === 'default') return null;\n for (const spec of mod.stars) {\n const target = await resolveFrom(spec, file);\n const found = target ? await declaring(target, name, depth + 1) : null;\n if (found) return found;\n }\n return null;\n };\n\n const importKey = async (importer: string, imp: Import, depth = 0): Promise<Key | null> => {\n if (imp.imported === '*') return null;\n const target = await resolveFrom(imp.spec, importer);\n return target ? declaring(target, imp.imported, depth) : null;\n };\n\n /** The component a story file's meta stands for. */\n const componentOf = async (entry: IndexEntry): Promise<Key | null> => {\n const mod = info(entry.file);\n if (!mod) return null;\n const byTitle = titleStandIn(entry.title);\n for (const local of [entry.componentName, byTitle]) {\n const imp = local ? mod.imports.get(local) : undefined;\n const key = imp ? await importKey(entry.file, imp) : null;\n if (key) return key;\n }\n return null;\n };\n\n const titles = new Map<string, IndexEntry[]>();\n for (const entry of entries) {\n if (isGallery(entry)) continue;\n const list = titles.get(entry.title);\n if (list) list.push(entry);\n else titles.set(entry.title, [entry]);\n }\n\n const components = new Map<string, Key | null>();\n const byKey = new Map<Key, string[]>();\n for (const [title, list] of titles) {\n let key: Key | null = null;\n for (const file of new Set(list.map((e) => e.file))) {\n key = await componentOf(list.find((e) => e.file === file) as IndexEntry);\n if (key) break;\n }\n components.set(title, key);\n if (key) byKey.set(key, [...(byKey.get(key) ?? []), title]);\n }\n const componentFiles = new Set([...byKey.keys()].map(fileOfKey));\n\n /** The keys `key`'s own source reaches that are other components. */\n const reached = async (key: Key): Promise<Set<Key>> => {\n const out = new Set<Key>();\n const home = fileOfKey(key);\n const homeDir = dirname(home);\n const visited = new Set<string>();\n\n const walkFile = async (file: string, roots: readonly string[] | null): Promise<void> => {\n const mod = info(file);\n if (!mod) return;\n const locals = new Set<string>();\n if (roots === null) {\n for (const name of mod.refs.keys()) locals.add(name);\n for (const name of mod.imports.keys()) locals.add(name);\n } else {\n const queue = [...roots];\n while (queue.length > 0) {\n const name = queue.pop() as string;\n if (locals.has(name)) continue;\n locals.add(name);\n const here = keyOf(file, name);\n if (here !== key && byKey.has(here)) {\n out.add(here);\n continue;\n }\n for (const ref of mod.refs.get(name) ?? []) {\n if (mod.refs.has(ref) || mod.imports.has(ref)) queue.push(ref);\n }\n }\n }\n for (const name of locals) {\n const imp = mod.imports.get(name);\n if (!imp) continue;\n const target = await importKey(file, imp);\n if (target && byKey.has(target)) {\n if (target !== key) out.add(target);\n continue;\n }\n if (!imp.spec.startsWith('.')) continue;\n const helper = await resolveFrom(imp.spec, file);\n if (!helper || visited.has(helper) || componentFiles.has(helper)) continue;\n if (relative(homeDir, helper).startsWith('..')) continue;\n visited.add(helper);\n await walkFile(helper, null);\n }\n };\n\n visited.add(home);\n await walkFile(home, [key.slice(home.length + 1)]);\n return out;\n };\n\n const graph: DepGraph = {};\n for (const [title, key] of components) {\n graph[title] = { source: key ? relative(root, fileOfKey(key)).split(sep).join('/') : null, uses: [], usedBy: [] };\n }\n for (const [title, key] of components) {\n if (!key) continue;\n const uses = new Set<string>();\n for (const target of await reached(key)) {\n for (const other of byKey.get(target) ?? []) if (other !== title) uses.add(other);\n }\n const node = graph[title] as ComponentDeps;\n node.uses = [...uses].sort();\n for (const other of node.uses) graph[other]?.usedBy.push(title);\n }\n for (const node of Object.values(graph)) node.usedBy.sort();\n return Object.fromEntries(Object.entries(graph).sort(([a], [b]) => a.localeCompare(b)));\n },\n };\n}\n\nexport function moduleInfo(code: string, file: string): ModuleInfo {\n const plugins: ParserPlugin[] = ['typescript', 'decorators-legacy', ...(/\\.[cm]?[jt]sx$/.test(file) ? (['jsx'] as const) : [])];\n const program = parse(code, { sourceType: 'module', plugins }).program;\n const imports = new Map<string, Import>();\n const exports = new Map<string, Export>();\n const stars: string[] = [];\n const refs = new Map<string, Set<string>>();\n const declare = (name: string, node: t.Node | null | undefined) => refs.set(name, node ? namesIn(node) : new Set());\n\n const declareStatement = (decl: t.Node | null | undefined): string[] => {\n if (!decl) return [];\n switch (decl.type) {\n case 'FunctionDeclaration':\n case 'ClassDeclaration':\n if (!decl.id) return [];\n declare(decl.id.name, decl);\n return [decl.id.name];\n case 'VariableDeclaration':\n return decl.declarations.flatMap((d) => {\n if (d.id.type !== 'Identifier') return [];\n declare(d.id.name, d.init);\n return [d.id.name];\n });\n default:\n return [];\n }\n };\n\n for (const stmt of program.body) {\n switch (stmt.type) {\n case 'ImportDeclaration':\n if (stmt.importKind === 'type') break;\n for (const spec of stmt.specifiers) {\n if (spec.type === 'ImportSpecifier' && spec.importKind === 'type') continue;\n const imported =\n spec.type === 'ImportNamespaceSpecifier' ? '*' : spec.type === 'ImportDefaultSpecifier' ? 'default' : nameOf(spec.imported);\n imports.set(spec.local.name, { spec: stmt.source.value, imported });\n }\n break;\n case 'ExportNamedDeclaration':\n if (stmt.exportKind === 'type') break;\n for (const name of declareStatement(stmt.declaration)) exports.set(name, { kind: 'local', local: name });\n for (const spec of stmt.specifiers) {\n if (spec.type === 'ExportSpecifier' && spec.exportKind === 'type') continue;\n if (spec.type !== 'ExportSpecifier') continue;\n const exported = nameOf(spec.exported);\n const local = nameOf(spec.local);\n exports.set(exported, stmt.source ? { kind: 'from', spec: stmt.source.value, imported: local } : { kind: 'local', local });\n }\n break;\n case 'ExportAllDeclaration':\n if (stmt.exportKind !== 'type') stars.push(stmt.source.value);\n break;\n case 'ExportDefaultDeclaration': {\n const decl = stmt.declaration;\n const named = (decl.type === 'FunctionDeclaration' || decl.type === 'ClassDeclaration') && decl.id ? decl.id.name : null;\n if (named) declare(named, decl);\n else if (decl.type === 'Identifier') {\n exports.set('default', { kind: 'local', local: decl.name });\n break;\n } else declare(DEFAULT_LOCAL, decl);\n exports.set('default', { kind: 'local', local: named ?? DEFAULT_LOCAL });\n break;\n }\n default:\n declareStatement(stmt);\n }\n }\n return { imports, exports, stars, refs };\n}\n\nfunction nameOf(node: t.Identifier | t.StringLiteral): string {\n return node.type === 'Identifier' ? node.name : node.value;\n}\n\n/** Every identifier `node` refers to as a value, JSX tags included. Types and property names are left out. */\nfunction namesIn(node: t.Node): Set<string> {\n const out = new Set<string>();\n const walk = (value: unknown, key?: string): void => {\n if (key !== undefined && TYPE_KEYS.has(key)) return;\n if (Array.isArray(value)) {\n for (const item of value) walk(item);\n return;\n }\n if (!value || typeof value !== 'object' || typeof (value as { type?: unknown }).type !== 'string') return;\n const n = value as t.Node;\n if (n.type.startsWith('TS') && !('expression' in n)) return;\n if (n.type === 'Identifier' || n.type === 'JSXIdentifier') {\n out.add(n.name);\n return;\n }\n for (const [k, child] of Object.entries(n)) {\n if (k === 'leadingComments' || k === 'trailingComments' || k === 'innerComments' || k === 'loc') continue;\n if ((n.type === 'MemberExpression' || n.type === 'OptionalMemberExpression') && k === 'property' && !n.computed) continue;\n if (n.type === 'JSXMemberExpression' && k === 'property') continue;\n if ((n.type === 'ObjectProperty' || n.type === 'ObjectMethod' || n.type === 'ClassMethod' || n.type === 'ClassProperty') && k === 'key' && !n.computed) continue;\n if (n.type === 'JSXAttribute' && k === 'name') continue;\n walk(child, k);\n }\n };\n walk(node);\n return out;\n}\n","import { execFile } from 'node:child_process';\nimport { existsSync, readFileSync } from 'node:fs';\nimport { dirname, join, posix, resolve } from 'node:path';\nimport type { ComponentHistory } from '../story/types.ts';\n\n/** Runs git in `cwd` and answers its stdout. */\nexport type Git = (args: readonly string[], cwd: string) => Promise<string>;\n\nexport const runGit: Git = (args, cwd) =>\n new Promise((done, fail) => {\n execFile('git', ['-c', 'core.quotepath=off', ...args], { cwd, maxBuffer: 1 << 30 }, (error, stdout) =>\n error ? fail(error) : done(stdout),\n );\n });\n\n/** A commit header in the log `fileDates` reads: a NUL, the hash, a tab, the author date. */\nconst LOG_FORMAT = '--format=%x00%H%x09%aI';\n\ninterface FileDates {\n created: string;\n modified: string;\n /** The commit that added the file. */\n createdBy: string;\n /** The commit that last changed it. */\n modifiedBy: string;\n}\n\n/**\n * When each of `paths` was added and last changed, from one `git log --name-status -M` read newest first. A file is\n * followed back through its renames, so one that moved keeps the date it was first written.\n */\nexport function fileDates(log: string, paths: readonly string[]): Map<string, FileDates> {\n const out = new Map<string, FileDates>();\n /** The name each still-followed file goes by at the commit being read. */\n const names = new Map(paths.map((path) => [path, path]));\n let commit = '';\n let date = '';\n for (const line of log.split('\\n')) {\n if (names.size === 0) break;\n if (line.startsWith('\\0')) {\n [commit = '', date = ''] = line.slice(1).split('\\t');\n continue;\n }\n const [status, ...files] = line.split('\\t');\n const name = files.at(-1);\n const path = name === undefined ? undefined : names.get(name);\n if (!status || name === undefined || path === undefined) continue;\n const newer = out.get(path);\n out.set(path, {\n created: date,\n modified: newer?.modified ?? date,\n createdBy: commit,\n modifiedBy: newer?.modifiedBy ?? commit,\n });\n const renamed = status.startsWith('R') ? files[0] : undefined;\n if (status === 'A' || renamed !== undefined) names.delete(name);\n if (renamed !== undefined) names.set(renamed, path);\n }\n return out;\n}\n\n/** The version in a `git name-rev` answer such as `@scope/pkg@1.2.0~3^2`; null when it names no release. */\nexport function versionOf(named: string): string | null {\n const tag = named.trim().split(/[~^]/)[0] ?? '';\n return /(?:^v?|@)(\\d+\\.\\d+\\.\\d+[-+.\\w]*)$/.exec(tag)?.[1] ?? null;\n}\n\n/** The name of the package `file` belongs to: the nearest `package.json` at or under `top` that has one. */\nfunction packageOf(file: string, top: string): string | null {\n for (let dir = dirname(file); dir.startsWith(top); dir = dirname(dir)) {\n const manifest = join(dir, 'package.json');\n if (existsSync(manifest)) {\n try {\n const name = (JSON.parse(readFileSync(manifest, 'utf8')) as { name?: unknown }).name;\n if (typeof name === 'string') return name;\n } catch {\n // An unreadable manifest names no package; the next one up may.\n }\n }\n if (dir === top) break;\n }\n return null;\n}\n\nexport interface HistoryReader {\n /** The history of each of `sources`, paths relative to the vite root. A file git has never committed has none. */\n read(sources: readonly string[]): Promise<Record<string, ComponentHistory>>;\n}\n\n/**\n * Reads component history from git, once per `HEAD`: every date comes from a commit, so nothing changes until one\n * lands. Outside a repository, or with no git to run, every read answers empty.\n */\nexport function createHistoryReader(root: string, git: Git = runGit): HistoryReader {\n let cached: { head: string; sources: string; history: Record<string, ComponentHistory> } | null = null;\n\n async function load(sources: readonly string[]): Promise<Record<string, ComponentHistory>> {\n const [top = '', prefix = ''] = (await git(['rev-parse', '--show-toplevel', '--show-prefix'], root)).split('\\n');\n const inRepo = new Map(sources.map((source) => [posix.normalize(posix.join(prefix, source)), source]));\n const log = await git(['log', '--name-status', '-M', LOG_FORMAT], top);\n const dates = fileDates(log, [...inRepo.keys()]);\n\n /** Per package, the files it holds: a release is looked for among that package's tags and the unscoped ones. */\n const byPackage = new Map<string | null, string[]>();\n for (const path of dates.keys()) {\n const name = packageOf(resolve(top, path), top);\n byPackage.set(name, [...(byPackage.get(name) ?? []), path]);\n }\n const history: Record<string, ComponentHistory> = {};\n for (const [name, paths] of byPackage) {\n const refs = ['v[0-9]*', '[0-9]*', ...(name === null ? [] : [`${name}@[0-9]*`])].map((ref) => `--refs=${ref}`);\n const commits = paths.flatMap((path) => [dates.get(path)!.createdBy, dates.get(path)!.modifiedBy]);\n const named = (await git(['name-rev', '--tags', '--name-only', ...refs, ...commits], top)).split('\\n');\n paths.forEach((path, i) => {\n const { created, modified } = dates.get(path)!;\n history[inRepo.get(path)!] = {\n created,\n modified,\n introduced: versionOf(named[2 * i] ?? ''),\n modifiedIn: versionOf(named[2 * i + 1] ?? ''),\n };\n });\n }\n return history;\n }\n\n return {\n async read(sources) {\n try {\n const head = (await git(['rev-parse', 'HEAD'], root)).trim();\n const key = [...sources].sort().join('\\n');\n if (cached?.head !== head || cached.sources !== key) cached = { head, sources: key, history: await load(sources) };\n return cached.history;\n } catch {\n return {};\n }\n },\n };\n}\n","import { type ParserPlugin, parse } from '@babel/parser';\nimport type * as t from '@babel/types';\n\n/** A program's top-level variable initializers and function declarations, by name. */\nexport type Bindings = Map<string, t.Node>;\n\nexport function parseFile(code: string, file: string): t.Program {\n const plugins: ParserPlugin[] = ['typescript', 'decorators-legacy', ...(/\\.[jt]sx$/.test(file) ? (['jsx'] as const) : [])];\n return parse(code, { sourceType: 'module', plugins }).program;\n}\n\n/** The identifier `node` calls, through casts and top-level `const`s. */\nexport function calleeOf(node: t.Node | undefined, bindings: Bindings, depth = 0): string | undefined {\n if (!node || depth > 16) return undefined;\n switch (node.type) {\n case 'TSSatisfiesExpression':\n case 'TSAsExpression':\n case 'TSTypeAssertion':\n case 'TSNonNullExpression':\n case 'ParenthesizedExpression':\n return calleeOf(node.expression, bindings, depth + 1);\n case 'CallExpression':\n return node.callee.type === 'Identifier' ? node.callee.name : undefined;\n case 'Identifier':\n return calleeOf(bindings.get(node.name), bindings, depth + 1);\n default:\n return undefined;\n }\n}\n\nconst LITERALS: ReadonlySet<string> = new Set([\n 'StringLiteral',\n 'NumericLiteral',\n 'BooleanLiteral',\n 'NullLiteral',\n 'BigIntLiteral',\n 'RegExpLiteral',\n 'TemplateLiteral',\n 'ArrayExpression',\n 'ArrowFunctionExpression',\n 'FunctionExpression',\n 'FunctionDeclaration',\n 'ClassExpression',\n 'JSXElement',\n 'JSXFragment',\n]);\n\n/** Whether `node` is written out as a value, through casts and top-level `const`s, so no call produced it. */\nexport function isLiteralValue(node: t.Node | undefined, bindings: Bindings, depth = 0): boolean {\n if (!node || depth > 16) return false;\n switch (node.type) {\n case 'TSSatisfiesExpression':\n case 'TSAsExpression':\n case 'TSTypeAssertion':\n case 'TSNonNullExpression':\n case 'ParenthesizedExpression':\n return isLiteralValue(node.expression, bindings, depth + 1);\n case 'Identifier':\n return isLiteralValue(bindings.get(node.name), bindings, depth + 1);\n case 'ObjectExpression':\n // A spread can carry a story's brand into the copy.\n return node.properties.every((p) => p.type !== 'SpreadElement');\n default:\n return LITERALS.has(node.type);\n }\n}\n\n/** The value of a plain string literal or an expression-free template literal. */\nexport function stringLiteral(node: t.Node): string | undefined {\n if (node.type === 'StringLiteral') return node.value;\n if (node.type === 'TemplateLiteral' && node.expressions.length === 0) return node.quasis.map((q) => q.value.cooked ?? q.value.raw).join('');\n return undefined;\n}\n\n/** The string `node` is written as: a literal, through casts and top-level `const`s. */\nexport function stringOf(node: t.Node | undefined, bindings: Bindings, depth = 0): string | undefined {\n if (!node || depth > 16) return undefined;\n switch (node.type) {\n case 'TSSatisfiesExpression':\n case 'TSAsExpression':\n case 'TSTypeAssertion':\n case 'TSNonNullExpression':\n case 'ParenthesizedExpression':\n return stringOf(node.expression, bindings, depth + 1);\n case 'Identifier':\n return stringOf(bindings.get(node.name), bindings, depth + 1);\n default:\n return stringLiteral(node);\n }\n}\n\nexport function isDefaultExport(stmt: t.Statement): boolean {\n if (stmt.type === 'ExportDefaultDeclaration') return true;\n return (\n stmt.type === 'ExportNamedDeclaration' &&\n stmt.specifiers.some((s) => s.type === 'ExportSpecifier' && exportedName(s.exported) === 'default')\n );\n}\n\n/**\n * The JSDoc block immediately above `node`, as prose. A `//` comment is not\n * one: a line comment above an export is as often a note to the author as a\n * description of the story, and printing it in the dossier would be guessing.\n */\nexport function docOf(node: t.Node): string | undefined {\n const comments = node.leadingComments;\n const last = comments?.[comments.length - 1];\n if (last?.type !== 'CommentBlock' || !last.value.startsWith('*')) return undefined;\n const text = last.value\n .slice(1)\n .split('\\n')\n .map((line) => line.replace(/^\\s*\\*/, '').trim())\n .join('\\n')\n .trim();\n return text || undefined;\n}\n\nexport function exportedName(node: t.Identifier | t.StringLiteral): string {\n return node.type === 'Identifier' ? node.name : node.value;\n}\n\n/** The object literal `node` evaluates to, through casts, `meta(…)`/`story(…)` and top-level `const`s. */\nexport function objectOf(node: t.Node | undefined, bindings: Bindings, wrappers: Set<string>, depth = 0): t.ObjectExpression | null {\n if (!node || depth > 16) return null;\n switch (node.type) {\n case 'ObjectExpression':\n return node;\n case 'TSSatisfiesExpression':\n case 'TSAsExpression':\n case 'TSTypeAssertion':\n case 'TSNonNullExpression':\n case 'ParenthesizedExpression':\n return objectOf(node.expression, bindings, wrappers, depth + 1);\n case 'CallExpression':\n return node.callee.type === 'Identifier' && wrappers.has(node.callee.name)\n ? objectOf(node.arguments[0], bindings, wrappers, depth + 1)\n : null;\n case 'Identifier':\n return objectOf(bindings.get(node.name), bindings, wrappers, depth + 1);\n default:\n return null;\n }\n}\n\nexport function prop(obj: t.ObjectExpression | null, key: string): t.Node | undefined {\n for (const p of obj?.properties ?? []) {\n if (p.type !== 'ObjectProperty' || p.computed) continue;\n const name = p.key.type === 'Identifier' ? p.key.name : p.key.type === 'StringLiteral' ? p.key.value : null;\n if (name === key) return p.value;\n }\n return undefined;\n}\n\nexport function stringProp(obj: t.ObjectExpression | null, key: string): string | undefined {\n const value = prop(obj, key);\n return value?.type === 'StringLiteral' ? value.value : undefined;\n}\n","import type * as t from '@babel/types';\nimport { type Bindings, isLiteralValue } from './ast.ts';\n\ntype Fn = t.ArrowFunctionExpression | t.FunctionExpression | t.FunctionDeclaration;\n\nexport const isFn = (node: t.Node | undefined): node is Fn =>\n node?.type === 'ArrowFunctionExpression' || node?.type === 'FunctionExpression' || node?.type === 'FunctionDeclaration';\n\n/** What following a file's imports found, by local name; a name it could not decide is absent. */\nexport interface ForeignStories {\n /** Whether the import is a story. */\n values: Record<string, boolean>;\n /** Whether calling the import returns a story. */\n calls: Record<string, boolean>;\n /** Whether a name re-exported from another module is a story, by exported name. */\n reexports: Record<string, boolean>;\n}\n\n/** `ForeignStories` as it is asked; `undefined` is \"not known\". */\nexport interface Foreign {\n value(name: string): boolean | undefined;\n call(name: string): boolean | undefined;\n reexport(name: string): boolean | undefined;\n}\n\nexport const foreignFrom = (known: ForeignStories): Foreign => ({\n value: (name) => known.values[name],\n call: (name) => known.calls[name],\n reexport: (name) => known.reexports[name],\n});\n\n/** What a file is read against: its top-level bindings, its callees that are forge's, and what its imports are. */\nexport interface Scope {\n bindings: Bindings;\n wrappers: ReadonlySet<string>;\n foreign?: Foreign;\n}\n\n/** Whether any `return` of `statements`, through blocks and `if`s, may hand back a story. */\nfunction returnsStory(statements: readonly t.Statement[], scope: Scope, depth: number): boolean {\n return statements.some((stmt) => {\n if (stmt.type === 'ReturnStatement') return mayBeStory(stmt.argument ?? undefined, scope, depth);\n if (stmt.type === 'BlockStatement') return returnsStory(stmt.body, scope, depth);\n if (stmt.type !== 'IfStatement') return false;\n return returnsStory([stmt.consequent, ...(stmt.alternate ? [stmt.alternate] : [])], scope, depth);\n });\n}\n\n/** Whether calling `fn` may hand back a story. */\nexport function mayReturnStory(fn: Fn, scope: Scope, depth = 0): boolean {\n return fn.body.type === 'BlockStatement' ? returnsStory(fn.body.body, scope, depth + 1) : mayBeStory(fn.body, scope, depth + 1);\n}\n\n/**\n * Whether a native file's export may be what forge's `story` returned, which is all the loader takes. A call is one\n * only when it calls `story` or a function that returns such a call; a value written out is not, and a copy or a\n * choice is one when something it copies or chooses from is. What cannot be read stays in: an import nothing resolved.\n */\nexport function mayBeStory(node: t.Node | undefined, scope: Scope, depth = 0): boolean {\n if (!node) return true;\n if (depth > 16) return false;\n switch (node.type) {\n case 'TSSatisfiesExpression':\n case 'TSAsExpression':\n case 'TSTypeAssertion':\n case 'TSNonNullExpression':\n case 'ParenthesizedExpression':\n return mayBeStory(node.expression, scope, depth + 1);\n case 'Identifier':\n return scope.bindings.has(node.name)\n ? mayBeStory(scope.bindings.get(node.name), scope, depth + 1)\n : (scope.foreign?.value(node.name) ?? true);\n case 'CallExpression': {\n if (node.callee.type !== 'Identifier') return false;\n if (scope.wrappers.has(node.callee.name)) return true;\n const fn = scope.bindings.get(node.callee.name);\n if (isFn(fn)) return mayReturnStory(fn, scope, depth);\n return !scope.bindings.has(node.callee.name) && (scope.foreign?.call(node.callee.name) ?? false);\n }\n case 'ConditionalExpression':\n return mayBeStory(node.consequent, scope, depth + 1) || mayBeStory(node.alternate, scope, depth + 1);\n case 'LogicalExpression':\n return mayBeStory(node.left, scope, depth + 1) || mayBeStory(node.right, scope, depth + 1);\n case 'ObjectExpression':\n // A spread carries a story's brand into the copy.\n return node.properties.some((p) => p.type === 'SpreadElement' && mayBeStory(p.argument, scope, depth + 1));\n default:\n return !isLiteralValue(node, scope.bindings);\n }\n}\n","import type * as t from '@babel/types';\nimport type { Viewport } from '../protocol/messages.ts';\nimport { storyId, storyNameFromExport } from '../story/ids.ts';\nimport type { IndexEntry } from '../story/types.ts';\nimport {\n type Bindings,\n calleeOf,\n docOf,\n exportedName,\n isDefaultExport,\n objectOf,\n parseFile,\n prop,\n stringLiteral,\n stringOf,\n stringProp,\n} from './ast.ts';\nimport { type Foreign, mayBeStory } from './nativeExports.ts';\n\n/**\n * The stories `code` declares, in source order, without running it. `file` is absolute; `autoTitle` titles a meta\n * that names none. `wrappers` adds locals known to be forge's `meta` or `story` though imported from elsewhere, and\n * `foreign` says what a native file's other imports are, where something followed them.\n */\nexport function indexFile(\n code: string,\n file: string,\n autoTitle: string,\n wrappers: ReadonlySet<string> = new Set(),\n foreign?: Foreign,\n): IndexEntry[] {\n try {\n return indexProgram(parseFile(code, file), file, autoTitle, wrappers, foreign);\n } catch (err) {\n throw new Error(`${file}: ${err instanceof Error ? err.message : String(err)}`, { cause: err });\n }\n}\n\n/** An import that a story file's default export or a named export is a call to. */\nexport interface ForeignCallee {\n local: string;\n spec: string;\n imported: string;\n}\n\n/**\n * The imports, from anywhere but `@weasel-js/forge`, that the default export or a named export is a call to. Any of\n * them may be forge's `meta` or `story` re-exported through another module, which only resolving it can tell.\n */\nexport function foreignCallees(code: string, file: string): ForeignCallee[] {\n const program = parseFile(code, file);\n const { bindings } = scan(program, new Set());\n const imported = new Map<string, ForeignCallee>();\n const exported: (t.Node | null | undefined)[] = [];\n for (const stmt of program.body) {\n if (stmt.type === 'ImportDeclaration' && stmt.importKind !== 'type' && stmt.source.value !== '@weasel-js/forge') {\n for (const spec of stmt.specifiers) {\n if (spec.type === 'ImportNamespaceSpecifier' || (spec.type === 'ImportSpecifier' && spec.importKind === 'type')) continue;\n const name = spec.type === 'ImportDefaultSpecifier' ? 'default' : exportedName(spec.imported);\n imported.set(spec.local.name, { local: spec.local.name, spec: stmt.source.value, imported: name });\n }\n }\n if (stmt.type === 'ExportDefaultDeclaration') exported.push(stmt.declaration);\n if (stmt.type !== 'ExportNamedDeclaration' || stmt.exportKind === 'type') continue;\n if (stmt.declaration?.type === 'VariableDeclaration') exported.push(...stmt.declaration.declarations.map((d) => d.init));\n if (stmt.source) continue;\n for (const spec of stmt.specifiers) if (spec.type === 'ExportSpecifier') exported.push(bindings.get(exportedName(spec.local)));\n }\n const found = new Map<string, ForeignCallee>();\n for (const node of exported) {\n const hit = imported.get(calleeOf(node ?? undefined, bindings) ?? '');\n if (hit) found.set(hit.local, hit);\n }\n return [...found.values()];\n}\n\n/** The program's top-level bindings, and its locals that are forge's `meta` or `story`. */\nexport function scan(program: t.Program, extra: ReadonlySet<string>): { bindings: Bindings; wrappers: Set<string> } {\n const bindings: Bindings = new Map();\n const wrappers = new Set(extra);\n for (const stmt of program.body) {\n if (stmt.type === 'ImportDeclaration' && stmt.source.value === '@weasel-js/forge') {\n for (const spec of stmt.specifiers) {\n if (spec.type === 'ImportSpecifier' && ['meta', 'story'].includes(exportedName(spec.imported))) {\n wrappers.add(spec.local.name);\n }\n }\n }\n const decl = stmt.type === 'ExportNamedDeclaration' ? stmt.declaration : stmt;\n if (decl?.type === 'VariableDeclaration') {\n for (const d of decl.declarations) if (d.id.type === 'Identifier' && d.init) bindings.set(d.id.name, d.init);\n } else if (decl?.type === 'FunctionDeclaration' && decl.id) {\n bindings.set(decl.id.name, decl);\n }\n }\n return { bindings, wrappers };\n}\n\nexport function indexProgram(program: t.Program, file: string, autoTitle: string, extra: ReadonlySet<string>, foreign?: Foreign): IndexEntry[] {\n const { bindings, wrappers } = scan(program, extra);\n\n let metaNode: t.Node | undefined;\n let metaDoc: string | undefined;\n // `from`: re-exported from another module, so there is no node to read here.\n const exported: { name: string; node: t.Node | undefined; doc: string | undefined; from?: boolean }[] = [];\n for (const stmt of program.body) {\n if (stmt.type === 'ExportDefaultDeclaration') {\n metaNode = stmt.declaration;\n metaDoc = docOf(stmt);\n }\n if (stmt.type !== 'ExportNamedDeclaration' || stmt.exportKind === 'type') continue;\n const doc = docOf(stmt);\n const decl = stmt.declaration;\n if (decl?.type === 'VariableDeclaration') {\n for (const d of decl.declarations) {\n if (d.id.type === 'Identifier') exported.push({ name: d.id.name, node: d.init ?? undefined, doc: docOf(d) ?? doc });\n }\n } else if (decl?.type === 'FunctionDeclaration' && decl.id) {\n exported.push({ name: decl.id.name, node: decl, doc });\n }\n for (const spec of stmt.specifiers) {\n if (spec.type !== 'ExportSpecifier' || spec.exportKind === 'type') continue;\n const name = exportedName(spec.exported);\n const node = stmt.source ? undefined : bindings.get(exportedName(spec.local));\n if (name === 'default') {\n metaNode = node;\n metaDoc ??= doc;\n } else if (stmt.source) exported.push({ name, node, doc, from: true });\n // An import exported as it stands is read as the identifier it is, which is what `foreign` is asked about.\n else exported.push({ name, node: node ?? (spec.local.type === 'Identifier' ? spec.local : undefined), doc });\n }\n }\n if (!metaNode && !program.body.some(isDefaultExport)) return [];\n\n const meta = objectOf(metaNode, bindings, wrappers);\n const title = stringOf(prop(meta, 'title'), bindings) ?? autoTitle;\n const include = storyFilter(meta, 'includeStories');\n const exclude = storyFilter(meta, 'excludeStories');\n const componentNode = prop(meta, 'component');\n const componentName = componentNode?.type === 'Identifier' ? componentNode.name : undefined;\n const metaIsolate = isolateOf(meta, bindings, wrappers, 'default');\n const metaTags = tagsOf(meta);\n const native = wrappers.has(calleeOf(metaNode, bindings) ?? '');\n\n return exported\n .filter(({ name }) => name !== '__namedExportsOrder')\n .filter(({ name }) => (!include || include(name)) && (!exclude || !exclude(name)))\n .filter((e) => !native || (e.from ? (foreign?.reexport(e.name) ?? true) : mayBeStory(e.node, { bindings, wrappers, foreign })))\n .map(({ name, node, doc }) => {\n const spec = objectOf(node, bindings, wrappers);\n const isolate = isolateOf(spec, bindings, wrappers, name) ?? metaIsolate;\n const tags = combineTags(metaTags, tagsOf(spec));\n const viewport = native ? viewportOf(spec, bindings, wrappers) : undefined;\n return {\n id: storyId(title, name),\n title,\n name: stringProp(spec, 'name') ?? stringProp(spec, 'storyName') ?? storyNameFromExport(name),\n exportName: name,\n file,\n ...(doc === undefined ? {} : { description: doc }),\n ...(metaDoc === undefined ? {} : { componentDescription: metaDoc }),\n ...(componentName === undefined ? {} : { componentName }),\n ...(isolate === undefined ? {} : { isolate }),\n ...(viewport === undefined ? {} : { viewport }),\n ...(tags === undefined ? {} : { tags }),\n };\n });\n}\n\n/**\n * The reason `obj` isolates its story: `isolate` on a native meta or story, `parameters.forge.isolate` in CSF.\n * It must be a string literal, because the shell reads it without importing the module.\n */\nfunction isolateOf(obj: t.ObjectExpression | null, bindings: Bindings, wrappers: Set<string>, exportName: string): string | undefined {\n const parameters = objectOf(prop(obj, 'parameters'), bindings, wrappers);\n const forge = objectOf(prop(parameters, 'forge'), bindings, wrappers);\n const value = prop(obj, 'isolate') ?? prop(forge, 'isolate');\n if (value === undefined) return undefined;\n const literal = stringLiteral(value);\n if (literal === undefined) throw new Error(`${exportName}: isolate must be a string literal`);\n return literal;\n}\n\n/** A native story's `viewport`, when both sides are number literals. */\nfunction viewportOf(obj: t.ObjectExpression | null, bindings: Bindings, wrappers: Set<string>): Viewport | undefined {\n const value = objectOf(prop(obj, 'viewport'), bindings, wrappers);\n const width = prop(value, 'width');\n const height = prop(value, 'height');\n return width?.type === 'NumericLiteral' && height?.type === 'NumericLiteral'\n ? { width: width.value, height: height.value }\n : undefined;\n}\n\n/** `obj`'s `tags`: the string literals of an array literal. */\nfunction tagsOf(obj: t.ObjectExpression | null): string[] | undefined {\n const value = prop(obj, 'tags');\n if (value?.type !== 'ArrayExpression') return undefined;\n return value.elements.flatMap((e) => (e ? (stringLiteral(e) ?? []) : []));\n}\n\n/** A story's tags as Storybook combines them: the meta's, then its own, where `!tag` removes `tag`. */\nfunction combineTags(meta: string[] | undefined, own: string[] | undefined): string[] | undefined {\n if (meta === undefined && own === undefined) return undefined;\n const out = new Set(meta);\n for (const tag of own ?? []) {\n if (tag.startsWith('!')) out.delete(tag.slice(1));\n else out.add(tag);\n }\n return [...out];\n}\n\n/** `includeStories`/`excludeStories` as a predicate, when written as a string array or a regex literal. */\nfunction storyFilter(obj: t.ObjectExpression | null, key: string): ((name: string) => boolean) | null {\n const value = prop(obj, key);\n if (value?.type === 'RegExpLiteral') {\n const re = new RegExp(value.pattern, value.flags.replace(/[gy]/g, ''));\n return (name) => re.test(name);\n }\n if (value?.type === 'ArrayExpression' && value.elements.every((e) => e?.type === 'StringLiteral')) {\n const names = new Set(value.elements.map((e) => (e as t.StringLiteral).value));\n return (name) => names.has(name);\n }\n return null;\n}\n","import { matchesGlob } from 'node:path';\n\n/**\n * The first of the `stories` globs that names `path`, a posix path relative to the vite root. A glob may be written\n * with a leading `./`, as Storybook's are; `matchesGlob` matches nothing against one.\n */\nexport function storyGlobOf(path: string, stories: readonly string[]): string | undefined {\n return stories.find((pattern) => matchesGlob(path, pattern.replace(/^\\.\\//, '')));\n}\n","import { dirname, relative, resolve, sep } from 'node:path';\nimport { storyGlobOf } from './storyGlob.ts';\n\n// A port of Storybook 10.4.0's auto-title (preview-api `userOrAutoTitle`, common `normalizeStoriesEntry`)\n// for string `stories` entries, which carry no title prefix. It must agree with Storybook or ids and links diverge.\n\nconst posix = (path: string): string => path.split(sep).join('/');\n\n/** Storybook's `normalizeStoryPath`. */\nconst dotted = (path: string): string => (/^\\.{1,2}([/\\\\]|$)/.test(path) ? path : `./${path}`);\n\n/** The directory a stories glob searches from: picomatch `scan`'s `prefix + base`, or a file's directory. */\nexport function globDirectory(pattern: string): string {\n const segments = pattern.split('/');\n const magic = segments.findIndex((segment) => /^!|(^|[^\\\\])[*?[{(]/.test(segment));\n return magic === -1 ? dirname(pattern) : segments.slice(0, magic).join('/');\n}\n\n/** Storybook's `sanitize` in autoTitle: strips the extension, then collapses `Button/Button`, `index` and `stories.js`. */\nfunction titleParts(parts: string[]): string[] {\n const last = parts[parts.length - 1];\n if (last === undefined) return parts;\n const stripped = last.replace(/(?:[.](?:story|stories))?([.][^.]+)$/i, '');\n if (parts.length === 1) return [stripped];\n const nextToLast = parts[parts.length - 2];\n if (stripped && nextToLast && stripped.toLowerCase() === nextToLast.toLowerCase()) return [...parts.slice(0, -2), stripped];\n if (stripped && (/^(story|stories)([.][^.]+)$/i.test(last) || /^index$/i.test(stripped))) return parts.slice(0, -1);\n return [...parts.slice(0, -1), stripped];\n}\n\nconst titleFrom = (importPath: string, directory: string): string =>\n titleParts(importPath.replace(directory, '').split('/').filter(Boolean)).join('/');\n\n/**\n * The title Storybook gives a story file whose meta names none: its path under the directory of the first\n * `stories` glob that matches it. A file no glob matches is titled from its path under `root`.\n */\nexport function autoTitle(file: string, root: string, stories: readonly string[]): string {\n const path = posix(relative(root, file));\n const importPath = dotted(path);\n const pattern = storyGlobOf(path, stories);\n if (pattern === undefined) return titleFrom(importPath, '.');\n const directory = dotted(posix(relative(root, resolve(root, globDirectory(pattern))))).replace(/\\/$/, '');\n return titleFrom(importPath, directory);\n}\n","import { parseFile } from './ast.ts';\nimport { indexProgram, scan } from './indexFile.ts';\nimport { type Foreign, type ForeignStories, isFn, mayBeStory, mayReturnStory, type Scope } from './nativeExports.ts';\nimport type { Trace } from './trace.ts';\n\ntype Kind = keyof ForeignStories;\ntype Ask = (kind: Kind, name: string) => Promise<boolean | undefined>;\n\nconst MAX_DEPTH = 8;\n\n/**\n * Runs `read` until it asks about no import it has not asked about before, answering each through `ask`. Reading\n * is synchronous and following an import is not, so each pass reads with what the passes before it learned.\n */\nasync function settled<T>(read: (foreign: Foreign) => T, ask: Ask): Promise<{ result: T; known: ForeignStories }> {\n const known: ForeignStories = { values: {}, calls: {}, reexports: {} };\n const asked = new Set<string>();\n for (;;) {\n const fresh: [Kind, string][] = [];\n const answer = (kind: Kind) => (name: string) => {\n if (!asked.has(`${kind}:${name}`)) fresh.push([kind, name]);\n return known[kind][name];\n };\n const result = read({ value: answer('values'), call: answer('calls'), reexport: answer('reexports') });\n if (fresh.length === 0) return { result, known };\n for (const [kind, name] of fresh) {\n asked.add(`${kind}:${name}`);\n const found = await ask(kind, name);\n if (found !== undefined) known[kind][name] = found;\n }\n }\n}\n\n/**\n * What the imports a native story file's exports rest on are: a story, a function that returns one, or neither.\n * `own` holds the bindings that are forge's `meta` and `story`, by declaring `file#local`; `wrappers` are the file's\n * callees already found to be those.\n */\nexport async function foreignStories(\n file: string,\n wrappers: ReadonlySet<string>,\n own: ReadonlyMap<string, 'meta' | 'story'>,\n trace: Trace,\n read: (file: string) => string,\n): Promise<ForeignStories> {\n const answers = new Map<string, Promise<boolean | undefined>>();\n\n /** Whether the binding `at` exports as `name` is a story, or, `called`, returns one. */\n const exported = async (at: string, name: string, called: boolean, depth: number): Promise<boolean | undefined> => {\n const key = await trace.declaring(at, name);\n if (!key) return undefined;\n if (own.has(key)) return called && own.get(key) === 'story';\n const memo = `${key}:${called}`;\n if (!answers.has(memo)) {\n // Set before it is awaited, so a cycle of imports meets a pending answer and not a second walk.\n answers.set(memo, depth > MAX_DEPTH ? Promise.resolve(undefined) : declared(key, called, depth));\n }\n return answers.get(memo);\n };\n\n const declared = async (key: string, called: boolean, depth: number): Promise<boolean | undefined> => {\n const at = key.slice(0, key.lastIndexOf('#'));\n const local = key.slice(at.length + 1);\n let scope: Scope;\n try {\n scope = scan(parseFile(read(at), at), new Set());\n } catch {\n return undefined;\n }\n const node = scope.bindings.get(local);\n if (!node) return undefined;\n const { result } = await settled(\n (foreign) => (called ? isFn(node) && mayReturnStory(node, { ...scope, foreign }) : mayBeStory(node, { ...scope, foreign })),\n asking(at, depth + 1),\n );\n return result;\n };\n\n const asking =\n (at: string, depth: number): Ask =>\n async (kind, name) => {\n const mod = trace.info(at);\n const exp = mod?.exports.get(name);\n const from = kind === 'reexports' ? (exp?.kind === 'from' ? exp : undefined) : mod?.imports.get(name);\n if (!from || from.imported === '*') return undefined;\n const target = await trace.target(from.spec, at);\n return target ? exported(target, from.imported, kind === 'calls', depth) : undefined;\n };\n\n // Indexing the file is what asks: it reads exactly the exports a native file's index depends on.\n try {\n const program = parseFile(read(file), file);\n return (await settled((foreign) => void indexProgram(program, file, '', wrappers, foreign), asking(file, 0))).known;\n } catch {\n return { values: {}, calls: {}, reexports: {} };\n }\n}\n","import { type ModuleInfo, moduleInfo, type ResolveImport } from './depGraph.ts';\n\n/** One pass of following imports for one story file: what it read, and whether anything failed to resolve. */\nexport interface Trace {\n reads: Set<string>;\n unresolved: boolean;\n info(file: string): ModuleInfo | null;\n /** The file `spec` names from `importer`, or null for nothing, or for a virtual module. */\n target(spec: string, importer: string): Promise<string | null>;\n /** `file#local` for the binding `name` exported from `at` is declared as, through imports and re-exports. */\n declaring(at: string, name: string): Promise<string | null>;\n}\n\n/** Follows imports and re-exports to the binding a name was declared as. Each file is parsed once per tracer. */\nexport function createTracer(read: (file: string) => string): (resolve: ResolveImport) => Trace {\n const modules = new Map<string, ModuleInfo | null>();\n const info = (file: string): ModuleInfo | null => {\n if (!modules.has(file)) {\n let parsed: ModuleInfo | null = null;\n try {\n parsed = moduleInfo(read(file), file);\n } catch {\n parsed = null;\n }\n modules.set(file, parsed);\n }\n return modules.get(file) ?? null;\n };\n\n return (resolve) => {\n const trace: Trace = {\n reads: new Set(),\n unresolved: false,\n info,\n async target(spec, importer) {\n const id = (await resolve(spec, importer).catch(() => null))?.split('?')[0];\n if (!id) trace.unresolved = true;\n return id && !id.startsWith('\\0') ? id : null;\n },\n declaring: (at, name) => declaring(at, name, 0),\n };\n const declaring = async (at: string, name: string, depth: number): Promise<string | null> => {\n trace.reads.add(at);\n const mod = info(at);\n if (!mod || depth > 32) return null;\n const exp = mod.exports.get(name);\n if (exp?.kind === 'local') {\n const imp = mod.imports.get(exp.local);\n if (!imp) return `${at}#${exp.local}`;\n if (imp.imported === '*') return null;\n const next = await trace.target(imp.spec, at);\n return next ? declaring(next, imp.imported, depth + 1) : null;\n }\n if (exp?.kind === 'from') {\n const next = await trace.target(exp.spec, at);\n return next ? declaring(next, exp.imported, depth + 1) : null;\n }\n if (name === 'default') return null;\n for (const spec of mod.stars) {\n const next = await trace.target(spec, at);\n const found = next ? await declaring(next, name, depth + 1) : null;\n if (found) return found;\n }\n return null;\n };\n return trace;\n };\n}\n","import type { ResolveImport } from './depGraph.ts';\nimport { foreignStories } from './foreignStories.ts';\nimport type { ForeignCallee } from './indexFile.ts';\nimport type { ForeignStories } from './nativeExports.ts';\nimport { createTracer } from './trace.ts';\n\nexport interface WrapperResolution {\n /** The callees that are forge's `meta` or `story`. */\n wrappers: Set<string>;\n /** What following the file's imports found each one to be: a story, a function returning one, or neither. */\n foreign: ForeignStories;\n /** Every file read to decide it, so an edit to one can re-decide it. */\n reads: Set<string>;\n /** Whether an import on the way resolved to nothing, so a file added later could change the answer. */\n unresolved: boolean;\n}\n\nexport const NO_FOREIGN: ForeignStories = { values: {}, calls: {}, reexports: {} };\n\n/** Whether two resolutions index a file the same way. */\nexport function sameResolution(a: WrapperResolution | undefined, b: WrapperResolution): boolean {\n const key = (r: WrapperResolution | undefined) => JSON.stringify([[...(r?.wrappers ?? [])].sort(), r?.foreign ?? NO_FOREIGN]);\n return key(a) === key(b);\n}\n\n/**\n * Decides which of a story file's foreign callees are forge's own `meta` or `story`, by following each import and\n * re-export to the function it names and comparing that with the one `@weasel-js/forge` exports; then, for a file\n * whose meta is forge's, what the other imports its exports rest on are. Unlike the component graph this follows\n * into `node_modules`, where a consumer's copy of forge lives. Each file is parsed once per resolver, so a fresh one\n * sees fresh source.\n */\nexport function createWrapperResolver(read: (file: string) => string) {\n const tracer = createTracer(read);\n\n return async (file: string, callees: readonly ForeignCallee[], resolve: ResolveImport): Promise<WrapperResolution> => {\n const trace = tracer(resolve);\n const wrappers = new Set<string>();\n const direct = [...(trace.info(file)?.imports.values() ?? [])].some((imp) => imp.spec === '@weasel-js/forge');\n if (callees.length === 0 && !direct) return { wrappers, foreign: NO_FOREIGN, reads: trace.reads, unresolved: false };\n const forge = await trace.target('@weasel-js/forge', file);\n const own = new Map<string, 'meta' | 'story'>();\n if (forge) {\n for (const name of ['meta', 'story'] as const) {\n const key = await trace.declaring(forge, name);\n if (key) own.set(key, name);\n }\n for (const callee of callees) {\n const from = await trace.target(callee.spec, file);\n const key = from ? await trace.declaring(from, callee.imported) : null;\n if (key && own.has(key)) wrappers.add(callee.local);\n }\n }\n const foreign = forge ? await foreignStories(file, wrappers, own, trace, read) : NO_FOREIGN;\n return { wrappers, foreign, reads: trace.reads, unresolved: trace.unresolved };\n };\n}\n","import { readFileSync } from 'node:fs';\nimport type { IndexEntry } from '../story/types.ts';\nimport { autoTitle } from './autoTitle.ts';\nimport type { ResolveImport } from './depGraph.ts';\nimport { foreignCallees, indexFile } from './indexFile.ts';\nimport { foreignFrom } from './nativeExports.ts';\nimport { createWrapperResolver, type WrapperResolution } from './wrappers.ts';\n\n/** Where a project keeps its stories: the vite root, and the globs relative to it. */\nexport interface StorySource {\n root: string;\n stories: readonly string[];\n}\n\n/**\n * The stories `file` declares, titled as its place under `source` titles it. `resolved` is what following the\n * file's imports found, which `indexStoryResolved` works out: without it a `meta` or `story` reaching forge through\n * another module is not recognized, and an import the file exports is taken for a story.\n */\nexport function indexStory(\n code: string,\n file: string,\n source: StorySource,\n resolved?: Pick<WrapperResolution, 'wrappers' | 'foreign'>,\n): IndexEntry[] {\n const foreign = resolved ? foreignFrom(resolved.foreign) : undefined;\n return indexFile(code, file, autoTitle(file, source.root, source.stories), resolved?.wrappers, foreign);\n}\n\n/**\n * `indexStory`, after following the file's imports to decide which callees are forge's `meta` and `story`. Every\n * caller that indexes a file on its own goes through here, so a meta built by a project helper reads the same to\n * the workshop, to `forgeTest`, and to a script.\n */\nexport async function indexStoryResolved(\n code: string,\n file: string,\n source: StorySource,\n resolve: ResolveImport,\n decide = createWrapperResolver((path) => readFileSync(path, 'utf8')),\n): Promise<{ entries: IndexEntry[]; resolution: WrapperResolution }> {\n const resolution = await decide(file, foreignCallees(code, file), resolve);\n return { entries: indexStory(code, file, source, resolution), resolution };\n}\n","import { existsSync, readFileSync } from 'node:fs';\nimport { dirname, join, relative } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\n/** Entry modules of forge's own realms: source beside this file in a checkout, the built entries in an install. */\nexport function ownEntries(realms: readonly string[]): string[] {\n const here = fileURLToPath(import.meta.url);\n for (let dir = dirname(here); dir !== dirname(dir); dir = dirname(dir)) {\n const manifest = join(dir, 'package.json');\n if (!existsSync(manifest) || (JSON.parse(readFileSync(manifest, 'utf8')) as { name?: string }).name !== '@weasel-js/forge') {\n continue;\n }\n const source = !relative(join(dir, 'src'), here).startsWith('..');\n return realms.map((realm) => join(dir, source ? `src/${realm}/index.ts` : `dist/${realm}/index.js`));\n }\n return [];\n}\n","import type ts from 'typescript';\nimport type { ApiInherited, ApiMember, ApiProp, ApiRef, ApiTable } from '../story/api.ts';\n\n/** What reading one story file's component API needs. */\nexport interface ApiReading {\n tsm: typeof ts;\n checker: ts.TypeChecker;\n at: ts.SourceFile;\n /** True for a file whose declarations are inherited rather than listed: the platform's, or a skipped package's. */\n skipped: (file: string) => boolean;\n /** True for a file of the platform's own: React's types or TypeScript's libraries. */\n platform: (file: string) => boolean;\n}\n\n/** An API as read, with the project files it is declared in, which the plugin watches and the page never sees. */\nexport type ReadApi = ApiTable & { sources: string[] };\n\nconst RESERVED = new Set(['ref', 'key']);\nconst IN_PACKAGES = /[\\\\/]node_modules[\\\\/]/;\n\n/** Every prop of `props`, the props it inherits counted per declaring type, and what its `ref` exposes. */\nexport function apiTable(reading: ApiReading, declaration: ts.Declaration | undefined, props: ts.Type | null): ReadApi {\n const { checker } = reading;\n const sources = new Set<string>();\n const record = (symbol: ts.Symbol) => {\n for (const file of filesOf(symbol)) if (!IN_PACKAGES.test(file)) sources.add(file);\n };\n const defaults = declaration ? destructuredDefaults(reading.tsm, declaration) : new Map<string, string>();\n const listed: ApiProp[] = [];\n const inherited = new Map<string, number>();\n let ref: ApiRef | null = null;\n for (const prop of props ? checker.getPropertiesOfType(checker.getApparentType(props)) : []) {\n const name = prop.getName();\n if (name === 'ref') ref = refOf(reading, prop, record);\n if (RESERVED.has(name)) continue;\n const files = filesOf(prop);\n if (files.length > 0 && files.every(reading.skipped)) {\n const from = containerName(reading.tsm, prop) ?? packageOf(files[0]!);\n inherited.set(from, (inherited.get(from) ?? 0) + 1);\n continue;\n }\n listed.push(propEntry(reading, prop, defaults.get(name)));\n record(prop);\n }\n return {\n props: listed,\n inherited: [...inherited].map(([from, count]): ApiInherited => ({ from, count })),\n ref,\n sources: [...sources],\n };\n}\n\nconst filesOf = (symbol: ts.Symbol): string[] =>\n (symbol.getDeclarations() ?? []).map((declaration) => declaration.getSourceFile().fileName);\n\nconst docOf = ({ tsm, checker }: ApiReading, symbol: ts.Symbol): string =>\n tsm.displayPartsToString(symbol.getDocumentationComment(checker)).replace(/\\s+/g, ' ').trim();\n\nfunction tagText({ tsm, checker }: ApiReading, symbol: ts.Symbol, names: readonly string[]): string | undefined {\n const tag = symbol.getJsDocTags(checker).find((t) => names.includes(t.name));\n return tag ? tsm.displayPartsToString(tag.text).trim() : undefined;\n}\n\nfunction propEntry(reading: ApiReading, prop: ts.Symbol, destructured: string | undefined): ApiProp {\n const entry: ApiProp = {\n name: prop.getName(),\n type: writtenType(reading, prop),\n required: !(prop.flags & reading.tsm.SymbolFlags.Optional),\n };\n const fallback = destructured ?? tagText(reading, prop, ['default', 'defaultValue']);\n if (fallback) entry.default = fallback;\n const description = docOf(reading, prop);\n if (description) entry.description = description;\n const deprecated = tagText(reading, prop, ['deprecated']);\n if (deprecated !== undefined) entry.deprecated = deprecated;\n return entry;\n}\n\n/**\n * The type as its one declaration spells it, when that is the type the prop has here; otherwise, as for a prop\n * inherited through a generic base or a method-shorthand one, as the checker prints it, untruncated.\n */\nfunction writtenType({ tsm, checker, at }: ApiReading, symbol: ts.Symbol): string {\n const type = checker.getNonNullableType(checker.getTypeOfSymbolAtLocation(symbol, at));\n const [declaration, ...others] = symbol.getDeclarations() ?? [];\n const node = declaration && others.length === 0 && tsm.isPropertySignature(declaration) ? declaration.type : undefined;\n if (node && checker.getNonNullableType(checker.getTypeFromTypeNode(node)) === type) return node.getText().replace(/\\s+/g, ' ');\n return checker.typeToString(type, undefined, tsm.TypeFormatFlags.NoTruncation);\n}\n\n/** The package a file is in, `@scope/name` or `name`, else the file's own name. */\nfunction packageOf(file: string): string {\n const parts = file.split(/[\\\\/]/);\n const at = parts.lastIndexOf('node_modules');\n if (at < 0 || at + 1 >= parts.length) return parts.at(-1) ?? file;\n const name = parts[at + 1]!;\n return name.startsWith('@') && parts[at + 2] ? `${name}/${parts[at + 2]}` : name;\n}\n\n/** The interface, type alias or class a property is declared in, by name. */\nfunction containerName(tsm: typeof ts, prop: ts.Symbol): string | undefined {\n const parent = prop.getDeclarations()?.[0]?.parent;\n if (!parent) return undefined;\n if (tsm.isInterfaceDeclaration(parent) || tsm.isClassDeclaration(parent)) return parent.name?.text;\n if (tsm.isTypeLiteralNode(parent) && tsm.isTypeAliasDeclaration(parent.parent)) return parent.parent.name.text;\n return undefined;\n}\n\n/** What `ref` holds: the type of `current` on the ref object it accepts. */\nfunction refOf(reading: ApiReading, prop: ts.Symbol, record: (symbol: ts.Symbol) => void): ApiRef | null {\n const { tsm, checker, at } = reading;\n const type = checker.getNonNullableType(checker.getTypeOfSymbolAtLocation(prop, at));\n for (const part of type.isUnion() ? type.types : [type]) {\n const current = part.getProperty('current');\n if (!current) continue;\n const held = checker.getNonNullableType(checker.getTypeOfSymbolAtLocation(current, at));\n const name = checker.typeToString(held, undefined, tsm.TypeFormatFlags.NoTruncation);\n const declared = (held.getSymbol() ?? held.aliasSymbol)?.getDeclarations() ?? [];\n if (declared.length > 0 && declared.every((d) => reading.platform(d.getSourceFile().fileName))) {\n return { type: name, members: [] };\n }\n const members = checker.getPropertiesOfType(held).map((member) => {\n record(member);\n return memberEntry(reading, member);\n });\n return { type: name, members };\n }\n return null;\n}\n\nfunction memberEntry(reading: ApiReading, member: ts.Symbol): ApiMember {\n const { tsm, checker, at } = reading;\n const type = checker.getTypeOfSymbolAtLocation(member, at);\n const [call] = type.getCallSignatures();\n const declarations = member.getDeclarations() ?? [];\n const entry: ApiMember = {\n name: member.getName(),\n kind: call ? 'method' : 'property',\n signature: call\n ? checker.signatureToString(call, undefined, tsm.TypeFormatFlags.WriteArrowStyleSignature | tsm.TypeFormatFlags.NoTruncation)\n : checker.typeToString(type, undefined, tsm.TypeFormatFlags.NoTruncation),\n readonly: declarations.some((d) => (tsm.getCombinedModifierFlags(d) & tsm.ModifierFlags.Readonly) !== 0),\n };\n const description = docOf(reading, member);\n if (description) entry.description = description;\n return entry;\n}\n\n/** The defaults the component's own function gives its destructured props, as source text, by prop name. */\nfunction destructuredDefaults(tsm: typeof ts, declaration: ts.Declaration): Map<string, string> {\n const defaults = new Map<string, string>();\n let node: ts.Node | undefined = tsm.isVariableDeclaration(declaration) ? declaration.initializer : declaration;\n while (node && (tsm.isCallExpression(node) || tsm.isParenthesizedExpression(node) || tsm.isAsExpression(node))) {\n node = tsm.isCallExpression(node) ? node.arguments[0] : node.expression;\n }\n if (!node || !(tsm.isArrowFunction(node) || tsm.isFunctionExpression(node) || tsm.isFunctionDeclaration(node))) {\n return defaults;\n }\n const pattern = node.parameters[0]?.name;\n if (!pattern || !tsm.isObjectBindingPattern(pattern)) return defaults;\n for (const element of pattern.elements) {\n const key = element.propertyName ?? element.name;\n if (element.initializer && tsm.isIdentifier(key)) defaults.set(key.text, element.initializer.getText());\n }\n return defaults;\n}\n","import { dirname } from 'node:path';\nimport type ts from 'typescript';\nimport type { ArgShape, ArgType } from '../csf/argsToSchema.ts';\nimport { apiTable, type ReadApi } from './apiTable.ts';\nimport { componentOf } from './componentOf.ts';\n\n/** What a story file's component takes, as argTypes, and the files its props are declared in. */\nexport interface PropTable {\n argTypes: Record<string, ArgType>;\n sources: string[];\n}\n\nexport interface PropReader {\n /** The props of the component `file`'s default export names; null when it names none. */\n read(file: string): PropTable | null;\n /**\n * The API of the component `file`'s default export names, or else of the import named `fallback`; null when\n * neither names one.\n */\n api(file: string, fallback?: string): ReadApi | null;\n}\n\n/** React's own declarations and TypeScript's libraries: every DOM attribute and event handler an element takes. */\nconst PLATFORM = /[\\\\/]node_modules[\\\\/](@types[\\\\/]react(-dom)?|typescript)[\\\\/]/;\n\n/** Narrows which props get a control. */\nexport interface PropControlsOptions {\n /**\n * Leaves out a prop declared in a file this answers true for, given the file's absolute path. Props that React's\n * types or TypeScript's libraries declare are always left out.\n */\n skip?: (declaredIn: string) => boolean;\n}\n\n/**\n * Reads component props through the project's own TypeScript, so a prop's type is what the compiler resolves it to.\n * `stories` are the program's roots, named up front so the program is built once. Null without `typescript`.\n */\nexport async function createPropReader(\n root: string,\n stories: () => readonly string[],\n { skip }: PropControlsOptions = {},\n): Promise<PropReader | null> {\n const platform = (file: string) => PLATFORM.test(file);\n const skipped = (file: string) => platform(file) || skip?.(file) === true;\n let tsm: typeof ts;\n try {\n tsm = (await import('typescript')).default;\n } catch {\n return null;\n }\n const { sys } = tsm;\n const configFile = tsm.findConfigFile(root, sys.fileExists);\n const read = configFile ? tsm.readConfigFile(configFile, sys.readFile) : undefined;\n const parsed = read?.config\n ? tsm.parseJsonConfigFileContent(read.config, { ...sys, readDirectory: () => [] }, dirname(configFile!))\n : undefined;\n const options: ts.CompilerOptions = {\n jsx: tsm.JsxEmit.ReactJSX,\n moduleResolution: tsm.ModuleResolutionKind.Bundler,\n module: tsm.ModuleKind.ESNext,\n target: tsm.ScriptTarget.ESNext,\n strict: true,\n ...parsed?.options,\n allowJs: true,\n noEmit: true,\n skipLibCheck: true,\n };\n const host: ts.LanguageServiceHost = {\n getScriptFileNames: () => [...stories()],\n getScriptVersion: (file) => String(sys.getModifiedTime?.(file)?.getTime() ?? 0),\n getScriptSnapshot: (file) => {\n const text = sys.readFile(file);\n return text === undefined ? undefined : tsm.ScriptSnapshot.fromString(text);\n },\n getCurrentDirectory: () => root,\n getCompilationSettings: () => options,\n getDefaultLibFileName: tsm.getDefaultLibFilePath,\n fileExists: sys.fileExists,\n readFile: sys.readFile,\n readDirectory: sys.readDirectory,\n directoryExists: sys.directoryExists,\n getDirectories: sys.getDirectories,\n };\n const service = tsm.createLanguageService(host, tsm.createDocumentRegistry());\n\n const sourceOf = (file: string) => {\n const program = service.getProgram();\n const source = program?.getSourceFile(file);\n return program && source ? { checker: program.getTypeChecker(), source } : null;\n };\n\n return {\n read(file) {\n const found = sourceOf(file);\n if (!found) return null;\n const { checker, source } = found;\n const props = componentOf(tsm, checker, source)?.props;\n return props ? propTable(tsm, checker, props, source, skipped) : null;\n },\n api(file, fallback) {\n const found = sourceOf(file);\n if (!found) return null;\n const { checker, source } = found;\n const component = componentOf(tsm, checker, source, fallback);\n if (!component) return null;\n return apiTable({ tsm, checker, at: source, skipped, platform }, component.declaration, component.props);\n },\n };\n}\n\n/** What reading one story file's props needs at every level of a prop's type. */\ninterface Reading {\n tsm: typeof ts;\n checker: ts.TypeChecker;\n at: ts.SourceFile;\n skipped: (file: string) => boolean;\n sources: Set<string>;\n}\n\n/**\n * An argType for each prop a control can edit: a boolean, a string or a union of a string with other scalars, a number,\n * a union with string literals in it, or an array, object or union of objects built of those.\n */\nfunction propTable(\n tsm: typeof ts,\n checker: ts.TypeChecker,\n props: ts.Type,\n at: ts.SourceFile,\n skipped: (file: string) => boolean,\n): PropTable {\n const argTypes: Record<string, ArgType> = {};\n const reading: Reading = { tsm, checker, at, skipped, sources: new Set() };\n for (const prop of checker.getPropertiesOfType(checker.getApparentType(props))) {\n const files = declaredIn(prop);\n if (files.length > 0 && files.every(skipped)) continue;\n const argType = controlFor(reading, checker.getNonNullableType(checker.getTypeOfSymbolAtLocation(prop, at)), () =>\n writtenOrder(tsm, checker, prop),\n );\n if (!argType) continue;\n const description = tsm.displayPartsToString(prop.getDocumentationComment(checker)).replace(/\\s+/g, ' ').trim();\n argTypes[prop.getName()] = description ? { ...argType, description } : argType;\n record(reading, files);\n }\n return { argTypes, sources: [...reading.sources] };\n}\n\nconst declaredIn = (symbol: ts.Symbol): string[] =>\n (symbol.getDeclarations() ?? []).map((declaration) => declaration.getSourceFile().fileName);\n\nconst IN_PACKAGES = /[\\\\/]node_modules[\\\\/]/;\n\nfunction record({ sources }: Reading, files: readonly string[]): void {\n for (const file of files) if (!IN_PACKAGES.test(file)) sources.add(file);\n}\n\nfunction controlFor(reading: Reading, type: ts.Type, written: () => string[] | null): ArgType | null {\n const { TypeFlags } = reading.tsm;\n const parts = type.isUnion() ? type.types : [type];\n if (parts.every((part) => part.flags & TypeFlags.BooleanLike)) return { control: { type: 'boolean' } };\n if (textLike(reading, parts)) return { control: { type: 'text' } };\n if (type.flags & TypeFlags.Number) return { control: { type: 'number' } };\n // No control type: the options alone make it a select, and a story's own argType may still say radio.\n const options = literalsOf(reading, parts);\n if (options.length > 1) {\n const order = written();\n const same = order?.length === options.length && options.every((option) => order.includes(option));\n return { options: same ? order : options };\n }\n const shape = shapeOf(reading, type, 0);\n return shape && shape.name !== 'enum' && !(shape.name in SCALARS) ? { control: 'object', type: shape } : null;\n}\n\nconst SCALARS = { boolean: true, string: true, number: true };\n\n/** A string with nothing beside it that text could not stand for: a `ReactNode`, which also takes elements, has no\n * text control, since a story's text would never be what the prop draws. */\nfunction textLike({ tsm }: Reading, parts: readonly ts.Type[]): boolean {\n return parts.some((part) => part.flags & tsm.TypeFlags.String) && !parts.some((part) => part.flags & tsm.TypeFlags.Object);\n}\n\nfunction literalsOf({ tsm }: Reading, parts: readonly ts.Type[]): string[] {\n return parts.filter((part) => part.flags & tsm.TypeFlags.StringLiteral).map((part) => (part as ts.StringLiteralType).value);\n}\n\n/** Deep enough for a list of objects holding a union of objects; past it, a type is left to the story's own argType. */\nconst MAX_DEPTH = 4;\n\n/**\n * The shape of a value of `type`, made of parts a control can edit; null when a part it needs has none. An object\n * type declared in a dependency, or one that is callable or open to any key, is opaque: its fields do not say what it\n * holds.\n */\nfunction shapeOf(reading: Reading, type: ts.Type, depth: number): ArgShape | null {\n const { tsm, checker } = reading;\n const { TypeFlags } = tsm;\n if (depth > MAX_DEPTH) return null;\n const whole = checker.getNonNullableType(type);\n const parts = whole.isUnion() ? whole.types : [whole];\n if (parts.length === 0) return null;\n if (parts.every((part) => part.flags & TypeFlags.BooleanLike)) return { name: 'boolean' };\n if (textLike(reading, parts)) return { name: 'string' };\n if (whole.flags & TypeFlags.Number) return { name: 'number' };\n const literals = literalsOf(reading, parts);\n if (literals.length === parts.length || literals.length > 1) return { name: 'enum', value: literals };\n if (parts.length > 1) {\n const members = parts.map((part) => shapeOf(reading, part, depth + 1));\n return members.every((member) => member?.name === 'object') ? { name: 'union', value: members as ArgShape[] } : null;\n }\n if (checker.isArrayType(whole)) {\n const [item] = checker.getTypeArguments(whole as ts.TypeReference);\n const shape = item && shapeOf(reading, item, depth + 1);\n return shape ? { name: 'array', value: shape } : null;\n }\n if (checker.isTupleType(whole)) {\n const items = checker.getTypeArguments(whole as ts.TypeReference).map((item) => shapeOf(reading, item, depth + 1));\n const [first] = items;\n const same = first && items.every((item) => JSON.stringify(item) === JSON.stringify(first));\n return same ? { name: 'array', value: first } : null;\n }\n if (!(whole.flags & (TypeFlags.Object | TypeFlags.Intersection))) return null;\n if (whole.getCallSignatures().length > 0 || whole.getConstructSignatures().length > 0) return null;\n if (checker.getIndexInfosOfType(whole).length > 0) return null;\n const declared = (whole.getSymbol() ?? whole.aliasSymbol)?.getDeclarations() ?? [];\n if (declared.some((declaration) => IN_PACKAGES.test(declaration.getSourceFile().fileName))) return null;\n const fields: Record<string, ArgShape> = {};\n for (const prop of checker.getPropertiesOfType(whole)) {\n const files = declaredIn(prop);\n if (files.some((file) => IN_PACKAGES.test(file) || reading.skipped(file))) return null;\n const field = shapeOf(reading, checker.getTypeOfSymbolAtLocation(prop, reading.at), depth + 1);\n if (field) fields[prop.getName()] = field;\n else if (!(prop.flags & tsm.SymbolFlags.Optional)) return null;\n record(reading, files);\n }\n return Object.keys(fields).length > 0 ? { name: 'object', value: fields } : null;\n}\n\n/**\n * A prop's string literals in the order its type is written in, following a plain alias to where it is spelled out.\n * Null when any part of the type is computed.\n */\nfunction writtenOrder(tsm: typeof ts, checker: ts.TypeChecker, prop: ts.Symbol): string[] | null {\n const [declaration, ...others] = prop.getDeclarations() ?? [];\n if (!declaration || others.length > 0) return null;\n if (!tsm.isPropertySignature(declaration) && !tsm.isPropertyDeclaration(declaration)) return null;\n const seen = new Set<ts.Node>();\n const literals = (node: ts.TypeNode | undefined): string[] | null => {\n if (!node || seen.has(node)) return null;\n seen.add(node);\n if (tsm.isParenthesizedTypeNode(node)) return literals(node.type);\n if (tsm.isLiteralTypeNode(node)) {\n if (node.literal.kind === tsm.SyntaxKind.NullKeyword) return [];\n return tsm.isStringLiteralLike(node.literal) ? [node.literal.text] : null;\n }\n if (node.kind === tsm.SyntaxKind.UndefinedKeyword) return [];\n if (tsm.isUnionTypeNode(node)) {\n const parts = node.types.map(literals);\n return parts.every((part) => part !== null) ? [...new Set(parts.flat())] : null;\n }\n if (tsm.isTypeReferenceNode(node) && !node.typeArguments) {\n const named = checker.getSymbolAtLocation(node.typeName);\n const target = named && named.flags & tsm.SymbolFlags.Alias ? checker.getAliasedSymbol(named) : named;\n const [alias, ...rest] = target?.getDeclarations() ?? [];\n if (alias && rest.length === 0 && tsm.isTypeAliasDeclaration(alias) && !alias.typeParameters) {\n return literals(alias.type);\n }\n // An interface or class holds no string literal of its own.\n if (target && target.flags & (tsm.SymbolFlags.Interface | tsm.SymbolFlags.Class)) return [];\n }\n return null;\n };\n return literals(declaration.type);\n}\n","import type { Plugin } from 'vite';\nimport { PROP_ARG_TYPES_EXPORT } from '../csf/propArgTypes.ts';\nimport { API_EXPORT } from '../story/api.ts';\nimport { createPropReader, type PropControlsOptions, type PropReader } from './propTypes.ts';\n\n/** Which readings a story module gets. */\nexport interface StoryExportsOptions {\n controls: boolean;\n api: boolean;\n}\n\nconst errorText = (err: unknown) => (err instanceof Error ? err.message : String(err));\n\n/**\n * What to append to story module `file`: the argTypes read from its component's props, and its component's API, each\n * as a named export. `sources` are the files those were read from, which an edit to must reach the story.\n */\nexport function storyExports(\n reader: PropReader,\n file: string,\n fallback: string | undefined,\n { controls, api }: StoryExportsOptions,\n warn: (message: string) => void,\n): { code: string; sources: string[] } {\n let code = '';\n const sources: string[] = [];\n if (controls) {\n try {\n const table = reader.read(file);\n if (table && Object.keys(table.argTypes).length > 0) {\n code += `\\nexport const ${PROP_ARG_TYPES_EXPORT} = ${JSON.stringify(table.argTypes)};\\n`;\n sources.push(...table.sources);\n }\n } catch (err) {\n warn(`could not read the props for ${file}: ${errorText(err)}`);\n }\n }\n if (api) {\n try {\n const read = reader.api(file, fallback);\n const table = read && { props: read.props, inherited: read.inherited, ref: read.ref };\n code += `\\nexport const ${API_EXPORT} = ${JSON.stringify(table)};\\n`;\n if (read) sources.push(...read.sources);\n } catch (err) {\n warn(`could not read the API for ${file}: ${errorText(err)}`);\n }\n }\n return { code, sources };\n}\n\n/**\n * Appends to each story module the argTypes read from the props of its meta's `component`, which the CSF loader merges\n * under the story's own, and the component's API, which its index page shows. `stories` are the story files, as\n * absolute paths; `fallbackOf` names the import standing in for a meta that names no component.\n */\nexport function propControls(\n stories: () => readonly string[],\n fallbackOf: (file: string) => string | undefined,\n readings: StoryExportsOptions,\n options: PropControlsOptions = {},\n): Plugin {\n let root = process.cwd();\n /** Built on the first story module served, so the TypeScript program costs nothing until a story is opened. */\n let reader: Promise<PropReader | null> | null = null;\n return {\n name: 'weaselforge:prop-controls',\n configResolved(config) {\n root = config.root;\n reader = null;\n },\n async transform(code, id) {\n if (!stories().includes(id)) return undefined;\n const props = await (reader ??= createPropReader(root, stories, options));\n if (!props) return undefined;\n const added = storyExports(props, id, fallbackOf(id), readings, (message) => this.warn(message));\n if (!added.code) return undefined;\n // A props type imported as a type is not in the module graph, so an edit to it would not reach the story.\n for (const source of new Set(added.sources)) this.addWatchFile(source);\n return { code: code + added.code, map: null };\n },\n };\n}\n","import { execFile } from 'node:child_process';\nimport type { ServerResponse } from 'node:http';\nimport type { ViteDevServer } from 'vite';\nimport { type Git, runGit } from '../history.ts';\nimport { type ForgeIssue, ISSUES_PATH, type IssueRepo, type IssuesAnswer, issueLabel } from './answer.ts';\n\n/** What one `gh` run came to: its stdout, no `gh` on the PATH, or a failure with its exit code and what it said. */\nexport type GhResult = { stdout: string } | { missing: true } | { failed: string; code: number | null };\n\n/** Runs `gh` in `cwd` under the machine's own login. */\nexport type Gh = (args: readonly string[], cwd: string) => Promise<GhResult>;\n\nexport const runGh: Gh = (args, cwd) =>\n new Promise((done) => {\n execFile(\n 'gh',\n [...args],\n { cwd, maxBuffer: 16 << 20, env: { ...process.env, GH_PROMPT_DISABLED: '1' } },\n (error, stdout, stderr) => {\n if (!error) return done({ stdout });\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') return done({ missing: true });\n done({ failed: stderr.trim() || error.message, code: typeof error.code === 'number' ? error.code : null });\n },\n );\n });\n\n/** A GitHub repository as `gh -R` names it and as its page is found. */\nexport interface RemoteRepo extends IssueRepo {\n /** What `gh -R` takes: `owner/name` on github.com, `host/owner/name` on an Enterprise host. */\n ghRepo: string;\n}\n\nconst SCP = /^(?:[^@\\s/]+@)?([\\w.-]+):(?!\\/)([\\w.-]+)\\/([\\w.-]+?)(?:\\.git)?\\/?$/;\nconst URL_FORM = /^(?:ssh|git|https?):\\/\\/(?:[^@/\\s]+@)?([\\w.-]+)(?::\\d+)?\\/([\\w.-]+)\\/([\\w.-]+?)(?:\\.git)?\\/?$/;\n\n/**\n * The repository a remote URL names, in either the `git@host:owner/name.git` or the URL form. A host under\n * `github.com`, such as an SSH alias `work.github.com`, is taken as github.com itself.\n */\nexport function repoOf(remote: string): RemoteRepo | null {\n const match = SCP.exec(remote.trim()) ?? URL_FORM.exec(remote.trim());\n if (!match) return null;\n const [, rawHost = '', owner = '', name = ''] = match;\n const host = rawHost === 'github.com' || rawHost.endsWith('.github.com') ? 'github.com' : rawHost;\n const slug = `${owner}/${name}`;\n return { slug, url: `https://${host}/${slug}`, ghRepo: host === 'github.com' ? slug : `${host}/${slug}` };\n}\n\nconst attempt = async (run: () => Promise<string>): Promise<string | null> => {\n try {\n return (await run()).trim() || null;\n } catch {\n return null;\n }\n};\n\n/** gh's exit code for a command that needs a login it does not have. */\nconst GH_AUTH_EXIT = 4;\n\ninterface GhIssue {\n number: number;\n title: string;\n url: string;\n createdAt: string;\n}\n\nconst json = (res: ServerResponse, status: number, body: unknown) => {\n res.statusCode = status;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify(body));\n};\n\n/**\n * Answers a GET of `<base>__forge/issues?component=<name>` with an `IssuesAnswer`: the open issues labeled\n * `forge:<name>` in the repository `origin` names, listed by `gh` under the machine's own login, and the branch and\n * commit checked out at `root`.\n */\nexport function serveIssues(\n server: Pick<ViteDevServer, 'middlewares'>,\n base: string,\n root: () => string,\n { gh = runGh, git = runGit }: { gh?: Gh; git?: Git } = {},\n): void {\n const answer = async (component: string): Promise<{ status: number; body: IssuesAnswer }> => {\n const cwd = root();\n const [remote, head, commit] = await Promise.all([\n attempt(() => git(['remote', 'get-url', 'origin'], cwd)),\n attempt(() => git(['rev-parse', '--abbrev-ref', 'HEAD'], cwd)),\n attempt(() => git(['rev-parse', 'HEAD'], cwd)),\n ]);\n const found = remote === null ? null : repoOf(remote);\n const context: IssuesAnswer = {\n repo: found && { slug: found.slug, url: found.url },\n branch: head === 'HEAD' ? null : head,\n commit,\n };\n if (!found) return { status: 200, body: { ...context, unavailable: 'This checkout’s origin is not a GitHub repository.' } };\n const fields = 'number,title,url,createdAt';\n const result = await gh(\n ['issue', 'list', '-R', found.ghRepo, '--label', issueLabel(component), '--state', 'open', '--json', fields],\n cwd,\n );\n if ('missing' in result) return { status: 200, body: { ...context, unavailable: 'The GitHub CLI (gh) is not installed.' } };\n if ('failed' in result) {\n if (result.code === GH_AUTH_EXIT || /gh auth login/.test(result.failed)) {\n return { status: 200, body: { ...context, unavailable: 'The GitHub CLI (gh) is not logged in. Run gh auth login.' } };\n }\n return { status: 502, body: { ...context, error: result.failed } };\n }\n let listed: GhIssue[];\n try {\n listed = JSON.parse(result.stdout) as GhIssue[];\n } catch {\n return { status: 502, body: { ...context, error: 'gh answered something that is not JSON' } };\n }\n const issues = listed.map(({ number, title, url, createdAt }): ForgeIssue => ({ number, title, url, opened: createdAt }));\n return { status: 200, body: { ...context, issues } };\n };\n\n server.middlewares.use((req, res, next) => {\n const url = new URL(req.url ?? '/', 'http://forge.invalid');\n if (url.pathname !== `${base}${ISSUES_PATH}`) return next();\n if (req.method !== 'GET') return next();\n const component = url.searchParams.get('component')?.trim();\n if (!component) return json(res, 400, { error: 'name a component: ?component=<name>' });\n answer(component).then(({ status, body }) => json(res, status, body), next);\n });\n}\n","import { existsSync } from 'node:fs';\nimport type { Browser, BrowserContext, Page, Route } from 'playwright';\nimport { type CapturePayload, messageOf } from './payload.ts';\n\n/** Headless Chromium, taking screenshots of capture pages one at a time. */\nexport interface CaptureBrowser {\n /** A PNG of `url` rendering `payload`, loading nothing but `url`'s own origin and `allow`. Rejects with\n * `QUEUE_FULL` while `QUEUE_CAP` captures are outstanding. */\n capture(url: string, payload: CapturePayload, allow?: readonly string[]): Promise<Buffer>;\n close(): Promise<void>;\n}\n\nexport const IDLE_CLOSE_MS = 120_000;\n/** How long one capture may take, page load included, before it fails and frees the queue. */\nexport const SHOT_DEADLINE_MS = 20_000;\nexport const QUEUE_CAP = 8;\nexport const QUEUE_FULL = 'capture queue is full';\nexport const INSTALL_PLAYWRIGHT = 'install playwright';\nexport const INSTALL_CHROMIUM = 'install Chromium for Playwright: npx playwright install chromium';\n\ntype Playwright = typeof import('playwright');\ntype Load = () => Promise<Playwright>;\n\nconst loadPlaywright: Load = () => import('playwright');\n\n/** What a capture page exposes once it has mounted. */\ninterface CaptureWindow {\n __forgeCapture?: { render(payload: CapturePayload): Promise<void> };\n}\n\n/** Whether a capture could start, without starting Chromium: Playwright loads and its Chromium is installed. */\nexport async function captureAvailability(load: Load = loadPlaywright): Promise<{ available: true } | { unavailable: string }> {\n let playwright: Playwright;\n try {\n playwright = await load();\n } catch {\n return { unavailable: INSTALL_PLAYWRIGHT };\n }\n let executable: string;\n try {\n executable = playwright.chromium.executablePath();\n } catch (err) {\n return { unavailable: messageOf(err) };\n }\n return existsSync(executable) ? { available: true } : { unavailable: INSTALL_CHROMIUM };\n}\n\n/** Headers describing the body as it came over the wire, which Node's fetch has already decoded. */\nconst WIRE_HEADERS = new Set(['content-encoding', 'content-length', 'transfer-encoding']);\n\n/** A request to an allowlisted origin, fetched from Node so its certificate is checked even when the page's\n * context ignores certificate errors. Only GET and HEAD pass, and a redirect goes back to the page as-is, so its\n * target meets the route guard on its own origin rather than being fetched from Node. */\nasync function passThrough(route: Route, fetchImpl: typeof fetch): Promise<void> {\n const request = route.request();\n const method = request.method();\n if (method !== 'GET' && method !== 'HEAD') return route.abort();\n try {\n const response = await fetchImpl(request.url(), { method, headers: request.headers(), redirect: 'manual' });\n await route.fulfill({\n status: response.status,\n headers: Object.fromEntries([...response.headers].filter(([name]) => !WIRE_HEADERS.has(name))),\n body: Buffer.from(await response.arrayBuffer()),\n });\n } catch {\n await route.abort();\n }\n}\n\n/**\n * Lets `page` reach nothing but the server `url` came from and the origins in `allow`, whatever a story or an\n * override asks it to load, and open no WebSocket but that server's own.\n */\nasync function guard(page: Page, url: string, allow: readonly string[], fetchImpl: typeof fetch): Promise<void> {\n const own = new URL(url);\n const secure = own.protocol === 'https:';\n const reach = new Set(allow);\n await page.route('**/*', (route) => {\n const origin = new URL(route.request().url()).origin;\n if (origin === own.origin) return route.continue();\n if (!reach.has(origin)) return route.abort();\n return secure ? passThrough(route, fetchImpl) : route.continue();\n });\n // Only vite's own client socket connects: closing it would have the client reload the page mid-capture.\n const ownSocket = `${secure ? 'wss:' : 'ws:'}//${own.host}`;\n await page.routeWebSocket(\n (u) => `${u.protocol}//${u.host}` !== ownSocket,\n (ws) => ws.close(),\n );\n}\n\n/**\n * Loads Playwright and starts Chromium, or says why it cannot. Chromium closes after `IDLE_CLOSE_MS` with nothing\n * to capture and starts again for the next capture, so there is never more than one.\n */\nexport async function launchCaptureBrowser(\n load: Load = loadPlaywright,\n fetchImpl: typeof fetch = fetch,\n): Promise<CaptureBrowser | { unavailable: string }> {\n let playwright: Playwright;\n try {\n playwright = await load();\n } catch {\n return { unavailable: INSTALL_PLAYWRIGHT };\n }\n let chromium: Promise<Browser> | null;\n try {\n chromium = Promise.resolve(await playwright.chromium.launch({ headless: true }));\n } catch (err) {\n return { unavailable: messageOf(err) };\n }\n\n const contexts = new Map<string, Promise<BrowserContext>>();\n let idle: ReturnType<typeof setTimeout> | undefined;\n let outstanding = 0;\n let tail: Promise<unknown> = Promise.resolve();\n\n const shut = async () => {\n clearTimeout(idle);\n const closing = chromium;\n chromium = null;\n contexts.clear();\n await closing?.then((b) => b.close(), () => {});\n };\n const arm = () => {\n clearTimeout(idle);\n idle = setTimeout(() => void shut(), IDLE_CLOSE_MS);\n idle.unref?.();\n };\n const browser = (): Promise<Browser> => {\n if (!chromium) {\n const launching = playwright.chromium.launch({ headless: true });\n chromium = launching;\n launching.catch(() => {\n if (chromium === launching) chromium = null;\n });\n }\n return chromium;\n };\n /**\n * One context per device pixel ratio, since a context's scale factor is fixed when it is made, and per whether the\n * dev server is served over https: only then are certificate errors ignored, for its self-signed certificate.\n */\n const contextFor = (dpr: number, secure: boolean): Promise<BrowserContext> => {\n const key = `${dpr}:${secure}`;\n let context = contexts.get(key);\n if (!context) {\n const making = browser().then((b) =>\n b.newContext({ deviceScaleFactor: dpr, ignoreHTTPSErrors: secure, serviceWorkers: 'block' }),\n );\n context = making;\n contexts.set(key, making);\n making.catch(() => {\n if (contexts.get(key) === making) contexts.delete(key);\n });\n }\n return context;\n };\n const render = async (page: Page, payload: CapturePayload, url: string, allow: readonly string[]): Promise<Buffer> => {\n await guard(page, url, allow, fetchImpl);\n await page.setViewportSize({ width: Math.ceil(payload.box.width), height: Math.ceil(payload.box.height) });\n await page.emulateMedia({ colorScheme: payload.colorScheme });\n await page.goto(url);\n await page.waitForFunction(() => (window as CaptureWindow).__forgeCapture !== undefined);\n await page.evaluate((p) => (window as CaptureWindow).__forgeCapture!.render(p), payload);\n return page.locator('[data-fg-capture]').screenshot({ type: 'png' });\n };\n /** One capture, failed and its page closed once `SHOT_DEADLINE_MS` passes, so a render that never settles cannot\n * hold the queue. */\n const shoot = async (url: string, payload: CapturePayload, allow: readonly string[]): Promise<Buffer> => {\n let page: Page | null = null;\n let late = false;\n let timer: ReturnType<typeof setTimeout> | undefined;\n const deadline = new Promise<never>((_, reject) => {\n timer = setTimeout(() => reject(new Error(`capture took longer than ${SHOT_DEADLINE_MS / 1000} s`)), SHOT_DEADLINE_MS);\n });\n const work = (async () => {\n const opened = await (await contextFor(payload.dpr, url.startsWith('https:'))).newPage();\n page = opened;\n if (late) throw new Error('capture timed out');\n return render(opened, payload, url, allow);\n })();\n try {\n return await Promise.race([work, deadline]);\n } finally {\n late = true;\n clearTimeout(timer);\n // Closing the page rejects whatever of the capture is still waiting on it.\n await (page as Page | null)?.close().catch(() => {});\n void work.catch(() => (page as Page | null)?.close().catch(() => {}));\n }\n };\n\n arm();\n return {\n capture(url, payload, allow = []) {\n if (outstanding >= QUEUE_CAP) return Promise.reject(new Error(QUEUE_FULL));\n outstanding += 1;\n clearTimeout(idle);\n const run = tail.then(() => shoot(url, payload, allow));\n tail = run.catch(() => {});\n return run.finally(() => {\n outstanding -= 1;\n if (outstanding === 0) arm();\n });\n },\n close: shut,\n };\n}\n","/** Captured PNGs by payload key, least recently used out first. */\nexport interface CaptureCache {\n get(key: string): Buffer | undefined;\n set(key: string, png: Buffer): void;\n clear(): void;\n readonly size: number;\n /** The PNG bytes held, in all. */\n readonly bytes: number;\n}\n\n/** A cache bounded both by entry count and by bytes; an image larger than the byte budget is not kept at all. */\nexport function createCaptureCache(limits: { entries: number; bytes: number } = { entries: 64, bytes: 64 * 1024 * 1024 }): CaptureCache {\n // A Map iterates in insertion order, so re-inserting on every read keeps the least recently used first.\n const held = new Map<string, Buffer>();\n let bytes = 0;\n const drop = (key: string) => {\n const png = held.get(key);\n if (!png) return;\n held.delete(key);\n bytes -= png.length;\n };\n return {\n get(key) {\n const png = held.get(key);\n if (!png) return undefined;\n held.delete(key);\n held.set(key, png);\n return png;\n },\n set(key, png) {\n drop(key);\n if (png.length > limits.bytes) return;\n held.set(key, png);\n bytes += png.length;\n for (const oldest of held.keys()) {\n if (held.size <= limits.entries && bytes <= limits.bytes) break;\n drop(oldest);\n }\n },\n clear() {\n held.clear();\n bytes = 0;\n },\n get size() {\n return held.size;\n },\n get bytes() {\n return bytes;\n },\n };\n}\n","import { createHash } from 'node:crypto';\nimport type { IncomingMessage, ServerResponse } from 'node:http';\nimport { stableStringify } from '@weasel-js/core/json';\nimport type { ViteDevServer } from 'vite';\nimport { type CaptureBrowser, captureAvailability, launchCaptureBrowser, QUEUE_FULL } from './browser.ts';\nimport { createCaptureCache } from './cache.ts';\nimport { CAPTURE_PAGES, CAPTURE_PATH, type CapturePayload, messageOf, parsePayload } from './payload.ts';\n\n/** The capture endpoint as the plugin drives it. */\nexport interface CaptureEndpoint {\n /** Drops every cached capture: a client module changed, so none of them shows the story as it is now. */\n revise(): void;\n /** Closes Chromium and drops the cache, for the server closing. */\n close(): Promise<void>;\n}\n\nconst MAX_BODY = 16 * 1024 * 1024;\n\ntype Launched = CaptureBrowser | { unavailable: string };\n\nconst keyOf = (payload: CapturePayload) => createHash('sha1').update(stableStringify(payload)).digest('hex');\n\n/** A socket address as a URL's host: IPv6 bracketed with its zone id escaped (RFC 6874), IPv4-mapped unwrapped. */\nexport const urlHost = (address: string): string => {\n const v4 = address.replace(/^::ffff:(?=\\d+\\.\\d+\\.\\d+\\.\\d+$)/, '');\n return v4.includes(':') ? `[${v4.replace('%', '%25')}]` : v4;\n};\n\n/**\n * The origin the request arrived on, read from its socket. Never from its `Host` header, which the client writes:\n * the capture page is loaded from here, and a forged host would have Chromium screenshot someone else's page.\n */\nconst socketOrigin = (req: IncomingMessage, protocol: string) =>\n `${protocol}://${urlHost(req.socket.localAddress ?? '127.0.0.1')}:${req.socket.localPort}`;\n\nconst LOOPBACK = new Set(['localhost', '127.0.0.1', '[::1]']);\n\n/** Whether a browser's `Origin` names this server: the address the request came in on, a loopback name for its\n * port, or one of the URLs vite printed for it. */\nfunction ownOrigin(origin: string, req: IncomingMessage, protocol: string, server: ViteDevServer): boolean {\n let url: URL;\n try {\n url = new URL(origin);\n } catch {\n return false;\n }\n if (url.origin === socketOrigin(req, protocol)) return true;\n if (url.protocol === `${protocol}:` && LOOPBACK.has(url.hostname) && url.port === String(req.socket.localPort)) return true;\n const printed = [...(server.resolvedUrls?.local ?? []), ...(server.resolvedUrls?.network ?? [])];\n return printed.some((u) => new URL(u).origin === url.origin);\n}\n\nconst json = (res: ServerResponse, status: number, body: unknown) => {\n res.statusCode = status;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify(body));\n};\n\nfunction readBody(req: IncomingMessage): Promise<string | null> {\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n let size = 0;\n req.on('data', (chunk: Buffer) => {\n size += chunk.length;\n if (size <= MAX_BODY) return void chunks.push(chunk);\n // Stop reading rather than drain the rest; the 413 goes out before the socket closes.\n req.pause();\n req.removeAllListeners('data');\n resolve(null);\n });\n req.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));\n req.on('error', reject);\n });\n}\n\n/**\n * Answers `<base>__forge/capture`: a GET says whether Pixels is available, and a POST of a `CapturePayload` answers\n * with a PNG of the story rendered from it, from the cache when the same payload was captured since the last\n * `revise()`. Chromium starts on the first POST that is not served from the cache. `allowOrigins` names what a\n * capture page may load besides this server, read at each capture.\n */\nexport function serveCapture(\n server: ViteDevServer,\n base: string,\n allowOrigins: () => readonly string[] = () => [],\n): CaptureEndpoint {\n const cache = createCaptureCache();\n let launched: Promise<Launched> | null = null;\n /** Bumped by `revise()`, so a capture that started before an edit is not cached after it. */\n let revision = 0;\n\n const browser = (): Promise<Launched> => {\n if (!launched) {\n const launching = launchCaptureBrowser();\n launched = launching;\n // An unavailable answer is asked again next time: Playwright may have been installed since.\n void launching.then((result) => {\n if ('unavailable' in result && launched === launching) launched = null;\n });\n }\n return launched;\n };\n\n const protocol = server.config.server.https ? 'https' : 'http';\n\n const capture = async (req: IncomingMessage, res: ServerResponse) => {\n const origin = req.headers.origin;\n if (origin !== undefined && !ownOrigin(origin, req, protocol, server)) {\n return json(res, 403, { error: 'a capture is only taken for this server’s own pages' });\n }\n const type = (req.headers['content-type'] ?? '').split(';')[0]?.trim().toLowerCase();\n if (type !== 'application/json') return json(res, 415, { error: 'a capture payload is sent as application/json' });\n const body = await readBody(req);\n if (body === null) {\n res.setHeader('Connection', 'close');\n json(res, 413, { error: 'capture payload is too large' });\n return void res.once('finish', () => req.destroy());\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(body);\n } catch {\n return json(res, 400, { error: 'capture payload is not JSON' });\n }\n const payload = parsePayload(parsed);\n if ('error' in payload) return json(res, 400, payload);\n\n const key = keyOf(payload);\n let png = cache.get(key);\n if (!png) {\n const result = await browser();\n if ('unavailable' in result) return json(res, 503, { available: false, reason: result.unavailable });\n const page = `${socketOrigin(req, protocol)}${base}${payload.isolate ? CAPTURE_PAGES.frame : CAPTURE_PAGES.shell}`;\n const at = revision;\n try {\n png = await result.capture(page, payload, allowOrigins());\n } catch (err) {\n const message = messageOf(err);\n if (message === QUEUE_FULL) return json(res, 503, { available: false, reason: QUEUE_FULL });\n return json(res, 500, { error: message });\n }\n if (at === revision) cache.set(key, png);\n }\n res.statusCode = 200;\n res.setHeader('Content-Type', 'image/png');\n res.end(png);\n };\n\n /** Answered without starting Chromium; a launch failure surfaces on the first POST instead. */\n const status = async (res: ServerResponse) => {\n const result = await captureAvailability();\n json(res, 200, 'unavailable' in result ? { available: false, reason: result.unavailable } : { available: true });\n };\n\n server.middlewares.use((req, res, next) => {\n if (req.url?.split('?')[0] !== `${base}${CAPTURE_PATH}`) return next();\n if (req.method === 'GET') return void status(res).catch(next);\n if (req.method === 'POST') return void capture(req, res).catch(next);\n next();\n });\n\n return {\n revise() {\n revision += 1;\n cache.clear();\n },\n async close() {\n revision += 1;\n cache.clear();\n const closing = launched;\n launched = null;\n const result = await closing;\n if (result && !('unavailable' in result)) await result.close();\n },\n };\n}\n","import type { ViteDevServer } from 'vite';\nimport { type CaptureEndpoint, serveCapture } from './capture/endpoint.ts';\nimport { CAPTURE_PAGES } from './capture/payload.ts';\nimport { html } from './html.ts';\nimport type { ShellFields } from './shellTitle.ts';\n\nconst PAGES: Record<string, string> = {\n '/': 'shell-entry.js',\n '/index.html': 'shell-entry.js',\n '/frame.html': 'frame-entry.js',\n [`/${CAPTURE_PAGES.shell}`]: 'capture-entry.js',\n [`/${CAPTURE_PAGES.frame}`]: 'capture-frame-entry.js',\n};\n\n/**\n * Answers a GET for the workshop page, the frame document or a capture page, under `base`, with the page built\n * around its entry; and serves the capture endpoint beside them. `shell` is read again for each page and capture.\n */\nexport function servePages(server: ViteDevServer, base: string, shell: () => ShellFields): CaptureEndpoint {\n server.middlewares.use((req, res, next) => {\n const url = req.url ?? '/';\n const path = url.split('?')[0] ?? '/';\n const prefix = base.endsWith('/') ? base.slice(0, -1) : base;\n const page = path === prefix ? '/' : path.startsWith(`${prefix}/`) ? path.slice(prefix.length) : null;\n const entry = req.method === 'GET' && page !== null ? PAGES[page] : undefined;\n if (!entry) return next();\n server.transformIndexHtml(url, html(entry, 'serve', shell().title)).then(\n (doc) => {\n res.statusCode = 200;\n res.setHeader('Content-Type', 'text/html');\n res.end(doc);\n },\n (err: unknown) => next(err),\n );\n });\n return serveCapture(server, base, () => shell().allowOrigins);\n}\n","import { readFileSync } from 'node:fs';\nimport type * as t from '@babel/types';\nimport { type Bindings, calleeOf, exportedName, objectOf, parseFile, prop, stringOf } from './ast.ts';\n\n/** A shell config module's default export as the object literal its source writes, with the file's top-level `const`s. */\nfunction configOf(code: string, file: string): { config: t.ObjectExpression | null; bindings: Bindings } | null {\n let program: t.Program;\n try {\n program = parseFile(code, file);\n } catch {\n return null;\n }\n const bindings: Bindings = new Map();\n let config: t.Node | undefined;\n for (const stmt of program.body) {\n if (stmt.type === 'VariableDeclaration') {\n for (const d of stmt.declarations) if (d.id.type === 'Identifier' && d.init) bindings.set(d.id.name, d.init);\n }\n if (stmt.type === 'ExportDefaultDeclaration') config = stmt.declaration;\n if (stmt.type !== 'ExportNamedDeclaration' || stmt.source) continue;\n for (const spec of stmt.specifiers) {\n if (spec.type === 'ExportSpecifier' && exportedName(spec.exported) === 'default') config = spec.local;\n }\n }\n // Whatever wraps the object, `defineShellConfig` or a project's own helper, is taken to hand it back.\n const wrapper = calleeOf(config, bindings);\n return { config: objectOf(config, bindings, new Set(wrapper ? [wrapper] : [])), bindings };\n}\n\n/**\n * The `title` a shell config module's default export names, read from its source: the served document carries it\n * before any script runs. Undefined when the module names none, or builds it in a way that only running it tells.\n */\nexport function shellTitle(code: string, file: string): string | undefined {\n const read = configOf(code, file);\n return read ? stringOf(prop(read.config, 'title'), read.bindings) : undefined;\n}\n\n/** The array literal `node` is written as, through casts and top-level `const`s. */\nfunction arrayOf(node: t.Node | undefined, bindings: Bindings, depth = 0): t.ArrayExpression | null {\n if (!node || depth > 16) return null;\n if (node.type === 'ArrayExpression') return node;\n if (node.type === 'Identifier') return arrayOf(bindings.get(node.name), bindings, depth + 1);\n if ('expression' in node && (node.type.startsWith('TS') || node.type === 'ParenthesizedExpression')) {\n return arrayOf(node.expression as t.Node, bindings, depth + 1);\n }\n return null;\n}\n\nconst originOf = (url: string | undefined): string[] => {\n if (url === undefined) return [];\n try {\n const { origin } = new URL(url);\n return origin === 'null' ? [] : [origin];\n } catch {\n return [];\n }\n};\n\n/**\n * The origins a shell config's `capture.allowOrigins` lists, read from its source as the title is: the dev server\n * reads it without running the module. An entry that is not a string written out, or not a URL, is left out.\n */\nexport function shellAllowOrigins(code: string, file: string): string[] {\n const read = configOf(code, file);\n if (!read) return [];\n const capture = objectOf(prop(read.config, 'capture'), read.bindings, new Set());\n const list = arrayOf(prop(capture, 'allowOrigins'), read.bindings);\n return (list?.elements ?? []).flatMap((el) => (el && el.type !== 'SpreadElement' ? originOf(stringOf(el, read.bindings)) : []));\n}\n\n/** What the dev server reads from a shell config module's source. */\nexport interface ShellFields {\n title: string | undefined;\n allowOrigins: readonly string[];\n}\n\n/** Reads `file`'s shell fields; none when there is no file or it cannot be read. */\nexport function readShellFields(file: string | undefined): ShellFields {\n let code: string;\n try {\n if (file === undefined) throw new Error('no shell config');\n code = readFileSync(file, 'utf8');\n } catch {\n return { title: undefined, allowOrigins: [] };\n }\n return { title: shellTitle(code, file), allowOrigins: shellAllowOrigins(code, file) };\n}\n","import { fileURLToPath } from 'node:url';\nimport type { Plugin } from 'vite';\n\n/** Storybook specifiers a CSF file may import, and the forge entry each answers to. */\nconst SHIMS: readonly (readonly [RegExp, string])[] = [\n [/^@?storybook\\/preview-api$/, '@weasel-js/forge/preview-api'],\n [/^@?storybook\\/test$/, '@weasel-js/forge/play'],\n];\n\n/** Points the Storybook runtime specifiers a CSF file may carry at forge's own entries. */\nexport function storybookShims(): Plugin {\n // Resolved from forge's own location, through the app's aliases, so a monorepo reaches source and an install reaches dist.\n return {\n name: 'weaselforge:storybook-shims',\n enforce: 'pre',\n resolveId(id) {\n const hit = SHIMS.find(([pattern]) => pattern.test(id));\n if (!hit) return undefined;\n return this.resolve(hit[1], fileURLToPath(import.meta.url), { skipSelf: true });\n },\n };\n}\n","const body = (mount: string) => `import index from 'virtual:forge/index.js';\nimport importers from 'virtual:forge/importers.js';\nimport setup from 'virtual:forge/frame-config.js';\n\n${mount}\n// The endpoint drops its captures on any edit; a page loaded before one would render the old module.\nimport.meta.hot?.accept('virtual:forge/importers.js', () => location.reload());\n`;\n\n/** The capture page for a story rendered in the workshop document: the shell's stylesheets and lab theme. */\nexport function captureEntry(): string {\n return `import { mountCapture } from '@weasel-js/forge/frame';\nimport '@weasel-js/labkit/styles.css';\nimport '@weasel-js/forge/shell.css';\nimport config from 'virtual:forge/shell-config.js';\n${body(`mountCapture({\n index,\n importers,\n setup,\n labTheme: config.labTheme,\n libraries: config.libraries,\n dependencies: () => import('virtual:forge/deps.js').then((m) => m.default),\n});`)}`;\n}\n\n/** The capture page for an isolated story: a frame document's stylesheets. `styles` are absolute paths. */\nexport function captureFrameEntry(styles: readonly string[]): string {\n return `import { mountCapture } from '@weasel-js/forge/frame';\nimport '@weasel-js/forge/frame.css';\n${styles.map((path) => `import ${JSON.stringify(path)};\\n`).join('')}${body('mountCapture({ index, importers, setup });')}`;\n}\n","/** The workshop page's entry module. `stories` are the globs, shown when they match nothing. */\nexport function shellEntry(base: string, stories: readonly string[]): string {\n return `import { followEdits, mountWorkshop } from '@weasel-js/forge/shell';\nimport '@weasel-js/labkit/styles.css';\nimport '@weasel-js/forge/shell.css';\nimport index from 'virtual:forge/index.js';\nimport importers from 'virtual:forge/importers.js';\nimport config from 'virtual:forge/shell-config.js';\nimport setup from 'virtual:forge/frame-config.js';\n\nconst workshop = mountWorkshop({\n index,\n importers,\n setup,\n config,\n frameUrl: ${JSON.stringify(`${base}frame.html`)},\n captureBase: ${JSON.stringify(base)},\n issuesBase: ${JSON.stringify(base)},\n stories: ${JSON.stringify(stories)},\n});\n// Read from source on first request, so the graph costs nothing until the page is up.\nimport('virtual:forge/deps.js').then((m) => workshop.setDependencies(m.default));\nconst edits = followEdits(import.meta.hot, workshop);\nimport.meta.hot?.accept('virtual:forge/importers.js', (next) => edits.importers(next?.default));\n`;\n}\n\n/** A frame document's entry module. `styles` are absolute paths to the stylesheets frames alone load. */\nexport function frameEntry(styles: readonly string[]): string {\n return `import { mountFrame } from '@weasel-js/forge/frame';\nimport '@weasel-js/forge/frame.css';\n${styles.map((path) => `import ${JSON.stringify(path)};\\n`).join('')}import index from 'virtual:forge/index.js';\nimport importers from 'virtual:forge/importers.js';\nimport setup from 'virtual:forge/frame-config.js';\n\nmountFrame({ index, importers, setup });\n// The importers module is shared with the workshop page, which accepts a story edit in place; a frame document\n// showing the old module reloads instead, and without this the edit would dead-end here and reload every page.\nimport.meta.hot?.accept('virtual:forge/importers.js', () => location.reload());\n`;\n}\n","import { resolve } from 'node:path';\nimport type { IndexEntry } from '../story/types.ts';\nimport { captureEntry, captureFrameEntry } from './capture/entries.ts';\nimport { frameEntry, shellEntry } from './entries.ts';\n\nexport const PREFIX = 'virtual:forge/';\n\n/** Every `virtual:forge/*` module name; `deps.js` is built apart, since it needs the resolver. */\nexport const MODULES = new Set([\n 'index.js',\n 'importers.js',\n 'deps.js',\n 'frame-config.js',\n 'shell-config.js',\n 'shell-entry.js',\n 'frame-entry.js',\n 'capture-entry.js',\n 'capture-frame-entry.js',\n]);\n\n/** The plugin options the modules are written from. */\nexport interface VirtualModuleOptions {\n stories: readonly string[];\n frameConfig?: string | undefined;\n shellConfig?: string | undefined;\n frameStyles?: readonly string[] | undefined;\n}\n\n/** The plugin state the modules are read from, each read when a module loads. */\nexport interface VirtualModuleState {\n index(): IndexEntry[];\n /** Story files, each with its entries; a file that failed to parse has none. */\n files(): Map<string, IndexEntry[]>;\n root(): string;\n base(): string;\n}\n\n/** The source of every virtual module but `deps.js`, by name. */\nexport function virtualModules(options: VirtualModuleOptions, src: VirtualModuleState): Record<string, () => string> {\n const configModule = (path: string | undefined) =>\n path ? `export { default } from ${JSON.stringify(resolve(src.root(), path))};\\n` : 'export default {};\\n';\n const frameStyles = () => (options.frameStyles ?? []).map((path) => resolve(src.root(), path));\n return {\n 'index.js': () => `export default ${JSON.stringify(src.index())};\\n`,\n 'importers.js': () => {\n const lines = [...src.files()]\n .filter(([, entries]) => entries.length > 0)\n .map(([file]) => ` ${JSON.stringify(file)}: () => import(${JSON.stringify(file)}),`);\n return `export default {\\n${lines.join('\\n')}\\n};\\n`;\n },\n 'frame-config.js': () => configModule(options.frameConfig),\n 'shell-config.js': () => configModule(options.shellConfig),\n 'shell-entry.js': () => shellEntry(src.base(), options.stories),\n 'frame-entry.js': () => frameEntry(frameStyles()),\n 'capture-entry.js': () => captureEntry(),\n 'capture-frame-entry.js': () => captureFrameEntry(frameStyles()),\n };\n}\n","import { statSync } from 'node:fs';\nimport { isAbsolute, relative } from 'node:path';\nimport { normalizePath, type Plugin, type ViteDevServer } from 'vite';\n\n/** The plugin's name; a server with two copies runs only the first. */\nexport const WATCH_RECOVERY = 'weasel-watch-recovery';\n\n/** Options for the `watchRecovery` vite plugin. */\nexport interface WatchRecoveryOptions {\n /**\n * How long the watcher must have reported nothing before the served files are checked for changes it missed,\n * and how often they are checked while it stays quiet, in milliseconds. Default 2000.\n */\n quietMs?: number;\n}\n\nconst QUIET_MS = 2000;\n\nconst mtimeOf = (file: string): number | undefined => {\n try {\n return statSync(file).mtimeMs;\n } catch {\n return undefined;\n }\n};\n\nconst withoutQuery = (url: string) => url.replace(/[?#].*$/s, '');\n\n/**\n * A plugin that serves an edit the OS never reported. Each module vite serves from a file is stamped with the file's\n * modification time when vite reads it. A request for a module whose file has changed since, and a check of every\n * served file once the watcher has been quiet for `quietMs`, replays the missed change through vite's watcher: the\n * module is transformed again and the open page gets the update, or a reload, as it would have from the event.\n * Each recovery logs one line naming the file.\n */\nexport function watchRecovery({ quietMs = QUIET_MS }: WatchRecoveryOptions = {}): Plugin {\n /** Each served file's modules, with the file's modification time when vite read it for that module. */\n const stamps = new Map<string, Map<string, number>>();\n const read = new Map<string, number>();\n const fileOfUrl = new Map<string, string>();\n let server: ViteDevServer | undefined;\n let active = false;\n let skipped: (file: string) => boolean = () => true;\n let lastEvent = 0;\n let replaying = false;\n let timer: ReturnType<typeof setInterval> | undefined;\n\n const restamp = (file: string) => {\n const modules = stamps.get(file);\n const now = mtimeOf(file);\n if (!modules || now === undefined) return;\n for (const id of modules.keys()) modules.set(id, now);\n };\n\n const missed = (file: string) => {\n const modules = stamps.get(file);\n const now = mtimeOf(file);\n if (!modules || now === undefined) return false;\n for (const stamp of modules.values()) if (stamp !== now) return true;\n return false;\n };\n\n const recover = (file: string, outcome: string) => {\n if (!server) return;\n restamp(file);\n for (const environment of Object.values(server.environments)) environment.moduleGraph.onFileChange(file);\n server.config.logger.warn(`[watch] ${relative(server.config.root, file)} changed with no file event; ${outcome}`, {\n timestamp: true,\n });\n replaying = true;\n try {\n server.watcher.emit('change', file);\n } finally {\n replaying = false;\n }\n };\n\n const sweep = () => {\n if (Date.now() - lastEvent < quietMs) return;\n for (const file of stamps.keys()) if (missed(file)) recover(file, 'pushing it to the page');\n };\n\n const self: Plugin = {\n name: WATCH_RECOVERY,\n apply: 'serve',\n configResolved(config) {\n active = config.server.watch !== null && config.plugins.find((p) => p.name === WATCH_RECOVERY) === self;\n const cacheDir = normalizePath(config.cacheDir) + '/';\n skipped = (file) => !isAbsolute(file) || file.includes('/node_modules/') || file.startsWith(cacheDir);\n },\n configureServer(s) {\n if (!active) return;\n server = s;\n for (const event of ['add', 'change', 'unlink'] as const) {\n s.watcher.on(event, (path: string) => {\n if (replaying) return;\n lastEvent = Date.now();\n const file = normalizePath(path);\n if (event === 'unlink') stamps.delete(file);\n else restamp(file);\n });\n }\n const base = s.config.base;\n s.middlewares.use(function weaselWatchRecovery(req, _res, next) {\n let url = withoutQuery(req.url ?? '');\n if (base !== '/' && url.startsWith(base)) url = url.slice(base.length - 1);\n let file: string | undefined;\n try {\n file = fileOfUrl.get(decodeURI(url));\n } catch {\n // A malformed URL is vite's to answer.\n }\n if (file && missed(file)) recover(file, 'serving the new text');\n next();\n });\n timer = setInterval(sweep, quietMs);\n timer.unref();\n },\n load: {\n order: 'pre',\n handler(id) {\n if (!active || this.environment.name !== 'client') return;\n const file = withoutQuery(id);\n if (skipped(file)) return;\n const mtime = mtimeOf(file);\n if (mtime !== undefined) read.set(id, mtime);\n },\n },\n transform: {\n order: 'pre',\n handler(_code, id) {\n const mtime = read.get(id);\n if (mtime === undefined) return;\n read.delete(id);\n if (this.environment.mode !== 'dev') return;\n const mod = this.environment.moduleGraph.getModuleById(id);\n if (!mod?.file) return;\n let modules = stamps.get(mod.file);\n if (!modules) stamps.set(mod.file, (modules = new Map()));\n modules.set(id, mtime);\n fileOfUrl.set(withoutQuery(mod.url), mod.file);\n },\n },\n buildEnd() {\n clearInterval(timer);\n },\n };\n return self;\n}\n","import { mkdtempSync, rmSync, watch as fsWatch, writeFileSync } from 'node:fs';\nimport { tmpdir } from 'node:os';\nimport { join } from 'node:path';\nimport type { Plugin, ViteDevServer } from 'vite';\nimport { WATCH_RECOVERY } from './watchRecovery.ts';\n\n/** Starts a watch on a directory and returns what stops it. */\nexport type WatchDir = (dir: string, onEvent: () => void) => () => void;\n\nexport interface FileEventsOptions {\n /** How long to wait for the report, in milliseconds. Default 5000. */\n waitMs?: number;\n /** Default: `fs.watch`. */\n watch?: WatchDir;\n}\n\nconst WAIT_MS = 5000;\nconst REWRITE_MS = 250;\n\nconst watchDir: WatchDir = (dir, onEvent) => {\n const watcher = fsWatch(dir, onEvent);\n watcher.on('error', () => {});\n watcher.unref();\n return () => watcher.close();\n};\n\n/** Writes a file in a temp directory of its own and answers whether the OS reported the write within the wait. */\nexport function fileEventsArrive({ waitMs = WAIT_MS, watch = watchDir }: FileEventsOptions = {}): Promise<boolean> {\n const dir = mkdtempSync(join(tmpdir(), 'forge-watch-'));\n return new Promise((resolve) => {\n let settled = false;\n let writes = 0;\n let stop: (() => void) | undefined;\n let rewrite: ReturnType<typeof setInterval> | undefined;\n let deadline: ReturnType<typeof setTimeout> | undefined;\n const settle = (arrived: boolean) => {\n if (settled) return;\n settled = true;\n clearInterval(rewrite);\n clearTimeout(deadline);\n stop?.();\n rmSync(dir, { recursive: true, force: true });\n resolve(arrived);\n };\n const write = () => writeFileSync(join(dir, 'probe'), String(writes++));\n try {\n stop = watch(dir, () => settle(true));\n write();\n } catch {\n settle(false);\n return;\n }\n rewrite = setInterval(write, REWRITE_MS);\n deadline = setTimeout(() => settle(false), waitMs);\n rewrite.unref();\n deadline.unref();\n });\n}\n\nconst UNREPORTED = `[watch] a file written ${WAIT_MS / 1000} s ago has not been reported by the OS file watcher, `;\nconst FSEVENTSD = 'On macOS, look for `fseventsd` held at 100% CPU.';\n\nconst SILENT =\n UNREPORTED +\n 'so an edit will not reach the page until file events arrive again. `server.watch: { usePolling: true }` serves edits ' +\n 'without them, and so does the `watchRecovery()` plugin beside `watchProbe()`. ' +\n FSEVENTSD;\n\nconst RECOVERING =\n UNREPORTED +\n 'so edits are found by their modification times instead: on the next request for the module, or within seconds ' +\n 'once the watcher is quiet, each logged as it is served. ' +\n FSEVENTSD;\n\n/** Logs a warning when a dev server that relies on file events is getting none. */\nexport async function warnWhenWatchIsSilent(server: ViteDevServer, probe: () => Promise<boolean> = fileEventsArrive): Promise<void> {\n const { watch } = server.config.server;\n if (watch === null || watch?.usePolling) return;\n if (await probe()) return;\n const recovering = server.config.plugins.some((p) => p.name === WATCH_RECOVERY);\n server.config.logger.warn(recovering ? RECOVERING : SILENT);\n}\n\n/** Options for the `watchProbe` vite plugin. */\nexport interface WatchProbeOptions {\n /**\n * Answers whether the OS is reporting file changes: false makes the plugin log its warning. Called once, as the\n * dev server starts, and not at all where the server polls or does not watch. Default: `fileEventsArrive`,\n * which writes a temp file and waits five seconds for the report.\n */\n probe?: () => Promise<boolean>;\n}\n\n/** A plugin giving any dev server the warning forge's own gives when the OS reports no file changes. */\nexport function watchProbe({ probe }: WatchProbeOptions = {}): Plugin {\n return {\n name: 'weasel-watch-probe',\n apply: 'serve',\n configureServer(server) {\n void warnWhenWatchIsSilent(server, probe);\n },\n };\n}\n","import { globSync, readFileSync, statSync } from 'node:fs';\nimport { basename, relative, resolve, sep } from 'node:path';\nimport type { EnvironmentModuleNode, Logger, Plugin, ViteDevServer } from 'vite';\nimport { byComponent } from '../story/indexPages.ts';\nimport type { DepGraph, IndexEntry } from '../story/types.ts';\nimport { hoistPages, writePages } from './build.ts';\nimport { createDepGraph, type DepGraphBuilder, type ResolveImport } from './depGraph.ts';\nimport { createHistoryReader, type HistoryReader } from './history.ts';\nimport { foreignCallees } from './indexFile.ts';\nimport { indexStory } from './indexStory.ts';\nimport { ownEntries } from './ownEntries.ts';\nimport { propControls } from './propControls.ts';\nimport type { PropControlsOptions } from './propTypes.ts';\nimport type { CaptureEndpoint } from './capture/endpoint.ts';\nimport { serveIssues } from './issues/endpoint.ts';\nimport { servePages } from './servePages.ts';\nimport { readShellFields } from './shellTitle.ts';\nimport { storybookShims } from './storybookShims.ts';\nimport { storyGlobOf } from './storyGlob.ts';\nimport { MODULES, PREFIX, virtualModules } from './virtualModules.ts';\nimport { titleStandIn } from './componentOf.ts';\nimport { warnWhenWatchIsSilent } from './watchProbe.ts';\nimport { watchRecovery } from './watchRecovery.ts';\nimport { createWrapperResolver, sameResolution, type WrapperResolution } from './wrappers.ts';\n\n/** Options for the `forge` vite plugin. */\nexport interface ForgeOptions {\n /** Globs of story files, relative to the vite root. */\n stories: string[];\n /** Path to the frame config module, relative to the vite root. The workshop page and every frame document import it. Optional. */\n frameConfig?: string;\n /** Path to the shell config module, relative to the vite root. Only the workshop page imports it. Optional. */\n shellConfig?: string;\n /** Stylesheets for frame documents alone, relative to the vite root: a page background, a body font. The workshop page never loads them. */\n frameStyles?: string[];\n /** Alias Storybook's runtime modules to forge shims. Default true. */\n storybookShims?: boolean;\n /**\n * Give a CSF story a control for each prop of its meta's `component`, read from the component's TypeScript types;\n * the story's own `args` and `argTypes` refine them. Needs `typescript` installed. Default true; an object narrows\n * which props are read.\n */\n propControls?: boolean | PropControlsOptions;\n /**\n * Show each component's API on its index page: every prop, and what its `ref` exposes, read from the component's\n * TypeScript types. Needs `typescript` installed. Default true; `propControls`' `skip` narrows it the same way.\n */\n api?: boolean;\n}\n\nconst SCRIPT = /\\.[cm]?[jt]sx?$/;\n\ninterface SourceWatch {\n files: readonly string[];\n depGraph: () => DepGraphBuilder;\n reindex: (server: ViteDevServer, file: string, event: 'add' | 'change' | 'unlink') => Promise<boolean>;\n redeps: (server: ViteDevServer) => void;\n logError: (err: unknown) => void;\n}\n\n/** Watches the story files and everything they import, reindexing a changed story and pushing new deps. */\nfunction watchSources(server: ViteDevServer, { files, depGraph, reindex, redeps, logError }: SourceWatch): void {\n server.watcher.add([...files]);\n void warnWhenWatchIsSilent(server);\n for (const event of ['add', 'change', 'unlink'] as const) {\n server.watcher.on(event, (path) => {\n const file = resolve(path);\n // A new file can answer an import that resolved to nothing before.\n const added = event === 'add' && SCRIPT.test(file) && !file.split(sep).includes('node_modules');\n if (added) depGraph().reset();\n const read = added || (event !== 'add' && depGraph().invalidate(file));\n reindex(server, file, event).then((indexed) => {\n if (indexed || read) redeps(server);\n }, logError);\n });\n }\n}\n\n/** The plugins forge serves beside its own, as its options ask. */\nfunction companions(options: ForgeOptions, files: () => Map<string, IndexEntry[]>): Plugin[] {\n const { storybookShims: shims, propControls: controls, api } = options;\n const storyFiles = () => [...files().keys()];\n const fallbackOf = (file: string) => {\n const title = files().get(file)?.[0]?.title;\n return title === undefined ? undefined : titleStandIn(title);\n };\n const readings = { controls: controls !== false, api: api !== false };\n const narrowed = typeof controls === 'object' ? controls : undefined;\n return [\n watchRecovery(),\n ...(shims === false ? [] : [storybookShims()]),\n ...(readings.controls || readings.api ? [propControls(storyFiles, fallbackOf, readings, narrowed)] : []),\n ];\n}\n\n/**\n * The vite plugin that serves the workshop: it indexes the story files, serves the workshop at `/` and the frame\n * document at `/frame.html`, pushes a new index to the open page as story files change, and builds both pages.\n */\nexport function forge(options: ForgeOptions): Plugin[] {\n let root = process.cwd();\n let base = '/';\n let byFile: Map<string, IndexEntry[]> | null = null;\n let logger: Logger | undefined;\n let deps: DepGraphBuilder | null = null;\n /** The graph last served or pushed; null until a page first asks for it, so no edit rebuilds it before then. */\n let depsSent: string | null = null;\n let depsPending: Promise<void> | null = null;\n /** Per story file, which of its foreign callees are forge's `meta`/`story`, and what was read to decide it. */\n const wrappersOf = new Map<string, WrapperResolution>();\n /** The first pass over every story file, run before the index is first served. */\n let settledAll: Promise<void> | null = null;\n\n const glob = (): string[] => {\n const files = options.stories.flatMap((pattern) =>\n globSync(pattern, { cwd: root, exclude: (name) => basename(String(name)) === 'node_modules' })\n .map((f) => resolve(root, f))\n // A failed story run leaves `__screenshots__/<file>.stories.tsx/` directories that match the globs.\n .filter((f) => statSync(f).isFile())\n .sort(),\n );\n return [...new Set(files)];\n };\n const matches = (file: string): boolean => {\n const path = relative(root, file).split(sep).join('/');\n return !path.split('/').includes('node_modules') && storyGlobOf(path, options.stories) !== undefined;\n };\n const read = (file: string) =>\n indexStory(readFileSync(file, 'utf8'), file, { root, stories: options.stories }, wrappersOf.get(file));\n const logError = (err: unknown) => logger?.error(`[forge] ${err instanceof Error ? err.message : String(err)}`);\n /** A file that fails to parse stays in the map with no entries, so an edit that fixes it re-indexes it. */\n const files = (): Map<string, IndexEntry[]> => {\n byFile ??= new Map(\n glob().map((file) => {\n try {\n return [file, read(file)];\n } catch (err) {\n logError(err);\n return [file, []];\n }\n }),\n );\n return byFile;\n };\n const index = () => byComponent([...files().values()].flat());\n\n /**\n * Decides, for each of `targets`, which imports reached through another module are forge's `meta`/`story`, and\n * re-reads a file whose answer changed. Without it a meta imported from a project helper reads as no meta at all.\n */\n const settle = async (targets: readonly string[], resolveImport: ResolveImport): Promise<void> => {\n const decide = createWrapperResolver((file) => readFileSync(file, 'utf8'));\n const current = files();\n for (const file of targets) {\n if (!current.has(file)) continue;\n let next: WrapperResolution;\n try {\n next = await decide(file, foreignCallees(readFileSync(file, 'utf8'), file), resolveImport);\n } catch {\n // `read` has already logged a file that fails to parse.\n continue;\n }\n const before = wrappersOf.get(file);\n wrappersOf.set(file, next);\n if (sameResolution(before, next)) continue;\n try {\n current.set(file, read(file));\n } catch (err) {\n logError(err);\n }\n }\n };\n const depGraph = (): DepGraphBuilder => (deps ??= createDepGraph({ root, read: (file) => readFileSync(file, 'utf8') }));\n let history: HistoryReader | null = null;\n\n /** The component graph, each component with what git says of its source file. */\n async function graphOf(resolveImport: ResolveImport): Promise<DepGraph> {\n const graph = await depGraph().build(index(), resolveImport);\n const sources = Object.values(graph).flatMap((entry) => (entry.source === null ? [] : [entry.source]));\n const histories = await (history ??= createHistoryReader(root)).read(sources);\n for (const entry of Object.values(graph)) {\n const found = entry.source === null ? undefined : histories[entry.source];\n if (found) entry.history = found;\n }\n return graph;\n }\n\n /** What the shell config's source names under `at`: its title, undefined and so the default when unread. */\n const shellUnder = (at: string) => readShellFields(options.shellConfig ? resolve(at, options.shellConfig) : undefined);\n\n const modules = virtualModules(options, { index, files, root: () => root, base: () => base });\n let capture: CaptureEndpoint | null = null;\n\n const invalidate = (server: ViteDevServer, names: readonly string[]): void => {\n for (const env of Object.values(server.environments)) {\n for (const name of names) {\n const mod = env.moduleGraph.getModuleById(`\\0${PREFIX}${name}`);\n if (mod) env.moduleGraph.invalidateModule(mod);\n }\n }\n };\n\n /** Rebuilds the graph after an edit and pushes it when it changed. Edits landing while one runs share the next. */\n function redeps(server: ViteDevServer): void {\n if (depsSent === null || depsPending) return;\n const resolve: ResolveImport = async (spec, importer) =>\n (await server.environments.client.pluginContainer.resolveId(spec, importer))?.id ?? null;\n depsPending = Promise.resolve()\n .then(async () => {\n const graph = await graphOf(resolve);\n const json = JSON.stringify(graph);\n if (json === depsSent) return;\n depsSent = json;\n invalidate(server, ['deps.js']);\n server.ws.send({ type: 'custom', event: 'forge:deps', data: graph });\n })\n .catch(logError)\n .finally(() => {\n depsPending = null;\n });\n }\n\n /** The story files an edit to `changed` reaches, climbing the way vite's own update does: through every importer. */\n const storiesReaching = (changed: readonly EnvironmentModuleNode[]): string[] => {\n const current = files();\n const seen = new Set<EnvironmentModuleNode>();\n const reached = new Set<string>();\n const climb = (mod: EnvironmentModuleNode): void => {\n if (seen.has(mod)) return;\n seen.add(mod);\n if (mod.file && current.has(mod.file)) reached.add(mod.file);\n // A stylesheet takes its own update, so the edit stops there.\n if (mod.isSelfAccepting && !(mod.file && SCRIPT.test(mod.file))) return;\n for (const importer of mod.importers) climb(importer);\n };\n for (const mod of changed) climb(mod);\n return [...reached];\n };\n\n /** Re-reads a story file after `event`, and any story file whose meta or stories were resolved through it; true when the index changed. */\n async function reindex(server: ViteDevServer, file: string, event: 'add' | 'change' | 'unlink'): Promise<boolean> {\n const current = files();\n const own = event === 'add' ? matches(file) : current.has(file);\n const through = [...wrappersOf]\n .filter(([story, { reads, unresolved }]) => story !== file && (reads.has(file) || (event === 'add' && unresolved)))\n .map(([story]) => story);\n if (!own && through.length === 0) return false;\n\n const before = JSON.stringify(index());\n const importable = () => JSON.stringify([...current].filter(([, entries]) => entries.length > 0).map(([path]) => path));\n const importableBefore = importable();\n if (own && event === 'unlink') {\n current.delete(file);\n wrappersOf.delete(file);\n } else if (own) {\n try {\n current.set(file, read(file));\n } catch (err) {\n logError(err);\n if (through.length === 0) return false;\n }\n }\n const resolveImport: ResolveImport = async (spec, importer) =>\n (await server.environments.client.pluginContainer.resolveId(spec, importer))?.id ?? null;\n await settle([...(own && event !== 'unlink' ? [file] : []), ...through], resolveImport);\n const next = index();\n if (JSON.stringify(next) === before) return false;\n\n invalidate(server, ['index.js', 'importers.js']);\n server.ws.send({ type: 'custom', event: 'forge:index', data: next });\n // Nothing imports a file that was just added, so vite has no update of its own to hand the open page the importer.\n const importers = server.environments.client.moduleGraph.getModuleById(`\\0${PREFIX}importers.js`);\n if (importers && importable() !== importableBefore) await server.environments.client.reloadModule(importers);\n return true;\n }\n\n return [\n ...companions(options, files),\n {\n name: 'weaselforge',\n config(config, { command }) {\n const at = resolve(config.root ?? process.cwd());\n // The pages are virtual, so vite's scan finds no entry of its own to crawl for dependencies.\n const entries = [\n ...options.stories,\n ...[options.frameConfig, options.shellConfig].flatMap((path) => (path ? [resolve(at, path)] : [])),\n ...ownEntries(['shell', 'frame']),\n ];\n const optimizeDeps = { entries };\n if (command !== 'build') return { optimizeDeps };\n return { optimizeDeps, build: { rolldownOptions: { input: writePages(at, shellUnder(at).title) } } };\n },\n generateBundle: {\n order: 'post',\n handler(_, bundle) {\n hoistPages(bundle, (file) => this.emitFile(file));\n },\n },\n configResolved(config) {\n root = config.root;\n base = config.base;\n logger = config.logger;\n byFile = null;\n wrappersOf.clear();\n settledAll = null;\n deps = null;\n history = null;\n depsSent = null;\n },\n resolveId(id) {\n return id.startsWith(PREFIX) && MODULES.has(id.slice(PREFIX.length)) ? `\\0${id}` : undefined;\n },\n async load(id) {\n if (!id.startsWith(`\\0${PREFIX}`)) return undefined;\n const name = id.slice(PREFIX.length + 1);\n if (name === 'index.js') {\n settledAll ??= settle([...files().keys()], async (spec, importer) => (await this.resolve(spec, importer))?.id ?? null);\n await settledAll;\n }\n if (name !== 'deps.js') return modules[name]?.();\n const graph = await graphOf(async (spec, importer) => (await this.resolve(spec, importer))?.id ?? null);\n depsSent = JSON.stringify(graph);\n return `export default ${depsSent};\\n`;\n },\n hotUpdate({ modules, server }) {\n if (this.environment.name !== 'client') return;\n capture?.revise();\n for (const file of storiesReaching(modules)) server.ws.send({ type: 'custom', event: 'forge:story', data: { file } });\n },\n configureServer(server) {\n watchSources(server, { files: [...files().keys()], depGraph, reindex, redeps, logError });\n capture = servePages(server, base, () => shellUnder(root));\n serveIssues(server, base, () => root);\n },\n closeServer: () => capture?.close(),\n },\n ];\n}\n","import { relative, resolve, sep } from 'node:path';\nimport type { Plugin } from 'vite';\nimport { indexStoryResolved } from './indexStory.ts';\nimport { ownEntries } from './ownEntries.ts';\nimport { storybookShims } from './storybookShims.ts';\nimport { storyGlobOf } from './storyGlob.ts';\n\n/** Options for the `forgeTest` vite plugin. */\nexport interface ForgeTestOptions {\n /** Globs of story files, relative to the vite root. Each matching file becomes a test file. */\n stories: string[];\n /** Path to the frame config module, relative to the vite root; it sets up every story. Optional. */\n frameConfig?: string;\n /** Alias Storybook's runtime modules to forge shims. Default true. */\n storybookShims?: boolean;\n}\n\nconst TIMEOUT_MS = 15_000;\n\n/**\n * A vite plugin for vitest browser mode: every story in a matching file runs as one test, rendered and played\n * through forge's frame in the test page itself.\n */\nexport function forgeTest(options: ForgeTestOptions): Plugin[] {\n let root = process.cwd();\n\n const matches = (id: string): boolean => {\n if (id.startsWith('\\0') || id.includes('?')) return false;\n const path = relative(root, id).split(sep).join('/');\n if (path.startsWith('../') || path.split('/').includes('node_modules')) return false;\n return storyGlobOf(path, options.stories) !== undefined;\n };\n\n return [\n ...(options.storybookShims === false ? [] : [storybookShims()]),\n {\n name: 'weaselforge:test',\n enforce: 'pre',\n config(config) {\n const at = resolve(config.root ?? process.cwd());\n const entries = [\n ...options.stories,\n ...(options.frameConfig ? [resolve(at, options.frameConfig)] : []),\n ...ownEntries(['test']),\n ];\n return { optimizeDeps: { entries } };\n },\n configResolved(config) {\n root = config.root;\n },\n async transform(code, id) {\n if (!matches(id)) return undefined;\n const { entries } = await indexStoryResolved(\n code,\n id,\n { root, stories: options.stories },\n async (spec, importer) => (await this.resolve(spec, importer))?.id ?? null,\n );\n const title = entries[0]?.title;\n if (title === undefined) return undefined;\n const q = (value: string) => JSON.stringify(value);\n // The module comes from its own URL at test time: vitest imports a test file with a cache-busting query,\n // so a static self-import would evaluate the file a second time and register every test twice.\n const lines = [\n '',\n `import { test as __forge_test } from \"vitest\";`,\n `import { runStory as __forge_runStory } from \"@weasel-js/forge/test\";`,\n // shell.css draws the story host; frame.css still holds the boundary's fault rule.\n `import \"@weasel-js/forge/shell.css\";`,\n `import \"@weasel-js/forge/frame.css\";`,\n ...(options.frameConfig ? [`import __forge_frame_config from ${q(resolve(root, options.frameConfig))};`] : []),\n `const __forge_file = ${q(id)};`,\n `const __forge_title = ${q(title)};`,\n `const __forge_timeout = ${TIMEOUT_MS};`,\n 'const __forge_options = {',\n ` setup: ${options.frameConfig ? '__forge_frame_config' : 'undefined'},`,\n '};',\n 'const __forge_run = async (exportName) => __forge_runStory(await import(/* @vite-ignore */ import.meta.url), exportName, __forge_file, __forge_title, __forge_options);',\n // An isolated story asks for a document of its own, which the test page is not; its reason goes in the name.\n ...entries.map((entry) =>\n entry.isolate === undefined\n ? `__forge_test(${q(entry.name)}, () => __forge_run(${q(entry.exportName)}), __forge_timeout);`\n : `__forge_test.skip(${q(`${entry.name} (isolated: ${entry.isolate})`)}, () => {});`,\n ),\n ];\n return { code: `${code}\\n${lines.join('\\n')}\\n`, map: null };\n },\n },\n ];\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/vite/html.ts","../../src/vite/build.ts","../../src/vite/componentOf.ts","../../src/vite/depGraph.ts","../../src/vite/history.ts","../../src/vite/ast.ts","../../src/vite/nativeExports.ts","../../src/vite/indexFile.ts","../../src/vite/storyGlob.ts","../../src/vite/autoTitle.ts","../../src/vite/foreignStories.ts","../../src/vite/trace.ts","../../src/vite/wrappers.ts","../../src/vite/indexStory.ts","../../src/vite/ownEntries.ts","../../src/vite/apiTable.ts","../../src/vite/propTypes.ts","../../src/vite/propControls.ts","../../src/vite/issues/endpoint.ts","../../src/vite/capture/browser.ts","../../src/vite/capture/cache.ts","../../src/vite/capture/endpoint.ts","../../src/vite/servePages.ts","../../src/vite/shellTitle.ts","../../src/vite/storybookShims.ts","../../src/vite/capture/entries.ts","../../src/vite/entries.ts","../../src/vite/virtualModules.ts","../../src/vite/watchRecovery.ts","../../src/vite/watchProbe.ts","../../src/vite/plugin.ts","../../src/vite/forgeTest.ts"],"names":["declaration","resolve","componentOf","dirname","join","parse","autoTitle","forge","posix","sep","relative","resolved","readFileSync","existsSync","record","prop","packageOf","docOf","IN_PACKAGES","MAX_DEPTH","execFile","body","keyOf","json","PAGES","fileURLToPath","fsWatch","settled","writeFileSync","SCRIPT","files","statSync","modules"],"mappings":";;;;;;;;;;;;;;;AAEA,IAAM,OAAA,GAAU,CAAC,IAAA,KAAyB,IAAA,CAAK,QAAQ,IAAA,EAAM,OAAO,CAAA,CAAE,OAAA,CAAQ,IAAA,EAAM,MAAM,CAAA,CAAE,OAAA,CAAQ,MAAM,MAAM,CAAA;AAMzG,SAAS,IAAA,CAAK,KAAA,EAAe,IAAA,GAA0B,OAAA,EAAS,QAAgB,aAAA,EAAuB;AAC5G,EAAA,MAAM,MAAM,CAAA,EAAG,IAAA,KAAS,UAAU,OAAA,GAAU,EAAE,iBAAiB,KAAK,CAAA,CAAA;AACpE,EAAA,OAAO,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAAA,EAKI,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA;AAAA;AAAA;AAAA,+BAAA,EAIM,GAAG,CAAA;AAAA;AAAA;AAAA,CAAA;AAIpC;;;ACnBA,IAAM,GAAA,GAAM,qBAAA;AAGZ,IAAM,KAAA,GAAgC,EAAE,KAAA,EAAO,gBAAA,EAAkB,OAAO,gBAAA,EAAiB;AAGlF,SAAS,UAAA,CAAW,MAAc,KAAA,EAAwC;AAC/E,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,EAAM,GAAG,CAAA;AAC1B,EAAA,SAAA,CAAU,GAAA,EAAK,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAClC,EAAA,OAAO,MAAA,CAAO,WAAA;AAAA,IACZ,MAAA,CAAO,QAAQ,KAAK,CAAA,CAAE,IAAI,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,KAAM;AAC3C,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,EAAK,CAAA,EAAG,IAAI,CAAA,KAAA,CAAO,CAAA;AACrC,MAAA,aAAA,CAAc,IAAA,EAAM,IAAA,CAAK,KAAA,EAAO,OAAA,EAAS,KAAK,CAAC,CAAA;AAC/C,MAAA,OAAO,CAAC,MAAM,IAAI,CAAA;AAAA,IACpB,CAAC;AAAA,GACH;AACF;AAGA,IAAM,EAAA,GAAK,CAAC,MAAA,KAAA,CACT,OAAO,WAAW,QAAA,GAAW,MAAA,GAAS,IAAI,WAAA,GAAc,MAAA,CAAO,MAAM,CAAA,EAAG,OAAA,CAAQ,mCAAmC,MAAM,CAAA;AAGrH,SAAS,UAAA,CACd,QACA,IAAA,EACM;AACN,EAAA,KAAA,MAAW,IAAA,IAAQ,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,EAAG;AACrC,IAAA,MAAM,IAAA,GAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,IAAI,CAAA,KAAA,CAAA;AAC3B,IAAA,MAAM,KAAA,GAAQ,OAAO,IAAI,CAAA;AACzB,IAAA,IAAI,KAAA,EAAO,IAAA,KAAS,OAAA,IAAW,KAAA,CAAM,WAAW,MAAA,EAAW;AAC3D,IAAA,OAAO,OAAO,IAAI,CAAA;AAClB,IAAA,IAAA,CAAK,EAAE,IAAA,EAAM,OAAA,EAAS,QAAA,EAAU,CAAA,EAAG,IAAI,CAAA,KAAA,CAAA,EAAS,MAAA,EAAQ,EAAA,CAAG,KAAA,CAAM,MAAM,CAAA,EAAG,CAAA;AAAA,EAC5E;AACF;;;ACnCO,IAAM,YAAA,GAAe,CAAC,KAAA,KAAsC,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,EAAI,EAAG,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA;AAatG,SAAS,WAAA,CACd,GAAA,EACA,OAAA,EACA,MAAA,EACA,QAAA,EACuB;AACvB,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,mBAAA,CAAoB,MAAM,CAAA;AACjD,EAAA,MAAM,QAAA,GAAW,MAAA,IAAU,OAAA,CAAQ,2BAAA,CAA4B,WAAW,MAAM,CAAA;AAChF,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,EAAA,MAAM,IAAA,GAAO,QAAQ,yBAAA,CAA0B,QAAA,CAAS,KAAK,OAAA,EAAS,QAAQ,GAAG,MAAM,CAAA;AACvF,EAAA,IAAI,KAAA,GAAQ,IAAA,CAAK,WAAA,CAAY,WAAW,CAAA;AACxC,EAAA,IAAI,MAAA,GAAS,SAAS,QAAA,CAAS,GAAA,EAAK,SAAS,QAAA,CAAS,GAAA,EAAK,OAAA,EAAS,QAAQ,CAAC,CAAA;AAE7E,EAAA,MAAM,KAAA,GAAQ,CAAC,MAAA,IAAU,MAAA,CAAO,eAAA,EAAgB,EAAG,IAAA,CAAK,CAACA,YAAAA,KAAgBA,YAAAA,CAAY,aAAA,EAAc,KAAM,MAAM,CAAA;AAC/G,EAAA,MAAM,QAAA,GAAW,SAAS,QAAA,GAAW,WAAA,CAAY,KAAK,OAAA,EAAS,MAAA,EAAQ,QAAQ,CAAA,GAAI,MAAA;AACnF,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,KAAA,GAAQ,MAAA;AACR,IAAA,MAAA,GAAS,QAAA;AAAA,EACX;AACA,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,MAAA,EAAQ,OAAO,IAAA;AAE9B,EAAA,MAAM,IAAA,GAAO,QAAQ,kBAAA,CAAmB,OAAA,CAAQ,0BAA0B,MAAA,IAAU,KAAA,EAAQ,MAAM,CAAC,CAAA;AACnG,EAAA,MAAM,WAAA,GAAc,MAAA,EAAQ,eAAA,EAAgB,GAAI,CAAC,CAAA;AACjD,EAAA,KAAA,MAAW,IAAA,IAAQ,KAAK,OAAA,EAAQ,GAAI,KAAK,KAAA,GAAQ,CAAC,IAAI,CAAA,EAAG;AACvD,IAAA,MAAM,CAAC,IAAI,CAAA,GAAI,IAAA,CAAK,iBAAA,EAAkB;AACtC,IAAA,MAAM,CAAC,KAAK,CAAA,GAAI,IAAA,EAAM,aAAA,MAAmB,EAAC;AAC1C,IAAA,IAAI,IAAA,EAAM,OAAO,EAAE,KAAA,EAAO,KAAA,GAAQ,OAAA,CAAQ,yBAAA,CAA0B,KAAA,EAAO,MAAM,CAAA,GAAI,IAAA,EAAM,WAAA,EAAY;AACvG,IAAA,MAAM,WAAW,IAAA,CAAK,sBAAA,EAAuB,CAAE,CAAC,GAAG,aAAA,EAAc;AACjE,IAAA,MAAM,IAAA,GAAO,QAAA,EAAU,WAAA,CAAY,OAAO,CAAA;AAC1C,IAAA,IAAI,IAAA,SAAa,EAAE,KAAA,EAAO,QAAQ,yBAAA,CAA0B,IAAA,EAAM,MAAM,CAAA,EAAG,WAAA,EAAY;AAAA,EACzF;AACA,EAAA,OAAO,IAAA;AACT;AAEA,IAAM,QAAA,GAAW,CAAC,GAAA,EAAgB,OAAA,EAAyB,MAAA,KACzD,MAAA,CAAO,KAAA,GAAQ,GAAA,CAAI,WAAA,CAAY,KAAA,GAAQ,OAAA,CAAQ,gBAAA,CAAiB,MAAM,CAAA,GAAI,MAAA;AAM5E,SAAS,QAAA,CAAS,GAAA,EAAgB,OAAA,EAAyB,IAAA,EAAwC;AACjG,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,eAAA,EAAgB,GAAI,CAAC,CAAA;AAC9C,EAAA,IAAI,IAAA,GACF,WAAA,IAAe,GAAA,CAAI,qBAAA,CAAsB,WAAW,CAAA,GAChD,WAAA,CAAY,WAAA,GACZ,WAAA,IAAe,GAAA,CAAI,kBAAA,CAAmB,WAAW,CAAA,GAC/C,YAAY,UAAA,GACZ,MAAA;AACR,EAAA,OAAO,IAAA,IAAQ,CAAC,GAAA,CAAI,yBAAA,CAA0B,IAAI,CAAA,EAAG;AACnD,IAAA,IAAI,IAAI,gBAAA,CAAiB,IAAI,GAAG,IAAA,GAAO,IAAA,CAAK,UAAU,CAAC,CAAA;AAAA,SAAA,IAC9C,GAAA,CAAI,yBAAA,CAA0B,IAAI,CAAA,IAAK,GAAA,CAAI,cAAA,CAAe,IAAI,CAAA,IAAK,GAAA,CAAI,qBAAA,CAAsB,IAAI,CAAA,EAAG;AAC3G,MAAA,IAAA,GAAO,IAAA,CAAK,UAAA;AAAA,IACd,OAAO,IAAA,GAAO,MAAA;AAAA,EAChB;AACA,EAAA,MAAM,WAAW,IAAA,EAAM,UAAA,CAAW,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,IAAQ,GAAA,CAAI,YAAA,CAAa,EAAE,IAAI,CAAA,IAAK,CAAA,CAAE,IAAA,CAAK,SAAS,WAAW,CAAA;AAC/G,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI,QAAA,IAAY,IAAI,6BAAA,CAA8B,QAAQ,GAAG,KAAA,GAAQ,OAAA,CAAQ,kCAAkC,QAAQ,CAAA;AAAA,OAAA,IAC9G,QAAA,IAAY,IAAI,oBAAA,CAAqB,QAAQ,GAAG,KAAA,GAAQ,OAAA,CAAQ,mBAAA,CAAoB,QAAA,CAAS,WAAW,CAAA;AACjH,EAAA,OAAO,KAAA,IAAS,QAAA,CAAS,GAAA,EAAK,OAAA,EAAS,KAAK,CAAA;AAC9C;AAEA,SAAS,WAAA,CAAY,GAAA,EAAgB,OAAA,EAAyB,MAAA,EAAuB,IAAA,EAAqC;AACxH,EAAA,KAAA,MAAW,SAAA,IAAa,OAAO,UAAA,EAAY;AACzC,IAAA,IAAI,CAAC,GAAA,CAAI,mBAAA,CAAoB,SAAS,CAAA,EAAG;AACzC,IAAA,MAAM,SAAS,SAAA,CAAU,YAAA;AACzB,IAAA,MAAM,WAAW,MAAA,EAAQ,aAAA;AACzB,IAAA,MAAM,KAAA,GAAQ;AAAA,MACZ,GAAI,MAAA,EAAQ,IAAA,GAAO,CAAC,MAAA,CAAO,IAAI,IAAI,EAAC;AAAA,MACpC,GAAI,QAAA,IAAY,GAAA,CAAI,cAAA,CAAe,QAAQ,CAAA,GAAI,QAAA,CAAS,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,KAAY,OAAA,CAAQ,IAAI,IAAI;AAAC,KACrG;AACA,IAAA,MAAM,QAAQ,KAAA,CAAM,IAAA,CAAK,CAAC,EAAA,KAAO,EAAA,CAAG,SAAS,IAAI,CAAA;AACjD,IAAA,MAAM,MAAA,GAAS,KAAA,IAAS,OAAA,CAAQ,mBAAA,CAAoB,KAAK,CAAA;AACzD,IAAA,IAAI,MAAA,EAAQ,OAAO,QAAA,CAAS,GAAA,EAAK,SAAS,MAAM,CAAA;AAAA,EAClD;AACA,EAAA,OAAO,MAAA;AACT;;;ACnDA,IAAM,QAAQ,CAAC,IAAA,EAAc,UAAuB,CAAA,EAAG,IAAI,IAAI,KAAK,CAAA,CAAA;AACpE,IAAM,SAAA,GAAY,CAAC,GAAA,KAAqB,GAAA,CAAI,MAAM,CAAA,EAAG,GAAA,CAAI,WAAA,CAAY,GAAG,CAAC,CAAA;AAEzE,IAAM,MAAA,GAAS,iBAAA;AACf,IAAM,aAAA,GAAgB,WAAA;AAEtB,IAAM,SAAA,mBAAY,IAAI,GAAA,CAAI,CAAC,gBAAA,EAAkB,kBAAkB,eAAA,EAAiB,YAAA,EAAc,qBAAA,EAAuB,YAAY,CAAC,CAAA;AAS3H,SAAS,cAAA,CAAe,EAAE,IAAA,EAAM,IAAA,EAAK,EAAqC;AAC/E,EAAA,MAAM,OAAA,uBAAc,GAAA,EAA+B;AACnD,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAAiD;AAEzE,EAAA,MAAM,IAAA,GAAO,CAAC,IAAA,KAAoC;AAChD,IAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,EAAG;AACtB,MAAA,IAAI,MAAA,GAA4B,IAAA;AAChC,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA,EAAG,IAAI,CAAA;AAAA,MACtC,CAAA,CAAA,MAAQ;AACN,QAAA,MAAA,GAAS,IAAA;AAAA,MACX;AACA,MAAA,OAAA,CAAQ,GAAA,CAAI,MAAM,MAAM,CAAA;AAAA,IAC1B;AACA,IAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,IAAK,IAAA;AAAA,EAC9B,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,WAAW,IAAA,EAAM;AACf,MAAA,MAAM,QAAQ,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,IAAK,WAAA,CAAY,IAAI,IAAI,CAAA;AACvD,MAAA,OAAA,CAAQ,OAAO,IAAI,CAAA;AACnB,MAAA,WAAA,CAAY,OAAO,IAAI,CAAA;AACvB,MAAA,OAAO,KAAA;AAAA,IACT,CAAA;AAAA,IAEA,KAAA,GAAQ;AACN,MAAA,WAAA,CAAY,KAAA,EAAM;AAAA,IACpB,CAAA;AAAA,IAEA,MAAM,KAAA,CAAM,OAAA,EAASC,QAAAA,EAAS;AAC5B,MAAA,MAAM,WAAA,GAAc,CAAC,IAAA,EAAc,QAAA,KAA6C;AAC9E,QAAA,IAAI,UAAA,GAAa,WAAA,CAAY,GAAA,CAAI,QAAQ,CAAA;AACzC,QAAA,IAAI,CAAC,UAAA,EAAY;AACf,UAAA,UAAA,uBAAiB,GAAA,EAAI;AACrB,UAAA,WAAA,CAAY,GAAA,CAAI,UAAU,UAAU,CAAA;AAAA,QACtC;AACA,QAAA,IAAI,OAAA,GAAU,UAAA,CAAW,GAAA,CAAI,IAAI,CAAA;AACjC,QAAA,IAAI,CAAC,OAAA,EAAS;AACZ,UAAA,OAAA,GAAUA,QAAAA,CAAQ,IAAA,EAAM,QAAQ,CAAA,CAAE,IAAA;AAAA,YAChC,CAAC,EAAA,KAAO;AACN,cAAA,MAAM,IAAA,GAAO,EAAA,EAAI,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAC7B,cAAA,OAAO,QAAQ,CAAC,IAAA,CAAK,WAAW,IAAI,CAAA,IAAK,OAAO,IAAA,CAAK,IAAI,CAAA,IAAK,CAAC,KAAK,KAAA,CAAM,OAAO,EAAE,QAAA,CAAS,cAAc,IAAI,IAAA,GAAO,IAAA;AAAA,YACvH,CAAA;AAAA,YACA,MAAM;AAAA,WACR;AACA,UAAA,UAAA,CAAW,GAAA,CAAI,MAAM,OAAO,CAAA;AAAA,QAC9B;AACA,QAAA,OAAO,OAAA;AAAA,MACT,CAAA;AAGA,MAAA,MAAM,SAAA,GAAY,OAAO,IAAA,EAAc,IAAA,EAAc,QAAQ,CAAA,KAA2B;AACtF,QAAA,MAAM,GAAA,GAAM,KAAK,IAAI,CAAA;AACrB,QAAA,IAAI,CAAC,GAAA,IAAO,KAAA,GAAQ,EAAA,EAAI,OAAO,IAAA;AAC/B,QAAA,MAAM,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AAChC,QAAA,IAAI,GAAA,EAAK,SAAS,OAAA,EAAS;AACzB,UAAA,MAAM,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,IAAI,KAAK,CAAA;AACrC,UAAA,OAAO,GAAA,GAAM,SAAA,CAAU,IAAA,EAAM,GAAA,EAAK,KAAA,GAAQ,CAAC,CAAA,GAAI,KAAA,CAAM,IAAA,EAAM,GAAA,CAAI,KAAK,CAAA;AAAA,QACtE;AACA,QAAA,IAAI,GAAA,EAAK,SAAS,MAAA,EAAQ;AACxB,UAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,GAAA,CAAI,MAAM,IAAI,CAAA;AAC/C,UAAA,OAAO,SAAS,SAAA,CAAU,MAAA,EAAQ,IAAI,QAAA,EAAU,KAAA,GAAQ,CAAC,CAAA,GAAI,IAAA;AAAA,QAC/D;AACA,QAAA,IAAI,IAAA,KAAS,WAAW,OAAO,IAAA;AAC/B,QAAA,KAAA,MAAW,IAAA,IAAQ,IAAI,KAAA,EAAO;AAC5B,UAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,IAAA,EAAM,IAAI,CAAA;AAC3C,UAAA,MAAM,KAAA,GAAQ,SAAS,MAAM,SAAA,CAAU,QAAQ,IAAA,EAAM,KAAA,GAAQ,CAAC,CAAA,GAAI,IAAA;AAClE,UAAA,IAAI,OAAO,OAAO,KAAA;AAAA,QACpB;AACA,QAAA,OAAO,IAAA;AAAA,MACT,CAAA;AAEA,MAAA,MAAM,SAAA,GAAY,OAAO,QAAA,EAAkB,GAAA,EAAa,QAAQ,CAAA,KAA2B;AACzF,QAAA,IAAI,GAAA,CAAI,QAAA,KAAa,GAAA,EAAK,OAAO,IAAA;AACjC,QAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,GAAA,CAAI,MAAM,QAAQ,CAAA;AACnD,QAAA,OAAO,SAAS,SAAA,CAAU,MAAA,EAAQ,GAAA,CAAI,QAAA,EAAU,KAAK,CAAA,GAAI,IAAA;AAAA,MAC3D,CAAA;AAGA,MAAA,MAAMC,YAAAA,GAAc,OAAO,KAAA,KAA2C;AACpE,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AACjB,QAAA,MAAM,OAAA,GAAU,YAAA,CAAa,KAAA,CAAM,KAAK,CAAA;AACxC,QAAA,KAAA,MAAW,KAAA,IAAS,CAAC,KAAA,CAAM,aAAA,EAAe,OAAO,CAAA,EAAG;AAClD,UAAA,MAAM,MAAM,KAAA,GAAQ,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,GAAI,MAAA;AAC7C,UAAA,MAAM,MAAM,GAAA,GAAM,MAAM,UAAU,KAAA,CAAM,IAAA,EAAM,GAAG,CAAA,GAAI,IAAA;AACrD,UAAA,IAAI,KAAK,OAAO,GAAA;AAAA,QAClB;AACA,QAAA,OAAO,IAAA;AAAA,MACT,CAAA;AAEA,MAAA,MAAM,MAAA,uBAAa,GAAA,EAA0B;AAC7C,MAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,QAAA,IAAI,SAAA,CAAU,KAAK,CAAA,EAAG;AACtB,QAAA,MAAM,IAAA,GAAO,MAAA,CAAO,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA;AACnC,QAAA,IAAI,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA;AAAA,oBACb,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO,CAAC,KAAK,CAAC,CAAA;AAAA,MACtC;AAEA,MAAA,MAAM,UAAA,uBAAiB,GAAA,EAAwB;AAC/C,MAAA,MAAM,KAAA,uBAAY,GAAA,EAAmB;AACrC,MAAA,KAAA,MAAW,CAAC,KAAA,EAAO,IAAI,CAAA,IAAK,MAAA,EAAQ;AAClC,QAAA,IAAI,GAAA,GAAkB,IAAA;AACtB,QAAA,KAAA,MAAW,IAAA,IAAQ,IAAI,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAC,CAAA,EAAG;AACnD,UAAA,GAAA,GAAM,MAAMA,aAAY,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,IAAI,CAAe,CAAA;AACvE,UAAA,IAAI,GAAA,EAAK;AAAA,QACX;AACA,QAAA,UAAA,CAAW,GAAA,CAAI,OAAO,GAAG,CAAA;AACzB,QAAA,IAAI,GAAA,EAAK,KAAA,CAAM,GAAA,CAAI,GAAA,EAAK,CAAC,GAAI,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA,IAAK,EAAC,EAAI,KAAK,CAAC,CAAA;AAAA,MAC5D;AACA,MAAA,MAAM,cAAA,GAAiB,IAAI,GAAA,CAAI,CAAC,GAAG,KAAA,CAAM,IAAA,EAAM,CAAA,CAAE,GAAA,CAAI,SAAS,CAAC,CAAA;AAG/D,MAAA,MAAM,OAAA,GAAU,OAAO,GAAA,KAAgC;AACrD,QAAA,MAAM,GAAA,uBAAU,GAAA,EAAS;AACzB,QAAA,MAAM,IAAA,GAAO,UAAU,GAAG,CAAA;AAC1B,QAAA,MAAM,OAAA,GAAU,QAAQ,IAAI,CAAA;AAC5B,QAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAEhC,QAAA,MAAM,QAAA,GAAW,OAAO,IAAA,EAAc,KAAA,KAAmD;AACvF,UAAA,MAAM,GAAA,GAAM,KAAK,IAAI,CAAA;AACrB,UAAA,IAAI,CAAC,GAAA,EAAK;AACV,UAAA,MAAM,MAAA,uBAAa,GAAA,EAAY;AAC/B,UAAA,IAAI,UAAU,IAAA,EAAM;AAClB,YAAA,KAAA,MAAW,QAAQ,GAAA,CAAI,IAAA,CAAK,MAAK,EAAG,MAAA,CAAO,IAAI,IAAI,CAAA;AACnD,YAAA,KAAA,MAAW,QAAQ,GAAA,CAAI,OAAA,CAAQ,MAAK,EAAG,MAAA,CAAO,IAAI,IAAI,CAAA;AAAA,UACxD,CAAA,MAAO;AACL,YAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,KAAK,CAAA;AACvB,YAAA,OAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AACvB,cAAA,MAAM,IAAA,GAAO,MAAM,GAAA,EAAI;AACvB,cAAA,IAAI,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA,EAAG;AACtB,cAAA,MAAA,CAAO,IAAI,IAAI,CAAA;AACf,cAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,EAAM,IAAI,CAAA;AAC7B,cAAA,IAAI,IAAA,KAAS,GAAA,IAAO,KAAA,CAAM,GAAA,CAAI,IAAI,CAAA,EAAG;AACnC,gBAAA,GAAA,CAAI,IAAI,IAAI,CAAA;AACZ,gBAAA;AAAA,cACF;AACA,cAAA,KAAA,MAAW,OAAO,GAAA,CAAI,IAAA,CAAK,IAAI,IAAI,CAAA,IAAK,EAAC,EAAG;AAC1C,gBAAA,IAAI,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,IAAK,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA;AAAA,cAC/D;AAAA,YACF;AAAA,UACF;AACA,UAAA,KAAA,MAAW,QAAQ,MAAA,EAAQ;AACzB,YAAA,MAAM,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AAChC,YAAA,IAAI,CAAC,GAAA,EAAK;AACV,YAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,IAAA,EAAM,GAAG,CAAA;AACxC,YAAA,IAAI,MAAA,IAAU,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA,EAAG;AAC/B,cAAA,IAAI,MAAA,KAAW,GAAA,EAAK,GAAA,CAAI,GAAA,CAAI,MAAM,CAAA;AAClC,cAAA;AAAA,YACF;AACA,YAAA,IAAI,CAAC,GAAA,CAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AAC/B,YAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,GAAA,CAAI,MAAM,IAAI,CAAA;AAC/C,YAAA,IAAI,CAAC,UAAU,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,IAAK,cAAA,CAAe,GAAA,CAAI,MAAM,CAAA,EAAG;AAClE,YAAA,IAAI,SAAS,OAAA,EAAS,MAAM,CAAA,CAAE,UAAA,CAAW,IAAI,CAAA,EAAG;AAChD,YAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AAClB,YAAA,MAAM,QAAA,CAAS,QAAQ,IAAI,CAAA;AAAA,UAC7B;AAAA,QACF,CAAA;AAEA,QAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAChB,QAAA,MAAM,QAAA,CAAS,MAAM,CAAC,GAAA,CAAI,MAAM,IAAA,CAAK,MAAA,GAAS,CAAC,CAAC,CAAC,CAAA;AACjD,QAAA,OAAO,GAAA;AAAA,MACT,CAAA;AAEA,MAAA,MAAM,QAAkB,EAAC;AACzB,MAAA,KAAA,MAAW,CAAC,KAAA,EAAO,GAAG,CAAA,IAAK,UAAA,EAAY;AACrC,QAAA,KAAA,CAAM,KAAK,IAAI,EAAE,MAAA,EAAQ,MAAM,QAAA,CAAS,IAAA,EAAM,SAAA,CAAU,GAAG,CAAC,CAAA,CAAE,MAAM,GAAG,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,GAAI,IAAA,EAAM,MAAM,EAAC,EAAG,MAAA,EAAQ,EAAC,EAAE;AAAA,MAClH;AACA,MAAA,KAAA,MAAW,CAAC,KAAA,EAAO,GAAG,CAAA,IAAK,UAAA,EAAY;AACrC,QAAA,IAAI,CAAC,GAAA,EAAK;AACV,QAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,QAAA,KAAA,MAAW,MAAA,IAAU,MAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACvC,UAAA,KAAA,MAAW,KAAA,IAAS,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA,IAAK,EAAC,EAAG,IAAI,KAAA,KAAU,KAAA,EAAO,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA;AAAA,QAClF;AACA,QAAA,MAAM,IAAA,GAAO,MAAM,KAAK,CAAA;AACxB,QAAA,IAAA,CAAK,IAAA,GAAO,CAAC,GAAG,IAAI,EAAE,IAAA,EAAK;AAC3B,QAAA,KAAA,MAAW,KAAA,IAAS,KAAK,IAAA,EAAM,KAAA,CAAM,KAAK,CAAA,EAAG,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,MAChE;AACA,MAAA,KAAA,MAAW,QAAQ,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA,EAAG,IAAA,CAAK,OAAO,IAAA,EAAK;AAC1D,MAAA,OAAO,OAAO,WAAA,CAAY,MAAA,CAAO,QAAQ,KAAK,CAAA,CAAE,KAAK,CAAC,CAAC,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA,KAAM,EAAE,aAAA,CAAc,CAAC,CAAC,CAAC,CAAA;AAAA,IACxF;AAAA,GACF;AACF;AAEO,SAAS,UAAA,CAAW,MAAc,IAAA,EAA0B;AACjE,EAAA,MAAM,OAAA,GAA0B,CAAC,YAAA,EAAc,mBAAA,EAAqB,GAAI,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAA,GAAK,CAAC,KAAK,CAAA,GAAc,EAAG,CAAA;AAC9H,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAM,EAAE,YAAY,QAAA,EAAU,OAAA,EAAS,CAAA,CAAE,OAAA;AAC/D,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAoB;AACxC,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAoB;AACxC,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAyB;AAC1C,EAAA,MAAM,OAAA,GAAU,CAAC,IAAA,EAAc,IAAA,KAAoC,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,IAAA,GAAO,OAAA,CAAQ,IAAI,CAAA,mBAAI,IAAI,KAAK,CAAA;AAElH,EAAA,MAAM,gBAAA,GAAmB,CAAC,IAAA,KAA8C;AACtE,IAAA,IAAI,CAAC,IAAA,EAAM,OAAO,EAAC;AACnB,IAAA,QAAQ,KAAK,IAAA;AAAM,MACjB,KAAK,qBAAA;AAAA,MACL,KAAK,kBAAA;AACH,QAAA,IAAI,CAAC,IAAA,CAAK,EAAA,EAAI,OAAO,EAAC;AACtB,QAAA,OAAA,CAAQ,IAAA,CAAK,EAAA,CAAG,IAAA,EAAM,IAAI,CAAA;AAC1B,QAAA,OAAO,CAAC,IAAA,CAAK,EAAA,CAAG,IAAI,CAAA;AAAA,MACtB,KAAK,qBAAA;AACH,QAAA,OAAO,IAAA,CAAK,YAAA,CAAa,OAAA,CAAQ,CAAC,CAAA,KAAM;AACtC,UAAA,IAAI,CAAA,CAAE,EAAA,CAAG,IAAA,KAAS,YAAA,SAAqB,EAAC;AACxC,UAAA,OAAA,CAAQ,CAAA,CAAE,EAAA,CAAG,IAAA,EAAM,CAAA,CAAE,IAAI,CAAA;AACzB,UAAA,OAAO,CAAC,CAAA,CAAE,EAAA,CAAG,IAAI,CAAA;AAAA,QACnB,CAAC,CAAA;AAAA,MACH;AACE,QAAA,OAAO,EAAC;AAAA;AACZ,EACF,CAAA;AAEA,EAAA,KAAA,MAAW,IAAA,IAAQ,QAAQ,IAAA,EAAM;AAC/B,IAAA,QAAQ,KAAK,IAAA;AAAM,MACjB,KAAK,mBAAA;AACH,QAAA,IAAI,IAAA,CAAK,eAAe,MAAA,EAAQ;AAChC,QAAA,KAAA,MAAW,IAAA,IAAQ,KAAK,UAAA,EAAY;AAClC,UAAA,IAAI,IAAA,CAAK,IAAA,KAAS,iBAAA,IAAqB,IAAA,CAAK,eAAe,MAAA,EAAQ;AACnE,UAAA,MAAM,QAAA,GACJ,IAAA,CAAK,IAAA,KAAS,0BAAA,GAA6B,GAAA,GAAM,IAAA,CAAK,IAAA,KAAS,wBAAA,GAA2B,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA;AAC5H,UAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,EAAE,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,QAAA,EAAU,CAAA;AAAA,QACpE;AACA,QAAA;AAAA,MACF,KAAK,wBAAA;AACH,QAAA,IAAI,IAAA,CAAK,eAAe,MAAA,EAAQ;AAChC,QAAA,KAAA,MAAW,IAAA,IAAQ,gBAAA,CAAiB,IAAA,CAAK,WAAW,CAAA,EAAG,OAAA,CAAQ,GAAA,CAAI,IAAA,EAAM,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,MAAM,CAAA;AACvG,QAAA,KAAA,MAAW,IAAA,IAAQ,KAAK,UAAA,EAAY;AAClC,UAAA,IAAI,IAAA,CAAK,IAAA,KAAS,iBAAA,IAAqB,IAAA,CAAK,eAAe,MAAA,EAAQ;AACnE,UAAA,IAAI,IAAA,CAAK,SAAS,iBAAA,EAAmB;AACrC,UAAA,MAAM,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA;AACrC,UAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAC/B,UAAA,OAAA,CAAQ,IAAI,QAAA,EAAU,IAAA,CAAK,SAAS,EAAE,IAAA,EAAM,QAAQ,IAAA,EAAM,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,UAAU,KAAA,EAAM,GAAI,EAAE,IAAA,EAAM,OAAA,EAAS,OAAO,CAAA;AAAA,QAC3H;AACA,QAAA;AAAA,MACF,KAAK,sBAAA;AACH,QAAA,IAAI,KAAK,UAAA,KAAe,MAAA,QAAc,IAAA,CAAK,IAAA,CAAK,OAAO,KAAK,CAAA;AAC5D,QAAA;AAAA,MACF,KAAK,0BAAA,EAA4B;AAC/B,QAAA,MAAM,OAAO,IAAA,CAAK,WAAA;AAClB,QAAA,MAAM,KAAA,GAAA,CAAS,IAAA,CAAK,IAAA,KAAS,qBAAA,IAAyB,IAAA,CAAK,IAAA,KAAS,kBAAA,KAAuB,IAAA,CAAK,EAAA,GAAK,IAAA,CAAK,EAAA,CAAG,IAAA,GAAO,IAAA;AACpH,QAAA,IAAI,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAO,IAAI,CAAA;AAAA,aAAA,IACrB,IAAA,CAAK,SAAS,YAAA,EAAc;AACnC,UAAA,OAAA,CAAQ,GAAA,CAAI,WAAW,EAAE,IAAA,EAAM,SAAS,KAAA,EAAO,IAAA,CAAK,MAAM,CAAA;AAC1D,UAAA;AAAA,QACF,CAAA,MAAO,OAAA,CAAQ,aAAA,EAAe,IAAI,CAAA;AAClC,QAAA,OAAA,CAAQ,GAAA,CAAI,WAAW,EAAE,IAAA,EAAM,SAAS,KAAA,EAAO,KAAA,IAAS,eAAe,CAAA;AACvE,QAAA;AAAA,MACF;AAAA,MACA;AACE,QAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA;AACzB,EACF;AACA,EAAA,OAAO,EAAE,OAAA,EAAS,OAAA,EAAS,KAAA,EAAO,IAAA,EAAK;AACzC;AAEA,SAAS,OAAO,IAAA,EAA8C;AAC5D,EAAA,OAAO,IAAA,CAAK,IAAA,KAAS,YAAA,GAAe,IAAA,CAAK,OAAO,IAAA,CAAK,KAAA;AACvD;AAGA,SAAS,QAAQ,IAAA,EAA2B;AAC1C,EAAA,MAAM,GAAA,uBAAU,GAAA,EAAY;AAC5B,EAAA,MAAM,IAAA,GAAO,CAAC,KAAA,EAAgB,GAAA,KAAuB;AACnD,IAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA,EAAG;AAC7C,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,MAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,EAAO,IAAA,CAAK,IAAI,CAAA;AACnC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAC,SAAS,OAAO,KAAA,KAAU,YAAY,OAAQ,KAAA,CAA6B,SAAS,QAAA,EAAU;AACnG,IAAA,MAAM,CAAA,GAAI,KAAA;AACV,IAAA,IAAI,EAAE,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA,IAAK,EAAE,gBAAgB,CAAA,CAAA,EAAI;AACrD,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,YAAA,IAAgB,CAAA,CAAE,SAAS,eAAA,EAAiB;AACzD,MAAA,GAAA,CAAI,GAAA,CAAI,EAAE,IAAI,CAAA;AACd,MAAA;AAAA,IACF;AACA,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA,EAAG;AAC1C,MAAA,IAAI,MAAM,iBAAA,IAAqB,CAAA,KAAM,sBAAsB,CAAA,KAAM,eAAA,IAAmB,MAAM,KAAA,EAAO;AACjG,MAAA,IAAA,CAAK,CAAA,CAAE,IAAA,KAAS,kBAAA,IAAsB,CAAA,CAAE,IAAA,KAAS,+BAA+B,CAAA,KAAM,UAAA,IAAc,CAAC,CAAA,CAAE,QAAA,EAAU;AACjH,MAAA,IAAI,CAAA,CAAE,IAAA,KAAS,qBAAA,IAAyB,CAAA,KAAM,UAAA,EAAY;AAC1D,MAAA,IAAA,CAAK,EAAE,IAAA,KAAS,gBAAA,IAAoB,CAAA,CAAE,IAAA,KAAS,kBAAkB,CAAA,CAAE,IAAA,KAAS,aAAA,IAAiB,CAAA,CAAE,SAAS,eAAA,KAAoB,CAAA,KAAM,KAAA,IAAS,CAAC,EAAE,QAAA,EAAU;AACxJ,MAAA,IAAI,CAAA,CAAE,IAAA,KAAS,cAAA,IAAkB,CAAA,KAAM,MAAA,EAAQ;AAC/C,MAAA,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,IACf;AAAA,EACF,CAAA;AACA,EAAA,IAAA,CAAK,IAAI,CAAA;AACT,EAAA,OAAO,GAAA;AACT;AC9UO,IAAM,MAAA,GAAc,CAAC,IAAA,EAAM,GAAA,KAChC,IAAI,OAAA,CAAQ,CAAC,MAAM,IAAA,KAAS;AAC1B,EAAA,QAAA;AAAA,IAAS,KAAA;AAAA,IAAO,CAAC,IAAA,EAAM,oBAAA,EAAsB,GAAG,IAAI,CAAA;AAAA,IAAG,EAAE,GAAA,EAAK,SAAA,EAAW,CAAA,IAAK,EAAA,EAAG;AAAA,IAAG,CAAC,OAAO,MAAA,KAC1F,KAAA,GAAQ,KAAK,KAAK,CAAA,GAAI,KAAK,MAAM;AAAA,GACnC;AACF,CAAC,CAAA;AAGH,IAAM,UAAA,GAAa,wBAAA;AAeZ,SAAS,SAAA,CAAU,KAAa,KAAA,EAAkD;AACvF,EAAA,MAAM,GAAA,uBAAU,GAAA,EAAuB;AAEvC,EAAA,MAAM,KAAA,GAAQ,IAAI,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,CAAC,IAAA,EAAM,IAAI,CAAC,CAAC,CAAA;AACvD,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,IAAI,IAAA,GAAO,EAAA;AACX,EAAA,KAAA,MAAW,IAAA,IAAQ,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA,EAAG;AAClC,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACtB,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA,EAAG;AACzB,MAAA,CAAC,MAAA,GAAS,EAAA,EAAI,IAAA,GAAO,EAAE,CAAA,GAAI,KAAK,KAAA,CAAM,CAAC,CAAA,CAAE,KAAA,CAAM,GAAI,CAAA;AACnD,MAAA;AAAA,IACF;AACA,IAAA,MAAM,CAAC,MAAA,EAAQ,GAAG,KAAK,CAAA,GAAI,IAAA,CAAK,MAAM,GAAI,CAAA;AAC1C,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,EAAA,CAAG,EAAE,CAAA;AACxB,IAAA,MAAM,OAAO,IAAA,KAAS,MAAA,GAAY,MAAA,GAAY,KAAA,CAAM,IAAI,IAAI,CAAA;AAC5D,IAAA,IAAI,CAAC,MAAA,IAAU,IAAA,KAAS,MAAA,IAAa,SAAS,MAAA,EAAW;AACzD,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,GAAA,CAAI,IAAI,CAAA;AAC1B,IAAA,GAAA,CAAI,IAAI,IAAA,EAAM;AAAA,MACZ,OAAA,EAAS,IAAA;AAAA,MACT,QAAA,EAAU,OAAO,QAAA,IAAY,IAAA;AAAA,MAC7B,SAAA,EAAW,MAAA;AAAA,MACX,UAAA,EAAY,OAAO,UAAA,IAAc;AAAA,KAClC,CAAA;AACD,IAAA,MAAM,UAAU,MAAA,CAAO,UAAA,CAAW,GAAG,CAAA,GAAI,KAAA,CAAM,CAAC,CAAA,GAAI,MAAA;AACpD,IAAA,IAAI,WAAW,GAAA,IAAO,OAAA,KAAY,MAAA,EAAW,KAAA,CAAM,OAAO,IAAI,CAAA;AAC9D,IAAA,IAAI,OAAA,KAAY,MAAA,EAAW,KAAA,CAAM,GAAA,CAAI,SAAS,IAAI,CAAA;AAAA,EACpD;AACA,EAAA,OAAO,GAAA;AACT;AAGO,SAAS,UAAU,KAAA,EAA8B;AACtD,EAAA,MAAM,GAAA,GAAM,MAAM,IAAA,EAAK,CAAE,MAAM,MAAM,CAAA,CAAE,CAAC,CAAA,IAAK,EAAA;AAC7C,EAAA,OAAO,mCAAA,CAAoC,IAAA,CAAK,GAAG,CAAA,GAAI,CAAC,CAAA,IAAK,IAAA;AAC/D;AAGA,SAAS,SAAA,CAAU,MAAc,GAAA,EAA4B;AAC3D,EAAA,KAAA,IAAS,GAAA,GAAMC,OAAAA,CAAQ,IAAI,CAAA,EAAG,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAG,GAAA,GAAMA,OAAAA,CAAQ,GAAG,CAAA,EAAG;AACrE,IAAA,MAAM,QAAA,GAAWC,IAAAA,CAAK,GAAA,EAAK,cAAc,CAAA;AACzC,IAAA,IAAI,UAAA,CAAW,QAAQ,CAAA,EAAG;AACxB,MAAA,IAAI;AACF,QAAA,MAAM,OAAQ,IAAA,CAAK,KAAA,CAAM,aAAa,QAAA,EAAU,MAAM,CAAC,CAAA,CAAyB,IAAA;AAChF,QAAA,IAAI,OAAO,IAAA,KAAS,QAAA,EAAU,OAAO,IAAA;AAAA,MACvC,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AACA,IAAA,IAAI,QAAQ,GAAA,EAAK;AAAA,EACnB;AACA,EAAA,OAAO,IAAA;AACT;AAWO,SAAS,mBAAA,CAAoB,IAAA,EAAc,GAAA,GAAW,MAAA,EAAuB;AAClF,EAAA,IAAI,MAAA,GAA8F,IAAA;AAElG,EAAA,eAAe,KAAK,OAAA,EAAuE;AACzF,IAAA,MAAM,CAAC,GAAA,GAAM,EAAA,EAAI,MAAA,GAAS,EAAE,KAAK,MAAM,GAAA,CAAI,CAAC,WAAA,EAAa,mBAAmB,eAAe,CAAA,EAAG,IAAI,CAAA,EAAG,MAAM,IAAI,CAAA;AAC/G,IAAA,MAAM,SAAS,IAAI,GAAA,CAAI,QAAQ,GAAA,CAAI,CAAC,WAAW,CAAC,KAAA,CAAM,SAAA,CAAU,KAAA,CAAM,KAAK,MAAA,EAAQ,MAAM,CAAC,CAAA,EAAG,MAAM,CAAC,CAAC,CAAA;AACrG,IAAA,MAAM,GAAA,GAAM,MAAM,GAAA,CAAI,CAAC,OAAO,eAAA,EAAiB,IAAA,EAAM,UAAU,CAAA,EAAG,GAAG,CAAA;AACrE,IAAA,MAAM,KAAA,GAAQ,UAAU,GAAA,EAAK,CAAC,GAAG,MAAA,CAAO,IAAA,EAAM,CAAC,CAAA;AAG/C,IAAA,MAAM,SAAA,uBAAgB,GAAA,EAA6B;AACnD,IAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,IAAA,EAAK,EAAG;AAC/B,MAAA,MAAM,OAAO,SAAA,CAAU,OAAA,CAAQ,GAAA,EAAK,IAAI,GAAG,GAAG,CAAA;AAC9C,MAAA,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,CAAC,GAAI,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA,IAAK,EAAC,EAAI,IAAI,CAAC,CAAA;AAAA,IAC5D;AACA,IAAA,MAAM,UAA4C,EAAC;AACnD,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,SAAA,EAAW;AACrC,MAAA,MAAM,IAAA,GAAO,CAAC,SAAA,EAAW,QAAA,EAAU,GAAI,IAAA,KAAS,IAAA,GAAO,EAAC,GAAI,CAAC,GAAG,IAAI,CAAA,OAAA,CAAS,CAAE,CAAA,CAAE,GAAA,CAAI,CAAC,GAAA,KAAQ,CAAA,OAAA,EAAU,GAAG,CAAA,CAAE,CAAA;AAC7G,MAAA,MAAM,UAAU,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS,CAAC,KAAA,CAAM,GAAA,CAAI,IAAI,CAAA,CAAG,WAAW,KAAA,CAAM,GAAA,CAAI,IAAI,CAAA,CAAG,UAAU,CAAC,CAAA;AACjG,MAAA,MAAM,KAAA,GAAA,CAAS,MAAM,GAAA,CAAI,CAAC,YAAY,QAAA,EAAU,aAAA,EAAe,GAAG,IAAA,EAAM,GAAG,OAAO,CAAA,EAAG,GAAG,CAAA,EAAG,MAAM,IAAI,CAAA;AACrG,MAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,EAAM,CAAA,KAAM;AACzB,QAAA,MAAM,EAAE,OAAA,EAAS,QAAA,EAAS,GAAI,KAAA,CAAM,IAAI,IAAI,CAAA;AAC5C,QAAA,OAAA,CAAQ,MAAA,CAAO,GAAA,CAAI,IAAI,CAAE,CAAA,GAAI;AAAA,UAC3B,OAAA;AAAA,UACA,QAAA;AAAA,UACA,YAAY,SAAA,CAAU,KAAA,CAAM,CAAA,GAAI,CAAC,KAAK,EAAE,CAAA;AAAA,UACxC,YAAY,SAAA,CAAU,KAAA,CAAM,IAAI,CAAA,GAAI,CAAC,KAAK,EAAE;AAAA,SAC9C;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,MAAM,KAAK,OAAA,EAAS;AAClB,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAA,CAAQ,MAAM,GAAA,CAAI,CAAC,aAAa,MAAM,CAAA,EAAG,IAAI,CAAA,EAAG,IAAA,EAAK;AAC3D,QAAA,MAAM,GAAA,GAAM,CAAC,GAAG,OAAO,EAAE,IAAA,EAAK,CAAE,KAAK,IAAI,CAAA;AACzC,QAAA,IAAI,MAAA,EAAQ,IAAA,KAAS,IAAA,IAAQ,MAAA,CAAO,YAAY,GAAA,EAAK,MAAA,GAAS,EAAE,IAAA,EAAM,SAAS,GAAA,EAAK,OAAA,EAAS,MAAM,IAAA,CAAK,OAAO,CAAA,EAAE;AACjH,QAAA,OAAO,MAAA,CAAO,OAAA;AAAA,MAChB,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,EAAC;AAAA,MACV;AAAA,IACF;AAAA,GACF;AACF;ACpIO,SAAS,SAAA,CAAU,MAAc,IAAA,EAAyB;AAC/D,EAAA,MAAM,OAAA,GAA0B,CAAC,YAAA,EAAc,mBAAA,EAAqB,GAAI,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA,GAAK,CAAC,KAAK,CAAA,GAAc,EAAG,CAAA;AACzH,EAAA,OAAOC,MAAM,IAAA,EAAM,EAAE,YAAY,QAAA,EAAU,OAAA,EAAS,CAAA,CAAE,OAAA;AACxD;AAGO,SAAS,QAAA,CAAS,IAAA,EAA0B,QAAA,EAAoB,KAAA,GAAQ,CAAA,EAAuB;AACpG,EAAA,IAAI,CAAC,IAAA,IAAQ,KAAA,GAAQ,EAAA,EAAI,OAAO,MAAA;AAChC,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,uBAAA;AAAA,IACL,KAAK,gBAAA;AAAA,IACL,KAAK,iBAAA;AAAA,IACL,KAAK,qBAAA;AAAA,IACL,KAAK,yBAAA;AACH,MAAA,OAAO,QAAA,CAAS,IAAA,CAAK,UAAA,EAAY,QAAA,EAAU,QAAQ,CAAC,CAAA;AAAA,IACtD,KAAK,gBAAA;AACH,MAAA,OAAO,KAAK,MAAA,CAAO,IAAA,KAAS,YAAA,GAAe,IAAA,CAAK,OAAO,IAAA,GAAO,MAAA;AAAA,IAChE,KAAK,YAAA;AACH,MAAA,OAAO,QAAA,CAAS,SAAS,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG,QAAA,EAAU,QAAQ,CAAC,CAAA;AAAA,IAC9D;AACE,MAAA,OAAO,MAAA;AAAA;AAEb;AAEA,IAAM,QAAA,uBAAoC,GAAA,CAAI;AAAA,EAC5C,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,yBAAA;AAAA,EACA,oBAAA;AAAA,EACA,qBAAA;AAAA,EACA,iBAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAC,CAAA;AAGM,SAAS,cAAA,CAAe,IAAA,EAA0B,QAAA,EAAoB,KAAA,GAAQ,CAAA,EAAY;AAC/F,EAAA,IAAI,CAAC,IAAA,IAAQ,KAAA,GAAQ,EAAA,EAAI,OAAO,KAAA;AAChC,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,uBAAA;AAAA,IACL,KAAK,gBAAA;AAAA,IACL,KAAK,iBAAA;AAAA,IACL,KAAK,qBAAA;AAAA,IACL,KAAK,yBAAA;AACH,MAAA,OAAO,cAAA,CAAe,IAAA,CAAK,UAAA,EAAY,QAAA,EAAU,QAAQ,CAAC,CAAA;AAAA,IAC5D,KAAK,YAAA;AACH,MAAA,OAAO,cAAA,CAAe,SAAS,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG,QAAA,EAAU,QAAQ,CAAC,CAAA;AAAA,IACpE,KAAK,kBAAA;AAEH,MAAA,OAAO,KAAK,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,eAAe,CAAA;AAAA,IAChE;AACE,MAAA,OAAO,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA;AAAA;AAEnC;AAGO,SAAS,cAAc,IAAA,EAAkC;AAC9D,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,eAAA,EAAiB,OAAO,IAAA,CAAK,KAAA;AAC/C,EAAA,IAAI,IAAA,CAAK,SAAS,iBAAA,IAAqB,IAAA,CAAK,YAAY,MAAA,KAAW,CAAA,SAAU,IAAA,CAAK,MAAA,CAAO,IAAI,CAAC,CAAA,KAAM,EAAE,KAAA,CAAM,MAAA,IAAU,EAAE,KAAA,CAAM,GAAG,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA;AAC1I,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,QAAA,CAAS,IAAA,EAA0B,QAAA,EAAoB,KAAA,GAAQ,CAAA,EAAuB;AACpG,EAAA,IAAI,CAAC,IAAA,IAAQ,KAAA,GAAQ,EAAA,EAAI,OAAO,MAAA;AAChC,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,uBAAA;AAAA,IACL,KAAK,gBAAA;AAAA,IACL,KAAK,iBAAA;AAAA,IACL,KAAK,qBAAA;AAAA,IACL,KAAK,yBAAA;AACH,MAAA,OAAO,QAAA,CAAS,IAAA,CAAK,UAAA,EAAY,QAAA,EAAU,QAAQ,CAAC,CAAA;AAAA,IACtD,KAAK,YAAA;AACH,MAAA,OAAO,QAAA,CAAS,SAAS,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG,QAAA,EAAU,QAAQ,CAAC,CAAA;AAAA,IAC9D;AACE,MAAA,OAAO,cAAc,IAAI,CAAA;AAAA;AAE/B;AAEO,SAAS,gBAAgB,IAAA,EAA4B;AAC1D,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,0BAAA,EAA4B,OAAO,IAAA;AACrD,EAAA,OACE,IAAA,CAAK,IAAA,KAAS,wBAAA,IACd,IAAA,CAAK,WAAW,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,iBAAA,IAAqB,YAAA,CAAa,CAAA,CAAE,QAAQ,MAAM,SAAS,CAAA;AAEtG;AAOO,SAAS,MAAM,IAAA,EAAkC;AACtD,EAAA,MAAM,WAAW,IAAA,CAAK,eAAA;AACtB,EAAA,MAAM,IAAA,GAAO,QAAA,GAAW,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AAC3C,EAAA,IAAI,IAAA,EAAM,SAAS,cAAA,IAAkB,CAAC,KAAK,KAAA,CAAM,UAAA,CAAW,GAAG,CAAA,EAAG,OAAO,MAAA;AACzE,EAAA,MAAM,IAAA,GAAO,KAAK,KAAA,CACf,KAAA,CAAM,CAAC,CAAA,CACP,KAAA,CAAM,IAAI,CAAA,CACV,GAAA,CAAI,CAAC,SAAS,IAAA,CAAK,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA,CAAE,IAAA,EAAM,CAAA,CAC/C,IAAA,CAAK,IAAI,CAAA,CACT,IAAA,EAAK;AACR,EAAA,OAAO,IAAA,IAAQ,MAAA;AACjB;AAEO,SAAS,aAAa,IAAA,EAA8C;AACzE,EAAA,OAAO,IAAA,CAAK,IAAA,KAAS,YAAA,GAAe,IAAA,CAAK,OAAO,IAAA,CAAK,KAAA;AACvD;AAGO,SAAS,QAAA,CAAS,IAAA,EAA0B,QAAA,EAAoB,QAAA,EAAuB,QAAQ,CAAA,EAA8B;AAClI,EAAA,IAAI,CAAC,IAAA,IAAQ,KAAA,GAAQ,EAAA,EAAI,OAAO,IAAA;AAChC,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,kBAAA;AACH,MAAA,OAAO,IAAA;AAAA,IACT,KAAK,uBAAA;AAAA,IACL,KAAK,gBAAA;AAAA,IACL,KAAK,iBAAA;AAAA,IACL,KAAK,qBAAA;AAAA,IACL,KAAK,yBAAA;AACH,MAAA,OAAO,SAAS,IAAA,CAAK,UAAA,EAAY,QAAA,EAAU,QAAA,EAAU,QAAQ,CAAC,CAAA;AAAA,IAChE,KAAK,gBAAA;AACH,MAAA,OAAO,KAAK,MAAA,CAAO,IAAA,KAAS,gBAAgB,QAAA,CAAS,GAAA,CAAI,KAAK,MAAA,CAAO,IAAI,IACrE,QAAA,CAAS,IAAA,CAAK,UAAU,CAAC,CAAA,EAAG,UAAU,QAAA,EAAU,KAAA,GAAQ,CAAC,CAAA,GACzD,IAAA;AAAA,IACN,KAAK,YAAA;AACH,MAAA,OAAO,QAAA,CAAS,SAAS,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG,QAAA,EAAU,QAAA,EAAU,KAAA,GAAQ,CAAC,CAAA;AAAA,IACxE;AACE,MAAA,OAAO,IAAA;AAAA;AAEb;AAEO,SAAS,IAAA,CAAK,KAAgC,GAAA,EAAiC;AACpF,EAAA,KAAA,MAAW,CAAA,IAAK,GAAA,EAAK,UAAA,IAAc,EAAC,EAAG;AACrC,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,gBAAA,IAAoB,CAAA,CAAE,QAAA,EAAU;AAC/C,IAAA,MAAM,IAAA,GAAO,CAAA,CAAE,GAAA,CAAI,IAAA,KAAS,eAAe,CAAA,CAAE,GAAA,CAAI,IAAA,GAAO,CAAA,CAAE,GAAA,CAAI,IAAA,KAAS,eAAA,GAAkB,CAAA,CAAE,IAAI,KAAA,GAAQ,IAAA;AACvG,IAAA,IAAI,IAAA,KAAS,GAAA,EAAK,OAAO,CAAA,CAAE,KAAA;AAAA,EAC7B;AACA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,UAAA,CAAW,KAAgC,GAAA,EAAiC;AAC1F,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,EAAK,GAAG,CAAA;AAC3B,EAAA,OAAO,KAAA,EAAO,IAAA,KAAS,eAAA,GAAkB,KAAA,CAAM,KAAA,GAAQ,MAAA;AACzD;;;ACvJO,IAAM,IAAA,GAAO,CAAC,IAAA,KACnB,IAAA,EAAM,IAAA,KAAS,6BAA6B,IAAA,EAAM,IAAA,KAAS,oBAAA,IAAwB,IAAA,EAAM,IAAA,KAAS,qBAAA;AAmB7F,IAAM,WAAA,GAAc,CAAC,KAAA,MAAoC;AAAA,EAC9D,KAAA,EAAO,CAAC,IAAA,KAAS,KAAA,CAAM,OAAO,IAAI,CAAA;AAAA,EAClC,IAAA,EAAM,CAAC,IAAA,KAAS,KAAA,CAAM,MAAM,IAAI,CAAA;AAAA,EAChC,QAAA,EAAU,CAAC,IAAA,KAAS,KAAA,CAAM,UAAU,IAAI;AAC1C,CAAA,CAAA;AAUA,SAAS,YAAA,CAAa,UAAA,EAAoC,KAAA,EAAc,KAAA,EAAwB;AAC9F,EAAA,OAAO,UAAA,CAAW,IAAA,CAAK,CAAC,IAAA,KAAS;AAC/B,IAAA,IAAI,IAAA,CAAK,SAAS,iBAAA,EAAmB,OAAO,WAAW,IAAA,CAAK,QAAA,IAAY,MAAA,EAAW,KAAA,EAAO,KAAK,CAAA;AAC/F,IAAA,IAAI,IAAA,CAAK,SAAS,gBAAA,EAAkB,OAAO,aAAa,IAAA,CAAK,IAAA,EAAM,OAAO,KAAK,CAAA;AAC/E,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,aAAA,EAAe,OAAO,KAAA;AACxC,IAAA,OAAO,YAAA,CAAa,CAAC,IAAA,CAAK,UAAA,EAAY,GAAI,IAAA,CAAK,SAAA,GAAY,CAAC,IAAA,CAAK,SAAS,CAAA,GAAI,EAAG,CAAA,EAAG,OAAO,KAAK,CAAA;AAAA,EAClG,CAAC,CAAA;AACH;AAGO,SAAS,cAAA,CAAe,EAAA,EAAQ,KAAA,EAAc,KAAA,GAAQ,CAAA,EAAY;AACvE,EAAA,OAAO,GAAG,IAAA,CAAK,IAAA,KAAS,gBAAA,GAAmB,YAAA,CAAa,GAAG,IAAA,CAAK,IAAA,EAAM,KAAA,EAAO,KAAA,GAAQ,CAAC,CAAA,GAAI,UAAA,CAAW,GAAG,IAAA,EAAM,KAAA,EAAO,QAAQ,CAAC,CAAA;AAChI;AAOO,SAAS,UAAA,CAAW,IAAA,EAA0B,KAAA,EAAc,KAAA,GAAQ,CAAA,EAAY;AACrF,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,IAAI,KAAA,GAAQ,IAAI,OAAO,KAAA;AACvB,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,uBAAA;AAAA,IACL,KAAK,gBAAA;AAAA,IACL,KAAK,iBAAA;AAAA,IACL,KAAK,qBAAA;AAAA,IACL,KAAK,yBAAA;AACH,MAAA,OAAO,UAAA,CAAW,IAAA,CAAK,UAAA,EAAY,KAAA,EAAO,QAAQ,CAAC,CAAA;AAAA,IACrD,KAAK,YAAA;AACH,MAAA,OAAO,KAAA,CAAM,SAAS,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,GAC/B,UAAA,CAAW,KAAA,CAAM,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG,KAAA,EAAO,QAAQ,CAAC,CAAA,GACzD,MAAM,OAAA,EAAS,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,IAAK,IAAA;AAAA,IAC1C,KAAK,gBAAA,EAAkB;AACrB,MAAA,IAAI,IAAA,CAAK,MAAA,CAAO,IAAA,KAAS,YAAA,EAAc,OAAO,KAAA;AAC9C,MAAA,IAAI,MAAM,QAAA,CAAS,GAAA,CAAI,KAAK,MAAA,CAAO,IAAI,GAAG,OAAO,IAAA;AACjD,MAAA,MAAM,KAAK,KAAA,CAAM,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,OAAO,IAAI,CAAA;AAC9C,MAAA,IAAI,KAAK,EAAE,CAAA,SAAU,cAAA,CAAe,EAAA,EAAI,OAAO,KAAK,CAAA;AACpD,MAAA,OAAO,CAAC,KAAA,CAAM,QAAA,CAAS,GAAA,CAAI,KAAK,MAAA,CAAO,IAAI,CAAA,KAAM,KAAA,CAAM,OAAA,EAAS,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA,IAAK,KAAA,CAAA;AAAA,IAC5F;AAAA,IACA,KAAK,uBAAA;AACH,MAAA,OAAO,UAAA,CAAW,IAAA,CAAK,UAAA,EAAY,KAAA,EAAO,KAAA,GAAQ,CAAC,CAAA,IAAK,UAAA,CAAW,IAAA,CAAK,SAAA,EAAW,KAAA,EAAO,KAAA,GAAQ,CAAC,CAAA;AAAA,IACrG,KAAK,mBAAA;AACH,MAAA,OAAO,UAAA,CAAW,IAAA,CAAK,IAAA,EAAM,KAAA,EAAO,KAAA,GAAQ,CAAC,CAAA,IAAK,UAAA,CAAW,IAAA,CAAK,KAAA,EAAO,KAAA,EAAO,KAAA,GAAQ,CAAC,CAAA;AAAA,IAC3F,KAAK,kBAAA;AAEH,MAAA,OAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,eAAA,IAAmB,UAAA,CAAW,CAAA,CAAE,QAAA,EAAU,KAAA,EAAO,KAAA,GAAQ,CAAC,CAAC,CAAA;AAAA,IAC3G;AACE,MAAA,OAAO,CAAC,cAAA,CAAe,IAAA,EAAM,KAAA,CAAM,QAAQ,CAAA;AAAA;AAEjD;;;ACjEO,SAAS,SAAA,CACd,MACA,IAAA,EACAC,UAAAA,EACA,2BAAgC,IAAI,GAAA,IACpC,OAAA,EACc;AACd,EAAA,IAAI;AACF,IAAA,OAAO,YAAA,CAAa,UAAU,IAAA,EAAM,IAAI,GAAG,IAAA,EAAMA,UAAAA,EAAW,UAAU,OAAO,CAAA;AAAA,EAC/E,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,eAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA,EAAI,EAAE,KAAA,EAAO,KAAK,CAAA;AAAA,EAChG;AACF;AAaO,SAAS,cAAA,CAAe,MAAc,IAAA,EAA+B;AAC1E,EAAA,MAAM,OAAA,GAAU,SAAA,CAAU,IAAA,EAAM,IAAI,CAAA;AACpC,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,KAAK,OAAA,kBAAS,IAAI,KAAK,CAAA;AAC5C,EAAA,MAAM,QAAA,uBAAe,GAAA,EAA2B;AAChD,EAAA,MAAM,WAA0C,EAAC;AACjD,EAAA,KAAA,MAAW,IAAA,IAAQ,QAAQ,IAAA,EAAM;AAC/B,IAAA,IAAI,IAAA,CAAK,SAAS,mBAAA,IAAuB,IAAA,CAAK,eAAe,MAAA,IAAU,IAAA,CAAK,MAAA,CAAO,KAAA,KAAU,kBAAA,EAAoB;AAC/G,MAAA,KAAA,MAAW,IAAA,IAAQ,KAAK,UAAA,EAAY;AAClC,QAAA,IAAI,IAAA,CAAK,SAAS,0BAAA,IAA+B,IAAA,CAAK,SAAS,iBAAA,IAAqB,IAAA,CAAK,eAAe,MAAA,EAAS;AACjH,QAAA,MAAM,OAAO,IAAA,CAAK,IAAA,KAAS,2BAA2B,SAAA,GAAY,YAAA,CAAa,KAAK,QAAQ,CAAA;AAC5F,QAAA,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,QAAA,EAAU,MAAM,CAAA;AAAA,MACnG;AAAA,IACF;AACA,IAAA,IAAI,KAAK,IAAA,KAAS,0BAAA,EAA4B,QAAA,CAAS,IAAA,CAAK,KAAK,WAAW,CAAA;AAC5E,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,wBAAA,IAA4B,IAAA,CAAK,eAAe,MAAA,EAAQ;AAC1E,IAAA,IAAI,IAAA,CAAK,WAAA,EAAa,IAAA,KAAS,qBAAA,WAAgC,IAAA,CAAK,GAAG,IAAA,CAAK,WAAA,CAAY,aAAa,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAC,CAAA;AACvH,IAAA,IAAI,KAAK,MAAA,EAAQ;AACjB,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,UAAA,EAAY,IAAI,KAAK,IAAA,KAAS,iBAAA,EAAmB,QAAA,CAAS,IAAA,CAAK,SAAS,GAAA,CAAI,YAAA,CAAa,IAAA,CAAK,KAAK,CAAC,CAAC,CAAA;AAAA,EAC/H;AACA,EAAA,MAAM,KAAA,uBAAY,GAAA,EAA2B;AAC7C,EAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AAC3B,IAAA,MAAM,GAAA,GAAM,SAAS,GAAA,CAAI,QAAA,CAAS,QAAQ,MAAA,EAAW,QAAQ,KAAK,EAAE,CAAA;AACpE,IAAA,IAAI,GAAA,EAAK,KAAA,CAAM,GAAA,CAAI,GAAA,CAAI,OAAO,GAAG,CAAA;AAAA,EACnC;AACA,EAAA,OAAO,CAAC,GAAG,KAAA,CAAM,MAAA,EAAQ,CAAA;AAC3B;AAGO,SAAS,IAAA,CAAK,SAAoB,KAAA,EAA2E;AAClH,EAAA,MAAM,QAAA,uBAAyB,GAAA,EAAI;AACnC,EAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,KAAK,CAAA;AAC9B,EAAA,KAAA,MAAW,IAAA,IAAQ,QAAQ,IAAA,EAAM;AAC/B,IAAA,IAAI,KAAK,IAAA,KAAS,mBAAA,IAAuB,IAAA,CAAK,MAAA,CAAO,UAAU,kBAAA,EAAoB;AACjF,MAAA,KAAA,MAAW,IAAA,IAAQ,KAAK,UAAA,EAAY;AAClC,QAAA,IAAI,IAAA,CAAK,IAAA,KAAS,iBAAA,IAAqB,CAAC,MAAA,EAAQ,OAAO,CAAA,CAAE,QAAA,CAAS,YAAA,CAAa,IAAA,CAAK,QAAQ,CAAC,CAAA,EAAG;AAC9F,UAAA,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAAA,QAC9B;AAAA,MACF;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,KAAS,wBAAA,GAA2B,KAAK,WAAA,GAAc,IAAA;AACzE,IAAA,IAAI,IAAA,EAAM,SAAS,qBAAA,EAAuB;AACxC,MAAA,KAAA,MAAW,KAAK,IAAA,CAAK,YAAA,EAAc,IAAI,CAAA,CAAE,GAAG,IAAA,KAAS,YAAA,IAAgB,CAAA,CAAE,IAAA,WAAe,GAAA,CAAI,CAAA,CAAE,EAAA,CAAG,IAAA,EAAM,EAAE,IAAI,CAAA;AAAA,IAC7G,CAAA,MAAA,IAAW,IAAA,EAAM,IAAA,KAAS,qBAAA,IAAyB,KAAK,EAAA,EAAI;AAC1D,MAAA,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,EAAA,CAAG,IAAA,EAAM,IAAI,CAAA;AAAA,IACjC;AAAA,EACF;AACA,EAAA,OAAO,EAAE,UAAU,QAAA,EAAS;AAC9B;AAEO,SAAS,YAAA,CAAa,OAAA,EAAoB,IAAA,EAAcA,UAAAA,EAAmB,OAA4B,OAAA,EAAiC;AAC7I,EAAA,MAAM,EAAE,QAAA,EAAU,QAAA,EAAS,GAAI,IAAA,CAAK,SAAS,KAAK,CAAA;AAElD,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI,OAAA;AAEJ,EAAA,MAAM,WAAkG,EAAC;AACzG,EAAA,KAAA,MAAW,IAAA,IAAQ,QAAQ,IAAA,EAAM;AAC/B,IAAA,IAAI,IAAA,CAAK,SAAS,0BAAA,EAA4B;AAC5C,MAAA,QAAA,GAAW,IAAA,CAAK,WAAA;AAChB,MAAA,OAAA,GAAU,MAAM,IAAI,CAAA;AAAA,IACtB;AACA,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,wBAAA,IAA4B,IAAA,CAAK,eAAe,MAAA,EAAQ;AAC1E,IAAA,MAAM,GAAA,GAAM,MAAM,IAAI,CAAA;AACtB,IAAA,MAAM,OAAO,IAAA,CAAK,WAAA;AAClB,IAAA,IAAI,IAAA,EAAM,SAAS,qBAAA,EAAuB;AACxC,MAAA,KAAA,MAAW,CAAA,IAAK,KAAK,YAAA,EAAc;AACjC,QAAA,IAAI,CAAA,CAAE,GAAG,IAAA,KAAS,YAAA,WAAuB,IAAA,CAAK,EAAE,MAAM,CAAA,CAAE,EAAA,CAAG,MAAM,IAAA,EAAM,CAAA,CAAE,QAAQ,MAAA,EAAW,GAAA,EAAK,MAAM,CAAC,CAAA,IAAK,KAAK,CAAA;AAAA,MACpH;AAAA,IACF,CAAA,MAAA,IAAW,IAAA,EAAM,IAAA,KAAS,qBAAA,IAAyB,KAAK,EAAA,EAAI;AAC1D,MAAA,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,IAAA,CAAK,GAAG,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,GAAA,EAAK,CAAA;AAAA,IACvD;AACA,IAAA,KAAA,MAAW,IAAA,IAAQ,KAAK,UAAA,EAAY;AAClC,MAAA,IAAI,IAAA,CAAK,IAAA,KAAS,iBAAA,IAAqB,IAAA,CAAK,eAAe,MAAA,EAAQ;AACnE,MAAA,MAAM,IAAA,GAAO,YAAA,CAAa,IAAA,CAAK,QAAQ,CAAA;AACvC,MAAA,MAAM,IAAA,GAAO,KAAK,MAAA,GAAS,MAAA,GAAY,SAAS,GAAA,CAAI,YAAA,CAAa,IAAA,CAAK,KAAK,CAAC,CAAA;AAC5E,MAAA,IAAI,SAAS,SAAA,EAAW;AACtB,QAAA,QAAA,GAAW,IAAA;AACX,QAAA,OAAA,KAAY,GAAA;AAAA,MACd,CAAA,MAAA,IAAW,IAAA,CAAK,MAAA,EAAQ,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,IAAA,EAAM,GAAA,EAAK,IAAA,EAAM,IAAA,EAAM,CAAA;AAAA,WAEhE,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,MAAM,IAAA,KAAS,IAAA,CAAK,KAAA,CAAM,IAAA,KAAS,YAAA,GAAe,IAAA,CAAK,KAAA,GAAQ,MAAA,CAAA,EAAY,KAAK,CAAA;AAAA,IAC7G;AAAA,EACF;AACA,EAAA,IAAI,CAAC,YAAY,CAAC,OAAA,CAAQ,KAAK,IAAA,CAAK,eAAe,CAAA,EAAG,OAAO,EAAC;AAE9D,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,QAAA,EAAU,QAAA,EAAU,QAAQ,CAAA;AAClD,EAAA,MAAM,QAAQ,QAAA,CAAS,IAAA,CAAK,MAAM,OAAO,CAAA,EAAG,QAAQ,CAAA,IAAKA,UAAAA;AACzD,EAAA,MAAM,OAAA,GAAU,WAAA,CAAY,IAAA,EAAM,gBAAgB,CAAA;AAClD,EAAA,MAAM,OAAA,GAAU,WAAA,CAAY,IAAA,EAAM,gBAAgB,CAAA;AAClD,EAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,IAAA,EAAM,WAAW,CAAA;AAC5C,EAAA,MAAM,aAAA,GAAgB,aAAA,EAAe,IAAA,KAAS,YAAA,GAAe,cAAc,IAAA,GAAO,MAAA;AAClF,EAAA,MAAM,WAAA,GAAc,SAAA,CAAU,IAAA,EAAM,QAAA,EAAU,UAAU,SAAS,CAAA;AACjE,EAAA,MAAM,QAAA,GAAW,OAAO,IAAI,CAAA;AAC5B,EAAA,MAAM,SAAS,QAAA,CAAS,GAAA,CAAI,SAAS,QAAA,EAAU,QAAQ,KAAK,EAAE,CAAA;AAE9D,EAAA,OAAO,QAAA,CACJ,MAAA,CAAO,CAAC,EAAE,IAAA,OAAW,IAAA,KAAS,qBAAqB,CAAA,CACnD,MAAA,CAAO,CAAC,EAAE,MAAK,KAAA,CAAO,CAAC,OAAA,IAAW,OAAA,CAAQ,IAAI,CAAA,MAAO,CAAC,OAAA,IAAW,CAAC,OAAA,CAAQ,IAAI,CAAA,CAAE,CAAA,CAChF,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,MAAA,KAAW,CAAA,CAAE,IAAA,GAAQ,OAAA,EAAS,QAAA,CAAS,CAAA,CAAE,IAAI,CAAA,IAAK,IAAA,GAAQ,UAAA,CAAW,CAAA,CAAE,IAAA,EAAM,EAAE,QAAA,EAAU,QAAA,EAAU,OAAA,EAAS,CAAA,CAAE,CAAA,CAC7H,GAAA,CAAI,CAAC,EAAE,IAAA,EAAM,IAAA,EAAM,GAAA,EAAI,KAAM;AAC5B,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,IAAA,EAAM,QAAA,EAAU,QAAQ,CAAA;AAC9C,IAAA,MAAM,UAAU,SAAA,CAAU,IAAA,EAAM,QAAA,EAAU,QAAA,EAAU,IAAI,CAAA,IAAK,WAAA;AAC7D,IAAA,MAAM,IAAA,GAAO,WAAA,CAAY,QAAA,EAAU,MAAA,CAAO,IAAI,CAAC,CAAA;AAC/C,IAAA,MAAM,WAAW,MAAA,GAAS,UAAA,CAAW,IAAA,EAAM,QAAA,EAAU,QAAQ,CAAA,GAAI,MAAA;AACjE,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,OAAA,CAAQ,KAAA,EAAO,IAAI,CAAA;AAAA,MACvB,KAAA;AAAA,MACA,IAAA,EAAM,UAAA,CAAW,IAAA,EAAM,MAAM,CAAA,IAAK,WAAW,IAAA,EAAM,WAAW,CAAA,IAAK,mBAAA,CAAoB,IAAI,CAAA;AAAA,MAC3F,UAAA,EAAY,IAAA;AAAA,MACZ,IAAA;AAAA,MACA,GAAI,GAAA,KAAQ,MAAA,GAAY,EAAC,GAAI,EAAE,aAAa,GAAA,EAAI;AAAA,MAChD,GAAI,OAAA,KAAY,MAAA,GAAY,EAAC,GAAI,EAAE,sBAAsB,OAAA,EAAQ;AAAA,MACjE,GAAI,aAAA,KAAkB,MAAA,GAAY,EAAC,GAAI,EAAE,aAAA,EAAc;AAAA,MACvD,GAAI,OAAA,KAAY,MAAA,GAAY,EAAC,GAAI,EAAE,OAAA,EAAQ;AAAA,MAC3C,GAAI,QAAA,KAAa,MAAA,GAAY,EAAC,GAAI,EAAE,QAAA,EAAS;AAAA,MAC7C,GAAI,IAAA,KAAS,MAAA,GAAY,EAAC,GAAI,EAAE,IAAA;AAAK,KACvC;AAAA,EACF,CAAC,CAAA;AACL;AAMA,SAAS,SAAA,CAAU,GAAA,EAAgC,QAAA,EAAoB,QAAA,EAAuB,UAAA,EAAwC;AACpI,EAAA,MAAM,aAAa,QAAA,CAAS,IAAA,CAAK,KAAK,YAAY,CAAA,EAAG,UAAU,QAAQ,CAAA;AACvE,EAAA,MAAMC,SAAQ,QAAA,CAAS,IAAA,CAAK,YAAY,OAAO,CAAA,EAAG,UAAU,QAAQ,CAAA;AACpE,EAAA,MAAM,QAAQ,IAAA,CAAK,GAAA,EAAK,SAAS,CAAA,IAAK,IAAA,CAAKA,QAAO,SAAS,CAAA;AAC3D,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,MAAA;AAChC,EAAA,MAAM,OAAA,GAAU,cAAc,KAAK,CAAA;AACnC,EAAA,IAAI,YAAY,MAAA,EAAW,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,UAAU,CAAA,kCAAA,CAAoC,CAAA;AAC5F,EAAA,OAAO,OAAA;AACT;AAGA,SAAS,UAAA,CAAW,GAAA,EAAgC,QAAA,EAAoB,QAAA,EAA6C;AACnH,EAAA,MAAM,QAAQ,QAAA,CAAS,IAAA,CAAK,KAAK,UAAU,CAAA,EAAG,UAAU,QAAQ,CAAA;AAChE,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,EAAO,OAAO,CAAA;AACjC,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,EAAO,QAAQ,CAAA;AACnC,EAAA,OAAO,KAAA,EAAO,IAAA,KAAS,gBAAA,IAAoB,MAAA,EAAQ,IAAA,KAAS,gBAAA,GACxD,EAAE,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,MAAA,EAAQ,MAAA,CAAO,OAAM,GAC3C,MAAA;AACN;AAGA,SAAS,OAAO,GAAA,EAAsD;AACpE,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,EAAK,MAAM,CAAA;AAC9B,EAAA,IAAI,KAAA,EAAO,IAAA,KAAS,iBAAA,EAAmB,OAAO,MAAA;AAC9C,EAAA,OAAO,KAAA,CAAM,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAA,KAAO,CAAA,GAAK,aAAA,CAAc,CAAC,CAAA,IAAK,EAAC,GAAK,EAAG,CAAA;AAC1E;AAGA,SAAS,WAAA,CAAY,MAA4B,GAAA,EAAiD;AAChG,EAAA,IAAI,IAAA,KAAS,MAAA,IAAa,GAAA,KAAQ,MAAA,EAAW,OAAO,MAAA;AACpD,EAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,IAAI,CAAA;AACxB,EAAA,KAAA,MAAW,GAAA,IAAO,GAAA,IAAO,EAAC,EAAG;AAC3B,IAAA,IAAI,GAAA,CAAI,WAAW,GAAG,CAAA,MAAO,MAAA,CAAO,GAAA,CAAI,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,SAC3C,GAAA,CAAI,IAAI,GAAG,CAAA;AAAA,EAClB;AACA,EAAA,OAAO,CAAC,GAAG,GAAG,CAAA;AAChB;AAGA,SAAS,WAAA,CAAY,KAAgC,GAAA,EAAiD;AACpG,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,EAAK,GAAG,CAAA;AAC3B,EAAA,IAAI,KAAA,EAAO,SAAS,eAAA,EAAiB;AACnC,IAAA,MAAM,EAAA,GAAK,IAAI,MAAA,CAAO,KAAA,CAAM,OAAA,EAAS,MAAM,KAAA,CAAM,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAC,CAAA;AACrE,IAAA,OAAO,CAAC,IAAA,KAAS,EAAA,CAAG,IAAA,CAAK,IAAI,CAAA;AAAA,EAC/B;AACA,EAAA,IAAI,KAAA,EAAO,IAAA,KAAS,iBAAA,IAAqB,KAAA,CAAM,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA,KAAM,CAAA,EAAG,IAAA,KAAS,eAAe,CAAA,EAAG;AACjG,IAAA,MAAM,KAAA,GAAQ,IAAI,GAAA,CAAI,KAAA,CAAM,QAAA,CAAS,IAAI,CAAC,CAAA,KAAO,CAAA,CAAsB,KAAK,CAAC,CAAA;AAC7E,IAAA,OAAO,CAAC,IAAA,KAAS,KAAA,CAAM,GAAA,CAAI,IAAI,CAAA;AAAA,EACjC;AACA,EAAA,OAAO,IAAA;AACT;ACzNO,SAAS,WAAA,CAAY,MAAc,OAAA,EAAgD;AACxF,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,CAAC,OAAA,KAAY,WAAA,CAAY,IAAA,EAAM,OAAA,CAAQ,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAC,CAAC,CAAA;AAClF;;;ACFA,IAAMC,MAAAA,GAAQ,CAAC,IAAA,KAAyB,IAAA,CAAK,MAAMC,GAAG,CAAA,CAAE,KAAK,GAAG,CAAA;AAGhE,IAAM,MAAA,GAAS,CAAC,IAAA,KAA0B,mBAAA,CAAoB,KAAK,IAAI,CAAA,GAAI,IAAA,GAAO,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA;AAGpF,SAAS,cAAc,OAAA,EAAyB;AACrD,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA;AAClC,EAAA,MAAM,KAAA,GAAQ,SAAS,SAAA,CAAU,CAAC,YAAY,qBAAA,CAAsB,IAAA,CAAK,OAAO,CAAC,CAAA;AACjF,EAAA,OAAO,KAAA,KAAU,EAAA,GAAKN,OAAAA,CAAQ,OAAO,CAAA,GAAI,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAC5E;AAGA,SAAS,WAAW,KAAA,EAA2B;AAC7C,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACnC,EAAA,IAAI,IAAA,KAAS,QAAW,OAAO,KAAA;AAC/B,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,uCAAA,EAAyC,EAAE,CAAA;AACzE,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,CAAC,QAAQ,CAAA;AACxC,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACzC,EAAA,IAAI,YAAY,UAAA,IAAc,QAAA,CAAS,WAAA,EAAY,KAAM,WAAW,WAAA,EAAY,EAAG,OAAO,CAAC,GAAG,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,EAAE,GAAG,QAAQ,CAAA;AAC1H,EAAA,IAAI,QAAA,KAAa,8BAAA,CAA+B,IAAA,CAAK,IAAI,CAAA,IAAK,UAAA,CAAW,IAAA,CAAK,QAAQ,CAAA,CAAA,EAAI,OAAO,KAAA,CAAM,KAAA,CAAM,GAAG,EAAE,CAAA;AAClH,EAAA,OAAO,CAAC,GAAG,KAAA,CAAM,MAAM,CAAA,EAAG,EAAE,GAAG,QAAQ,CAAA;AACzC;AAEA,IAAM,YAAY,CAAC,UAAA,EAAoB,cACrC,UAAA,CAAW,UAAA,CAAW,QAAQ,SAAA,EAAW,EAAE,CAAA,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA,CAAO,OAAO,CAAC,CAAA,CAAE,KAAK,GAAG,CAAA;AAM5E,SAAS,SAAA,CAAU,IAAA,EAAc,IAAA,EAAc,OAAA,EAAoC;AACxF,EAAA,MAAM,IAAA,GAAOK,MAAAA,CAAME,QAAAA,CAAS,IAAA,EAAM,IAAI,CAAC,CAAA;AACvC,EAAA,MAAM,UAAA,GAAa,OAAO,IAAI,CAAA;AAC9B,EAAA,MAAM,OAAA,GAAU,WAAA,CAAY,IAAA,EAAM,OAAO,CAAA;AACzC,EAAA,IAAI,OAAA,KAAY,MAAA,EAAW,OAAO,SAAA,CAAU,YAAY,GAAG,CAAA;AAC3D,EAAA,MAAM,YAAY,MAAA,CAAOF,MAAAA,CAAME,QAAAA,CAAS,IAAA,EAAMT,QAAQ,IAAA,EAAM,aAAA,CAAc,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,OAAA,CAAQ,OAAO,EAAE,CAAA;AACxG,EAAA,OAAO,SAAA,CAAU,YAAY,SAAS,CAAA;AACxC;;;ACpCA,IAAM,SAAA,GAAY,CAAA;AAMlB,eAAe,OAAA,CAAW,MAA+B,GAAA,EAAyD;AAChH,EAAA,MAAM,KAAA,GAAwB,EAAE,MAAA,EAAQ,EAAC,EAAG,OAAO,EAAC,EAAG,SAAA,EAAW,EAAC,EAAE;AACrE,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAY;AAC9B,EAAA,WAAS;AACP,IAAA,MAAM,QAA0B,EAAC;AACjC,IAAA,MAAM,MAAA,GAAS,CAAC,IAAA,KAAe,CAAC,IAAA,KAAiB;AAC/C,MAAA,IAAI,CAAC,KAAA,CAAM,GAAA,CAAI,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,CAAC,IAAA,EAAM,IAAI,CAAC,CAAA;AAC1D,MAAA,OAAO,KAAA,CAAM,IAAI,CAAA,CAAE,IAAI,CAAA;AAAA,IACzB,CAAA;AACA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,EAAE,KAAA,EAAO,OAAO,QAAQ,CAAA,EAAG,IAAA,EAAM,MAAA,CAAO,OAAO,CAAA,EAAG,QAAA,EAAU,MAAA,CAAO,WAAW,GAAG,CAAA;AACrG,IAAA,IAAI,MAAM,MAAA,KAAW,CAAA,EAAG,OAAO,EAAE,QAAQ,KAAA,EAAM;AAC/C,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,KAAA,EAAO;AAChC,MAAA,KAAA,CAAM,GAAA,CAAI,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA;AAC3B,MAAA,MAAM,KAAA,GAAQ,MAAM,GAAA,CAAI,IAAA,EAAM,IAAI,CAAA;AAClC,MAAA,IAAI,UAAU,MAAA,EAAW,KAAA,CAAM,IAAI,CAAA,CAAE,IAAI,CAAA,GAAI,KAAA;AAAA,IAC/C;AAAA,EACF;AACF;AAOA,eAAsB,cAAA,CACpB,IAAA,EACA,QAAA,EACA,GAAA,EACA,OACA,IAAA,EACyB;AACzB,EAAA,MAAM,OAAA,uBAAc,GAAA,EAA0C;AAG9D,EAAA,MAAM,QAAA,GAAW,OAAO,EAAA,EAAY,IAAA,EAAc,QAAiB,KAAA,KAAgD;AACjH,IAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,SAAA,CAAU,IAAI,IAAI,CAAA;AAC1C,IAAA,IAAI,CAAC,KAAK,OAAO,MAAA;AACjB,IAAA,IAAI,GAAA,CAAI,IAAI,GAAG,CAAA,SAAU,MAAA,IAAU,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA,KAAM,OAAA;AACpD,IAAA,MAAM,IAAA,GAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAC7B,IAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,EAAG;AAEtB,MAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,EAAM,KAAA,GAAQ,SAAA,GAAY,OAAA,CAAQ,OAAA,CAAQ,MAAS,CAAA,GAAI,QAAA,CAAS,GAAA,EAAK,MAAA,EAAQ,KAAK,CAAC,CAAA;AAAA,IACjG;AACA,IAAA,OAAO,OAAA,CAAQ,IAAI,IAAI,CAAA;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,QAAA,GAAW,OAAO,GAAA,EAAa,MAAA,EAAiB,KAAA,KAAgD;AACpG,IAAA,MAAM,KAAK,GAAA,CAAI,KAAA,CAAM,GAAG,GAAA,CAAI,WAAA,CAAY,GAAG,CAAC,CAAA;AAC5C,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,EAAA,CAAG,SAAS,CAAC,CAAA;AACrC,IAAA,IAAI,KAAA;AACJ,IAAA,IAAI;AACF,MAAA,KAAA,GAAQ,IAAA,CAAK,UAAU,IAAA,CAAK,EAAE,GAAG,EAAE,CAAA,kBAAG,IAAI,GAAA,EAAK,CAAA;AAAA,IACjD,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,QAAA,CAAS,GAAA,CAAI,KAAK,CAAA;AACrC,IAAA,IAAI,CAAC,MAAM,OAAO,MAAA;AAClB,IAAA,MAAM,EAAE,MAAA,EAAO,GAAI,MAAM,OAAA;AAAA,MACvB,CAAC,YAAa,MAAA,GAAS,IAAA,CAAK,IAAI,CAAA,IAAK,cAAA,CAAe,MAAM,EAAE,GAAG,OAAO,OAAA,EAAS,IAAI,UAAA,CAAW,IAAA,EAAM,EAAE,GAAG,KAAA,EAAO,SAAS,CAAA;AAAA,MACzH,MAAA,CAAO,EAAA,EAAI,KAAA,GAAQ,CAAC;AAAA,KACtB;AACA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,SACJ,CAAC,EAAA,EAAY,KAAA,KACb,OAAO,MAAM,IAAA,KAAS;AACpB,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,IAAA,CAAK,EAAE,CAAA;AACzB,IAAA,MAAM,GAAA,GAAM,GAAA,EAAK,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AACjC,IAAA,MAAM,IAAA,GAAO,IAAA,KAAS,WAAA,GAAe,GAAA,EAAK,IAAA,KAAS,MAAA,GAAS,GAAA,GAAM,MAAA,GAAa,GAAA,EAAK,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AACpG,IAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,QAAA,KAAa,KAAK,OAAO,MAAA;AAC3C,IAAA,MAAM,SAAS,MAAM,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,MAAM,EAAE,CAAA;AAC/C,IAAA,OAAO,MAAA,GAAS,SAAS,MAAA,EAAQ,IAAA,CAAK,UAAU,IAAA,KAAS,OAAA,EAAS,KAAK,CAAA,GAAI,MAAA;AAAA,EAC7E,CAAA;AAGF,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,SAAA,CAAU,IAAA,CAAK,IAAI,GAAG,IAAI,CAAA;AAC1C,IAAA,OAAA,CAAQ,MAAM,OAAA,CAAQ,CAAC,OAAA,KAAY,KAAK,aAAa,OAAA,EAAS,IAAA,EAAM,EAAA,EAAI,QAAA,EAAU,OAAO,CAAA,EAAG,MAAA,CAAO,IAAA,EAAM,CAAC,CAAC,CAAA,EAAG,KAAA;AAAA,EAChH,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAE,QAAQ,EAAC,EAAG,OAAO,EAAC,EAAG,SAAA,EAAW,EAAC,EAAE;AAAA,EAChD;AACF;;;AClFO,SAAS,aAAa,IAAA,EAAmE;AAC9F,EAAA,MAAM,OAAA,uBAAc,GAAA,EAA+B;AACnD,EAAA,MAAM,IAAA,GAAO,CAAC,IAAA,KAAoC;AAChD,IAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,EAAG;AACtB,MAAA,IAAI,MAAA,GAA4B,IAAA;AAChC,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA,EAAG,IAAI,CAAA;AAAA,MACtC,CAAA,CAAA,MAAQ;AACN,QAAA,MAAA,GAAS,IAAA;AAAA,MACX;AACA,MAAA,OAAA,CAAQ,GAAA,CAAI,MAAM,MAAM,CAAA;AAAA,IAC1B;AACA,IAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,IAAK,IAAA;AAAA,EAC9B,CAAA;AAEA,EAAA,OAAO,CAACA,QAAAA,KAAY;AAClB,IAAA,MAAM,KAAA,GAAe;AAAA,MACnB,KAAA,sBAAW,GAAA,EAAI;AAAA,MACf,UAAA,EAAY,KAAA;AAAA,MACZ,IAAA;AAAA,MACA,MAAM,MAAA,CAAO,IAAA,EAAM,QAAA,EAAU;AAC3B,QAAA,MAAM,EAAA,GAAA,CAAM,MAAMA,QAAAA,CAAQ,IAAA,EAAM,QAAQ,CAAA,CAAE,KAAA,CAAM,MAAM,IAAI,CAAA,GAAI,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAC1E,QAAA,IAAI,CAAC,EAAA,EAAI,KAAA,CAAM,UAAA,GAAa,IAAA;AAC5B,QAAA,OAAO,MAAM,CAAC,EAAA,CAAG,UAAA,CAAW,IAAI,IAAI,EAAA,GAAK,IAAA;AAAA,MAC3C,CAAA;AAAA,MACA,WAAW,CAAC,EAAA,EAAI,SAAS,SAAA,CAAU,EAAA,EAAI,MAAM,CAAC;AAAA,KAChD;AACA,IAAA,MAAM,SAAA,GAAY,OAAO,EAAA,EAAY,IAAA,EAAc,KAAA,KAA0C;AAC3F,MAAA,KAAA,CAAM,KAAA,CAAM,IAAI,EAAE,CAAA;AAClB,MAAA,MAAM,GAAA,GAAM,KAAK,EAAE,CAAA;AACnB,MAAA,IAAI,CAAC,GAAA,IAAO,KAAA,GAAQ,EAAA,EAAI,OAAO,IAAA;AAC/B,MAAA,MAAM,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AAChC,MAAA,IAAI,GAAA,EAAK,SAAS,OAAA,EAAS;AACzB,QAAA,MAAM,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,IAAI,KAAK,CAAA;AACrC,QAAA,IAAI,CAAC,GAAA,EAAK,OAAO,GAAG,EAAE,CAAA,CAAA,EAAI,IAAI,KAAK,CAAA,CAAA;AACnC,QAAA,IAAI,GAAA,CAAI,QAAA,KAAa,GAAA,EAAK,OAAO,IAAA;AACjC,QAAA,MAAM,OAAO,MAAM,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,MAAM,EAAE,CAAA;AAC5C,QAAA,OAAO,OAAO,SAAA,CAAU,IAAA,EAAM,IAAI,QAAA,EAAU,KAAA,GAAQ,CAAC,CAAA,GAAI,IAAA;AAAA,MAC3D;AACA,MAAA,IAAI,GAAA,EAAK,SAAS,MAAA,EAAQ;AACxB,QAAA,MAAM,OAAO,MAAM,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,MAAM,EAAE,CAAA;AAC5C,QAAA,OAAO,OAAO,SAAA,CAAU,IAAA,EAAM,IAAI,QAAA,EAAU,KAAA,GAAQ,CAAC,CAAA,GAAI,IAAA;AAAA,MAC3D;AACA,MAAA,IAAI,IAAA,KAAS,WAAW,OAAO,IAAA;AAC/B,MAAA,KAAA,MAAW,IAAA,IAAQ,IAAI,KAAA,EAAO;AAC5B,QAAA,MAAM,IAAA,GAAO,MAAM,KAAA,CAAM,MAAA,CAAO,MAAM,EAAE,CAAA;AACxC,QAAA,MAAM,KAAA,GAAQ,OAAO,MAAM,SAAA,CAAU,MAAM,IAAA,EAAM,KAAA,GAAQ,CAAC,CAAA,GAAI,IAAA;AAC9D,QAAA,IAAI,OAAO,OAAO,KAAA;AAAA,MACpB;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AACF;;;AClDO,IAAM,UAAA,GAA6B,EAAE,MAAA,EAAQ,EAAC,EAAG,OAAO,EAAC,EAAG,SAAA,EAAW,EAAC,EAAE;AAG1E,SAAS,cAAA,CAAe,GAAkC,CAAA,EAA+B;AAC9F,EAAA,MAAM,MAAM,CAAC,CAAA,KAAqC,KAAK,SAAA,CAAU,CAAC,CAAC,GAAI,CAAA,EAAG,QAAA,IAAY,EAAG,CAAA,CAAE,IAAA,IAAQ,CAAA,EAAG,OAAA,IAAW,UAAU,CAAC,CAAA;AAC5H,EAAA,OAAO,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,CAAI,CAAC,CAAA;AACzB;AASO,SAAS,sBAAsB,IAAA,EAAgC;AACpE,EAAA,MAAM,MAAA,GAAS,aAAa,IAAI,CAAA;AAEhC,EAAA,OAAO,OAAO,IAAA,EAAc,OAAA,EAAmCA,QAAAA,KAAuD;AACpH,IAAA,MAAM,KAAA,GAAQ,OAAOA,QAAO,CAAA;AAC5B,IAAA,MAAM,QAAA,uBAAe,GAAA,EAAY;AACjC,IAAA,MAAM,SAAS,CAAC,GAAI,MAAM,IAAA,CAAK,IAAI,GAAG,OAAA,CAAQ,MAAA,EAAO,IAAK,EAAG,CAAA,CAAE,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,CAAI,SAAS,kBAAkB,CAAA;AAC5G,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,IAAK,CAAC,QAAQ,OAAO,EAAE,QAAA,EAAU,OAAA,EAAS,UAAA,EAAY,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,YAAY,KAAA,EAAM;AACnH,IAAA,MAAMM,MAAAA,GAAQ,MAAM,KAAA,CAAM,MAAA,CAAO,oBAAoB,IAAI,CAAA;AACzD,IAAA,MAAM,GAAA,uBAAU,GAAA,EAA8B;AAC9C,IAAA,IAAIA,MAAAA,EAAO;AACT,MAAA,KAAA,MAAW,IAAA,IAAQ,CAAC,MAAA,EAAQ,OAAO,CAAA,EAAY;AAC7C,QAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,SAAA,CAAUA,QAAO,IAAI,CAAA;AAC7C,QAAA,IAAI,GAAA,EAAK,GAAA,CAAI,GAAA,CAAI,GAAA,EAAK,IAAI,CAAA;AAAA,MAC5B;AACA,MAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,QAAA,MAAM,OAAO,MAAM,KAAA,CAAM,MAAA,CAAO,MAAA,CAAO,MAAM,IAAI,CAAA;AACjD,QAAA,MAAM,GAAA,GAAM,OAAO,MAAM,KAAA,CAAM,UAAU,IAAA,EAAM,MAAA,CAAO,QAAQ,CAAA,GAAI,IAAA;AAClE,QAAA,IAAI,GAAA,IAAO,IAAI,GAAA,CAAI,GAAG,GAAG,QAAA,CAAS,GAAA,CAAI,OAAO,KAAK,CAAA;AAAA,MACpD;AAAA,IACF;AACA,IAAA,MAAM,OAAA,GAAUA,SAAQ,MAAM,cAAA,CAAe,MAAM,QAAA,EAAU,GAAA,EAAK,KAAA,EAAO,IAAI,CAAA,GAAI,UAAA;AACjF,IAAA,OAAO,EAAE,UAAU,OAAA,EAAS,KAAA,EAAO,MAAM,KAAA,EAAO,UAAA,EAAY,MAAM,UAAA,EAAW;AAAA,EAC/E,CAAA;AACF;;;ACrCO,SAAS,UAAA,CACd,IAAA,EACA,IAAA,EACA,MAAA,EACAI,SAAAA,EACc;AACd,EAAA,MAAM,OAAA,GAAUA,SAAAA,GAAW,WAAA,CAAYA,SAAAA,CAAS,OAAO,CAAA,GAAI,MAAA;AAC3D,EAAA,OAAO,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,SAAA,CAAU,IAAA,EAAM,MAAA,CAAO,IAAA,EAAM,MAAA,CAAO,OAAO,CAAA,EAAGA,SAAAA,EAAU,QAAA,EAAU,OAAO,CAAA;AACxG;AAOA,eAAsB,kBAAA,CACpB,IAAA,EACA,IAAA,EACA,MAAA,EACAV,QAAAA,EACA,MAAA,GAAS,qBAAA,CAAsB,CAAC,IAAA,KAASW,YAAAA,CAAa,IAAA,EAAM,MAAM,CAAC,CAAA,EACA;AACnE,EAAA,MAAM,UAAA,GAAa,MAAM,MAAA,CAAO,IAAA,EAAM,eAAe,IAAA,EAAM,IAAI,GAAGX,QAAO,CAAA;AACzE,EAAA,OAAO,EAAE,SAAS,UAAA,CAAW,IAAA,EAAM,MAAM,MAAA,EAAQ,UAAU,GAAG,UAAA,EAAW;AAC3E;ACtCO,SAAS,WAAW,MAAA,EAAqC;AAC9D,EAAA,MAAM,IAAA,GAAO,aAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA;AAC1C,EAAA,KAAA,IAAS,GAAA,GAAME,OAAAA,CAAQ,IAAI,CAAA,EAAG,GAAA,KAAQA,OAAAA,CAAQ,GAAG,CAAA,EAAG,GAAA,GAAMA,OAAAA,CAAQ,GAAG,CAAA,EAAG;AACtE,IAAA,MAAM,QAAA,GAAWC,IAAAA,CAAK,GAAA,EAAK,cAAc,CAAA;AACzC,IAAA,IAAI,CAACS,UAAAA,CAAW,QAAQ,CAAA,IAAM,IAAA,CAAK,KAAA,CAAMD,YAAAA,CAAa,QAAA,EAAU,MAAM,CAAC,CAAA,CAAwB,IAAA,KAAS,kBAAA,EAAoB;AAC1H,MAAA;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAS,CAACF,QAAAA,CAASN,IAAAA,CAAK,GAAA,EAAK,KAAK,CAAA,EAAG,IAAI,CAAA,CAAE,UAAA,CAAW,IAAI,CAAA;AAChE,IAAA,OAAO,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAUA,IAAAA,CAAK,GAAA,EAAK,MAAA,GAAS,CAAA,IAAA,EAAO,KAAK,CAAA,SAAA,CAAA,GAAc,CAAA,KAAA,EAAQ,KAAK,WAAW,CAAC,CAAA;AAAA,EACrG;AACA,EAAA,OAAO,EAAC;AACV;;;ACCA,IAAM,2BAAW,IAAI,GAAA,CAAI,CAAC,KAAA,EAAO,KAAK,CAAC,CAAA;AACvC,IAAM,WAAA,GAAc,wBAAA;AAGb,SAAS,QAAA,CAAS,OAAA,EAAqB,WAAA,EAAyC,KAAA,EAAgC;AACrH,EAAA,MAAM,EAAE,SAAQ,GAAI,OAAA;AACpB,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAChC,EAAA,MAAMU,OAAAA,GAAS,CAAC,MAAA,KAAsB;AACpC,IAAA,KAAA,MAAW,IAAA,IAAQ,OAAA,CAAQ,MAAM,CAAA,EAAG,IAAI,CAAC,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA,EAAG,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AAAA,EACnF,CAAA;AACA,EAAA,MAAM,QAAA,GAAW,cAAc,oBAAA,CAAqB,OAAA,CAAQ,KAAK,WAAW,CAAA,uBAAQ,GAAA,EAAoB;AACxG,EAAA,MAAM,SAAoB,EAAC;AAC3B,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAoB;AAC1C,EAAA,IAAI,GAAA,GAAqB,IAAA;AACzB,EAAA,KAAA,MAAWC,KAAAA,IAAQ,KAAA,GAAQ,OAAA,CAAQ,mBAAA,CAAoB,OAAA,CAAQ,gBAAgB,KAAK,CAAC,CAAA,GAAI,EAAC,EAAG;AAC3F,IAAA,MAAM,IAAA,GAAOA,MAAK,OAAA,EAAQ;AAC1B,IAAA,IAAI,SAAS,KAAA,EAAO,GAAA,GAAM,KAAA,CAAM,OAAA,EAASA,OAAMD,OAAM,CAAA;AACrD,IAAA,IAAI,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA,EAAG;AACxB,IAAA,MAAM,KAAA,GAAQ,QAAQC,KAAI,CAAA;AAC1B,IAAA,IAAI,MAAM,MAAA,GAAS,CAAA,IAAK,MAAM,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AACpD,MAAA,MAAM,IAAA,GAAO,cAAc,OAAA,CAAQ,GAAA,EAAKA,KAAI,CAAA,IAAKC,UAAAA,CAAU,KAAA,CAAM,CAAC,CAAE,CAAA;AACpE,MAAA,SAAA,CAAU,IAAI,IAAA,EAAA,CAAO,SAAA,CAAU,IAAI,IAAI,CAAA,IAAK,KAAK,CAAC,CAAA;AAClD,MAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,IAAA,CAAK,UAAU,OAAA,EAASD,KAAAA,EAAM,SAAS,GAAA,CAAI,IAAI,CAAC,CAAC,CAAA;AACxD,IAAAD,QAAOC,KAAI,CAAA;AAAA,EACb;AACA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,MAAA;AAAA,IACP,SAAA,EAAW,CAAC,GAAG,SAAS,EAAE,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,MAAqB,EAAE,IAAA,EAAM,OAAM,CAAE,CAAA;AAAA,IAChF,GAAA;AAAA,IACA,OAAA,EAAS,CAAC,GAAG,OAAO;AAAA,GACtB;AACF;AAEA,IAAM,OAAA,GAAU,CAAC,MAAA,KAAA,CACd,MAAA,CAAO,iBAAgB,IAAK,EAAC,EAAG,GAAA,CAAI,CAAC,WAAA,KAAgB,WAAA,CAAY,aAAA,GAAgB,QAAQ,CAAA;AAE5F,IAAME,SAAQ,CAAC,EAAE,KAAK,OAAA,EAAQ,EAAe,WAC3C,GAAA,CAAI,oBAAA,CAAqB,MAAA,CAAO,uBAAA,CAAwB,OAAO,CAAC,CAAA,CAAE,QAAQ,MAAA,EAAQ,GAAG,EAAE,IAAA,EAAK;AAE9F,SAAS,QAAQ,EAAE,GAAA,EAAK,OAAA,EAAQ,EAAe,QAAmB,KAAA,EAA8C;AAC9G,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,YAAA,CAAa,OAAO,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM,KAAA,CAAM,QAAA,CAAS,CAAA,CAAE,IAAI,CAAC,CAAA;AAC3E,EAAA,OAAO,MAAM,GAAA,CAAI,oBAAA,CAAqB,IAAI,IAAI,CAAA,CAAE,MAAK,GAAI,MAAA;AAC3D;AAEA,SAAS,SAAA,CAAU,OAAA,EAAqBF,KAAAA,EAAiB,YAAA,EAA2C;AAClG,EAAA,MAAM,KAAA,GAAiB;AAAA,IACrB,IAAA,EAAMA,MAAK,OAAA,EAAQ;AAAA,IACnB,IAAA,EAAM,WAAA,CAAY,OAAA,EAASA,KAAI,CAAA;AAAA,IAC/B,UAAU,EAAEA,KAAAA,CAAK,KAAA,GAAQ,OAAA,CAAQ,IAAI,WAAA,CAAY,QAAA;AAAA,GACnD;AACA,EAAA,MAAM,QAAA,GAAW,gBAAgB,OAAA,CAAQ,OAAA,EAASA,OAAM,CAAC,SAAA,EAAW,cAAc,CAAC,CAAA;AACnF,EAAA,IAAI,QAAA,QAAgB,OAAA,GAAU,QAAA;AAC9B,EAAA,MAAM,WAAA,GAAcE,MAAAA,CAAM,OAAA,EAASF,KAAI,CAAA;AACvC,EAAA,IAAI,WAAA,QAAmB,WAAA,GAAc,WAAA;AACrC,EAAA,MAAM,aAAa,OAAA,CAAQ,OAAA,EAASA,KAAAA,EAAM,CAAC,YAAY,CAAC,CAAA;AACxD,EAAA,IAAI,UAAA,KAAe,MAAA,EAAW,KAAA,CAAM,UAAA,GAAa,UAAA;AACjD,EAAA,OAAO,KAAA;AACT;AAMA,SAAS,YAAY,EAAE,GAAA,EAAK,OAAA,EAAS,EAAA,IAAkB,MAAA,EAA2B;AAChF,EAAA,MAAM,OAAO,OAAA,CAAQ,kBAAA,CAAmB,QAAQ,yBAAA,CAA0B,MAAA,EAAQ,EAAE,CAAC,CAAA;AACrF,EAAA,MAAM,CAAC,aAAa,GAAG,MAAM,IAAI,MAAA,CAAO,eAAA,MAAqB,EAAC;AAC9D,EAAA,MAAM,IAAA,GAAO,WAAA,IAAe,MAAA,CAAO,MAAA,KAAW,CAAA,IAAK,IAAI,mBAAA,CAAoB,WAAW,CAAA,GAAI,WAAA,CAAY,IAAA,GAAO,MAAA;AAC7G,EAAA,IAAI,IAAA,IAAQ,OAAA,CAAQ,kBAAA,CAAmB,OAAA,CAAQ,oBAAoB,IAAI,CAAC,CAAA,KAAM,IAAA,SAAa,IAAA,CAAK,OAAA,EAAQ,CAAE,OAAA,CAAQ,QAAQ,GAAG,CAAA;AAC7H,EAAA,OAAO,QAAQ,YAAA,CAAa,IAAA,EAAM,MAAA,EAAW,GAAA,CAAI,gBAAgB,YAAY,CAAA;AAC/E;AAGA,SAASC,WAAU,IAAA,EAAsB;AACvC,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAChC,EAAA,MAAM,EAAA,GAAK,KAAA,CAAM,WAAA,CAAY,cAAc,CAAA;AAC3C,EAAA,IAAI,EAAA,GAAK,CAAA,IAAK,EAAA,GAAK,CAAA,IAAK,KAAA,CAAM,QAAQ,OAAO,KAAA,CAAM,EAAA,CAAG,EAAE,CAAA,IAAK,IAAA;AAC7D,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,EAAA,GAAK,CAAC,CAAA;AACzB,EAAA,OAAO,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,IAAK,MAAM,EAAA,GAAK,CAAC,CAAA,GAAI,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAA,CAAM,EAAA,GAAK,CAAC,CAAC,CAAA,CAAA,GAAK,IAAA;AAC9E;AAGA,SAAS,aAAA,CAAc,KAAgBD,KAAAA,EAAqC;AAC1E,EAAA,MAAM,MAAA,GAASA,KAAAA,CAAK,eAAA,EAAgB,GAAI,CAAC,CAAA,EAAG,MAAA;AAC5C,EAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,EAAA,IAAI,GAAA,CAAI,sBAAA,CAAuB,MAAM,CAAA,IAAK,GAAA,CAAI,mBAAmB,MAAM,CAAA,EAAG,OAAO,MAAA,CAAO,IAAA,EAAM,IAAA;AAC9F,EAAA,IAAI,GAAA,CAAI,iBAAA,CAAkB,MAAM,CAAA,IAAK,GAAA,CAAI,sBAAA,CAAuB,MAAA,CAAO,MAAM,CAAA,EAAG,OAAO,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,IAAA;AAC1G,EAAA,OAAO,MAAA;AACT;AAGA,SAAS,KAAA,CAAM,OAAA,EAAqBA,KAAAA,EAAiBD,OAAAA,EAAoD;AACvG,EAAA,MAAM,EAAE,GAAA,EAAK,OAAA,EAAS,EAAA,EAAG,GAAI,OAAA;AAC7B,EAAA,MAAM,OAAO,OAAA,CAAQ,kBAAA,CAAmB,QAAQ,yBAAA,CAA0BC,KAAAA,EAAM,EAAE,CAAC,CAAA;AACnF,EAAA,KAAA,MAAW,IAAA,IAAQ,KAAK,OAAA,EAAQ,GAAI,KAAK,KAAA,GAAQ,CAAC,IAAI,CAAA,EAAG;AACvD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,SAAS,CAAA;AAC1C,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,MAAM,OAAO,OAAA,CAAQ,kBAAA,CAAmB,QAAQ,yBAAA,CAA0B,OAAA,EAAS,EAAE,CAAC,CAAA;AACtF,IAAA,MAAM,OAAO,OAAA,CAAQ,YAAA,CAAa,MAAM,MAAA,EAAW,GAAA,CAAI,gBAAgB,YAAY,CAAA;AACnF,IAAA,MAAM,QAAA,GAAA,CAAY,KAAK,SAAA,EAAU,IAAK,KAAK,WAAA,GAAc,eAAA,MAAqB,EAAC;AAC/E,IAAA,IAAI,QAAA,CAAS,MAAA,GAAS,CAAA,IAAK,QAAA,CAAS,MAAM,CAAC,CAAA,KAAM,OAAA,CAAQ,QAAA,CAAS,CAAA,CAAE,aAAA,EAAc,CAAE,QAAQ,CAAC,CAAA,EAAG;AAC9F,MAAA,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,EAAC,EAAE;AAAA,IACnC;AACA,IAAA,MAAM,UAAU,OAAA,CAAQ,mBAAA,CAAoB,IAAI,CAAA,CAAE,GAAA,CAAI,CAAC,MAAA,KAAW;AAChE,MAAAD,QAAO,MAAM,CAAA;AACb,MAAA,OAAO,WAAA,CAAY,SAAS,MAAM,CAAA;AAAA,IACpC,CAAC,CAAA;AACD,IAAA,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,OAAA,EAAQ;AAAA,EAC/B;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,WAAA,CAAY,SAAqB,MAAA,EAA8B;AACtE,EAAA,MAAM,EAAE,GAAA,EAAK,OAAA,EAAS,EAAA,EAAG,GAAI,OAAA;AAC7B,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,yBAAA,CAA0B,MAAA,EAAQ,EAAE,CAAA;AACzD,EAAA,MAAM,CAAC,IAAI,CAAA,GAAI,IAAA,CAAK,iBAAA,EAAkB;AACtC,EAAA,MAAM,YAAA,GAAe,MAAA,CAAO,eAAA,EAAgB,IAAK,EAAC;AAClD,EAAA,MAAM,KAAA,GAAmB;AAAA,IACvB,IAAA,EAAM,OAAO,OAAA,EAAQ;AAAA,IACrB,IAAA,EAAM,OAAO,QAAA,GAAW,UAAA;AAAA,IACxB,WAAW,IAAA,GACP,OAAA,CAAQ,kBAAkB,IAAA,EAAM,MAAA,EAAW,IAAI,eAAA,CAAgB,wBAAA,GAA2B,IAAI,eAAA,CAAgB,YAAY,IAC1H,OAAA,CAAQ,YAAA,CAAa,MAAM,MAAA,EAAW,GAAA,CAAI,gBAAgB,YAAY,CAAA;AAAA,IAC1E,QAAA,EAAU,YAAA,CAAa,IAAA,CAAK,CAAC,CAAA,KAAA,CAAO,GAAA,CAAI,wBAAA,CAAyB,CAAC,CAAA,GAAI,GAAA,CAAI,aAAA,CAAc,QAAA,MAAc,CAAC;AAAA,GACzG;AACA,EAAA,MAAM,WAAA,GAAcG,MAAAA,CAAM,OAAA,EAAS,MAAM,CAAA;AACzC,EAAA,IAAI,WAAA,QAAmB,WAAA,GAAc,WAAA;AACrC,EAAA,OAAO,KAAA;AACT;AAGA,SAAS,oBAAA,CAAqB,KAAgB,WAAA,EAAkD;AAC9F,EAAA,MAAM,QAAA,uBAAe,GAAA,EAAoB;AACzC,EAAA,IAAI,OAA4B,GAAA,CAAI,qBAAA,CAAsB,WAAW,CAAA,GAAI,YAAY,WAAA,GAAc,WAAA;AACnG,EAAA,OAAO,IAAA,KAAS,GAAA,CAAI,gBAAA,CAAiB,IAAI,CAAA,IAAK,GAAA,CAAI,yBAAA,CAA0B,IAAI,CAAA,IAAK,GAAA,CAAI,cAAA,CAAe,IAAI,CAAA,CAAA,EAAI;AAC9G,IAAA,IAAA,GAAO,GAAA,CAAI,iBAAiB,IAAI,CAAA,GAAI,KAAK,SAAA,CAAU,CAAC,IAAI,IAAA,CAAK,UAAA;AAAA,EAC/D;AACA,EAAA,IAAI,CAAC,IAAA,IAAQ,EAAE,GAAA,CAAI,gBAAgB,IAAI,CAAA,IAAK,GAAA,CAAI,oBAAA,CAAqB,IAAI,CAAA,IAAK,GAAA,CAAI,qBAAA,CAAsB,IAAI,CAAA,CAAA,EAAI;AAC9G,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,CAAC,CAAA,EAAG,IAAA;AACpC,EAAA,IAAI,CAAC,OAAA,IAAW,CAAC,IAAI,sBAAA,CAAuB,OAAO,GAAG,OAAO,QAAA;AAC7D,EAAA,KAAA,MAAW,OAAA,IAAW,QAAQ,QAAA,EAAU;AACtC,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,YAAA,IAAgB,OAAA,CAAQ,IAAA;AAC5C,IAAA,IAAI,OAAA,CAAQ,WAAA,IAAe,GAAA,CAAI,YAAA,CAAa,GAAG,CAAA,EAAG,QAAA,CAAS,GAAA,CAAI,GAAA,CAAI,IAAA,EAAM,OAAA,CAAQ,WAAA,CAAY,SAAS,CAAA;AAAA,EACxG;AACA,EAAA,OAAO,QAAA;AACT;;;AC9IA,IAAM,QAAA,GAAW,iEAAA;AAgBjB,eAAsB,iBACpB,IAAA,EACA,OAAA,EACA,EAAE,IAAA,EAAK,GAAyB,EAAC,EACL;AAC5B,EAAA,MAAM,QAAA,GAAW,CAAC,IAAA,KAAiB,QAAA,CAAS,KAAK,IAAI,CAAA;AACrD,EAAA,MAAM,OAAA,GAAU,CAAC,IAAA,KAAiB,QAAA,CAAS,IAAI,CAAA,IAAK,IAAA,GAAO,IAAI,CAAA,KAAM,IAAA;AACrE,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI;AACF,IAAA,GAAA,GAAA,CAAO,MAAM,OAAO,YAAY,CAAA,EAAG,OAAA;AAAA,EACrC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,GAAA,CAAI,qBAAA,KAA0B,UAAA,EAAY,OAAO,IAAA;AAC5D,EAAA,MAAM,EAAE,KAAI,GAAI,GAAA;AAChB,EAAA,MAAM,UAAA,GAAa,GAAA,CAAI,cAAA,CAAe,IAAA,EAAM,IAAI,UAAU,CAAA;AAC1D,EAAA,MAAM,OAAO,UAAA,GAAa,GAAA,CAAI,eAAe,UAAA,EAAY,GAAA,CAAI,QAAQ,CAAA,GAAI,MAAA;AACzE,EAAA,MAAM,SAAS,IAAA,EAAM,MAAA,GACjB,IAAI,0BAAA,CAA2B,IAAA,CAAK,QAAQ,EAAE,GAAG,GAAA,EAAK,aAAA,EAAe,MAAM,EAAC,IAAKd,OAAAA,CAAQ,UAAW,CAAC,CAAA,GACrG,MAAA;AACJ,EAAA,MAAM,OAAA,GAA8B;AAAA,IAClC,GAAA,EAAK,IAAI,OAAA,CAAQ,QAAA;AAAA,IACjB,gBAAA,EAAkB,IAAI,oBAAA,CAAqB,OAAA;AAAA,IAC3C,MAAA,EAAQ,IAAI,UAAA,CAAW,MAAA;AAAA,IACvB,MAAA,EAAQ,IAAI,YAAA,CAAa,MAAA;AAAA,IACzB,MAAA,EAAQ,IAAA;AAAA,IACR,GAAG,MAAA,EAAQ,OAAA;AAAA,IACX,OAAA,EAAS,IAAA;AAAA,IACT,MAAA,EAAQ,IAAA;AAAA,IACR,YAAA,EAAc;AAAA,GAChB;AACA,EAAA,MAAM,IAAA,GAA+B;AAAA,IACnC,kBAAA,EAAoB,MAAM,CAAC,GAAG,SAAS,CAAA;AAAA,IACvC,gBAAA,EAAkB,CAAC,IAAA,KAAS,MAAA,CAAO,GAAA,CAAI,kBAAkB,IAAI,CAAA,EAAG,OAAA,EAAQ,IAAK,CAAC,CAAA;AAAA,IAC9E,iBAAA,EAAmB,CAAC,IAAA,KAAS;AAC3B,MAAA,MAAM,IAAA,GAAO,GAAA,CAAI,QAAA,CAAS,IAAI,CAAA;AAC9B,MAAA,OAAO,SAAS,MAAA,GAAY,MAAA,GAAY,GAAA,CAAI,cAAA,CAAe,WAAW,IAAI,CAAA;AAAA,IAC5E,CAAA;AAAA,IACA,qBAAqB,MAAM,IAAA;AAAA,IAC3B,wBAAwB,MAAM,OAAA;AAAA,IAC9B,uBAAuB,GAAA,CAAI,qBAAA;AAAA,IAC3B,YAAY,GAAA,CAAI,UAAA;AAAA,IAChB,UAAU,GAAA,CAAI,QAAA;AAAA,IACd,eAAe,GAAA,CAAI,aAAA;AAAA,IACnB,iBAAiB,GAAA,CAAI,eAAA;AAAA,IACrB,gBAAgB,GAAA,CAAI;AAAA,GACtB;AACA,EAAA,MAAM,UAAU,GAAA,CAAI,qBAAA,CAAsB,IAAA,EAAM,GAAA,CAAI,wBAAwB,CAAA;AAE5E,EAAA,MAAM,QAAA,GAAW,CAAC,IAAA,KAAiB;AACjC,IAAA,MAAM,OAAA,GAAU,QAAQ,UAAA,EAAW;AACnC,IAAA,MAAM,MAAA,GAAS,OAAA,EAAS,aAAA,CAAc,IAAI,CAAA;AAC1C,IAAA,OAAO,OAAA,IAAW,SAAS,EAAE,OAAA,EAAS,QAAQ,cAAA,EAAe,EAAG,QAAO,GAAI,IAAA;AAAA,EAC7E,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,KAAK,IAAA,EAAM;AACT,MAAA,MAAM,KAAA,GAAQ,SAAS,IAAI,CAAA;AAC3B,MAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,MAAA,MAAM,EAAE,OAAA,EAAS,MAAA,EAAO,GAAI,KAAA;AAC5B,MAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,GAAA,EAAK,OAAA,EAAS,MAAM,CAAA,EAAG,KAAA;AACjD,MAAA,OAAO,QAAQ,SAAA,CAAU,GAAA,EAAK,SAAS,KAAA,EAAO,MAAA,EAAQ,OAAO,CAAA,GAAI,IAAA;AAAA,IACnE,CAAA;AAAA,IACA,GAAA,CAAI,MAAM,QAAA,EAAU;AAClB,MAAA,MAAM,KAAA,GAAQ,SAAS,IAAI,CAAA;AAC3B,MAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,MAAA,MAAM,EAAE,OAAA,EAAS,MAAA,EAAO,GAAI,KAAA;AAC5B,MAAA,MAAM,SAAA,GAAY,WAAA,CAAY,GAAA,EAAK,OAAA,EAAS,QAAQ,QAAQ,CAAA;AAC5D,MAAA,IAAI,CAAC,WAAW,OAAO,IAAA;AACvB,MAAA,OAAO,QAAA,CAAS,EAAE,GAAA,EAAK,OAAA,EAAS,EAAA,EAAI,MAAA,EAAQ,OAAA,EAAS,QAAA,EAAS,EAAG,SAAA,CAAU,WAAA,EAAa,SAAA,CAAU,KAAK,CAAA;AAAA,IACzG;AAAA,GACF;AACF;AAeA,SAAS,SAAA,CACP,GAAA,EACA,OAAA,EACA,KAAA,EACA,IACA,OAAA,EACW;AACX,EAAA,MAAM,WAAoC,EAAC;AAC3C,EAAA,MAAM,OAAA,GAAmB,EAAE,GAAA,EAAK,OAAA,EAAS,IAAI,OAAA,EAAS,OAAA,kBAAS,IAAI,GAAA,EAAI,EAAE;AACzE,EAAA,KAAA,MAAWY,SAAQ,OAAA,CAAQ,mBAAA,CAAoB,QAAQ,eAAA,CAAgB,KAAK,CAAC,CAAA,EAAG;AAC9E,IAAA,MAAM,KAAA,GAAQ,WAAWA,KAAI,CAAA;AAC7B,IAAA,IAAI,MAAM,MAAA,GAAS,CAAA,IAAK,KAAA,CAAM,KAAA,CAAM,OAAO,CAAA,EAAG;AAC9C,IAAA,MAAM,OAAA,GAAU,UAAA;AAAA,MAAW,OAAA;AAAA,MAAS,QAAQ,kBAAA,CAAmB,OAAA,CAAQ,yBAAA,CAA0BA,KAAAA,EAAM,EAAE,CAAC,CAAA;AAAA,MAAG,MAC3G,YAAA,CAAa,GAAA,EAAK,OAAA,EAASA,KAAI;AAAA,KACjC;AACA,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,MAAM,WAAA,GAAc,GAAA,CAAI,oBAAA,CAAqBA,KAAAA,CAAK,uBAAA,CAAwB,OAAO,CAAC,CAAA,CAAE,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA,CAAE,IAAA,EAAK;AAC9G,IAAA,QAAA,CAASA,KAAAA,CAAK,SAAS,CAAA,GAAI,cAAc,EAAE,GAAG,OAAA,EAAS,WAAA,EAAY,GAAI,OAAA;AACvE,IAAA,MAAA,CAAO,SAAS,KAAK,CAAA;AAAA,EACvB;AACA,EAAA,OAAO,EAAE,QAAA,EAAU,OAAA,EAAS,CAAC,GAAG,OAAA,CAAQ,OAAO,CAAA,EAAE;AACnD;AAEA,IAAM,UAAA,GAAa,CAAC,MAAA,KAAA,CACjB,MAAA,CAAO,iBAAgB,IAAK,EAAC,EAAG,GAAA,CAAI,CAAC,WAAA,KAAgB,WAAA,CAAY,aAAA,GAAgB,QAAQ,CAAA;AAE5F,IAAMG,YAAAA,GAAc,wBAAA;AAEpB,SAAS,MAAA,CAAO,EAAE,OAAA,EAAQ,EAAY,KAAA,EAAgC;AACpE,EAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,EAAO,IAAI,CAACA,YAAAA,CAAY,KAAK,IAAI,CAAA,EAAG,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AACzE;AAEA,SAAS,UAAA,CAAW,OAAA,EAAkB,IAAA,EAAe,OAAA,EAAgD;AACnG,EAAA,MAAM,EAAE,SAAA,EAAU,GAAI,OAAA,CAAQ,GAAA;AAC9B,EAAA,MAAM,QAAQ,IAAA,CAAK,OAAA,KAAY,IAAA,CAAK,KAAA,GAAQ,CAAC,IAAI,CAAA;AACjD,EAAA,IAAI,KAAA,CAAM,KAAA,CAAM,CAAC,IAAA,KAAS,KAAK,KAAA,GAAQ,SAAA,CAAU,WAAW,CAAA,SAAU,EAAE,OAAA,EAAS,EAAE,IAAA,EAAM,WAAU,EAAE;AACrG,EAAA,IAAI,QAAA,CAAS,OAAA,EAAS,KAAK,CAAA,EAAG,OAAO,EAAE,OAAA,EAAS,EAAE,IAAA,EAAM,MAAA,EAAO,EAAE;AACjE,EAAA,IAAI,IAAA,CAAK,KAAA,GAAQ,SAAA,CAAU,MAAA,EAAQ,OAAO,EAAE,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAS,EAAE;AAExE,EAAA,MAAM,OAAA,GAAU,UAAA,CAAW,OAAA,EAAS,KAAK,CAAA;AACzC,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,MAAM,QAAQ,OAAA,EAAQ;AACtB,IAAA,MAAM,IAAA,GAAO,KAAA,EAAO,MAAA,KAAW,OAAA,CAAQ,MAAA,IAAU,OAAA,CAAQ,KAAA,CAAM,CAAC,MAAA,KAAW,KAAA,CAAM,QAAA,CAAS,MAAM,CAAC,CAAA;AACjG,IAAA,OAAO,EAAE,OAAA,EAAS,IAAA,GAAO,KAAA,GAAQ,OAAA,EAAQ;AAAA,EAC3C;AACA,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,OAAA,EAAS,IAAA,EAAM,CAAC,CAAA;AACtC,EAAA,OAAO,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,MAAA,IAAU,EAAE,KAAA,CAAM,IAAA,IAAQ,OAAA,CAAA,GAAW,EAAE,OAAA,EAAS,QAAA,EAAU,IAAA,EAAM,OAAM,GAAI,IAAA;AAC3G;AAEA,IAAM,UAAU,EAAE,OAAA,EAAS,MAAM,MAAA,EAAQ,IAAA,EAAM,QAAQ,IAAA,EAAK;AAI5D,SAAS,QAAA,CAAS,EAAE,GAAA,EAAI,EAAY,KAAA,EAAoC;AACtE,EAAA,OAAO,MAAM,IAAA,CAAK,CAAC,SAAS,IAAA,CAAK,KAAA,GAAQ,IAAI,SAAA,CAAU,MAAM,KAAK,CAAC,KAAA,CAAM,KAAK,CAAC,IAAA,KAAS,KAAK,KAAA,GAAQ,GAAA,CAAI,UAAU,MAAM,CAAA;AAC3H;AAEA,SAAS,UAAA,CAAW,EAAE,GAAA,EAAI,EAAY,KAAA,EAAqC;AACzE,EAAA,OAAO,KAAA,CAAM,MAAA,CAAO,CAAC,IAAA,KAAS,KAAK,KAAA,GAAQ,GAAA,CAAI,SAAA,CAAU,aAAa,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,KAAU,KAA8B,KAAK,CAAA;AAC5H;AAGA,IAAMC,UAAAA,GAAY,CAAA;AAOlB,SAAS,OAAA,CAAQ,OAAA,EAAkB,IAAA,EAAe,KAAA,EAAgC;AAChF,EAAA,MAAM,EAAE,GAAA,EAAK,OAAA,EAAQ,GAAI,OAAA;AACzB,EAAA,MAAM,EAAE,WAAU,GAAI,GAAA;AACtB,EAAA,IAAI,KAAA,GAAQA,YAAW,OAAO,IAAA;AAC9B,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,kBAAA,CAAmB,IAAI,CAAA;AAC7C,EAAA,MAAM,QAAQ,KAAA,CAAM,OAAA,KAAY,KAAA,CAAM,KAAA,GAAQ,CAAC,KAAK,CAAA;AACpD,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAC/B,EAAA,IAAI,KAAA,CAAM,KAAA,CAAM,CAAC,IAAA,KAAS,IAAA,CAAK,KAAA,GAAQ,SAAA,CAAU,WAAW,CAAA,EAAG,OAAO,EAAE,IAAA,EAAM,SAAA,EAAU;AACxF,EAAA,IAAI,SAAS,OAAA,EAAS,KAAK,GAAG,OAAO,EAAE,MAAM,QAAA,EAAS;AACtD,EAAA,IAAI,MAAM,KAAA,GAAQ,SAAA,CAAU,QAAQ,OAAO,EAAE,MAAM,QAAA,EAAS;AAC5D,EAAA,MAAM,QAAA,GAAW,UAAA,CAAW,OAAA,EAAS,KAAK,CAAA;AAC1C,EAAA,IAAI,QAAA,CAAS,MAAA,KAAW,KAAA,CAAM,MAAA,IAAU,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAS;AACpG,EAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,QAAQ,OAAA,EAAS,IAAA,EAAM,KAAA,GAAQ,CAAC,CAAC,CAAA;AACrE,IAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAC,MAAA,KAAW,MAAA,EAAQ,IAAA,KAAS,QAAQ,CAAA,GAAI,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,SAAsB,GAAI,IAAA;AAAA,EAClH;AACA,EAAA,IAAI,OAAA,CAAQ,WAAA,CAAY,KAAK,CAAA,EAAG;AAC9B,IAAA,MAAM,CAAC,IAAI,CAAA,GAAI,OAAA,CAAQ,iBAAiB,KAAyB,CAAA;AACjE,IAAA,MAAM,QAAQ,IAAA,IAAQ,OAAA,CAAQ,OAAA,EAAS,IAAA,EAAM,QAAQ,CAAC,CAAA;AACtD,IAAA,OAAO,QAAQ,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,OAAM,GAAI,IAAA;AAAA,EACnD;AACA,EAAA,IAAI,OAAA,CAAQ,WAAA,CAAY,KAAK,CAAA,EAAG;AAC9B,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,gBAAA,CAAiB,KAAyB,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,KAAS,OAAA,CAAQ,OAAA,EAAS,IAAA,EAAM,KAAA,GAAQ,CAAC,CAAC,CAAA;AACjH,IAAA,MAAM,CAAC,KAAK,CAAA,GAAI,KAAA;AAChB,IAAA,MAAM,IAAA,GAAO,KAAA,IAAS,KAAA,CAAM,KAAA,CAAM,CAAC,IAAA,KAAS,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,KAAM,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AAC1F,IAAA,OAAO,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,OAAM,GAAI,IAAA;AAAA,EAClD;AACA,EAAA,IAAI,EAAE,KAAA,CAAM,KAAA,IAAS,UAAU,MAAA,GAAS,SAAA,CAAU,gBAAgB,OAAO,IAAA;AACzE,EAAA,IAAI,KAAA,CAAM,iBAAA,EAAkB,CAAE,MAAA,GAAS,CAAA,IAAK,MAAM,sBAAA,EAAuB,CAAE,MAAA,GAAS,CAAA,EAAG,OAAO,IAAA;AAC9F,EAAA,IAAI,QAAQ,mBAAA,CAAoB,KAAK,CAAA,CAAE,MAAA,GAAS,GAAG,OAAO,IAAA;AAC1D,EAAA,MAAM,QAAA,GAAA,CAAY,MAAM,SAAA,EAAU,IAAK,MAAM,WAAA,GAAc,eAAA,MAAqB,EAAC;AACjF,EAAA,IAAI,QAAA,CAAS,IAAA,CAAK,CAAC,WAAA,KAAgBD,YAAAA,CAAY,IAAA,CAAK,WAAA,CAAY,aAAA,EAAc,CAAE,QAAQ,CAAC,CAAA,EAAG,OAAO,IAAA;AACnG,EAAA,MAAM,SAAmC,EAAC;AAC1C,EAAA,KAAA,MAAWH,KAAAA,IAAQ,OAAA,CAAQ,mBAAA,CAAoB,KAAK,CAAA,EAAG;AACrD,IAAA,MAAM,KAAA,GAAQ,WAAWA,KAAI,CAAA;AAC7B,IAAA,IAAI,KAAA,CAAM,IAAA,CAAK,CAAC,IAAA,KAASG,YAAAA,CAAY,IAAA,CAAK,IAAI,CAAA,IAAK,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAC,GAAG,OAAO,IAAA;AAClF,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,OAAA,EAAS,OAAA,CAAQ,yBAAA,CAA0BH,OAAM,OAAA,CAAQ,EAAE,CAAA,EAAG,KAAA,GAAQ,CAAC,CAAA;AAC7F,IAAA,IAAI,KAAA,EAAO,MAAA,CAAOA,KAAAA,CAAK,OAAA,EAAS,CAAA,GAAI,KAAA;AAAA,SAAA,IAC3B,EAAEA,KAAAA,CAAK,KAAA,GAAQ,GAAA,CAAI,WAAA,CAAY,WAAW,OAAO,IAAA;AAC1D,IAAA,MAAA,CAAO,SAAS,KAAK,CAAA;AAAA,EACvB;AACA,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,MAAA,EAAO,GAAI,IAAA;AAC9E;AAMA,SAAS,YAAA,CAAa,GAAA,EAAgB,OAAA,EAAyBA,KAAAA,EAAkC;AAC/F,EAAA,MAAM,CAAC,aAAa,GAAG,MAAM,IAAIA,KAAAA,CAAK,eAAA,MAAqB,EAAC;AAC5D,EAAA,IAAI,CAAC,WAAA,IAAe,MAAA,CAAO,MAAA,GAAS,GAAG,OAAO,IAAA;AAC9C,EAAA,IAAI,CAAC,GAAA,CAAI,mBAAA,CAAoB,WAAW,CAAA,IAAK,CAAC,GAAA,CAAI,qBAAA,CAAsB,WAAW,CAAA,EAAG,OAAO,IAAA;AAC7F,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAa;AAC9B,EAAA,MAAM,QAAA,GAAW,CAAC,IAAA,KAAmD;AACnE,IAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,GAAA,CAAI,IAAI,GAAG,OAAO,IAAA;AACpC,IAAA,IAAA,CAAK,IAAI,IAAI,CAAA;AACb,IAAA,IAAI,IAAI,uBAAA,CAAwB,IAAI,GAAG,OAAO,QAAA,CAAS,KAAK,IAAI,CAAA;AAChE,IAAA,IAAI,GAAA,CAAI,iBAAA,CAAkB,IAAI,CAAA,EAAG;AAC/B,MAAA,IAAI,KAAK,OAAA,CAAQ,IAAA,KAAS,IAAI,UAAA,CAAW,WAAA,SAAoB,EAAC;AAC9D,MAAA,OAAO,GAAA,CAAI,oBAAoB,IAAA,CAAK,OAAO,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA,GAAI,IAAA;AAAA,IACvE;AACA,IAAA,IAAI,KAAK,IAAA,KAAS,GAAA,CAAI,UAAA,CAAW,gBAAA,SAAyB,EAAC;AAC3D,IAAA,IAAI,GAAA,CAAI,eAAA,CAAgB,IAAI,CAAA,EAAG;AAC7B,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA;AACrC,MAAA,OAAO,KAAA,CAAM,KAAA,CAAM,CAAC,IAAA,KAAS,SAAS,IAAI,CAAA,GAAI,CAAC,GAAG,IAAI,GAAA,CAAI,KAAA,CAAM,IAAA,EAAM,CAAC,CAAA,GAAI,IAAA;AAAA,IAC7E;AACA,IAAA,IAAI,IAAI,mBAAA,CAAoB,IAAI,CAAA,IAAK,CAAC,KAAK,aAAA,EAAe;AACxD,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,mBAAA,CAAoB,IAAA,CAAK,QAAQ,CAAA;AACvD,MAAA,MAAM,MAAA,GAAS,KAAA,IAAS,KAAA,CAAM,KAAA,GAAQ,GAAA,CAAI,YAAY,KAAA,GAAQ,OAAA,CAAQ,gBAAA,CAAiB,KAAK,CAAA,GAAI,KAAA;AAChG,MAAA,MAAM,CAAC,OAAO,GAAG,IAAI,IAAI,MAAA,EAAQ,eAAA,MAAqB,EAAC;AACvD,MAAA,IAAI,KAAA,IAAS,IAAA,CAAK,MAAA,KAAW,CAAA,IAAK,GAAA,CAAI,uBAAuB,KAAK,CAAA,IAAK,CAAC,KAAA,CAAM,cAAA,EAAgB;AAC5F,QAAA,OAAO,QAAA,CAAS,MAAM,IAAI,CAAA;AAAA,MAC5B;AAEA,MAAA,IAAI,MAAA,IAAU,MAAA,CAAO,KAAA,IAAS,GAAA,CAAI,WAAA,CAAY,YAAY,GAAA,CAAI,WAAA,CAAY,KAAA,CAAA,EAAQ,OAAO,EAAC;AAAA,IAC5F;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AACA,EAAA,OAAO,QAAA,CAAS,YAAY,IAAI,CAAA;AAClC;;;ACvQA,IAAM,SAAA,GAAY,CAAC,GAAA,KAAkB,GAAA,YAAe,QAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAM7E,SAAS,YAAA,CACd,QACA,IAAA,EACA,QAAA,EACA,EAAE,QAAA,EAAU,GAAA,IACZ,IAAA,EACqC;AACrC,EAAA,IAAI,IAAA,GAAO,EAAA;AACX,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAC9B,MAAA,IAAI,SAAS,MAAA,CAAO,IAAA,CAAK,MAAM,QAAQ,CAAA,CAAE,SAAS,CAAA,EAAG;AACnD,QAAA,IAAA,IAAQ;AAAA,aAAA,EAAkB,qBAAqB,CAAA,GAAA,EAAM,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,QAAQ,CAAC,CAAA;AAAA,CAAA;AACnF,QAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,KAAA,CAAM,OAAO,CAAA;AAAA,MAC/B;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,IAAA,CAAK,gCAAgC,IAAI,CAAA,EAAA,EAAK,SAAA,CAAU,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,IAChE;AAAA,EACF;AACA,EAAA,IAAI,GAAA,EAAK;AACP,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAA,CAAO,GAAA,CAAI,IAAA,EAAM,QAAQ,CAAA;AACtC,MAAA,MAAM,KAAA,GAAQ,IAAA,IAAQ,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,SAAA,EAAW,IAAA,CAAK,SAAA,EAAW,GAAA,EAAK,IAAA,CAAK,GAAA,EAAI;AACpF,MAAA,IAAA,IAAQ;AAAA,aAAA,EAAkB,UAAU,CAAA,GAAA,EAAM,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,CAAA;AAC/D,MAAA,IAAI,IAAA,EAAM,OAAA,CAAQ,IAAA,CAAK,GAAG,KAAK,OAAO,CAAA;AAAA,IACxC,SAAS,GAAA,EAAK;AACZ,MAAA,IAAA,CAAK,8BAA8B,IAAI,CAAA,EAAA,EAAK,SAAA,CAAU,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,IAC9D;AAAA,EACF;AACA,EAAA,OAAO,EAAE,MAAM,OAAA,EAAQ;AACzB;AAOO,SAAS,aACd,OAAA,EACA,UAAA,EACA,QAAA,EACA,OAAA,GAA+B,EAAC,EACxB;AACR,EAAA,IAAI,IAAA,GAAO,QAAQ,GAAA,EAAI;AAEvB,EAAA,IAAI,MAAA,GAA4C,IAAA;AAChD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,2BAAA;AAAA,IACN,eAAe,MAAA,EAAQ;AACrB,MAAA,IAAA,GAAO,MAAA,CAAO,IAAA;AACd,MAAA,MAAA,GAAS,IAAA;AAAA,IACX,CAAA;AAAA,IACA,MAAM,SAAA,CAAU,IAAA,EAAM,EAAA,EAAI;AACxB,MAAA,IAAI,CAAC,OAAA,EAAQ,CAAE,QAAA,CAAS,EAAE,GAAG,OAAO,MAAA;AACpC,MAAA,MAAM,QAAQ,OAAO,MAAA,KAAW,gBAAA,CAAiB,IAAA,EAAM,SAAS,OAAO,CAAA,CAAA;AACvE,MAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,MAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,KAAA,EAAO,EAAA,EAAI,UAAA,CAAW,EAAE,CAAA,EAAG,QAAA,EAAU,CAAC,OAAA,KAAY,IAAA,CAAK,IAAA,CAAK,OAAO,CAAC,CAAA;AAC/F,MAAA,IAAI,CAAC,KAAA,CAAM,IAAA,EAAM,OAAO,MAAA;AAExB,MAAA,KAAA,MAAW,MAAA,IAAU,IAAI,GAAA,CAAI,KAAA,CAAM,OAAO,CAAA,EAAG,IAAA,CAAK,aAAa,MAAM,CAAA;AACrE,MAAA,OAAO,EAAE,IAAA,EAAM,IAAA,GAAO,KAAA,CAAM,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,IAC9C;AAAA,GACF;AACF;ACrEO,IAAM,QAAY,CAAC,IAAA,EAAM,QAC9B,IAAI,OAAA,CAAQ,CAAC,IAAA,KAAS;AACpB,EAAAK,QAAAA;AAAA,IACE,IAAA;AAAA,IACA,CAAC,GAAG,IAAI,CAAA;AAAA,IACR,EAAE,GAAA,EAAK,SAAA,EAAW,EAAA,IAAM,EAAA,EAAI,GAAA,EAAK,EAAE,GAAG,OAAA,CAAQ,GAAA,EAAK,kBAAA,EAAoB,GAAA,EAAI,EAAE;AAAA,IAC7E,CAAC,KAAA,EAAO,MAAA,EAAQ,MAAA,KAAW;AACzB,MAAA,IAAI,CAAC,KAAA,EAAO,OAAO,IAAA,CAAK,EAAE,QAAQ,CAAA;AAClC,MAAA,IAAK,KAAA,CAAgC,SAAS,QAAA,EAAU,OAAO,KAAK,EAAE,OAAA,EAAS,MAAM,CAAA;AACrF,MAAA,IAAA,CAAK,EAAE,MAAA,EAAQ,MAAA,CAAO,IAAA,MAAU,KAAA,CAAM,OAAA,EAAS,IAAA,EAAM,OAAO,MAAM,IAAA,KAAS,QAAA,GAAW,KAAA,CAAM,IAAA,GAAO,MAAM,CAAA;AAAA,IAC3G;AAAA,GACF;AACF,CAAC,CAAA;AAQH,IAAM,GAAA,GAAM,oEAAA;AACZ,IAAM,QAAA,GAAW,+FAAA;AAMV,SAAS,OAAO,MAAA,EAAmC;AACxD,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,IAAA,CAAK,MAAA,CAAO,IAAA,EAAM,CAAA,IAAK,QAAA,CAAS,IAAA,CAAK,MAAA,CAAO,IAAA,EAAM,CAAA;AACpE,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,MAAM,GAAG,OAAA,GAAU,EAAA,EAAI,QAAQ,EAAA,EAAI,IAAA,GAAO,EAAE,CAAA,GAAI,KAAA;AAChD,EAAA,MAAM,OAAO,OAAA,KAAY,YAAA,IAAgB,QAAQ,QAAA,CAAS,aAAa,IAAI,YAAA,GAAe,OAAA;AAC1F,EAAA,MAAM,IAAA,GAAO,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AAC7B,EAAA,OAAO,EAAE,IAAA,EAAM,GAAA,EAAK,CAAA,QAAA,EAAW,IAAI,IAAI,IAAI,CAAA,CAAA,EAAI,MAAA,EAAQ,IAAA,KAAS,eAAe,IAAA,GAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAG;AAC1G;AAEA,IAAM,OAAA,GAAU,OAAO,GAAA,KAAuD;AAC5E,EAAA,IAAI;AACF,IAAA,OAAA,CAAQ,MAAM,GAAA,EAAI,EAAG,IAAA,EAAK,IAAK,IAAA;AAAA,EACjC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;AAGA,IAAM,YAAA,GAAe,CAAA;AASrB,IAAM,IAAA,GAAO,CAAC,GAAA,EAAqB,MAAA,EAAgBC,KAAAA,KAAkB;AACnE,EAAA,GAAA,CAAI,UAAA,GAAa,MAAA;AACjB,EAAA,GAAA,CAAI,SAAA,CAAU,gBAAgB,kBAAkB,CAAA;AAChD,EAAA,GAAA,CAAI,GAAA,CAAI,IAAA,CAAK,SAAA,CAAUA,KAAI,CAAC,CAAA;AAC9B,CAAA;AAOO,SAAS,WAAA,CACd,MAAA,EACA,IAAA,EACA,IAAA,EACA,EAAE,EAAA,GAAK,KAAA,EAAO,GAAA,GAAM,MAAA,EAAO,GAA4B,EAAC,EAClD;AACN,EAAA,MAAM,MAAA,GAAS,OAAO,SAAA,KAAuE;AAC3F,IAAA,MAAM,MAAM,IAAA,EAAK;AACjB,IAAA,MAAM,CAAC,MAAA,EAAQ,IAAA,EAAM,MAAM,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,MAC/C,OAAA,CAAQ,MAAM,GAAA,CAAI,CAAC,UAAU,SAAA,EAAW,QAAQ,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,MACvD,OAAA,CAAQ,MAAM,GAAA,CAAI,CAAC,aAAa,cAAA,EAAgB,MAAM,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,MAC7D,OAAA,CAAQ,MAAM,GAAA,CAAI,CAAC,aAAa,MAAM,CAAA,EAAG,GAAG,CAAC;AAAA,KAC9C,CAAA;AACD,IAAA,MAAM,KAAA,GAAQ,MAAA,KAAW,IAAA,GAAO,IAAA,GAAO,OAAO,MAAM,CAAA;AACpD,IAAA,MAAM,OAAA,GAAwB;AAAA,MAC5B,IAAA,EAAM,SAAS,EAAE,IAAA,EAAM,MAAM,IAAA,EAAM,GAAA,EAAK,MAAM,GAAA,EAAI;AAAA,MAClD,MAAA,EAAQ,IAAA,KAAS,MAAA,GAAS,IAAA,GAAO,IAAA;AAAA,MACjC;AAAA,KACF;AACA,IAAA,IAAI,CAAC,KAAA,EAAO,OAAO,EAAE,MAAA,EAAQ,GAAA,EAAK,IAAA,EAAM,EAAE,GAAG,OAAA,EAAS,WAAA,EAAa,yDAAA,EAAqD,EAAE;AAC1H,IAAA,MAAM,MAAA,GAAS,4BAAA;AACf,IAAA,MAAM,SAAS,MAAM,EAAA;AAAA,MACnB,CAAC,OAAA,EAAS,MAAA,EAAQ,IAAA,EAAM,KAAA,CAAM,MAAA,EAAQ,SAAA,EAAW,UAAA,CAAW,SAAS,CAAA,EAAG,SAAA,EAAW,MAAA,EAAQ,UAAU,MAAM,CAAA;AAAA,MAC3G;AAAA,KACF;AACA,IAAA,IAAI,SAAA,IAAa,MAAA,EAAQ,OAAO,EAAE,MAAA,EAAQ,GAAA,EAAK,IAAA,EAAM,EAAE,GAAG,OAAA,EAAS,WAAA,EAAa,uCAAA,EAAwC,EAAE;AAC1H,IAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,MAAA,IAAI,OAAO,IAAA,KAAS,YAAA,IAAgB,gBAAgB,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,EAAG;AACvE,QAAA,OAAO,EAAE,QAAQ,GAAA,EAAK,IAAA,EAAM,EAAE,GAAG,OAAA,EAAS,WAAA,EAAa,0DAAA,EAA2D,EAAE;AAAA,MACtH;AACA,MAAA,OAAO,EAAE,MAAA,EAAQ,GAAA,EAAK,IAAA,EAAM,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,MAAA,CAAO,MAAA,EAAO,EAAE;AAAA,IACnE;AACA,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA;AAAA,IACnC,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,EAAE,QAAQ,GAAA,EAAK,IAAA,EAAM,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,wCAAA,EAAyC,EAAE;AAAA,IAC9F;AACA,IAAA,MAAM,SAAS,MAAA,CAAO,GAAA,CAAI,CAAC,EAAE,QAAQ,KAAA,EAAO,GAAA,EAAK,SAAA,EAAU,MAAmB,EAAE,MAAA,EAAQ,KAAA,EAAO,GAAA,EAAK,MAAA,EAAQ,WAAU,CAAE,CAAA;AACxH,IAAA,OAAO,EAAE,QAAQ,GAAA,EAAK,IAAA,EAAM,EAAE,GAAG,OAAA,EAAS,QAAO,EAAE;AAAA,EACrD,CAAA;AAEA,EAAA,MAAA,CAAO,WAAA,CAAY,GAAA,CAAI,CAAC,GAAA,EAAK,KAAK,IAAA,KAAS;AACzC,IAAA,MAAM,MAAM,IAAI,GAAA,CAAI,GAAA,CAAI,GAAA,IAAO,KAAK,sBAAsB,CAAA;AAC1D,IAAA,IAAI,GAAA,CAAI,aAAa,CAAA,EAAG,IAAI,GAAG,WAAW,CAAA,CAAA,SAAW,IAAA,EAAK;AAC1D,IAAA,IAAI,GAAA,CAAI,MAAA,KAAW,KAAA,EAAO,OAAO,IAAA,EAAK;AACtC,IAAA,MAAM,YAAY,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,WAAW,GAAG,IAAA,EAAK;AAC1D,IAAA,IAAI,CAAC,WAAW,OAAO,IAAA,CAAK,KAAK,GAAA,EAAK,EAAE,KAAA,EAAO,qCAAA,EAAuC,CAAA;AACtF,IAAA,MAAA,CAAO,SAAS,CAAA,CAAE,IAAA,CAAK,CAAC,EAAE,MAAA,EAAQ,IAAA,EAAAA,KAAAA,EAAK,KAAM,IAAA,CAAK,GAAA,EAAK,MAAA,EAAQA,KAAI,GAAG,IAAI,CAAA;AAAA,EAC5E,CAAC,CAAA;AACH;ACnHO,IAAM,aAAA,GAAgB,IAAA;AAEtB,IAAM,gBAAA,GAAmB,GAAA;AACzB,IAAM,SAAA,GAAY,CAAA;AAClB,IAAM,UAAA,GAAa,uBAAA;AACnB,IAAM,kBAAA,GAAqB,oBAAA;AAC3B,IAAM,gBAAA,GAAmB,kEAAA;AAKhC,IAAM,cAAA,GAAuB,MAAM,OAAO,YAAY,CAAA;AAQtD,eAAsB,mBAAA,CAAoB,OAAa,cAAA,EAAwE;AAC7H,EAAA,IAAI,UAAA;AACJ,EAAA,IAAI;AACF,IAAA,UAAA,GAAa,MAAM,IAAA,EAAK;AAAA,EAC1B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAE,aAAa,kBAAA,EAAmB;AAAA,EAC3C;AACA,EAAA,IAAI,UAAA;AACJ,EAAA,IAAI;AACF,IAAA,UAAA,GAAa,UAAA,CAAW,SAAS,cAAA,EAAe;AAAA,EAClD,SAAS,GAAA,EAAK;AACZ,IAAA,OAAO,EAAE,WAAA,EAAa,SAAA,CAAU,GAAG,CAAA,EAAE;AAAA,EACvC;AACA,EAAA,OAAOR,UAAAA,CAAW,UAAU,CAAA,GAAI,EAAE,WAAW,IAAA,EAAK,GAAI,EAAE,WAAA,EAAa,gBAAA,EAAiB;AACxF;AAGA,IAAM,+BAAe,IAAI,GAAA,CAAI,CAAC,kBAAA,EAAoB,gBAAA,EAAkB,mBAAmB,CAAC,CAAA;AAKxF,eAAe,WAAA,CAAY,OAAc,SAAA,EAAwC;AAC/E,EAAA,MAAM,OAAA,GAAU,MAAM,OAAA,EAAQ;AAC9B,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,EAAO;AAC9B,EAAA,IAAI,WAAW,KAAA,IAAS,MAAA,KAAW,MAAA,EAAQ,OAAO,MAAM,KAAA,EAAM;AAC9D,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU,OAAA,CAAQ,KAAI,EAAG,EAAE,MAAA,EAAQ,OAAA,EAAS,OAAA,CAAQ,OAAA,EAAQ,EAAG,QAAA,EAAU,UAAU,CAAA;AAC1G,IAAA,MAAM,MAAM,OAAA,CAAQ;AAAA,MAClB,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,SAAS,MAAA,CAAO,WAAA,CAAY,CAAC,GAAG,QAAA,CAAS,OAAO,CAAA,CAAE,MAAA,CAAO,CAAC,CAAC,IAAI,CAAA,KAAM,CAAC,aAAa,GAAA,CAAI,IAAI,CAAC,CAAC,CAAA;AAAA,MAC7F,MAAM,MAAA,CAAO,IAAA,CAAK,MAAM,QAAA,CAAS,aAAa;AAAA,KAC/C,CAAA;AAAA,EACH,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,MAAM,KAAA,EAAM;AAAA,EACpB;AACF;AAMA,eAAe,KAAA,CAAM,IAAA,EAAY,GAAA,EAAa,KAAA,EAA0B,SAAA,EAAwC;AAC9G,EAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,GAAG,CAAA;AACvB,EAAA,MAAM,MAAA,GAAS,IAAI,QAAA,KAAa,QAAA;AAChC,EAAA,MAAM,KAAA,GAAQ,IAAI,GAAA,CAAI,KAAK,CAAA;AAC3B,EAAA,MAAM,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ,CAAC,KAAA,KAAU;AAClC,IAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,KAAA,CAAM,SAAQ,CAAE,GAAA,EAAK,CAAA,CAAE,MAAA;AAC9C,IAAA,IAAI,MAAA,KAAW,GAAA,CAAI,MAAA,EAAQ,OAAO,MAAM,QAAA,EAAS;AACjD,IAAA,IAAI,CAAC,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA,EAAG,OAAO,MAAM,KAAA,EAAM;AAC3C,IAAA,OAAO,SAAS,WAAA,CAAY,KAAA,EAAO,SAAS,CAAA,GAAI,MAAM,QAAA,EAAS;AAAA,EACjE,CAAC,CAAA;AAED,EAAA,MAAM,YAAY,CAAA,EAAG,MAAA,GAAS,SAAS,KAAK,CAAA,EAAA,EAAK,IAAI,IAAI,CAAA,CAAA;AACzD,EAAA,MAAM,IAAA,CAAK,cAAA;AAAA,IACT,CAAC,MAAM,CAAA,EAAG,CAAA,CAAE,QAAQ,CAAA,EAAA,EAAK,CAAA,CAAE,IAAI,CAAA,CAAA,KAAO,SAAA;AAAA,IACtC,CAAC,EAAA,KAAO,EAAA,CAAG,KAAA;AAAM,GACnB;AACF;AAMA,eAAsB,oBAAA,CACpB,IAAA,GAAa,cAAA,EACb,SAAA,GAA0B,KAAA,EACyB;AACnD,EAAA,IAAI,UAAA;AACJ,EAAA,IAAI;AACF,IAAA,UAAA,GAAa,MAAM,IAAA,EAAK;AAAA,EAC1B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAE,aAAa,kBAAA,EAAmB;AAAA,EAC3C;AACA,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI;AACF,IAAA,QAAA,GAAW,OAAA,CAAQ,OAAA,CAAQ,MAAM,UAAA,CAAW,QAAA,CAAS,OAAO,EAAE,QAAA,EAAU,IAAA,EAAM,CAAC,CAAA;AAAA,EACjF,SAAS,GAAA,EAAK;AACZ,IAAA,OAAO,EAAE,WAAA,EAAa,SAAA,CAAU,GAAG,CAAA,EAAE;AAAA,EACvC;AAEA,EAAA,MAAM,QAAA,uBAAe,GAAA,EAAqC;AAC1D,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI,WAAA,GAAc,CAAA;AAClB,EAAA,IAAI,IAAA,GAAyB,QAAQ,OAAA,EAAQ;AAE7C,EAAA,MAAM,OAAO,YAAY;AACvB,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,MAAM,OAAA,GAAU,QAAA;AAChB,IAAA,QAAA,GAAW,IAAA;AACX,IAAA,QAAA,CAAS,KAAA,EAAM;AACf,IAAA,MAAM,SAAS,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,KAAA,IAAS,MAAM;AAAA,IAAC,CAAC,CAAA;AAAA,EAChD,CAAA;AACA,EAAA,MAAM,MAAM,MAAM;AAChB,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,IAAA,GAAO,UAAA,CAAW,MAAM,KAAK,IAAA,IAAQ,aAAa,CAAA;AAClD,IAAA,IAAA,CAAK,KAAA,IAAQ;AAAA,EACf,CAAA;AACA,EAAA,MAAM,UAAU,MAAwB;AACtC,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,YAAY,UAAA,CAAW,QAAA,CAAS,OAAO,EAAE,QAAA,EAAU,MAAM,CAAA;AAC/D,MAAA,QAAA,GAAW,SAAA;AACX,MAAA,SAAA,CAAU,MAAM,MAAM;AACpB,QAAA,IAAI,QAAA,KAAa,WAAW,QAAA,GAAW,IAAA;AAAA,MACzC,CAAC,CAAA;AAAA,IACH;AACA,IAAA,OAAO,QAAA;AAAA,EACT,CAAA;AAKA,EAAA,MAAM,UAAA,GAAa,CAAC,GAAA,EAAa,MAAA,KAA6C;AAC5E,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAC5B,IAAA,IAAI,OAAA,GAAU,QAAA,CAAS,GAAA,CAAI,GAAG,CAAA;AAC9B,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,MAAA,GAAS,SAAQ,CAAE,IAAA;AAAA,QAAK,CAAC,CAAA,KAC7B,CAAA,CAAE,UAAA,CAAW,EAAE,iBAAA,EAAmB,GAAA,EAAK,iBAAA,EAAmB,MAAA,EAAQ,cAAA,EAAgB,OAAA,EAAS;AAAA,OAC7F;AACA,MAAA,OAAA,GAAU,MAAA;AACV,MAAA,QAAA,CAAS,GAAA,CAAI,KAAK,MAAM,CAAA;AACxB,MAAA,MAAA,CAAO,MAAM,MAAM;AACjB,QAAA,IAAI,SAAS,GAAA,CAAI,GAAG,MAAM,MAAA,EAAQ,QAAA,CAAS,OAAO,GAAG,CAAA;AAAA,MACvD,CAAC,CAAA;AAAA,IACH;AACA,IAAA,OAAO,OAAA;AAAA,EACT,CAAA;AACA,EAAA,MAAM,MAAA,GAAS,OAAO,IAAA,EAAY,OAAA,EAAyB,KAAa,KAAA,KAA8C;AACpH,IAAA,MAAM,KAAA,CAAM,IAAA,EAAM,GAAA,EAAK,KAAA,EAAO,SAAS,CAAA;AACvC,IAAA,MAAM,KAAK,eAAA,CAAgB,EAAE,KAAA,EAAO,IAAA,CAAK,KAAK,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,EAAG,QAAQ,IAAA,CAAK,IAAA,CAAK,QAAQ,GAAA,CAAI,MAAM,GAAG,CAAA;AACzG,IAAA,MAAM,KAAK,YAAA,CAAa,EAAE,WAAA,EAAa,OAAA,CAAQ,aAAa,CAAA;AAC5D,IAAA,MAAM,IAAA,CAAK,KAAK,GAAG,CAAA;AACnB,IAAA,MAAM,IAAA,CAAK,eAAA,CAAgB,MAAO,MAAA,CAAyB,mBAAmB,MAAS,CAAA;AACvF,IAAA,MAAM,IAAA,CAAK,SAAS,CAAC,CAAA,KAAO,OAAyB,cAAA,CAAgB,MAAA,CAAO,CAAC,CAAA,EAAG,OAAO,CAAA;AACvF,IAAA,OAAO,IAAA,CAAK,QAAQ,mBAAmB,CAAA,CAAE,WAAW,EAAE,IAAA,EAAM,OAAO,CAAA;AAAA,EACrE,CAAA;AAGA,EAAA,MAAM,KAAA,GAAQ,OAAO,GAAA,EAAa,OAAA,EAAyB,KAAA,KAA8C;AACvG,IAAA,IAAI,IAAA,GAAoB,IAAA;AACxB,IAAA,IAAI,IAAA,GAAO,KAAA;AACX,IAAA,IAAI,KAAA;AACJ,IAAA,MAAM,QAAA,GAAW,IAAI,OAAA,CAAe,CAAC,GAAG,MAAA,KAAW;AACjD,MAAA,KAAA,GAAQ,UAAA,CAAW,MAAM,MAAA,CAAO,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,gBAAA,GAAmB,GAAI,CAAA,EAAA,CAAI,CAAC,CAAA,EAAG,gBAAgB,CAAA;AAAA,IACvH,CAAC,CAAA;AACD,IAAA,MAAM,QAAQ,YAAY;AACxB,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAM,UAAA,CAAW,OAAA,CAAQ,GAAA,EAAK,GAAA,CAAI,UAAA,CAAW,QAAQ,CAAC,CAAA,EAAG,OAAA,EAAQ;AACvF,MAAA,IAAA,GAAO,MAAA;AACP,MAAA,IAAI,IAAA,EAAM,MAAM,IAAI,KAAA,CAAM,mBAAmB,CAAA;AAC7C,MAAA,OAAO,MAAA,CAAO,MAAA,EAAQ,OAAA,EAAS,GAAA,EAAK,KAAK,CAAA;AAAA,IAC3C,CAAA,GAAG;AACH,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,OAAA,CAAQ,IAAA,CAAK,CAAC,IAAA,EAAM,QAAQ,CAAC,CAAA;AAAA,IAC5C,CAAA,SAAE;AACA,MAAA,IAAA,GAAO,IAAA;AACP,MAAA,YAAA,CAAa,KAAK,CAAA;AAElB,MAAA,MAAO,IAAA,EAAsB,KAAA,EAAM,CAAE,KAAA,CAAM,MAAM;AAAA,MAAC,CAAC,CAAA;AACnD,MAAA,KAAK,KAAK,KAAA,CAAM,MAAO,MAAsB,KAAA,EAAM,CAAE,MAAM,MAAM;AAAA,MAAC,CAAC,CAAC,CAAA;AAAA,IACtE;AAAA,EACF,CAAA;AAEA,EAAA,GAAA,EAAI;AACJ,EAAA,OAAO;AAAA,IACL,OAAA,CAAQ,GAAA,EAAK,OAAA,EAAS,KAAA,GAAQ,EAAC,EAAG;AAChC,MAAA,IAAI,WAAA,IAAe,WAAW,OAAO,OAAA,CAAQ,OAAO,IAAI,KAAA,CAAM,UAAU,CAAC,CAAA;AACzE,MAAA,WAAA,IAAe,CAAA;AACf,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA,MAAM,GAAA,GAAM,KAAK,IAAA,CAAK,MAAM,MAAM,GAAA,EAAK,OAAA,EAAS,KAAK,CAAC,CAAA;AACtD,MAAA,IAAA,GAAO,GAAA,CAAI,MAAM,MAAM;AAAA,MAAC,CAAC,CAAA;AACzB,MAAA,OAAO,GAAA,CAAI,QAAQ,MAAM;AACvB,QAAA,WAAA,IAAe,CAAA;AACf,QAAA,IAAI,WAAA,KAAgB,GAAG,GAAA,EAAI;AAAA,MAC7B,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IACA,KAAA,EAAO;AAAA,GACT;AACF;;;ACrMO,SAAS,kBAAA,CAAmB,SAA6C,EAAE,OAAA,EAAS,IAAI,KAAA,EAAO,EAAA,GAAK,IAAA,GAAO,IAAA,EAAK,EAAiB;AAEtI,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAoB;AACrC,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,MAAM,IAAA,GAAO,CAAC,GAAA,KAAgB;AAC5B,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AACxB,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,IAAA,IAAA,CAAK,OAAO,GAAG,CAAA;AACf,IAAA,KAAA,IAAS,GAAA,CAAI,MAAA;AAAA,EACf,CAAA;AACA,EAAA,OAAO;AAAA,IACL,IAAI,GAAA,EAAK;AACP,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AACxB,MAAA,IAAI,CAAC,KAAK,OAAO,MAAA;AACjB,MAAA,IAAA,CAAK,OAAO,GAAG,CAAA;AACf,MAAA,IAAA,CAAK,GAAA,CAAI,KAAK,GAAG,CAAA;AACjB,MAAA,OAAO,GAAA;AAAA,IACT,CAAA;AAAA,IACA,GAAA,CAAI,KAAK,GAAA,EAAK;AACZ,MAAA,IAAA,CAAK,GAAG,CAAA;AACR,MAAA,IAAI,GAAA,CAAI,MAAA,GAAS,MAAA,CAAO,KAAA,EAAO;AAC/B,MAAA,IAAA,CAAK,GAAA,CAAI,KAAK,GAAG,CAAA;AACjB,MAAA,KAAA,IAAS,GAAA,CAAI,MAAA;AACb,MAAA,KAAA,MAAW,MAAA,IAAU,IAAA,CAAK,IAAA,EAAK,EAAG;AAChC,QAAA,IAAI,KAAK,IAAA,IAAQ,MAAA,CAAO,OAAA,IAAW,KAAA,IAAS,OAAO,KAAA,EAAO;AAC1D,QAAA,IAAA,CAAK,MAAM,CAAA;AAAA,MACb;AAAA,IACF,CAAA;AAAA,IACA,KAAA,GAAQ;AACN,MAAA,IAAA,CAAK,KAAA,EAAM;AACX,MAAA,KAAA,GAAQ,CAAA;AAAA,IACV,CAAA;AAAA,IACA,IAAI,IAAA,GAAO;AACT,MAAA,OAAO,IAAA,CAAK,IAAA;AAAA,IACd,CAAA;AAAA,IACA,IAAI,KAAA,GAAQ;AACV,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,GACF;AACF;;;AClCA,IAAM,QAAA,GAAW,KAAK,IAAA,GAAO,IAAA;AAI7B,IAAMS,MAAAA,GAAQ,CAAC,OAAA,KAA4B,UAAA,CAAW,MAAM,CAAA,CAAE,MAAA,CAAO,eAAA,CAAgB,OAAO,CAAC,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA;AAGpG,IAAM,OAAA,GAAU,CAAC,OAAA,KAA4B;AAClD,EAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,OAAA,CAAQ,iCAAA,EAAmC,EAAE,CAAA;AAChE,EAAA,OAAO,EAAA,CAAG,QAAA,CAAS,GAAG,CAAA,GAAI,CAAA,CAAA,EAAI,GAAG,OAAA,CAAQ,GAAA,EAAK,KAAK,CAAC,CAAA,CAAA,CAAA,GAAM,EAAA;AAC5D,CAAA;AAMA,IAAM,eAAe,CAAC,GAAA,EAAsB,QAAA,KAC1C,CAAA,EAAG,QAAQ,CAAA,GAAA,EAAM,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,gBAAgB,WAAW,CAAC,CAAA,CAAA,EAAI,GAAA,CAAI,OAAO,SAAS,CAAA,CAAA;AAE1F,IAAM,2BAAW,IAAI,GAAA,CAAI,CAAC,WAAA,EAAa,WAAA,EAAa,OAAO,CAAC,CAAA;AAI5D,SAAS,SAAA,CAAU,MAAA,EAAgB,GAAA,EAAsB,QAAA,EAAkB,MAAA,EAAgC;AACzG,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI;AACF,IAAA,GAAA,GAAM,IAAI,IAAI,MAAM,CAAA;AAAA,EACtB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,IAAI,MAAA,KAAW,YAAA,CAAa,GAAA,EAAK,QAAQ,GAAG,OAAO,IAAA;AACvD,EAAA,IAAI,IAAI,QAAA,KAAa,CAAA,EAAG,QAAQ,CAAA,CAAA,CAAA,IAAO,SAAS,GAAA,CAAI,GAAA,CAAI,QAAQ,CAAA,IAAK,IAAI,IAAA,KAAS,MAAA,CAAO,IAAI,MAAA,CAAO,SAAS,GAAG,OAAO,IAAA;AACvH,EAAA,MAAM,OAAA,GAAU,CAAC,GAAI,MAAA,CAAO,YAAA,EAAc,KAAA,IAAS,EAAC,EAAI,GAAI,MAAA,CAAO,YAAA,EAAc,OAAA,IAAW,EAAG,CAAA;AAC/F,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,IAAI,IAAI,CAAC,CAAA,CAAE,MAAA,KAAW,GAAA,CAAI,MAAM,CAAA;AAC7D;AAEA,IAAMC,KAAAA,GAAO,CAAC,GAAA,EAAqB,MAAA,EAAgBF,KAAAA,KAAkB;AACnE,EAAA,GAAA,CAAI,UAAA,GAAa,MAAA;AACjB,EAAA,GAAA,CAAI,SAAA,CAAU,gBAAgB,kBAAkB,CAAA;AAChD,EAAA,GAAA,CAAI,GAAA,CAAI,IAAA,CAAK,SAAA,CAAUA,KAAI,CAAC,CAAA;AAC9B,CAAA;AAEA,SAAS,SAAS,GAAA,EAA8C;AAC9D,EAAA,OAAO,IAAI,OAAA,CAAQ,CAACpB,QAAAA,EAAS,MAAA,KAAW;AACtC,IAAA,MAAM,SAAmB,EAAC;AAC1B,IAAA,IAAI,IAAA,GAAO,CAAA;AACX,IAAA,GAAA,CAAI,EAAA,CAAG,MAAA,EAAQ,CAAC,KAAA,KAAkB;AAChC,MAAA,IAAA,IAAQ,KAAA,CAAM,MAAA;AACd,MAAA,IAAI,QAAQ,QAAA,EAAU,OAAO,KAAK,MAAA,CAAO,KAAK,KAAK,CAAA;AAEnD,MAAA,GAAA,CAAI,KAAA,EAAM;AACV,MAAA,GAAA,CAAI,mBAAmB,MAAM,CAAA;AAC7B,MAAAA,SAAQ,IAAI,CAAA;AAAA,IACd,CAAC,CAAA;AACD,IAAA,GAAA,CAAI,EAAA,CAAG,KAAA,EAAO,MAAMA,QAAAA,CAAQ,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,CAAE,QAAA,CAAS,MAAM,CAAC,CAAC,CAAA;AACnE,IAAA,GAAA,CAAI,EAAA,CAAG,SAAS,MAAM,CAAA;AAAA,EACxB,CAAC,CAAA;AACH;AAQO,SAAS,aACd,MAAA,EACA,IAAA,EACA,YAAA,GAAwC,MAAM,EAAC,EAC9B;AACjB,EAAA,MAAM,QAAQ,kBAAA,EAAmB;AACjC,EAAA,IAAI,QAAA,GAAqC,IAAA;AAEzC,EAAA,IAAI,QAAA,GAAW,CAAA;AAEf,EAAA,MAAM,UAAU,MAAyB;AACvC,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,YAAY,oBAAA,EAAqB;AACvC,MAAA,QAAA,GAAW,SAAA;AAEX,MAAA,KAAK,SAAA,CAAU,IAAA,CAAK,CAAC,MAAA,KAAW;AAC9B,QAAA,IAAI,aAAA,IAAiB,MAAA,IAAU,QAAA,KAAa,SAAA,EAAW,QAAA,GAAW,IAAA;AAAA,MACpE,CAAC,CAAA;AAAA,IACH;AACA,IAAA,OAAO,QAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,QAAQ,OAAA,GAAU,MAAA;AAExD,EAAA,MAAM,OAAA,GAAU,OAAO,GAAA,EAAsB,GAAA,KAAwB;AACnE,IAAA,MAAM,MAAA,GAAS,IAAI,OAAA,CAAQ,MAAA;AAC3B,IAAA,IAAI,MAAA,KAAW,UAAa,CAAC,SAAA,CAAU,QAAQ,GAAA,EAAK,QAAA,EAAU,MAAM,CAAA,EAAG;AACrE,MAAA,OAAOsB,MAAK,GAAA,EAAK,GAAA,EAAK,EAAE,KAAA,EAAO,4DAAuD,CAAA;AAAA,IACxF;AACA,IAAA,MAAM,IAAA,GAAA,CAAQ,GAAA,CAAI,OAAA,CAAQ,cAAc,CAAA,IAAK,EAAA,EAAI,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,EAAG,IAAA,GAAO,WAAA,EAAY;AACnF,IAAA,IAAI,IAAA,KAAS,oBAAoB,OAAOA,KAAAA,CAAK,KAAK,GAAA,EAAK,EAAE,KAAA,EAAO,+CAAA,EAAiD,CAAA;AACjH,IAAA,MAAMF,KAAAA,GAAO,MAAM,QAAA,CAAS,GAAG,CAAA;AAC/B,IAAA,IAAIA,UAAS,IAAA,EAAM;AACjB,MAAA,GAAA,CAAI,SAAA,CAAU,cAAc,OAAO,CAAA;AACnC,MAAAE,MAAK,GAAA,EAAK,GAAA,EAAK,EAAE,KAAA,EAAO,gCAAgC,CAAA;AACxD,MAAA,OAAO,KAAK,GAAA,CAAI,IAAA,CAAK,UAAU,MAAM,GAAA,CAAI,SAAS,CAAA;AAAA,IACpD;AACA,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAA,GAAS,IAAA,CAAK,MAAMF,KAAI,CAAA;AAAA,IAC1B,CAAA,CAAA,MAAQ;AACN,MAAA,OAAOE,MAAK,GAAA,EAAK,GAAA,EAAK,EAAE,KAAA,EAAO,+BAA+B,CAAA;AAAA,IAChE;AACA,IAAA,MAAM,OAAA,GAAU,aAAa,MAAM,CAAA;AACnC,IAAA,IAAI,WAAW,OAAA,EAAS,OAAOA,KAAAA,CAAK,GAAA,EAAK,KAAK,OAAO,CAAA;AAErD,IAAA,MAAM,GAAA,GAAMD,OAAM,OAAO,CAAA;AACzB,IAAA,IAAI,GAAA,GAAM,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AACvB,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,MAAM,MAAA,GAAS,MAAM,OAAA,EAAQ;AAC7B,MAAA,IAAI,aAAA,IAAiB,MAAA,EAAQ,OAAOC,KAAAA,CAAK,GAAA,EAAK,GAAA,EAAK,EAAE,SAAA,EAAW,KAAA,EAAO,MAAA,EAAQ,MAAA,CAAO,WAAA,EAAa,CAAA;AACnG,MAAA,MAAM,IAAA,GAAO,CAAA,EAAG,YAAA,CAAa,GAAA,EAAK,QAAQ,CAAC,CAAA,EAAG,IAAI,CAAA,EAAG,OAAA,CAAQ,OAAA,GAAU,aAAA,CAAc,KAAA,GAAQ,cAAc,KAAK,CAAA,CAAA;AAChH,MAAA,MAAM,EAAA,GAAK,QAAA;AACX,MAAA,IAAI;AACF,QAAA,GAAA,GAAM,MAAM,MAAA,CAAO,OAAA,CAAQ,IAAA,EAAM,OAAA,EAAS,cAAc,CAAA;AAAA,MAC1D,SAAS,GAAA,EAAK;AACZ,QAAA,MAAM,OAAA,GAAU,UAAU,GAAG,CAAA;AAC7B,QAAA,IAAI,OAAA,KAAY,UAAA,EAAY,OAAOA,KAAAA,CAAK,GAAA,EAAK,GAAA,EAAK,EAAE,SAAA,EAAW,KAAA,EAAO,MAAA,EAAQ,UAAA,EAAY,CAAA;AAC1F,QAAA,OAAOA,MAAK,GAAA,EAAK,GAAA,EAAK,EAAE,KAAA,EAAO,SAAS,CAAA;AAAA,MAC1C;AACA,MAAA,IAAI,EAAA,KAAO,QAAA,EAAU,KAAA,CAAM,GAAA,CAAI,KAAK,GAAG,CAAA;AAAA,IACzC;AACA,IAAA,GAAA,CAAI,UAAA,GAAa,GAAA;AACjB,IAAA,GAAA,CAAI,SAAA,CAAU,gBAAgB,WAAW,CAAA;AACzC,IAAA,GAAA,CAAI,IAAI,GAAG,CAAA;AAAA,EACb,CAAA;AAGA,EAAA,MAAM,MAAA,GAAS,OAAO,GAAA,KAAwB;AAC5C,IAAA,MAAM,MAAA,GAAS,MAAM,mBAAA,EAAoB;AACzC,IAAAA,KAAAA,CAAK,GAAA,EAAK,GAAA,EAAK,aAAA,IAAiB,SAAS,EAAE,SAAA,EAAW,KAAA,EAAO,MAAA,EAAQ,OAAO,WAAA,EAAY,GAAI,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,EACjH,CAAA;AAEA,EAAA,MAAA,CAAO,WAAA,CAAY,GAAA,CAAI,CAAC,GAAA,EAAK,KAAK,IAAA,KAAS;AACzC,IAAA,IAAI,GAAA,CAAI,GAAA,EAAK,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,KAAM,CAAA,EAAG,IAAI,CAAA,EAAG,YAAY,CAAA,CAAA,SAAW,IAAA,EAAK;AACrE,IAAA,IAAI,GAAA,CAAI,WAAW,KAAA,EAAO,OAAO,KAAK,MAAA,CAAO,GAAG,CAAA,CAAE,KAAA,CAAM,IAAI,CAAA;AAC5D,IAAA,IAAI,GAAA,CAAI,MAAA,KAAW,MAAA,EAAQ,OAAO,KAAK,QAAQ,GAAA,EAAK,GAAG,CAAA,CAAE,KAAA,CAAM,IAAI,CAAA;AACnE,IAAA,IAAA,EAAK;AAAA,EACP,CAAC,CAAA;AAED,EAAA,OAAO;AAAA,IACL,MAAA,GAAS;AACP,MAAA,QAAA,IAAY,CAAA;AACZ,MAAA,KAAA,CAAM,KAAA,EAAM;AAAA,IACd,CAAA;AAAA,IACA,MAAM,KAAA,GAAQ;AACZ,MAAA,QAAA,IAAY,CAAA;AACZ,MAAA,KAAA,CAAM,KAAA,EAAM;AACZ,MAAA,MAAM,OAAA,GAAU,QAAA;AAChB,MAAA,QAAA,GAAW,IAAA;AACX,MAAA,MAAM,SAAS,MAAM,OAAA;AACrB,MAAA,IAAI,UAAU,EAAE,aAAA,IAAiB,MAAA,CAAA,EAAS,MAAM,OAAO,KAAA,EAAM;AAAA,IAC/D;AAAA,GACF;AACF;;;ACzKA,IAAMC,MAAAA,GAAgC;AAAA,EACpC,GAAA,EAAK,gBAAA;AAAA,EACL,aAAA,EAAe,gBAAA;AAAA,EACf,aAAA,EAAe,gBAAA;AAAA,EACf,CAAC,CAAA,CAAA,EAAI,aAAA,CAAc,KAAK,EAAE,GAAG,kBAAA;AAAA,EAC7B,CAAC,CAAA,CAAA,EAAI,aAAA,CAAc,KAAK,EAAE,GAAG;AAC/B,CAAA;AAMO,SAAS,UAAA,CAAW,MAAA,EAAuB,IAAA,EAAc,KAAA,EAA2C;AACzG,EAAA,MAAA,CAAO,WAAA,CAAY,GAAA,CAAI,CAAC,GAAA,EAAK,KAAK,IAAA,KAAS;AACzC,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,IAAO,GAAA;AACvB,IAAA,MAAM,OAAO,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,IAAK,GAAA;AAClC,IAAA,MAAM,MAAA,GAAS,KAAK,QAAA,CAAS,GAAG,IAAI,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,IAAA;AACxD,IAAA,MAAM,IAAA,GAAO,IAAA,KAAS,MAAA,GAAS,GAAA,GAAM,KAAK,UAAA,CAAW,CAAA,EAAG,MAAM,CAAA,CAAA,CAAG,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA,GAAI,IAAA;AACjG,IAAA,MAAM,KAAA,GAAQ,IAAI,MAAA,KAAW,KAAA,IAAS,SAAS,IAAA,GAAOA,MAAAA,CAAM,IAAI,CAAA,GAAI,MAAA;AACpE,IAAA,IAAI,CAAC,KAAA,EAAO,OAAO,IAAA,EAAK;AACxB,IAAA,MAAA,CAAO,kBAAA,CAAmB,KAAK,IAAA,CAAK,KAAA,EAAO,SAAS,KAAA,EAAM,CAAE,KAAK,CAAC,CAAA,CAAE,IAAA;AAAA,MAClE,CAAC,GAAA,KAAQ;AACP,QAAA,GAAA,CAAI,UAAA,GAAa,GAAA;AACjB,QAAA,GAAA,CAAI,SAAA,CAAU,gBAAgB,WAAW,CAAA;AACzC,QAAA,GAAA,CAAI,IAAI,GAAG,CAAA;AAAA,MACb,CAAA;AAAA,MACA,CAAC,GAAA,KAAiB,IAAA,CAAK,GAAG;AAAA,KAC5B;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,aAAa,MAAA,EAAQ,IAAA,EAAM,MAAM,KAAA,GAAQ,YAAY,CAAA;AAC9D;AC/BA,SAAS,QAAA,CAAS,MAAc,IAAA,EAAgF;AAC9G,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI;AACF,IAAA,OAAA,GAAU,SAAA,CAAU,MAAM,IAAI,CAAA;AAAA,EAChC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,QAAA,uBAAyB,GAAA,EAAI;AACnC,EAAA,IAAI,MAAA;AACJ,EAAA,KAAA,MAAW,IAAA,IAAQ,QAAQ,IAAA,EAAM;AAC/B,IAAA,IAAI,IAAA,CAAK,SAAS,qBAAA,EAAuB;AACvC,MAAA,KAAA,MAAW,KAAK,IAAA,CAAK,YAAA,EAAc,IAAI,CAAA,CAAE,GAAG,IAAA,KAAS,YAAA,IAAgB,CAAA,CAAE,IAAA,WAAe,GAAA,CAAI,CAAA,CAAE,EAAA,CAAG,IAAA,EAAM,EAAE,IAAI,CAAA;AAAA,IAC7G;AACA,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,0BAAA,EAA4B,MAAA,GAAS,IAAA,CAAK,WAAA;AAC5D,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,wBAAA,IAA4B,IAAA,CAAK,MAAA,EAAQ;AAC3D,IAAA,KAAA,MAAW,IAAA,IAAQ,KAAK,UAAA,EAAY;AAClC,MAAA,IAAI,IAAA,CAAK,SAAS,iBAAA,IAAqB,YAAA,CAAa,KAAK,QAAQ,CAAA,KAAM,SAAA,EAAW,MAAA,GAAS,IAAA,CAAK,KAAA;AAAA,IAClG;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,MAAA,EAAQ,QAAQ,CAAA;AACzC,EAAA,OAAO,EAAE,MAAA,EAAQ,QAAA,CAAS,MAAA,EAAQ,UAAU,IAAI,GAAA,CAAI,OAAA,GAAU,CAAC,OAAO,CAAA,GAAI,EAAE,CAAC,GAAG,QAAA,EAAS;AAC3F;AAMO,SAAS,UAAA,CAAW,MAAc,IAAA,EAAkC;AACzE,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,IAAA,EAAM,IAAI,CAAA;AAChC,EAAA,OAAO,IAAA,GAAO,SAAS,IAAA,CAAK,IAAA,CAAK,QAAQ,OAAO,CAAA,EAAG,IAAA,CAAK,QAAQ,CAAA,GAAI,MAAA;AACtE;AAGA,SAAS,OAAA,CAAQ,IAAA,EAA0B,QAAA,EAAoB,KAAA,GAAQ,CAAA,EAA6B;AAClG,EAAA,IAAI,CAAC,IAAA,IAAQ,KAAA,GAAQ,EAAA,EAAI,OAAO,IAAA;AAChC,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,iBAAA,EAAmB,OAAO,IAAA;AAC5C,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,YAAA,EAAc,OAAO,OAAA,CAAQ,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG,QAAA,EAAU,KAAA,GAAQ,CAAC,CAAA;AAC3F,EAAA,IAAI,YAAA,IAAgB,SAAS,IAAA,CAAK,IAAA,CAAK,WAAW,IAAI,CAAA,IAAK,IAAA,CAAK,IAAA,KAAS,yBAAA,CAAA,EAA4B;AACnG,IAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,UAAA,EAAsB,QAAA,EAAU,QAAQ,CAAC,CAAA;AAAA,EAC/D;AACA,EAAA,OAAO,IAAA;AACT;AAEA,IAAM,QAAA,GAAW,CAAC,GAAA,KAAsC;AACtD,EAAA,IAAI,GAAA,KAAQ,MAAA,EAAW,OAAO,EAAC;AAC/B,EAAA,IAAI;AACF,IAAA,MAAM,EAAE,MAAA,EAAO,GAAI,IAAI,IAAI,GAAG,CAAA;AAC9B,IAAA,OAAO,MAAA,KAAW,MAAA,GAAS,EAAC,GAAI,CAAC,MAAM,CAAA;AAAA,EACzC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAC;AAAA,EACV;AACF,CAAA;AAMO,SAAS,iBAAA,CAAkB,MAAc,IAAA,EAAwB;AACtE,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,IAAA,EAAM,IAAI,CAAA;AAChC,EAAA,IAAI,CAAC,IAAA,EAAM,OAAO,EAAC;AACnB,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,SAAS,CAAA,EAAG,IAAA,CAAK,QAAA,kBAAU,IAAI,GAAA,EAAK,CAAA;AAC/E,EAAA,MAAM,OAAO,OAAA,CAAQ,IAAA,CAAK,SAAS,cAAc,CAAA,EAAG,KAAK,QAAQ,CAAA;AACjE,EAAA,OAAA,CAAQ,MAAM,QAAA,IAAY,IAAI,OAAA,CAAQ,CAAC,OAAQ,EAAA,IAAM,EAAA,CAAG,SAAS,eAAA,GAAkB,QAAA,CAAS,SAAS,EAAA,EAAI,IAAA,CAAK,QAAQ,CAAC,CAAA,GAAI,EAAG,CAAA;AAChI;AASO,SAAS,gBAAgB,IAAA,EAAuC;AACrE,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI;AACF,IAAA,IAAI,IAAA,KAAS,KAAA,CAAA,EAAW,MAAM,IAAI,MAAM,iBAAiB,CAAA;AACzD,IAAA,IAAA,GAAOZ,YAAAA,CAAa,MAAM,MAAM,CAAA;AAAA,EAClC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAE,KAAA,EAAO,MAAA,EAAW,YAAA,EAAc,EAAC,EAAE;AAAA,EAC9C;AACA,EAAA,OAAO,EAAE,KAAA,EAAO,UAAA,CAAW,IAAA,EAAM,IAAI,GAAG,YAAA,EAAc,iBAAA,CAAkB,IAAA,EAAM,IAAI,CAAA,EAAE;AACtF;ACnFA,IAAM,KAAA,GAAgD;AAAA,EACpD,CAAC,8BAA8B,8BAA8B,CAAA;AAAA,EAC7D,CAAC,uBAAuB,uBAAuB;AACjD,CAAA;AAGO,SAAS,cAAA,GAAyB;AAEvC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,6BAAA;AAAA,IACN,OAAA,EAAS,KAAA;AAAA,IACT,UAAU,EAAA,EAAI;AACZ,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,IAAA,CAAK,CAAC,CAAC,OAAO,CAAA,KAAM,OAAA,CAAQ,IAAA,CAAK,EAAE,CAAC,CAAA;AACtD,MAAA,IAAI,CAAC,KAAK,OAAO,MAAA;AACjB,MAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,EAAGa,aAAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA,EAAG,EAAE,QAAA,EAAU,IAAA,EAAM,CAAA;AAAA,IAChF;AAAA,GACF;AACF;;;ACrBA,IAAM,IAAA,GAAO,CAAC,KAAA,KAAkB,CAAA;AAAA;AAAA;;AAAA,EAI9B,KAAK;AAAA;AAAA;AAAA,CAAA;AAMA,SAAS,YAAA,GAAuB;AACrC,EAAA,OAAO,CAAA;AAAA;AAAA;AAAA;AAAA,EAIP,IAAA,CAAK,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAAA,CAOH,CAAC,CAAA,CAAA;AACL;AAGO,SAAS,kBAAkB,MAAA,EAAmC;AACnE,EAAA,OAAO,CAAA;AAAA;AAAA,EAEP,MAAA,CAAO,IAAI,CAAC,IAAA,KAAS,UAAU,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,CAAK,EAAE,IAAA,CAAK,EAAE,CAAC,CAAA,EAAG,IAAA,CAAK,4CAA4C,CAAC,CAAA,CAAA;AACzH;;;AC7BO,SAAS,UAAA,CAAW,MAAc,OAAA,EAAoC;AAC3E,EAAA,OAAO,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAA,EAaK,IAAA,CAAK,SAAA,CAAU,CAAA,EAAG,IAAI,YAAY,CAAC,CAAA;AAAA,eAAA,EAChC,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,cAAA,EACrB,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,WAAA,EACvB,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAOpC;AAGO,SAAS,WAAW,MAAA,EAAmC;AAC5D,EAAA,OAAO,CAAA;AAAA;AAAA,EAEP,MAAA,CAAO,IAAI,CAAC,IAAA,KAAS,UAAU,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,CAAK,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AASpE;;;ACnCO,IAAM,MAAA,GAAS,gBAAA;AAGf,IAAM,OAAA,uBAAc,GAAA,CAAI;AAAA,EAC7B,UAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAAC,CAAA;AAoBM,SAAS,cAAA,CAAe,SAA+B,GAAA,EAAuD;AACnH,EAAA,MAAM,YAAA,GAAe,CAAC,IAAA,KACpB,IAAA,GAAO,CAAA,wBAAA,EAA2B,IAAA,CAAK,SAAA,CAAUxB,OAAAA,CAAQ,GAAA,CAAI,IAAA,EAAK,EAAG,IAAI,CAAC,CAAC,CAAA;AAAA,CAAA,GAAQ,sBAAA;AACrF,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,OAAA,CAAQ,WAAA,IAAe,EAAC,EAAG,GAAA,CAAI,CAAC,IAAA,KAASA,OAAAA,CAAQ,GAAA,CAAI,IAAA,EAAK,EAAG,IAAI,CAAC,CAAA;AAC7F,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,MAAM,CAAA,eAAA,EAAkB,IAAA,CAAK,UAAU,GAAA,CAAI,KAAA,EAAO,CAAC,CAAA;AAAA,CAAA;AAAA,IAC/D,gBAAgB,MAAM;AACpB,MAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,GAAA,CAAI,OAAO,CAAA,CAC1B,MAAA,CAAO,CAAC,GAAG,OAAO,CAAA,KAAM,QAAQ,MAAA,GAAS,CAAC,CAAA,CAC1C,GAAA,CAAI,CAAC,CAAC,IAAI,CAAA,KAAM,KAAK,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA,eAAA,EAAkB,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA,EAAA,CAAI,CAAA;AACtF,MAAA,OAAO,CAAA;AAAA,EAAqB,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC;AAAA;AAAA,CAAA;AAAA,IAC9C,CAAA;AAAA,IACA,iBAAA,EAAmB,MAAM,YAAA,CAAa,OAAA,CAAQ,WAAW,CAAA;AAAA,IACzD,iBAAA,EAAmB,MAAM,YAAA,CAAa,OAAA,CAAQ,WAAW,CAAA;AAAA,IACzD,kBAAkB,MAAM,UAAA,CAAW,IAAI,IAAA,EAAK,EAAG,QAAQ,OAAO,CAAA;AAAA,IAC9D,gBAAA,EAAkB,MAAM,UAAA,CAAW,WAAA,EAAa,CAAA;AAAA,IAChD,kBAAA,EAAoB,MAAM,YAAA,EAAa;AAAA,IACvC,wBAAA,EAA0B,MAAM,iBAAA,CAAkB,WAAA,EAAa;AAAA,GACjE;AACF;ACpDO,IAAM,cAAA,GAAiB,uBAAA;AAW9B,IAAM,QAAA,GAAW,GAAA;AAEjB,IAAM,OAAA,GAAU,CAAC,IAAA,KAAqC;AACpD,EAAA,IAAI;AACF,IAAA,OAAO,QAAA,CAAS,IAAI,CAAA,CAAE,OAAA;AAAA,EACxB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF,CAAA;AAEA,IAAM,eAAe,CAAC,GAAA,KAAgB,GAAA,CAAI,OAAA,CAAQ,YAAY,EAAE,CAAA;AASzD,SAAS,cAAc,EAAE,OAAA,GAAU,QAAA,EAAS,GAA0B,EAAC,EAAW;AAEvF,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAiC;AACpD,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAoB;AACrC,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAoB;AAC1C,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,MAAA,GAAS,KAAA;AACb,EAAA,IAAI,UAAqC,MAAM,IAAA;AAC/C,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,IAAI,SAAA,GAAY,KAAA;AAChB,EAAA,IAAI,KAAA;AAEJ,EAAA,MAAM,OAAA,GAAU,CAAC,IAAA,KAAiB;AAChC,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA;AAC/B,IAAA,MAAM,GAAA,GAAM,QAAQ,IAAI,CAAA;AACxB,IAAA,IAAI,CAAC,OAAA,IAAW,GAAA,KAAQ,MAAA,EAAW;AACnC,IAAA,KAAA,MAAW,MAAM,OAAA,CAAQ,IAAA,IAAQ,OAAA,CAAQ,GAAA,CAAI,IAAI,GAAG,CAAA;AAAA,EACtD,CAAA;AAEA,EAAA,MAAM,MAAA,GAAS,CAAC,IAAA,KAAiB;AAC/B,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA;AAC/B,IAAA,MAAM,GAAA,GAAM,QAAQ,IAAI,CAAA;AACxB,IAAA,IAAI,CAAC,OAAA,IAAW,GAAA,KAAQ,MAAA,EAAW,OAAO,KAAA;AAC1C,IAAA,KAAA,MAAW,SAAS,OAAA,CAAQ,MAAA,IAAU,IAAI,KAAA,KAAU,KAAK,OAAO,IAAA;AAChE,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,CAAC,IAAA,EAAc,OAAA,KAAoB;AACjD,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,IAAA,KAAA,MAAW,WAAA,IAAe,OAAO,MAAA,CAAO,MAAA,CAAO,YAAY,CAAA,EAAG,WAAA,CAAY,WAAA,CAAY,YAAA,CAAa,IAAI,CAAA;AACvG,IAAA,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,CAAA,QAAA,EAAWS,QAAAA,CAAS,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM,IAAI,CAAC,CAAA,6BAAA,EAAgC,OAAO,CAAA,CAAA,EAAI;AAAA,MAChH,SAAA,EAAW;AAAA,KACZ,CAAA;AACD,IAAA,SAAA,GAAY,IAAA;AACZ,IAAA,IAAI;AACF,MAAA,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,IAAI,CAAA;AAAA,IACpC,CAAA,SAAE;AACA,MAAA,SAAA,GAAY,KAAA;AAAA,IACd;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,IAAI,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA,GAAY,OAAA,EAAS;AACtC,IAAA,KAAA,MAAW,IAAA,IAAQ,MAAA,CAAO,IAAA,EAAK,EAAG,IAAI,OAAO,IAAI,CAAA,EAAG,OAAA,CAAQ,IAAA,EAAM,wBAAwB,CAAA;AAAA,EAC5F,CAAA;AAEA,EAAA,MAAM,IAAA,GAAe;AAAA,IACnB,IAAA,EAAM,cAAA;AAAA,IACN,KAAA,EAAO,OAAA;AAAA,IACP,eAAe,MAAA,EAAQ;AACrB,MAAA,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,KAAA,KAAU,IAAA,IAAQ,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,cAAc,CAAA,KAAM,IAAA;AACnG,MAAA,MAAM,QAAA,GAAW,aAAA,CAAc,MAAA,CAAO,QAAQ,CAAA,GAAI,GAAA;AAClD,MAAA,OAAA,GAAU,CAAC,IAAA,KAAS,CAAC,UAAA,CAAW,IAAI,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,gBAAgB,CAAA,IAAK,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA;AAAA,IACtG,CAAA;AAAA,IACA,gBAAgB,CAAA,EAAG;AACjB,MAAA,IAAI,CAAC,MAAA,EAAQ;AACb,MAAA,MAAA,GAAS,CAAA;AACT,MAAA,KAAA,MAAW,KAAA,IAAS,CAAC,KAAA,EAAO,QAAA,EAAU,QAAQ,CAAA,EAAY;AACxD,QAAA,CAAA,CAAE,OAAA,CAAQ,EAAA,CAAG,KAAA,EAAO,CAAC,IAAA,KAAiB;AACpC,UAAA,IAAI,SAAA,EAAW;AACf,UAAA,SAAA,GAAY,KAAK,GAAA,EAAI;AACrB,UAAA,MAAM,IAAA,GAAO,cAAc,IAAI,CAAA;AAC/B,UAAA,IAAI,KAAA,KAAU,QAAA,EAAU,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AAAA,uBAC7B,IAAI,CAAA;AAAA,QACnB,CAAC,CAAA;AAAA,MACH;AACA,MAAA,MAAM,IAAA,GAAO,EAAE,MAAA,CAAO,IAAA;AACtB,MAAA,CAAA,CAAE,YAAY,GAAA,CAAI,SAAS,mBAAA,CAAoB,GAAA,EAAK,MAAM,IAAA,EAAM;AAC9D,QAAA,IAAI,GAAA,GAAM,YAAA,CAAa,GAAA,CAAI,GAAA,IAAO,EAAE,CAAA;AACpC,QAAA,IAAI,IAAA,KAAS,GAAA,IAAO,GAAA,CAAI,UAAA,CAAW,IAAI,CAAA,EAAG,GAAA,GAAM,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AACzE,QAAA,IAAI,IAAA;AACJ,QAAA,IAAI;AACF,UAAA,IAAA,GAAO,SAAA,CAAU,GAAA,CAAI,SAAA,CAAU,GAAG,CAAC,CAAA;AAAA,QACrC,CAAA,CAAA,MAAQ;AAAA,QAER;AACA,QAAA,IAAI,QAAQ,MAAA,CAAO,IAAI,CAAA,EAAG,OAAA,CAAQ,MAAM,sBAAsB,CAAA;AAC9D,QAAA,IAAA,EAAK;AAAA,MACP,CAAC,CAAA;AACD,MAAA,KAAA,GAAQ,WAAA,CAAY,OAAO,OAAO,CAAA;AAClC,MAAA,KAAA,CAAM,KAAA,EAAM;AAAA,IACd,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,KAAA,EAAO,KAAA;AAAA,MACP,QAAQ,EAAA,EAAI;AACV,QAAA,IAAI,CAAC,MAAA,IAAU,IAAA,CAAK,WAAA,CAAY,SAAS,QAAA,EAAU;AACnD,QAAA,MAAM,IAAA,GAAO,aAAa,EAAE,CAAA;AAC5B,QAAA,IAAI,OAAA,CAAQ,IAAI,CAAA,EAAG;AACnB,QAAA,MAAM,KAAA,GAAQ,QAAQ,IAAI,CAAA;AAC1B,QAAA,IAAI,KAAA,KAAU,MAAA,EAAW,IAAA,CAAK,GAAA,CAAI,IAAI,KAAK,CAAA;AAAA,MAC7C;AAAA,KACF;AAAA,IACA,SAAA,EAAW;AAAA,MACT,KAAA,EAAO,KAAA;AAAA,MACP,OAAA,CAAQ,OAAO,EAAA,EAAI;AACjB,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA;AACzB,QAAA,IAAI,UAAU,MAAA,EAAW;AACzB,QAAA,IAAA,CAAK,OAAO,EAAE,CAAA;AACd,QAAA,IAAI,IAAA,CAAK,WAAA,CAAY,IAAA,KAAS,KAAA,EAAO;AACrC,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,WAAA,CAAY,WAAA,CAAY,cAAc,EAAE,CAAA;AACzD,QAAA,IAAI,CAAC,KAAK,IAAA,EAAM;AAChB,QAAA,IAAI,OAAA,GAAU,MAAA,CAAO,GAAA,CAAI,GAAA,CAAI,IAAI,CAAA;AACjC,QAAA,IAAI,CAAC,SAAS,MAAA,CAAO,GAAA,CAAI,IAAI,IAAA,EAAO,OAAA,mBAAU,IAAI,GAAA,EAAM,CAAA;AACxD,QAAA,OAAA,CAAQ,GAAA,CAAI,IAAI,KAAK,CAAA;AACrB,QAAA,SAAA,CAAU,IAAI,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA,EAAG,IAAI,IAAI,CAAA;AAAA,MAC/C;AAAA,KACF;AAAA,IACA,QAAA,GAAW;AACT,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,IACrB;AAAA,GACF;AACA,EAAA,OAAO,IAAA;AACT;;;ACpIA,IAAM,OAAA,GAAU,GAAA;AAChB,IAAM,UAAA,GAAa,GAAA;AAEnB,IAAM,QAAA,GAAqB,CAAC,GAAA,EAAK,OAAA,KAAY;AAC3C,EAAA,MAAM,OAAA,GAAUgB,KAAA,CAAQ,GAAA,EAAK,OAAO,CAAA;AACpC,EAAA,OAAA,CAAQ,EAAA,CAAG,SAAS,MAAM;AAAA,EAAC,CAAC,CAAA;AAC5B,EAAA,OAAA,CAAQ,KAAA,EAAM;AACd,EAAA,OAAO,MAAM,QAAQ,KAAA,EAAM;AAC7B,CAAA;AAGO,SAAS,gBAAA,CAAiB,EAAE,MAAA,GAAS,OAAA,EAAS,QAAQ,QAAA,EAAS,GAAuB,EAAC,EAAqB;AACjH,EAAA,MAAM,MAAM,WAAA,CAAYtB,IAAAA,CAAK,MAAA,EAAO,EAAG,cAAc,CAAC,CAAA;AACtD,EAAA,OAAO,IAAI,OAAA,CAAQ,CAACH,QAAAA,KAAY;AAC9B,IAAA,IAAI0B,QAAAA,GAAU,KAAA;AACd,IAAA,IAAI,MAAA,GAAS,CAAA;AACb,IAAA,IAAI,IAAA;AACJ,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI,QAAA;AACJ,IAAA,MAAM,MAAA,GAAS,CAAC,OAAA,KAAqB;AACnC,MAAA,IAAIA,QAAAA,EAAS;AACb,MAAAA,QAAAA,GAAU,IAAA;AACV,MAAA,aAAA,CAAc,OAAO,CAAA;AACrB,MAAA,YAAA,CAAa,QAAQ,CAAA;AACrB,MAAA,IAAA,IAAO;AACP,MAAA,MAAA,CAAO,KAAK,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AAC5C,MAAA1B,SAAQ,OAAO,CAAA;AAAA,IACjB,CAAA;AACA,IAAA,MAAM,KAAA,GAAQ,MAAM2B,aAAAA,CAAcxB,IAAAA,CAAK,KAAK,OAAO,CAAA,EAAG,MAAA,CAAO,MAAA,EAAQ,CAAC,CAAA;AACtE,IAAA,IAAI;AACF,MAAA,IAAA,GAAO,KAAA,CAAM,GAAA,EAAK,MAAM,MAAA,CAAO,IAAI,CAAC,CAAA;AACpC,MAAA,KAAA,EAAM;AAAA,IACR,CAAA,CAAA,MAAQ;AACN,MAAA,MAAA,CAAO,KAAK,CAAA;AACZ,MAAA;AAAA,IACF;AACA,IAAA,OAAA,GAAU,WAAA,CAAY,OAAO,UAAU,CAAA;AACvC,IAAA,QAAA,GAAW,UAAA,CAAW,MAAM,MAAA,CAAO,KAAK,GAAG,MAAM,CAAA;AACjD,IAAA,OAAA,CAAQ,KAAA,EAAM;AACd,IAAA,QAAA,CAAS,KAAA,EAAM;AAAA,EACjB,CAAC,CAAA;AACH;AAEA,IAAM,UAAA,GAAa,CAAA,uBAAA,EAA0B,OAAA,GAAU,GAAI,CAAA,qDAAA,CAAA;AAC3D,IAAM,SAAA,GAAY,kDAAA;AAElB,IAAM,MAAA,GACJ,aACA,qMAAA,GAEA,SAAA;AAEF,IAAM,UAAA,GACJ,aACA,wKAAA,GAEA,SAAA;AAGF,eAAsB,qBAAA,CAAsB,MAAA,EAAuB,KAAA,GAAgC,gBAAA,EAAiC;AAClI,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,MAAA,CAAO,MAAA,CAAO,MAAA;AAChC,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,EAAO,UAAA,EAAY;AACzC,EAAA,IAAI,MAAM,OAAM,EAAG;AACnB,EAAA,MAAM,UAAA,GAAa,OAAO,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,cAAc,CAAA;AAC9E,EAAA,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,UAAA,GAAa,aAAa,MAAM,CAAA;AAC5D;AAaO,SAAS,UAAA,CAAW,EAAE,KAAA,EAAM,GAAuB,EAAC,EAAW;AACpE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,oBAAA;AAAA,IACN,KAAA,EAAO,OAAA;AAAA,IACP,gBAAgB,MAAA,EAAQ;AACtB,MAAA,KAAK,qBAAA,CAAsB,QAAQ,KAAK,CAAA;AAAA,IAC1C;AAAA,GACF;AACF;;;ACpDA,IAAMyB,OAAAA,GAAS,iBAAA;AAWf,SAAS,YAAA,CAAa,QAAuB,EAAE,KAAA,EAAO,UAAU,OAAA,EAAS,MAAA,EAAQ,UAAS,EAAsB;AAC9G,EAAA,MAAA,CAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAG,KAAK,CAAC,CAAA;AAC7B,EAAA,KAAK,sBAAsB,MAAM,CAAA;AACjC,EAAA,KAAA,MAAW,KAAA,IAAS,CAAC,KAAA,EAAO,QAAA,EAAU,QAAQ,CAAA,EAAY;AACxD,IAAA,MAAA,CAAO,OAAA,CAAQ,EAAA,CAAG,KAAA,EAAO,CAAC,IAAA,KAAS;AACjC,MAAA,MAAM,IAAA,GAAO5B,QAAQ,IAAI,CAAA;AAEzB,MAAA,MAAM,KAAA,GAAQ,KAAA,KAAU,KAAA,IAAS4B,OAAAA,CAAO,IAAA,CAAK,IAAI,CAAA,IAAK,CAAC,IAAA,CAAK,KAAA,CAAMpB,GAAG,CAAA,CAAE,SAAS,cAAc,CAAA;AAC9F,MAAA,IAAI,KAAA,EAAO,QAAA,EAAS,CAAE,KAAA,EAAM;AAC5B,MAAA,MAAM,OAAO,KAAA,IAAU,KAAA,KAAU,SAAS,QAAA,EAAS,CAAE,WAAW,IAAI,CAAA;AACpE,MAAA,OAAA,CAAQ,QAAQ,IAAA,EAAM,KAAK,CAAA,CAAE,IAAA,CAAK,CAAC,OAAA,KAAY;AAC7C,QAAA,IAAI,OAAA,IAAW,IAAA,EAAM,MAAA,CAAO,MAAM,CAAA;AAAA,MACpC,GAAG,QAAQ,CAAA;AAAA,IACb,CAAC,CAAA;AAAA,EACH;AACF;AAGA,SAAS,UAAA,CAAW,SAAuB,KAAA,EAAkD;AAC3F,EAAA,MAAM,EAAE,cAAA,EAAgB,KAAA,EAAO,YAAA,EAAc,QAAA,EAAU,KAAI,GAAI,OAAA;AAC/D,EAAA,MAAM,aAAa,MAAM,CAAC,GAAG,KAAA,EAAM,CAAE,MAAM,CAAA;AAC3C,EAAA,MAAM,UAAA,GAAa,CAAC,IAAA,KAAiB;AACnC,IAAA,MAAM,QAAQ,KAAA,EAAM,CAAE,IAAI,IAAI,CAAA,GAAI,CAAC,CAAA,EAAG,KAAA;AACtC,IAAA,OAAO,KAAA,KAAU,MAAA,GAAY,MAAA,GAAY,YAAA,CAAa,KAAK,CAAA;AAAA,EAC7D,CAAA;AACA,EAAA,MAAM,WAAW,EAAE,QAAA,EAAU,aAAa,KAAA,EAAO,GAAA,EAAK,QAAQ,KAAA,EAAM;AACpE,EAAA,MAAM,QAAA,GAAW,OAAO,QAAA,KAAa,QAAA,GAAW,QAAA,GAAW,MAAA;AAC3D,EAAA,OAAO;AAAA,IACL,aAAA,EAAc;AAAA,IACd,GAAI,KAAA,KAAU,KAAA,GAAQ,EAAC,GAAI,CAAC,gBAAgB,CAAA;AAAA,IAC5C,GAAI,QAAA,CAAS,QAAA,IAAY,QAAA,CAAS,GAAA,GAAM,CAAC,YAAA,CAAa,UAAA,EAAY,UAAA,EAAY,QAAA,EAAU,QAAQ,CAAC,IAAI;AAAC,GACxG;AACF;AAMO,SAAS,MAAM,OAAA,EAAiC;AACrD,EAAA,IAAI,IAAA,GAAO,QAAQ,GAAA,EAAI;AACvB,EAAA,IAAI,IAAA,GAAO,GAAA;AACX,EAAA,IAAI,MAAA,GAA2C,IAAA;AAC/C,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,IAAA,GAA+B,IAAA;AAEnC,EAAA,IAAI,QAAA,GAA0B,IAAA;AAC9B,EAAA,IAAI,WAAA,GAAoC,IAAA;AAExC,EAAA,MAAM,UAAA,uBAAiB,GAAA,EAA+B;AAEtD,EAAA,IAAI,UAAA,GAAmC,IAAA;AAEvC,EAAA,MAAM,OAAO,MAAgB;AAC3B,IAAA,MAAMqB,MAAAA,GAAQ,QAAQ,OAAA,CAAQ,OAAA;AAAA,MAAQ,CAAC,OAAA,KACrC,QAAA,CAAS,OAAA,EAAS,EAAE,GAAA,EAAK,IAAA,EAAM,OAAA,EAAS,CAAC,SAAS,QAAA,CAAS,MAAA,CAAO,IAAI,CAAC,MAAM,cAAA,EAAgB,CAAA,CAC1F,GAAA,CAAI,CAAC,CAAA,KAAM7B,OAAAA,CAAQ,IAAA,EAAM,CAAC,CAAC,CAAA,CAE3B,MAAA,CAAO,CAAC,CAAA,KAAM8B,SAAS,CAAC,CAAA,CAAE,MAAA,EAAQ,EAClC,IAAA;AAAK,KACV;AACA,IAAA,OAAO,CAAC,GAAG,IAAI,GAAA,CAAID,MAAK,CAAC,CAAA;AAAA,EAC3B,CAAA;AACA,EAAA,MAAM,OAAA,GAAU,CAAC,IAAA,KAA0B;AACzC,IAAA,MAAM,IAAA,GAAOpB,SAAS,IAAA,EAAM,IAAI,EAAE,KAAA,CAAMD,GAAG,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AACrD,IAAA,OAAO,CAAC,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,QAAA,CAAS,cAAc,CAAA,IAAK,WAAA,CAAY,IAAA,EAAM,OAAA,CAAQ,OAAO,CAAA,KAAM,MAAA;AAAA,EAC7F,CAAA;AACA,EAAA,MAAM,OAAO,CAAC,IAAA,KACZ,WAAWG,YAAAA,CAAa,IAAA,EAAM,MAAM,CAAA,EAAG,IAAA,EAAM,EAAE,IAAA,EAAM,SAAS,OAAA,CAAQ,OAAA,IAAW,UAAA,CAAW,GAAA,CAAI,IAAI,CAAC,CAAA;AACvG,EAAA,MAAM,QAAA,GAAW,CAAC,GAAA,KAAiB,MAAA,EAAQ,KAAA,CAAM,CAAA,QAAA,EAAW,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA,CAAE,CAAA;AAE9G,EAAA,MAAM,QAAQ,MAAiC;AAC7C,IAAA,MAAA,KAAW,IAAI,GAAA;AAAA,MACb,IAAA,EAAK,CAAE,GAAA,CAAI,CAAC,IAAA,KAAS;AACnB,QAAA,IAAI;AACF,UAAA,OAAO,CAAC,IAAA,EAAM,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,QAC1B,SAAS,GAAA,EAAK;AACZ,UAAA,QAAA,CAAS,GAAG,CAAA;AACZ,UAAA,OAAO,CAAC,IAAA,EAAM,EAAE,CAAA;AAAA,QAClB;AAAA,MACF,CAAC;AAAA,KACH;AACA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AACA,EAAA,MAAM,KAAA,GAAQ,MAAM,WAAA,CAAY,CAAC,GAAG,KAAA,EAAM,CAAE,MAAA,EAAQ,CAAA,CAAE,IAAA,EAAM,CAAA;AAM5D,EAAA,MAAM,MAAA,GAAS,OAAO,OAAA,EAA4B,aAAA,KAAgD;AAChG,IAAA,MAAM,SAAS,qBAAA,CAAsB,CAAC,SAASA,YAAAA,CAAa,IAAA,EAAM,MAAM,CAAC,CAAA;AACzE,IAAA,MAAM,UAAU,KAAA,EAAM;AACtB,IAAA,KAAA,MAAW,QAAQ,OAAA,EAAS;AAC1B,MAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,EAAG;AACxB,MAAA,IAAI,IAAA;AACJ,MAAA,IAAI;AACF,QAAA,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA,EAAM,cAAA,CAAeA,YAAAA,CAAa,MAAM,MAAM,CAAA,EAAG,IAAI,CAAA,EAAG,aAAa,CAAA;AAAA,MAC3F,CAAA,CAAA,MAAQ;AAEN,QAAA;AAAA,MACF;AACA,MAAA,MAAM,MAAA,GAAS,UAAA,CAAW,GAAA,CAAI,IAAI,CAAA;AAClC,MAAA,UAAA,CAAW,GAAA,CAAI,MAAM,IAAI,CAAA;AACzB,MAAA,IAAI,cAAA,CAAe,MAAA,EAAQ,IAAI,CAAA,EAAG;AAClC,MAAA,IAAI;AACF,QAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,EAAM,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,MAC9B,SAAS,GAAA,EAAK;AACZ,QAAA,QAAA,CAAS,GAAG,CAAA;AAAA,MACd;AAAA,IACF;AAAA,EACF,CAAA;AACA,EAAA,MAAM,QAAA,GAAW,MAAwB,IAAA,KAAS,cAAA,CAAe,EAAE,IAAA,EAAM,IAAA,EAAM,CAAC,IAAA,KAASA,YAAAA,CAAa,IAAA,EAAM,MAAM,GAAG,CAAA;AACrH,EAAA,IAAI,OAAA,GAAgC,IAAA;AAGpC,EAAA,eAAe,QAAQ,aAAA,EAAiD;AACtE,IAAA,MAAM,QAAQ,MAAM,QAAA,GAAW,KAAA,CAAM,KAAA,IAAS,aAAa,CAAA;AAC3D,IAAA,MAAM,UAAU,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA,CAAE,QAAQ,CAAC,KAAA,KAAW,KAAA,CAAM,MAAA,KAAW,OAAO,EAAC,GAAI,CAAC,KAAA,CAAM,MAAM,CAAE,CAAA;AACrG,IAAA,MAAM,YAAY,MAAA,CAAO,OAAA,KAAY,oBAAoB,IAAI,CAAA,EAAG,KAAK,OAAO,CAAA;AAC5E,IAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA,EAAG;AACxC,MAAA,MAAM,QAAQ,KAAA,CAAM,MAAA,KAAW,OAAO,MAAA,GAAY,SAAA,CAAU,MAAM,MAAM,CAAA;AACxE,MAAA,IAAI,KAAA,QAAa,OAAA,GAAU,KAAA;AAAA,IAC7B;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAGA,EAAA,MAAM,UAAA,GAAa,CAAC,EAAA,KAAe,eAAA,CAAgB,OAAA,CAAQ,WAAA,GAAcX,OAAAA,CAAQ,EAAA,EAAI,OAAA,CAAQ,WAAW,CAAA,GAAI,MAAS,CAAA;AAErH,EAAA,MAAM,OAAA,GAAU,cAAA,CAAe,OAAA,EAAS,EAAE,KAAA,EAAO,KAAA,EAAO,IAAA,EAAM,MAAM,IAAA,EAAM,IAAA,EAAM,MAAM,IAAA,EAAM,CAAA;AAC5F,EAAA,IAAI,OAAA,GAAkC,IAAA;AAEtC,EAAA,MAAM,UAAA,GAAa,CAAC,MAAA,EAAuB,KAAA,KAAmC;AAC5E,IAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,YAAY,CAAA,EAAG;AACpD,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,MAAM,GAAA,GAAM,IAAI,WAAA,CAAY,aAAA,CAAc,KAAK,MAAM,CAAA,EAAG,IAAI,CAAA,CAAE,CAAA;AAC9D,QAAA,IAAI,GAAA,EAAK,GAAA,CAAI,WAAA,CAAY,gBAAA,CAAiB,GAAG,CAAA;AAAA,MAC/C;AAAA,IACF;AAAA,EACF,CAAA;AAGA,EAAA,SAAS,OAAO,MAAA,EAA6B;AAC3C,IAAA,IAAI,QAAA,KAAa,QAAQ,WAAA,EAAa;AACtC,IAAA,MAAMA,QAAAA,GAAyB,OAAO,IAAA,EAAM,QAAA,KAAA,CACzC,MAAM,MAAA,CAAO,YAAA,CAAa,MAAA,CAAO,eAAA,CAAgB,SAAA,CAAU,IAAA,EAAM,QAAQ,IAAI,EAAA,IAAM,IAAA;AACtF,IAAA,WAAA,GAAc,OAAA,CAAQ,OAAA,EAAQ,CAC3B,IAAA,CAAK,YAAY;AAChB,MAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQA,QAAO,CAAA;AACnC,MAAA,MAAMsB,KAAAA,GAAO,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA;AACjC,MAAA,IAAIA,UAAS,QAAA,EAAU;AACvB,MAAA,QAAA,GAAWA,KAAAA;AACX,MAAA,UAAA,CAAW,MAAA,EAAQ,CAAC,SAAS,CAAC,CAAA;AAC9B,MAAA,MAAA,CAAO,EAAA,CAAG,KAAK,EAAE,IAAA,EAAM,UAAU,KAAA,EAAO,YAAA,EAAc,IAAA,EAAM,KAAA,EAAO,CAAA;AAAA,IACrE,CAAC,CAAA,CACA,KAAA,CAAM,QAAQ,CAAA,CACd,QAAQ,MAAM;AACb,MAAA,WAAA,GAAc,IAAA;AAAA,IAChB,CAAC,CAAA;AAAA,EACL;AAGA,EAAA,MAAM,eAAA,GAAkB,CAAC,OAAA,KAAwD;AAC/E,IAAA,MAAM,UAAU,KAAA,EAAM;AACtB,IAAA,MAAM,IAAA,uBAAW,GAAA,EAA2B;AAC5C,IAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAChC,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAA,KAAqC;AAClD,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AACnB,MAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AACZ,MAAA,IAAI,GAAA,CAAI,IAAA,IAAQ,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,IAAI,CAAA,EAAG,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,IAAI,CAAA;AAE3D,MAAA,IAAI,GAAA,CAAI,mBAAmB,EAAE,GAAA,CAAI,QAAQM,OAAAA,CAAO,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,CAAA,EAAI;AACjE,MAAA,KAAA,MAAW,QAAA,IAAY,GAAA,CAAI,SAAA,EAAW,KAAA,CAAM,QAAQ,CAAA;AAAA,IACtD,CAAA;AACA,IAAA,KAAA,MAAW,GAAA,IAAO,OAAA,EAAS,KAAA,CAAM,GAAG,CAAA;AACpC,IAAA,OAAO,CAAC,GAAG,OAAO,CAAA;AAAA,EACpB,CAAA;AAGA,EAAA,eAAe,OAAA,CAAQ,MAAA,EAAuB,IAAA,EAAc,KAAA,EAAsD;AAChH,IAAA,MAAM,UAAU,KAAA,EAAM;AACtB,IAAA,MAAM,GAAA,GAAM,UAAU,KAAA,GAAQ,OAAA,CAAQ,IAAI,CAAA,GAAI,OAAA,CAAQ,IAAI,IAAI,CAAA;AAC9D,IAAA,MAAM,OAAA,GAAU,CAAC,GAAG,UAAU,CAAA,CAC3B,MAAA,CAAO,CAAC,CAAC,KAAA,EAAO,EAAE,KAAA,EAAO,UAAA,EAAY,CAAA,KAAM,KAAA,KAAU,IAAA,KAAS,KAAA,CAAM,GAAA,CAAI,IAAI,CAAA,IAAM,KAAA,KAAU,KAAA,IAAS,UAAA,CAAY,CAAA,CACjH,GAAA,CAAI,CAAC,CAAC,KAAK,MAAM,KAAK,CAAA;AACzB,IAAA,IAAI,CAAC,GAAA,IAAO,OAAA,CAAQ,MAAA,KAAW,GAAG,OAAO,KAAA;AAEzC,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,SAAA,CAAU,KAAA,EAAO,CAAA;AACrC,IAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,SAAA,CAAU,CAAC,GAAG,OAAO,CAAA,CAAE,MAAA,CAAO,CAAC,GAAG,OAAO,CAAA,KAAM,OAAA,CAAQ,MAAA,GAAS,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,IAAI,CAAA,KAAM,IAAI,CAAC,CAAA;AACtH,IAAA,MAAM,mBAAmB,UAAA,EAAW;AACpC,IAAA,IAAI,GAAA,IAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,OAAA,CAAQ,OAAO,IAAI,CAAA;AACnB,MAAA,UAAA,CAAW,OAAO,IAAI,CAAA;AAAA,IACxB,WAAW,GAAA,EAAK;AACd,MAAA,IAAI;AACF,QAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,EAAM,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,MAC9B,SAAS,GAAA,EAAK;AACZ,QAAA,QAAA,CAAS,GAAG,CAAA;AACZ,QAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,KAAA;AAAA,MACnC;AAAA,IACF;AACA,IAAA,MAAM,aAAA,GAA+B,OAAO,IAAA,EAAM,QAAA,KAAA,CAC/C,MAAM,MAAA,CAAO,YAAA,CAAa,MAAA,CAAO,eAAA,CAAgB,SAAA,CAAU,IAAA,EAAM,QAAQ,IAAI,EAAA,IAAM,IAAA;AACtF,IAAA,MAAM,MAAA,CAAO,CAAC,GAAI,GAAA,IAAO,UAAU,QAAA,GAAW,CAAC,IAAI,CAAA,GAAI,EAAC,EAAI,GAAG,OAAO,GAAG,aAAa,CAAA;AACtF,IAAA,MAAM,OAAO,KAAA,EAAM;AACnB,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,KAAM,QAAQ,OAAO,KAAA;AAE5C,IAAA,UAAA,CAAW,MAAA,EAAQ,CAAC,UAAA,EAAY,cAAc,CAAC,CAAA;AAC/C,IAAA,MAAA,CAAO,EAAA,CAAG,KAAK,EAAE,IAAA,EAAM,UAAU,KAAA,EAAO,aAAA,EAAe,IAAA,EAAM,IAAA,EAAM,CAAA;AAEnE,IAAA,MAAM,SAAA,GAAY,OAAO,YAAA,CAAa,MAAA,CAAO,YAAY,aAAA,CAAc,CAAA,EAAA,EAAK,MAAM,CAAA,YAAA,CAAc,CAAA;AAChG,IAAA,IAAI,SAAA,IAAa,YAAW,KAAM,gBAAA,QAAwB,MAAA,CAAO,YAAA,CAAa,MAAA,CAAO,YAAA,CAAa,SAAS,CAAA;AAC3G,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,GAAG,UAAA,CAAW,OAAA,EAAS,KAAK,CAAA;AAAA,IAC5B;AAAA,MACE,IAAA,EAAM,aAAA;AAAA,MACN,MAAA,CAAO,MAAA,EAAQ,EAAE,OAAA,EAAQ,EAAG;AAC1B,QAAA,MAAM,KAAK5B,OAAAA,CAAQ,MAAA,CAAO,IAAA,IAAQ,OAAA,CAAQ,KAAK,CAAA;AAE/C,QAAA,MAAM,OAAA,GAAU;AAAA,UACd,GAAG,OAAA,CAAQ,OAAA;AAAA,UACX,GAAG,CAAC,OAAA,CAAQ,aAAa,OAAA,CAAQ,WAAW,EAAE,OAAA,CAAQ,CAAC,IAAA,KAAU,IAAA,GAAO,CAACA,OAAAA,CAAQ,EAAA,EAAI,IAAI,CAAC,CAAA,GAAI,EAAG,CAAA;AAAA,UACjG,GAAG,UAAA,CAAW,CAAC,OAAA,EAAS,OAAO,CAAC;AAAA,SAClC;AACA,QAAA,MAAM,YAAA,GAAe,EAAE,OAAA,EAAQ;AAC/B,QAAA,IAAI,OAAA,KAAY,OAAA,EAAS,OAAO,EAAE,YAAA,EAAa;AAC/C,QAAA,OAAO,EAAE,YAAA,EAAc,KAAA,EAAO,EAAE,iBAAiB,EAAE,KAAA,EAAO,UAAA,CAAW,EAAA,EAAI,WAAW,EAAE,CAAA,CAAE,KAAK,CAAA,IAAI,EAAE;AAAA,MACrG,CAAA;AAAA,MACA,cAAA,EAAgB;AAAA,QACd,KAAA,EAAO,MAAA;AAAA,QACP,OAAA,CAAQ,GAAG,MAAA,EAAQ;AACjB,UAAA,UAAA,CAAW,QAAQ,CAAC,IAAA,KAAS,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA;AAAA,QAClD;AAAA,OACF;AAAA,MACA,eAAe,MAAA,EAAQ;AACrB,QAAA,IAAA,GAAO,MAAA,CAAO,IAAA;AACd,QAAA,IAAA,GAAO,MAAA,CAAO,IAAA;AACd,QAAA,MAAA,GAAS,MAAA,CAAO,MAAA;AAChB,QAAA,MAAA,GAAS,IAAA;AACT,QAAA,UAAA,CAAW,KAAA,EAAM;AACjB,QAAA,UAAA,GAAa,IAAA;AACb,QAAA,IAAA,GAAO,IAAA;AACP,QAAA,OAAA,GAAU,IAAA;AACV,QAAA,QAAA,GAAW,IAAA;AAAA,MACb,CAAA;AAAA,MACA,UAAU,EAAA,EAAI;AACZ,QAAA,OAAO,EAAA,CAAG,UAAA,CAAW,MAAM,CAAA,IAAK,QAAQ,GAAA,CAAI,EAAA,CAAG,KAAA,CAAM,MAAA,CAAO,MAAM,CAAC,CAAA,GAAI,CAAA,EAAA,EAAK,EAAE,CAAA,CAAA,GAAK,MAAA;AAAA,MACrF,CAAA;AAAA,MACA,MAAM,KAAK,EAAA,EAAI;AACb,QAAA,IAAI,CAAC,EAAA,CAAG,UAAA,CAAW,KAAK,MAAM,CAAA,CAAE,GAAG,OAAO,MAAA;AAC1C,QAAA,MAAM,IAAA,GAAO,EAAA,CAAG,KAAA,CAAM,MAAA,CAAO,SAAS,CAAC,CAAA;AACvC,QAAA,IAAI,SAAS,UAAA,EAAY;AACvB,UAAA,UAAA,KAAe,OAAO,CAAC,GAAG,OAAM,CAAE,IAAA,EAAM,CAAA,EAAG,OAAO,IAAA,EAAM,QAAA,KAAA,CAAc,MAAM,IAAA,CAAK,OAAA,CAAQ,MAAM,QAAQ,CAAA,GAAI,MAAM,IAAI,CAAA;AACrH,UAAA,MAAM,UAAA;AAAA,QACR;AACA,QAAA,IAAI,IAAA,KAAS,SAAA,EAAW,OAAO,OAAA,CAAQ,IAAI,CAAA,IAAI;AAC/C,QAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,OAAO,IAAA,EAAM,QAAA,KAAA,CAAc,MAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,QAAQ,CAAA,GAAI,MAAM,IAAI,CAAA;AACtG,QAAA,QAAA,GAAW,IAAA,CAAK,UAAU,KAAK,CAAA;AAC/B,QAAA,OAAO,kBAAkB,QAAQ,CAAA;AAAA,CAAA;AAAA,MACnC,CAAA;AAAA,MACA,SAAA,CAAU,EAAE,OAAA,EAAA+B,QAAAA,EAAS,QAAO,EAAG;AAC7B,QAAA,IAAI,IAAA,CAAK,WAAA,CAAY,IAAA,KAAS,QAAA,EAAU;AACxC,QAAA,OAAA,EAAS,MAAA,EAAO;AAChB,QAAA,KAAA,MAAW,QAAQ,eAAA,CAAgBA,QAAO,CAAA,EAAG,MAAA,CAAO,GAAG,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,OAAO,aAAA,EAAe,IAAA,EAAM,EAAE,IAAA,IAAQ,CAAA;AAAA,MACtH,CAAA;AAAA,MACA,gBAAgB,MAAA,EAAQ;AACtB,QAAA,YAAA,CAAa,MAAA,EAAQ,EAAE,KAAA,EAAO,CAAC,GAAG,KAAA,EAAM,CAAE,IAAA,EAAM,CAAA,EAAG,QAAA,EAAU,OAAA,EAAS,MAAA,EAAQ,UAAU,CAAA;AACxF,QAAA,OAAA,GAAU,WAAW,MAAA,EAAQ,IAAA,EAAM,MAAM,UAAA,CAAW,IAAI,CAAC,CAAA;AACzD,QAAA,WAAA,CAAY,MAAA,EAAQ,IAAA,EAAM,MAAM,IAAI,CAAA;AAAA,MACtC,CAAA;AAAA,MACA,WAAA,EAAa,MAAM,OAAA,EAAS,KAAA;AAAM;AACpC,GACF;AACF;AChUA,IAAM,UAAA,GAAa,IAAA;AAMZ,SAAS,UAAU,OAAA,EAAqC;AAC7D,EAAA,IAAI,IAAA,GAAO,QAAQ,GAAA,EAAI;AAEvB,EAAA,MAAM,OAAA,GAAU,CAAC,EAAA,KAAwB;AACvC,IAAA,IAAI,EAAA,CAAG,WAAW,IAAI,CAAA,IAAK,GAAG,QAAA,CAAS,GAAG,GAAG,OAAO,KAAA;AACpD,IAAA,MAAM,IAAA,GAAOtB,SAAS,IAAA,EAAM,EAAE,EAAE,KAAA,CAAMD,GAAG,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AACnD,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,KAAK,CAAA,IAAK,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,QAAA,CAAS,cAAc,CAAA,EAAG,OAAO,KAAA;AAC/E,IAAA,OAAO,WAAA,CAAY,IAAA,EAAM,OAAA,CAAQ,OAAO,CAAA,KAAM,MAAA;AAAA,EAChD,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,GAAI,QAAQ,cAAA,KAAmB,KAAA,GAAQ,EAAC,GAAI,CAAC,gBAAgB,CAAA;AAAA,IAC7D;AAAA,MACE,IAAA,EAAM,kBAAA;AAAA,MACN,OAAA,EAAS,KAAA;AAAA,MACT,OAAO,MAAA,EAAQ;AACb,QAAA,MAAM,KAAKR,OAAAA,CAAQ,MAAA,CAAO,IAAA,IAAQ,OAAA,CAAQ,KAAK,CAAA;AAC/C,QAAA,MAAM,OAAA,GAAU;AAAA,UACd,GAAG,OAAA,CAAQ,OAAA;AAAA,UACX,GAAI,OAAA,CAAQ,WAAA,GAAc,CAACA,OAAAA,CAAQ,IAAI,OAAA,CAAQ,WAAW,CAAC,CAAA,GAAI,EAAC;AAAA,UAChE,GAAG,UAAA,CAAW,CAAC,MAAM,CAAC;AAAA,SACxB;AACA,QAAA,OAAO,EAAE,YAAA,EAAc,EAAE,OAAA,EAAQ,EAAE;AAAA,MACrC,CAAA;AAAA,MACA,eAAe,MAAA,EAAQ;AACrB,QAAA,IAAA,GAAO,MAAA,CAAO,IAAA;AAAA,MAChB,CAAA;AAAA,MACA,MAAM,SAAA,CAAU,IAAA,EAAM,EAAA,EAAI;AACxB,QAAA,IAAI,CAAC,OAAA,CAAQ,EAAE,CAAA,EAAG,OAAO,MAAA;AACzB,QAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,MAAM,kBAAA;AAAA,UACxB,IAAA;AAAA,UACA,EAAA;AAAA,UACA,EAAE,IAAA,EAAM,OAAA,EAAS,OAAA,CAAQ,OAAA,EAAQ;AAAA,UACjC,OAAO,MAAM,QAAA,KAAA,CAAc,MAAM,KAAK,OAAA,CAAQ,IAAA,EAAM,QAAQ,CAAA,GAAI,EAAA,IAAM;AAAA,SACxE;AACA,QAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,CAAC,CAAA,EAAG,KAAA;AAC1B,QAAA,IAAI,KAAA,KAAU,QAAW,OAAO,MAAA;AAChC,QAAA,MAAM,CAAA,GAAI,CAAC,KAAA,KAAkB,IAAA,CAAK,UAAU,KAAK,CAAA;AAGjD,QAAA,MAAM,KAAA,GAAQ;AAAA,UACZ,EAAA;AAAA,UACA,CAAA,8CAAA,CAAA;AAAA,UACA,CAAA,qEAAA,CAAA;AAAA;AAAA,UAEA,CAAA,oCAAA,CAAA;AAAA,UACA,CAAA,oCAAA,CAAA;AAAA,UACA,GAAI,OAAA,CAAQ,WAAA,GAAc,CAAC,oCAAoC,CAAA,CAAEA,OAAAA,CAAQ,IAAA,EAAM,OAAA,CAAQ,WAAW,CAAC,CAAC,CAAA,CAAA,CAAG,IAAI,EAAC;AAAA,UAC5G,CAAA,qBAAA,EAAwB,CAAA,CAAE,EAAE,CAAC,CAAA,CAAA,CAAA;AAAA,UAC7B,CAAA,sBAAA,EAAyB,CAAA,CAAE,KAAK,CAAC,CAAA,CAAA,CAAA;AAAA,UACjC,2BAA2B,UAAU,CAAA,CAAA,CAAA;AAAA,UACrC,2BAAA;AAAA,UACA,CAAA,SAAA,EAAY,OAAA,CAAQ,WAAA,GAAc,sBAAA,GAAyB,WAAW,CAAA,CAAA,CAAA;AAAA,UACtE,IAAA;AAAA,UACA,yKAAA;AAAA;AAAA,UAEA,GAAG,OAAA,CAAQ,GAAA;AAAA,YAAI,CAAC,KAAA,KACd,KAAA,CAAM,OAAA,KAAY,MAAA,GACd,gBAAgB,CAAA,CAAE,KAAA,CAAM,IAAI,CAAC,CAAA,oBAAA,EAAuB,CAAA,CAAE,MAAM,UAAU,CAAC,CAAA,oBAAA,CAAA,GACvE,CAAA,kBAAA,EAAqB,CAAA,CAAE,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA,YAAA,EAAe,KAAA,CAAM,OAAO,CAAA,CAAA,CAAG,CAAC,CAAA,YAAA;AAAA;AAC1E,SACF;AACA,QAAA,OAAO,EAAE,IAAA,EAAM,CAAA,EAAG,IAAI;AAAA,EAAK,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC;AAAA,CAAA,EAAM,KAAK,IAAA,EAAK;AAAA,MAC7D;AAAA;AACF,GACF;AACF","file":"index.js","sourcesContent":["import { DEFAULT_TITLE } from '../title.ts';\n\nconst escaped = (text: string): string => text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n\n/**\n * The document forge serves for `entry`, one of its `virtual:forge/*-entry.js` modules. A build hands the\n * bare id to its own resolver; the dev server needs the `/@id/` form a browser can request.\n */\nexport function html(entry: string, mode: 'serve' | 'build' = 'serve', title: string = DEFAULT_TITLE): string {\n const src = `${mode === 'serve' ? '/@id/' : ''}virtual:forge/${entry}`;\n return `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <title>${escaped(title)}</title>\n </head>\n <body>\n <div id=\"root\"></div>\n <script type=\"module\" src=\"${src}\"></script>\n </body>\n</html>\n`;\n}\n","import { mkdirSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { html } from './html.ts';\n\nconst DIR = 'node_modules/.forge';\ntype Source = string | Uint8Array;\n\nconst PAGES: Record<string, string> = { index: 'shell-entry.js', frame: 'frame-entry.js' };\n\n/** Writes a build document per forge page under `<root>/node_modules/.forge`, returning them as build inputs. */\nexport function writePages(root: string, title?: string): Record<string, string> {\n const dir = join(root, DIR);\n mkdirSync(dir, { recursive: true });\n return Object.fromEntries(\n Object.entries(PAGES).map(([name, entry]) => {\n const file = join(dir, `${name}.html`);\n writeFileSync(file, html(entry, 'build', title));\n return [name, file];\n }),\n );\n}\n\n/** Vite wrote a relative base's urls from two directories down; the documents now sit at the output root. */\nconst up = (source: Source) =>\n (typeof source === 'string' ? source : new TextDecoder().decode(source)).replace(/(\\s(?:src|href)=\")\\.\\.\\/\\.\\.\\//g, '$1./');\n\n/** Replaces the documents vite emitted at their input path with copies at the output root. */\nexport function hoistPages(\n bundle: Record<string, { type: string; source?: Source }>,\n emit: (file: { type: 'asset'; fileName: string; source: Source }) => void,\n): void {\n for (const name of Object.keys(PAGES)) {\n const from = `${DIR}/${name}.html`;\n const asset = bundle[from];\n if (asset?.type !== 'asset' || asset.source === undefined) continue;\n delete bundle[from];\n emit({ type: 'asset', fileName: `${name}.html`, source: up(asset.source) });\n }\n}\n","import type ts from 'typescript';\n\n/** The local name standing in for a component a meta does not name: its title's last segment, spaces dropped. */\nexport const titleStandIn = (title: string): string | undefined => title.split('/').pop()?.replace(/\\s+/g, '');\n\n/** A story file's component: its props type, null when it takes none, and the declaration its symbol names. */\nexport interface FoundComponent {\n props: ts.Type | null;\n declaration: ts.Declaration | undefined;\n}\n\n/**\n * The component a story file's default export names as `component`, else the import named `fallback`: a native\n * `meta()` names none, and a wrapper declared in the story file is not the component, so the title's last segment\n * stands in for either, as it does in the dependency graph.\n */\nexport function componentOf(\n tsm: typeof ts,\n checker: ts.TypeChecker,\n source: ts.SourceFile,\n fallback?: string,\n): FoundComponent | null {\n const module = checker.getSymbolAtLocation(source);\n const exported = module && checker.tryGetMemberInModuleExports('default', module);\n if (!exported) return null;\n const meta = checker.getTypeOfSymbolAtLocation(resolved(tsm, checker, exported), source);\n let named = meta.getProperty('component');\n let symbol = named && assigned(tsm, checker, resolved(tsm, checker, exported));\n // A wrapper the story file declares itself is the story's, not the component's, as the dependency graph reads it.\n const local = !symbol || symbol.getDeclarations()?.some((declaration) => declaration.getSourceFile() === source);\n const imported = local && fallback ? importNamed(tsm, checker, source, fallback) : undefined;\n if (imported) {\n named = undefined;\n symbol = imported;\n }\n if (!named && !symbol) return null;\n // The value's own type: a meta typed `Meta` alone would otherwise give a props type of `any`.\n const type = checker.getNonNullableType(checker.getTypeOfSymbolAtLocation(symbol ?? named!, source));\n const declaration = symbol?.getDeclarations()?.[0];\n for (const part of type.isUnion() ? type.types : [type]) {\n const [call] = part.getCallSignatures();\n const [param] = call?.getParameters() ?? [];\n if (call) return { props: param ? checker.getTypeOfSymbolAtLocation(param, source) : null, declaration };\n const instance = part.getConstructSignatures()[0]?.getReturnType();\n const held = instance?.getProperty('props');\n if (held) return { props: checker.getTypeOfSymbolAtLocation(held, source), declaration };\n }\n return null;\n}\n\nconst resolved = (tsm: typeof ts, checker: ts.TypeChecker, symbol: ts.Symbol): ts.Symbol =>\n symbol.flags & tsm.SymbolFlags.Alias ? checker.getAliasedSymbol(symbol) : symbol;\n\n/**\n * The symbol the meta object's `component` property is assigned, followed through imports: read from the object as\n * written, since a typed meta's property is declared by its type, not by the object.\n */\nfunction assigned(tsm: typeof ts, checker: ts.TypeChecker, meta: ts.Symbol): ts.Symbol | undefined {\n const declaration = meta.getDeclarations()?.[0];\n let node: ts.Node | undefined =\n declaration && tsm.isVariableDeclaration(declaration)\n ? declaration.initializer\n : declaration && tsm.isExportAssignment(declaration)\n ? declaration.expression\n : undefined;\n while (node && !tsm.isObjectLiteralExpression(node)) {\n if (tsm.isCallExpression(node)) node = node.arguments[0];\n else if (tsm.isParenthesizedExpression(node) || tsm.isAsExpression(node) || tsm.isSatisfiesExpression(node)) {\n node = node.expression;\n } else node = undefined;\n }\n const property = node?.properties.find((p) => p.name && tsm.isIdentifier(p.name) && p.name.text === 'component');\n let value: ts.Symbol | undefined;\n if (property && tsm.isShorthandPropertyAssignment(property)) value = checker.getShorthandAssignmentValueSymbol(property);\n else if (property && tsm.isPropertyAssignment(property)) value = checker.getSymbolAtLocation(property.initializer);\n return value && resolved(tsm, checker, value);\n}\n\nfunction importNamed(tsm: typeof ts, checker: ts.TypeChecker, source: ts.SourceFile, name: string): ts.Symbol | undefined {\n for (const statement of source.statements) {\n if (!tsm.isImportDeclaration(statement)) continue;\n const clause = statement.importClause;\n const bindings = clause?.namedBindings;\n const names = [\n ...(clause?.name ? [clause.name] : []),\n ...(bindings && tsm.isNamedImports(bindings) ? bindings.elements.map((element) => element.name) : []),\n ];\n const found = names.find((id) => id.text === name);\n const symbol = found && checker.getSymbolAtLocation(found);\n if (symbol) return resolved(tsm, checker, symbol);\n }\n return undefined;\n}\n","import { type ParserPlugin, parse } from '@babel/parser';\nimport type * as t from '@babel/types';\nimport { dirname, relative, sep } from 'node:path';\nimport { isGallery } from '../story/tags.ts';\nimport type { ComponentDeps, DepGraph, IndexEntry } from '../story/types.ts';\nimport { titleStandIn } from './componentOf.ts';\n\n/** Resolves an import as the bundler would: an absolute file, or null for anything that is not one. */\nexport type ResolveImport = (specifier: string, importer: string) => Promise<string | null>;\n\nexport interface DepGraphOptions {\n root: string;\n read: (file: string) => string;\n}\n\nexport interface DepGraphBuilder {\n build(entries: readonly IndexEntry[], resolve: ResolveImport): Promise<DepGraph>;\n /** Drops what was read from `file`. True when the graph had read it, so the graph may have changed. */\n invalidate(file: string): boolean;\n /** Drops every cached import resolution, keeping the parsed files. */\n reset(): void;\n}\n\ninterface Import {\n spec: string;\n /** `*` for a namespace import. */\n imported: string;\n}\n\ntype Export = { kind: 'local'; local: string } | { kind: 'from'; spec: string; imported: string };\n\nexport interface ModuleInfo {\n imports: Map<string, Import>;\n exports: Map<string, Export>;\n stars: string[];\n /** Per top-level binding, the names its declaration refers to. */\n refs: Map<string, Set<string>>;\n}\n\n/** A declared binding: the file declaring it and its name there. */\ntype Key = string;\nconst keyOf = (file: string, local: string): Key => `${file}#${local}`;\nconst fileOfKey = (key: Key): string => key.slice(0, key.lastIndexOf('#'));\n\nconst SCRIPT = /\\.[cm]?[jt]sx?$/;\nconst DEFAULT_LOCAL = '*default*';\n/** Keys holding types, which name no value a component could render. */\nconst TYPE_KEYS = new Set(['typeAnnotation', 'typeParameters', 'typeArguments', 'returnType', 'superTypeParameters', 'implements']);\n\n/**\n * The component graph of `entries`, derived from source: each component is the binding its story file's meta names\n * (or, when that is declared in the story file itself, the import the title's last segment names), found by\n * following imports and re-exports to the file declaring it. What a component uses is every listed component that\n * its own declaration reaches, directly or through the file's local helpers and the relative imports in its own\n * directory. Each file is read and parsed once and each import resolved once, until `invalidate` names it.\n */\nexport function createDepGraph({ root, read }: DepGraphOptions): DepGraphBuilder {\n const modules = new Map<string, ModuleInfo | null>();\n const resolutions = new Map<string, Map<string, Promise<string | null>>>();\n\n const info = (file: string): ModuleInfo | null => {\n if (!modules.has(file)) {\n let parsed: ModuleInfo | null = null;\n try {\n parsed = moduleInfo(read(file), file);\n } catch {\n parsed = null;\n }\n modules.set(file, parsed);\n }\n return modules.get(file) ?? null;\n };\n\n return {\n invalidate(file) {\n const known = modules.has(file) || resolutions.has(file);\n modules.delete(file);\n resolutions.delete(file);\n return known;\n },\n\n reset() {\n resolutions.clear();\n },\n\n async build(entries, resolve) {\n const resolveFrom = (spec: string, importer: string): Promise<string | null> => {\n let byImporter = resolutions.get(importer);\n if (!byImporter) {\n byImporter = new Map();\n resolutions.set(importer, byImporter);\n }\n let pending = byImporter.get(spec);\n if (!pending) {\n pending = resolve(spec, importer).then(\n (id) => {\n const file = id?.split('?')[0];\n return file && !file.startsWith('\\0') && SCRIPT.test(file) && !file.split(/[\\\\/]/).includes('node_modules') ? file : null;\n },\n () => null,\n );\n byImporter.set(spec, pending);\n }\n return pending;\n };\n\n /** The binding `name` exported from `file` is declared as, through re-exports. */\n const declaring = async (file: string, name: string, depth = 0): Promise<Key | null> => {\n const mod = info(file);\n if (!mod || depth > 32) return null;\n const exp = mod.exports.get(name);\n if (exp?.kind === 'local') {\n const imp = mod.imports.get(exp.local);\n return imp ? importKey(file, imp, depth + 1) : keyOf(file, exp.local);\n }\n if (exp?.kind === 'from') {\n const target = await resolveFrom(exp.spec, file);\n return target ? declaring(target, exp.imported, depth + 1) : null;\n }\n if (name === 'default') return null;\n for (const spec of mod.stars) {\n const target = await resolveFrom(spec, file);\n const found = target ? await declaring(target, name, depth + 1) : null;\n if (found) return found;\n }\n return null;\n };\n\n const importKey = async (importer: string, imp: Import, depth = 0): Promise<Key | null> => {\n if (imp.imported === '*') return null;\n const target = await resolveFrom(imp.spec, importer);\n return target ? declaring(target, imp.imported, depth) : null;\n };\n\n /** The component a story file's meta stands for. */\n const componentOf = async (entry: IndexEntry): Promise<Key | null> => {\n const mod = info(entry.file);\n if (!mod) return null;\n const byTitle = titleStandIn(entry.title);\n for (const local of [entry.componentName, byTitle]) {\n const imp = local ? mod.imports.get(local) : undefined;\n const key = imp ? await importKey(entry.file, imp) : null;\n if (key) return key;\n }\n return null;\n };\n\n const titles = new Map<string, IndexEntry[]>();\n for (const entry of entries) {\n if (isGallery(entry)) continue;\n const list = titles.get(entry.title);\n if (list) list.push(entry);\n else titles.set(entry.title, [entry]);\n }\n\n const components = new Map<string, Key | null>();\n const byKey = new Map<Key, string[]>();\n for (const [title, list] of titles) {\n let key: Key | null = null;\n for (const file of new Set(list.map((e) => e.file))) {\n key = await componentOf(list.find((e) => e.file === file) as IndexEntry);\n if (key) break;\n }\n components.set(title, key);\n if (key) byKey.set(key, [...(byKey.get(key) ?? []), title]);\n }\n const componentFiles = new Set([...byKey.keys()].map(fileOfKey));\n\n /** The keys `key`'s own source reaches that are other components. */\n const reached = async (key: Key): Promise<Set<Key>> => {\n const out = new Set<Key>();\n const home = fileOfKey(key);\n const homeDir = dirname(home);\n const visited = new Set<string>();\n\n const walkFile = async (file: string, roots: readonly string[] | null): Promise<void> => {\n const mod = info(file);\n if (!mod) return;\n const locals = new Set<string>();\n if (roots === null) {\n for (const name of mod.refs.keys()) locals.add(name);\n for (const name of mod.imports.keys()) locals.add(name);\n } else {\n const queue = [...roots];\n while (queue.length > 0) {\n const name = queue.pop() as string;\n if (locals.has(name)) continue;\n locals.add(name);\n const here = keyOf(file, name);\n if (here !== key && byKey.has(here)) {\n out.add(here);\n continue;\n }\n for (const ref of mod.refs.get(name) ?? []) {\n if (mod.refs.has(ref) || mod.imports.has(ref)) queue.push(ref);\n }\n }\n }\n for (const name of locals) {\n const imp = mod.imports.get(name);\n if (!imp) continue;\n const target = await importKey(file, imp);\n if (target && byKey.has(target)) {\n if (target !== key) out.add(target);\n continue;\n }\n if (!imp.spec.startsWith('.')) continue;\n const helper = await resolveFrom(imp.spec, file);\n if (!helper || visited.has(helper) || componentFiles.has(helper)) continue;\n if (relative(homeDir, helper).startsWith('..')) continue;\n visited.add(helper);\n await walkFile(helper, null);\n }\n };\n\n visited.add(home);\n await walkFile(home, [key.slice(home.length + 1)]);\n return out;\n };\n\n const graph: DepGraph = {};\n for (const [title, key] of components) {\n graph[title] = { source: key ? relative(root, fileOfKey(key)).split(sep).join('/') : null, uses: [], usedBy: [] };\n }\n for (const [title, key] of components) {\n if (!key) continue;\n const uses = new Set<string>();\n for (const target of await reached(key)) {\n for (const other of byKey.get(target) ?? []) if (other !== title) uses.add(other);\n }\n const node = graph[title] as ComponentDeps;\n node.uses = [...uses].sort();\n for (const other of node.uses) graph[other]?.usedBy.push(title);\n }\n for (const node of Object.values(graph)) node.usedBy.sort();\n return Object.fromEntries(Object.entries(graph).sort(([a], [b]) => a.localeCompare(b)));\n },\n };\n}\n\nexport function moduleInfo(code: string, file: string): ModuleInfo {\n const plugins: ParserPlugin[] = ['typescript', 'decorators-legacy', ...(/\\.[cm]?[jt]sx$/.test(file) ? (['jsx'] as const) : [])];\n const program = parse(code, { sourceType: 'module', plugins }).program;\n const imports = new Map<string, Import>();\n const exports = new Map<string, Export>();\n const stars: string[] = [];\n const refs = new Map<string, Set<string>>();\n const declare = (name: string, node: t.Node | null | undefined) => refs.set(name, node ? namesIn(node) : new Set());\n\n const declareStatement = (decl: t.Node | null | undefined): string[] => {\n if (!decl) return [];\n switch (decl.type) {\n case 'FunctionDeclaration':\n case 'ClassDeclaration':\n if (!decl.id) return [];\n declare(decl.id.name, decl);\n return [decl.id.name];\n case 'VariableDeclaration':\n return decl.declarations.flatMap((d) => {\n if (d.id.type !== 'Identifier') return [];\n declare(d.id.name, d.init);\n return [d.id.name];\n });\n default:\n return [];\n }\n };\n\n for (const stmt of program.body) {\n switch (stmt.type) {\n case 'ImportDeclaration':\n if (stmt.importKind === 'type') break;\n for (const spec of stmt.specifiers) {\n if (spec.type === 'ImportSpecifier' && spec.importKind === 'type') continue;\n const imported =\n spec.type === 'ImportNamespaceSpecifier' ? '*' : spec.type === 'ImportDefaultSpecifier' ? 'default' : nameOf(spec.imported);\n imports.set(spec.local.name, { spec: stmt.source.value, imported });\n }\n break;\n case 'ExportNamedDeclaration':\n if (stmt.exportKind === 'type') break;\n for (const name of declareStatement(stmt.declaration)) exports.set(name, { kind: 'local', local: name });\n for (const spec of stmt.specifiers) {\n if (spec.type === 'ExportSpecifier' && spec.exportKind === 'type') continue;\n if (spec.type !== 'ExportSpecifier') continue;\n const exported = nameOf(spec.exported);\n const local = nameOf(spec.local);\n exports.set(exported, stmt.source ? { kind: 'from', spec: stmt.source.value, imported: local } : { kind: 'local', local });\n }\n break;\n case 'ExportAllDeclaration':\n if (stmt.exportKind !== 'type') stars.push(stmt.source.value);\n break;\n case 'ExportDefaultDeclaration': {\n const decl = stmt.declaration;\n const named = (decl.type === 'FunctionDeclaration' || decl.type === 'ClassDeclaration') && decl.id ? decl.id.name : null;\n if (named) declare(named, decl);\n else if (decl.type === 'Identifier') {\n exports.set('default', { kind: 'local', local: decl.name });\n break;\n } else declare(DEFAULT_LOCAL, decl);\n exports.set('default', { kind: 'local', local: named ?? DEFAULT_LOCAL });\n break;\n }\n default:\n declareStatement(stmt);\n }\n }\n return { imports, exports, stars, refs };\n}\n\nfunction nameOf(node: t.Identifier | t.StringLiteral): string {\n return node.type === 'Identifier' ? node.name : node.value;\n}\n\n/** Every identifier `node` refers to as a value, JSX tags included. Types and property names are left out. */\nfunction namesIn(node: t.Node): Set<string> {\n const out = new Set<string>();\n const walk = (value: unknown, key?: string): void => {\n if (key !== undefined && TYPE_KEYS.has(key)) return;\n if (Array.isArray(value)) {\n for (const item of value) walk(item);\n return;\n }\n if (!value || typeof value !== 'object' || typeof (value as { type?: unknown }).type !== 'string') return;\n const n = value as t.Node;\n if (n.type.startsWith('TS') && !('expression' in n)) return;\n if (n.type === 'Identifier' || n.type === 'JSXIdentifier') {\n out.add(n.name);\n return;\n }\n for (const [k, child] of Object.entries(n)) {\n if (k === 'leadingComments' || k === 'trailingComments' || k === 'innerComments' || k === 'loc') continue;\n if ((n.type === 'MemberExpression' || n.type === 'OptionalMemberExpression') && k === 'property' && !n.computed) continue;\n if (n.type === 'JSXMemberExpression' && k === 'property') continue;\n if ((n.type === 'ObjectProperty' || n.type === 'ObjectMethod' || n.type === 'ClassMethod' || n.type === 'ClassProperty') && k === 'key' && !n.computed) continue;\n if (n.type === 'JSXAttribute' && k === 'name') continue;\n walk(child, k);\n }\n };\n walk(node);\n return out;\n}\n","import { execFile } from 'node:child_process';\nimport { existsSync, readFileSync } from 'node:fs';\nimport { dirname, join, posix, resolve } from 'node:path';\nimport type { ComponentHistory } from '../story/types.ts';\n\n/** Runs git in `cwd` and answers its stdout. */\nexport type Git = (args: readonly string[], cwd: string) => Promise<string>;\n\nexport const runGit: Git = (args, cwd) =>\n new Promise((done, fail) => {\n execFile('git', ['-c', 'core.quotepath=off', ...args], { cwd, maxBuffer: 1 << 30 }, (error, stdout) =>\n error ? fail(error) : done(stdout),\n );\n });\n\n/** A commit header in the log `fileDates` reads: a NUL, the hash, a tab, the author date. */\nconst LOG_FORMAT = '--format=%x00%H%x09%aI';\n\ninterface FileDates {\n created: string;\n modified: string;\n /** The commit that added the file. */\n createdBy: string;\n /** The commit that last changed it. */\n modifiedBy: string;\n}\n\n/**\n * When each of `paths` was added and last changed, from one `git log --name-status -M` read newest first. A file is\n * followed back through its renames, so one that moved keeps the date it was first written.\n */\nexport function fileDates(log: string, paths: readonly string[]): Map<string, FileDates> {\n const out = new Map<string, FileDates>();\n /** The name each still-followed file goes by at the commit being read. */\n const names = new Map(paths.map((path) => [path, path]));\n let commit = '';\n let date = '';\n for (const line of log.split('\\n')) {\n if (names.size === 0) break;\n if (line.startsWith('\\0')) {\n [commit = '', date = ''] = line.slice(1).split('\\t');\n continue;\n }\n const [status, ...files] = line.split('\\t');\n const name = files.at(-1);\n const path = name === undefined ? undefined : names.get(name);\n if (!status || name === undefined || path === undefined) continue;\n const newer = out.get(path);\n out.set(path, {\n created: date,\n modified: newer?.modified ?? date,\n createdBy: commit,\n modifiedBy: newer?.modifiedBy ?? commit,\n });\n const renamed = status.startsWith('R') ? files[0] : undefined;\n if (status === 'A' || renamed !== undefined) names.delete(name);\n if (renamed !== undefined) names.set(renamed, path);\n }\n return out;\n}\n\n/** The version in a `git name-rev` answer such as `@scope/pkg@1.2.0~3^2`; null when it names no release. */\nexport function versionOf(named: string): string | null {\n const tag = named.trim().split(/[~^]/)[0] ?? '';\n return /(?:^v?|@)(\\d+\\.\\d+\\.\\d+[-+.\\w]*)$/.exec(tag)?.[1] ?? null;\n}\n\n/** The name of the package `file` belongs to: the nearest `package.json` at or under `top` that has one. */\nfunction packageOf(file: string, top: string): string | null {\n for (let dir = dirname(file); dir.startsWith(top); dir = dirname(dir)) {\n const manifest = join(dir, 'package.json');\n if (existsSync(manifest)) {\n try {\n const name = (JSON.parse(readFileSync(manifest, 'utf8')) as { name?: unknown }).name;\n if (typeof name === 'string') return name;\n } catch {\n // An unreadable manifest names no package; the next one up may.\n }\n }\n if (dir === top) break;\n }\n return null;\n}\n\nexport interface HistoryReader {\n /** The history of each of `sources`, paths relative to the vite root. A file git has never committed has none. */\n read(sources: readonly string[]): Promise<Record<string, ComponentHistory>>;\n}\n\n/**\n * Reads component history from git, once per `HEAD`: every date comes from a commit, so nothing changes until one\n * lands. Outside a repository, or with no git to run, every read answers empty.\n */\nexport function createHistoryReader(root: string, git: Git = runGit): HistoryReader {\n let cached: { head: string; sources: string; history: Record<string, ComponentHistory> } | null = null;\n\n async function load(sources: readonly string[]): Promise<Record<string, ComponentHistory>> {\n const [top = '', prefix = ''] = (await git(['rev-parse', '--show-toplevel', '--show-prefix'], root)).split('\\n');\n const inRepo = new Map(sources.map((source) => [posix.normalize(posix.join(prefix, source)), source]));\n const log = await git(['log', '--name-status', '-M', LOG_FORMAT], top);\n const dates = fileDates(log, [...inRepo.keys()]);\n\n /** Per package, the files it holds: a release is looked for among that package's tags and the unscoped ones. */\n const byPackage = new Map<string | null, string[]>();\n for (const path of dates.keys()) {\n const name = packageOf(resolve(top, path), top);\n byPackage.set(name, [...(byPackage.get(name) ?? []), path]);\n }\n const history: Record<string, ComponentHistory> = {};\n for (const [name, paths] of byPackage) {\n const refs = ['v[0-9]*', '[0-9]*', ...(name === null ? [] : [`${name}@[0-9]*`])].map((ref) => `--refs=${ref}`);\n const commits = paths.flatMap((path) => [dates.get(path)!.createdBy, dates.get(path)!.modifiedBy]);\n const named = (await git(['name-rev', '--tags', '--name-only', ...refs, ...commits], top)).split('\\n');\n paths.forEach((path, i) => {\n const { created, modified } = dates.get(path)!;\n history[inRepo.get(path)!] = {\n created,\n modified,\n introduced: versionOf(named[2 * i] ?? ''),\n modifiedIn: versionOf(named[2 * i + 1] ?? ''),\n };\n });\n }\n return history;\n }\n\n return {\n async read(sources) {\n try {\n const head = (await git(['rev-parse', 'HEAD'], root)).trim();\n const key = [...sources].sort().join('\\n');\n if (cached?.head !== head || cached.sources !== key) cached = { head, sources: key, history: await load(sources) };\n return cached.history;\n } catch {\n return {};\n }\n },\n };\n}\n","import { type ParserPlugin, parse } from '@babel/parser';\nimport type * as t from '@babel/types';\n\n/** A program's top-level variable initializers and function declarations, by name. */\nexport type Bindings = Map<string, t.Node>;\n\nexport function parseFile(code: string, file: string): t.Program {\n const plugins: ParserPlugin[] = ['typescript', 'decorators-legacy', ...(/\\.[jt]sx$/.test(file) ? (['jsx'] as const) : [])];\n return parse(code, { sourceType: 'module', plugins }).program;\n}\n\n/** The identifier `node` calls, through casts and top-level `const`s. */\nexport function calleeOf(node: t.Node | undefined, bindings: Bindings, depth = 0): string | undefined {\n if (!node || depth > 16) return undefined;\n switch (node.type) {\n case 'TSSatisfiesExpression':\n case 'TSAsExpression':\n case 'TSTypeAssertion':\n case 'TSNonNullExpression':\n case 'ParenthesizedExpression':\n return calleeOf(node.expression, bindings, depth + 1);\n case 'CallExpression':\n return node.callee.type === 'Identifier' ? node.callee.name : undefined;\n case 'Identifier':\n return calleeOf(bindings.get(node.name), bindings, depth + 1);\n default:\n return undefined;\n }\n}\n\nconst LITERALS: ReadonlySet<string> = new Set([\n 'StringLiteral',\n 'NumericLiteral',\n 'BooleanLiteral',\n 'NullLiteral',\n 'BigIntLiteral',\n 'RegExpLiteral',\n 'TemplateLiteral',\n 'ArrayExpression',\n 'ArrowFunctionExpression',\n 'FunctionExpression',\n 'FunctionDeclaration',\n 'ClassExpression',\n 'JSXElement',\n 'JSXFragment',\n]);\n\n/** Whether `node` is written out as a value, through casts and top-level `const`s, so no call produced it. */\nexport function isLiteralValue(node: t.Node | undefined, bindings: Bindings, depth = 0): boolean {\n if (!node || depth > 16) return false;\n switch (node.type) {\n case 'TSSatisfiesExpression':\n case 'TSAsExpression':\n case 'TSTypeAssertion':\n case 'TSNonNullExpression':\n case 'ParenthesizedExpression':\n return isLiteralValue(node.expression, bindings, depth + 1);\n case 'Identifier':\n return isLiteralValue(bindings.get(node.name), bindings, depth + 1);\n case 'ObjectExpression':\n // A spread can carry a story's brand into the copy.\n return node.properties.every((p) => p.type !== 'SpreadElement');\n default:\n return LITERALS.has(node.type);\n }\n}\n\n/** The value of a plain string literal or an expression-free template literal. */\nexport function stringLiteral(node: t.Node): string | undefined {\n if (node.type === 'StringLiteral') return node.value;\n if (node.type === 'TemplateLiteral' && node.expressions.length === 0) return node.quasis.map((q) => q.value.cooked ?? q.value.raw).join('');\n return undefined;\n}\n\n/** The string `node` is written as: a literal, through casts and top-level `const`s. */\nexport function stringOf(node: t.Node | undefined, bindings: Bindings, depth = 0): string | undefined {\n if (!node || depth > 16) return undefined;\n switch (node.type) {\n case 'TSSatisfiesExpression':\n case 'TSAsExpression':\n case 'TSTypeAssertion':\n case 'TSNonNullExpression':\n case 'ParenthesizedExpression':\n return stringOf(node.expression, bindings, depth + 1);\n case 'Identifier':\n return stringOf(bindings.get(node.name), bindings, depth + 1);\n default:\n return stringLiteral(node);\n }\n}\n\nexport function isDefaultExport(stmt: t.Statement): boolean {\n if (stmt.type === 'ExportDefaultDeclaration') return true;\n return (\n stmt.type === 'ExportNamedDeclaration' &&\n stmt.specifiers.some((s) => s.type === 'ExportSpecifier' && exportedName(s.exported) === 'default')\n );\n}\n\n/**\n * The JSDoc block immediately above `node`, as prose. A `//` comment is not\n * one: a line comment above an export is as often a note to the author as a\n * description of the story, and printing it in the dossier would be guessing.\n */\nexport function docOf(node: t.Node): string | undefined {\n const comments = node.leadingComments;\n const last = comments?.[comments.length - 1];\n if (last?.type !== 'CommentBlock' || !last.value.startsWith('*')) return undefined;\n const text = last.value\n .slice(1)\n .split('\\n')\n .map((line) => line.replace(/^\\s*\\*/, '').trim())\n .join('\\n')\n .trim();\n return text || undefined;\n}\n\nexport function exportedName(node: t.Identifier | t.StringLiteral): string {\n return node.type === 'Identifier' ? node.name : node.value;\n}\n\n/** The object literal `node` evaluates to, through casts, `meta(…)`/`story(…)` and top-level `const`s. */\nexport function objectOf(node: t.Node | undefined, bindings: Bindings, wrappers: Set<string>, depth = 0): t.ObjectExpression | null {\n if (!node || depth > 16) return null;\n switch (node.type) {\n case 'ObjectExpression':\n return node;\n case 'TSSatisfiesExpression':\n case 'TSAsExpression':\n case 'TSTypeAssertion':\n case 'TSNonNullExpression':\n case 'ParenthesizedExpression':\n return objectOf(node.expression, bindings, wrappers, depth + 1);\n case 'CallExpression':\n return node.callee.type === 'Identifier' && wrappers.has(node.callee.name)\n ? objectOf(node.arguments[0], bindings, wrappers, depth + 1)\n : null;\n case 'Identifier':\n return objectOf(bindings.get(node.name), bindings, wrappers, depth + 1);\n default:\n return null;\n }\n}\n\nexport function prop(obj: t.ObjectExpression | null, key: string): t.Node | undefined {\n for (const p of obj?.properties ?? []) {\n if (p.type !== 'ObjectProperty' || p.computed) continue;\n const name = p.key.type === 'Identifier' ? p.key.name : p.key.type === 'StringLiteral' ? p.key.value : null;\n if (name === key) return p.value;\n }\n return undefined;\n}\n\nexport function stringProp(obj: t.ObjectExpression | null, key: string): string | undefined {\n const value = prop(obj, key);\n return value?.type === 'StringLiteral' ? value.value : undefined;\n}\n","import type * as t from '@babel/types';\nimport { type Bindings, isLiteralValue } from './ast.ts';\n\ntype Fn = t.ArrowFunctionExpression | t.FunctionExpression | t.FunctionDeclaration;\n\nexport const isFn = (node: t.Node | undefined): node is Fn =>\n node?.type === 'ArrowFunctionExpression' || node?.type === 'FunctionExpression' || node?.type === 'FunctionDeclaration';\n\n/** What following a file's imports found, by local name; a name it could not decide is absent. */\nexport interface ForeignStories {\n /** Whether the import is a story. */\n values: Record<string, boolean>;\n /** Whether calling the import returns a story. */\n calls: Record<string, boolean>;\n /** Whether a name re-exported from another module is a story, by exported name. */\n reexports: Record<string, boolean>;\n}\n\n/** `ForeignStories` as it is asked; `undefined` is \"not known\". */\nexport interface Foreign {\n value(name: string): boolean | undefined;\n call(name: string): boolean | undefined;\n reexport(name: string): boolean | undefined;\n}\n\nexport const foreignFrom = (known: ForeignStories): Foreign => ({\n value: (name) => known.values[name],\n call: (name) => known.calls[name],\n reexport: (name) => known.reexports[name],\n});\n\n/** What a file is read against: its top-level bindings, its callees that are forge's, and what its imports are. */\nexport interface Scope {\n bindings: Bindings;\n wrappers: ReadonlySet<string>;\n foreign?: Foreign;\n}\n\n/** Whether any `return` of `statements`, through blocks and `if`s, may hand back a story. */\nfunction returnsStory(statements: readonly t.Statement[], scope: Scope, depth: number): boolean {\n return statements.some((stmt) => {\n if (stmt.type === 'ReturnStatement') return mayBeStory(stmt.argument ?? undefined, scope, depth);\n if (stmt.type === 'BlockStatement') return returnsStory(stmt.body, scope, depth);\n if (stmt.type !== 'IfStatement') return false;\n return returnsStory([stmt.consequent, ...(stmt.alternate ? [stmt.alternate] : [])], scope, depth);\n });\n}\n\n/** Whether calling `fn` may hand back a story. */\nexport function mayReturnStory(fn: Fn, scope: Scope, depth = 0): boolean {\n return fn.body.type === 'BlockStatement' ? returnsStory(fn.body.body, scope, depth + 1) : mayBeStory(fn.body, scope, depth + 1);\n}\n\n/**\n * Whether a native file's export may be what forge's `story` returned, which is all the loader takes. A call is one\n * only when it calls `story` or a function that returns such a call; a value written out is not, and a copy or a\n * choice is one when something it copies or chooses from is. What cannot be read stays in: an import nothing resolved.\n */\nexport function mayBeStory(node: t.Node | undefined, scope: Scope, depth = 0): boolean {\n if (!node) return true;\n if (depth > 16) return false;\n switch (node.type) {\n case 'TSSatisfiesExpression':\n case 'TSAsExpression':\n case 'TSTypeAssertion':\n case 'TSNonNullExpression':\n case 'ParenthesizedExpression':\n return mayBeStory(node.expression, scope, depth + 1);\n case 'Identifier':\n return scope.bindings.has(node.name)\n ? mayBeStory(scope.bindings.get(node.name), scope, depth + 1)\n : (scope.foreign?.value(node.name) ?? true);\n case 'CallExpression': {\n if (node.callee.type !== 'Identifier') return false;\n if (scope.wrappers.has(node.callee.name)) return true;\n const fn = scope.bindings.get(node.callee.name);\n if (isFn(fn)) return mayReturnStory(fn, scope, depth);\n return !scope.bindings.has(node.callee.name) && (scope.foreign?.call(node.callee.name) ?? false);\n }\n case 'ConditionalExpression':\n return mayBeStory(node.consequent, scope, depth + 1) || mayBeStory(node.alternate, scope, depth + 1);\n case 'LogicalExpression':\n return mayBeStory(node.left, scope, depth + 1) || mayBeStory(node.right, scope, depth + 1);\n case 'ObjectExpression':\n // A spread carries a story's brand into the copy.\n return node.properties.some((p) => p.type === 'SpreadElement' && mayBeStory(p.argument, scope, depth + 1));\n default:\n return !isLiteralValue(node, scope.bindings);\n }\n}\n","import type * as t from '@babel/types';\nimport type { Viewport } from '../protocol/messages.ts';\nimport { storyId, storyNameFromExport } from '../story/ids.ts';\nimport type { IndexEntry } from '../story/types.ts';\nimport {\n type Bindings,\n calleeOf,\n docOf,\n exportedName,\n isDefaultExport,\n objectOf,\n parseFile,\n prop,\n stringLiteral,\n stringOf,\n stringProp,\n} from './ast.ts';\nimport { type Foreign, mayBeStory } from './nativeExports.ts';\n\n/**\n * The stories `code` declares, in source order, without running it. `file` is absolute; `autoTitle` titles a meta\n * that names none. `wrappers` adds locals known to be forge's `meta` or `story` though imported from elsewhere, and\n * `foreign` says what a native file's other imports are, where something followed them.\n */\nexport function indexFile(\n code: string,\n file: string,\n autoTitle: string,\n wrappers: ReadonlySet<string> = new Set(),\n foreign?: Foreign,\n): IndexEntry[] {\n try {\n return indexProgram(parseFile(code, file), file, autoTitle, wrappers, foreign);\n } catch (err) {\n throw new Error(`${file}: ${err instanceof Error ? err.message : String(err)}`, { cause: err });\n }\n}\n\n/** An import that a story file's default export or a named export is a call to. */\nexport interface ForeignCallee {\n local: string;\n spec: string;\n imported: string;\n}\n\n/**\n * The imports, from anywhere but `@weasel-js/forge`, that the default export or a named export is a call to. Any of\n * them may be forge's `meta` or `story` re-exported through another module, which only resolving it can tell.\n */\nexport function foreignCallees(code: string, file: string): ForeignCallee[] {\n const program = parseFile(code, file);\n const { bindings } = scan(program, new Set());\n const imported = new Map<string, ForeignCallee>();\n const exported: (t.Node | null | undefined)[] = [];\n for (const stmt of program.body) {\n if (stmt.type === 'ImportDeclaration' && stmt.importKind !== 'type' && stmt.source.value !== '@weasel-js/forge') {\n for (const spec of stmt.specifiers) {\n if (spec.type === 'ImportNamespaceSpecifier' || (spec.type === 'ImportSpecifier' && spec.importKind === 'type')) continue;\n const name = spec.type === 'ImportDefaultSpecifier' ? 'default' : exportedName(spec.imported);\n imported.set(spec.local.name, { local: spec.local.name, spec: stmt.source.value, imported: name });\n }\n }\n if (stmt.type === 'ExportDefaultDeclaration') exported.push(stmt.declaration);\n if (stmt.type !== 'ExportNamedDeclaration' || stmt.exportKind === 'type') continue;\n if (stmt.declaration?.type === 'VariableDeclaration') exported.push(...stmt.declaration.declarations.map((d) => d.init));\n if (stmt.source) continue;\n for (const spec of stmt.specifiers) if (spec.type === 'ExportSpecifier') exported.push(bindings.get(exportedName(spec.local)));\n }\n const found = new Map<string, ForeignCallee>();\n for (const node of exported) {\n const hit = imported.get(calleeOf(node ?? undefined, bindings) ?? '');\n if (hit) found.set(hit.local, hit);\n }\n return [...found.values()];\n}\n\n/** The program's top-level bindings, and its locals that are forge's `meta` or `story`. */\nexport function scan(program: t.Program, extra: ReadonlySet<string>): { bindings: Bindings; wrappers: Set<string> } {\n const bindings: Bindings = new Map();\n const wrappers = new Set(extra);\n for (const stmt of program.body) {\n if (stmt.type === 'ImportDeclaration' && stmt.source.value === '@weasel-js/forge') {\n for (const spec of stmt.specifiers) {\n if (spec.type === 'ImportSpecifier' && ['meta', 'story'].includes(exportedName(spec.imported))) {\n wrappers.add(spec.local.name);\n }\n }\n }\n const decl = stmt.type === 'ExportNamedDeclaration' ? stmt.declaration : stmt;\n if (decl?.type === 'VariableDeclaration') {\n for (const d of decl.declarations) if (d.id.type === 'Identifier' && d.init) bindings.set(d.id.name, d.init);\n } else if (decl?.type === 'FunctionDeclaration' && decl.id) {\n bindings.set(decl.id.name, decl);\n }\n }\n return { bindings, wrappers };\n}\n\nexport function indexProgram(program: t.Program, file: string, autoTitle: string, extra: ReadonlySet<string>, foreign?: Foreign): IndexEntry[] {\n const { bindings, wrappers } = scan(program, extra);\n\n let metaNode: t.Node | undefined;\n let metaDoc: string | undefined;\n // `from`: re-exported from another module, so there is no node to read here.\n const exported: { name: string; node: t.Node | undefined; doc: string | undefined; from?: boolean }[] = [];\n for (const stmt of program.body) {\n if (stmt.type === 'ExportDefaultDeclaration') {\n metaNode = stmt.declaration;\n metaDoc = docOf(stmt);\n }\n if (stmt.type !== 'ExportNamedDeclaration' || stmt.exportKind === 'type') continue;\n const doc = docOf(stmt);\n const decl = stmt.declaration;\n if (decl?.type === 'VariableDeclaration') {\n for (const d of decl.declarations) {\n if (d.id.type === 'Identifier') exported.push({ name: d.id.name, node: d.init ?? undefined, doc: docOf(d) ?? doc });\n }\n } else if (decl?.type === 'FunctionDeclaration' && decl.id) {\n exported.push({ name: decl.id.name, node: decl, doc });\n }\n for (const spec of stmt.specifiers) {\n if (spec.type !== 'ExportSpecifier' || spec.exportKind === 'type') continue;\n const name = exportedName(spec.exported);\n const node = stmt.source ? undefined : bindings.get(exportedName(spec.local));\n if (name === 'default') {\n metaNode = node;\n metaDoc ??= doc;\n } else if (stmt.source) exported.push({ name, node, doc, from: true });\n // An import exported as it stands is read as the identifier it is, which is what `foreign` is asked about.\n else exported.push({ name, node: node ?? (spec.local.type === 'Identifier' ? spec.local : undefined), doc });\n }\n }\n if (!metaNode && !program.body.some(isDefaultExport)) return [];\n\n const meta = objectOf(metaNode, bindings, wrappers);\n const title = stringOf(prop(meta, 'title'), bindings) ?? autoTitle;\n const include = storyFilter(meta, 'includeStories');\n const exclude = storyFilter(meta, 'excludeStories');\n const componentNode = prop(meta, 'component');\n const componentName = componentNode?.type === 'Identifier' ? componentNode.name : undefined;\n const metaIsolate = isolateOf(meta, bindings, wrappers, 'default');\n const metaTags = tagsOf(meta);\n const native = wrappers.has(calleeOf(metaNode, bindings) ?? '');\n\n return exported\n .filter(({ name }) => name !== '__namedExportsOrder')\n .filter(({ name }) => (!include || include(name)) && (!exclude || !exclude(name)))\n .filter((e) => !native || (e.from ? (foreign?.reexport(e.name) ?? true) : mayBeStory(e.node, { bindings, wrappers, foreign })))\n .map(({ name, node, doc }) => {\n const spec = objectOf(node, bindings, wrappers);\n const isolate = isolateOf(spec, bindings, wrappers, name) ?? metaIsolate;\n const tags = combineTags(metaTags, tagsOf(spec));\n const viewport = native ? viewportOf(spec, bindings, wrappers) : undefined;\n return {\n id: storyId(title, name),\n title,\n name: stringProp(spec, 'name') ?? stringProp(spec, 'storyName') ?? storyNameFromExport(name),\n exportName: name,\n file,\n ...(doc === undefined ? {} : { description: doc }),\n ...(metaDoc === undefined ? {} : { componentDescription: metaDoc }),\n ...(componentName === undefined ? {} : { componentName }),\n ...(isolate === undefined ? {} : { isolate }),\n ...(viewport === undefined ? {} : { viewport }),\n ...(tags === undefined ? {} : { tags }),\n };\n });\n}\n\n/**\n * The reason `obj` isolates its story: `isolate` on a native meta or story, `parameters.forge.isolate` in CSF.\n * It must be a string literal, because the shell reads it without importing the module.\n */\nfunction isolateOf(obj: t.ObjectExpression | null, bindings: Bindings, wrappers: Set<string>, exportName: string): string | undefined {\n const parameters = objectOf(prop(obj, 'parameters'), bindings, wrappers);\n const forge = objectOf(prop(parameters, 'forge'), bindings, wrappers);\n const value = prop(obj, 'isolate') ?? prop(forge, 'isolate');\n if (value === undefined) return undefined;\n const literal = stringLiteral(value);\n if (literal === undefined) throw new Error(`${exportName}: isolate must be a string literal`);\n return literal;\n}\n\n/** A native story's `viewport`, when both sides are number literals. */\nfunction viewportOf(obj: t.ObjectExpression | null, bindings: Bindings, wrappers: Set<string>): Viewport | undefined {\n const value = objectOf(prop(obj, 'viewport'), bindings, wrappers);\n const width = prop(value, 'width');\n const height = prop(value, 'height');\n return width?.type === 'NumericLiteral' && height?.type === 'NumericLiteral'\n ? { width: width.value, height: height.value }\n : undefined;\n}\n\n/** `obj`'s `tags`: the string literals of an array literal. */\nfunction tagsOf(obj: t.ObjectExpression | null): string[] | undefined {\n const value = prop(obj, 'tags');\n if (value?.type !== 'ArrayExpression') return undefined;\n return value.elements.flatMap((e) => (e ? (stringLiteral(e) ?? []) : []));\n}\n\n/** A story's tags as Storybook combines them: the meta's, then its own, where `!tag` removes `tag`. */\nfunction combineTags(meta: string[] | undefined, own: string[] | undefined): string[] | undefined {\n if (meta === undefined && own === undefined) return undefined;\n const out = new Set(meta);\n for (const tag of own ?? []) {\n if (tag.startsWith('!')) out.delete(tag.slice(1));\n else out.add(tag);\n }\n return [...out];\n}\n\n/** `includeStories`/`excludeStories` as a predicate, when written as a string array or a regex literal. */\nfunction storyFilter(obj: t.ObjectExpression | null, key: string): ((name: string) => boolean) | null {\n const value = prop(obj, key);\n if (value?.type === 'RegExpLiteral') {\n const re = new RegExp(value.pattern, value.flags.replace(/[gy]/g, ''));\n return (name) => re.test(name);\n }\n if (value?.type === 'ArrayExpression' && value.elements.every((e) => e?.type === 'StringLiteral')) {\n const names = new Set(value.elements.map((e) => (e as t.StringLiteral).value));\n return (name) => names.has(name);\n }\n return null;\n}\n","import { matchesGlob } from 'node:path';\n\n/**\n * The first of the `stories` globs that names `path`, a posix path relative to the vite root. A glob may be written\n * with a leading `./`, as Storybook's are; `matchesGlob` matches nothing against one.\n */\nexport function storyGlobOf(path: string, stories: readonly string[]): string | undefined {\n return stories.find((pattern) => matchesGlob(path, pattern.replace(/^\\.\\//, '')));\n}\n","import { dirname, relative, resolve, sep } from 'node:path';\nimport { storyGlobOf } from './storyGlob.ts';\n\n// A port of Storybook 10.4.0's auto-title (preview-api `userOrAutoTitle`, common `normalizeStoriesEntry`)\n// for string `stories` entries, which carry no title prefix. It must agree with Storybook or ids and links diverge.\n\nconst posix = (path: string): string => path.split(sep).join('/');\n\n/** Storybook's `normalizeStoryPath`. */\nconst dotted = (path: string): string => (/^\\.{1,2}([/\\\\]|$)/.test(path) ? path : `./${path}`);\n\n/** The directory a stories glob searches from: picomatch `scan`'s `prefix + base`, or a file's directory. */\nexport function globDirectory(pattern: string): string {\n const segments = pattern.split('/');\n const magic = segments.findIndex((segment) => /^!|(^|[^\\\\])[*?[{(]/.test(segment));\n return magic === -1 ? dirname(pattern) : segments.slice(0, magic).join('/');\n}\n\n/** Storybook's `sanitize` in autoTitle: strips the extension, then collapses `Button/Button`, `index` and `stories.js`. */\nfunction titleParts(parts: string[]): string[] {\n const last = parts[parts.length - 1];\n if (last === undefined) return parts;\n const stripped = last.replace(/(?:[.](?:story|stories))?([.][^.]+)$/i, '');\n if (parts.length === 1) return [stripped];\n const nextToLast = parts[parts.length - 2];\n if (stripped && nextToLast && stripped.toLowerCase() === nextToLast.toLowerCase()) return [...parts.slice(0, -2), stripped];\n if (stripped && (/^(story|stories)([.][^.]+)$/i.test(last) || /^index$/i.test(stripped))) return parts.slice(0, -1);\n return [...parts.slice(0, -1), stripped];\n}\n\nconst titleFrom = (importPath: string, directory: string): string =>\n titleParts(importPath.replace(directory, '').split('/').filter(Boolean)).join('/');\n\n/**\n * The title Storybook gives a story file whose meta names none: its path under the directory of the first\n * `stories` glob that matches it. A file no glob matches is titled from its path under `root`.\n */\nexport function autoTitle(file: string, root: string, stories: readonly string[]): string {\n const path = posix(relative(root, file));\n const importPath = dotted(path);\n const pattern = storyGlobOf(path, stories);\n if (pattern === undefined) return titleFrom(importPath, '.');\n const directory = dotted(posix(relative(root, resolve(root, globDirectory(pattern))))).replace(/\\/$/, '');\n return titleFrom(importPath, directory);\n}\n","import { parseFile } from './ast.ts';\nimport { indexProgram, scan } from './indexFile.ts';\nimport { type Foreign, type ForeignStories, isFn, mayBeStory, mayReturnStory, type Scope } from './nativeExports.ts';\nimport type { Trace } from './trace.ts';\n\ntype Kind = keyof ForeignStories;\ntype Ask = (kind: Kind, name: string) => Promise<boolean | undefined>;\n\nconst MAX_DEPTH = 8;\n\n/**\n * Runs `read` until it asks about no import it has not asked about before, answering each through `ask`. Reading\n * is synchronous and following an import is not, so each pass reads with what the passes before it learned.\n */\nasync function settled<T>(read: (foreign: Foreign) => T, ask: Ask): Promise<{ result: T; known: ForeignStories }> {\n const known: ForeignStories = { values: {}, calls: {}, reexports: {} };\n const asked = new Set<string>();\n for (;;) {\n const fresh: [Kind, string][] = [];\n const answer = (kind: Kind) => (name: string) => {\n if (!asked.has(`${kind}:${name}`)) fresh.push([kind, name]);\n return known[kind][name];\n };\n const result = read({ value: answer('values'), call: answer('calls'), reexport: answer('reexports') });\n if (fresh.length === 0) return { result, known };\n for (const [kind, name] of fresh) {\n asked.add(`${kind}:${name}`);\n const found = await ask(kind, name);\n if (found !== undefined) known[kind][name] = found;\n }\n }\n}\n\n/**\n * What the imports a native story file's exports rest on are: a story, a function that returns one, or neither.\n * `own` holds the bindings that are forge's `meta` and `story`, by declaring `file#local`; `wrappers` are the file's\n * callees already found to be those.\n */\nexport async function foreignStories(\n file: string,\n wrappers: ReadonlySet<string>,\n own: ReadonlyMap<string, 'meta' | 'story'>,\n trace: Trace,\n read: (file: string) => string,\n): Promise<ForeignStories> {\n const answers = new Map<string, Promise<boolean | undefined>>();\n\n /** Whether the binding `at` exports as `name` is a story, or, `called`, returns one. */\n const exported = async (at: string, name: string, called: boolean, depth: number): Promise<boolean | undefined> => {\n const key = await trace.declaring(at, name);\n if (!key) return undefined;\n if (own.has(key)) return called && own.get(key) === 'story';\n const memo = `${key}:${called}`;\n if (!answers.has(memo)) {\n // Set before it is awaited, so a cycle of imports meets a pending answer and not a second walk.\n answers.set(memo, depth > MAX_DEPTH ? Promise.resolve(undefined) : declared(key, called, depth));\n }\n return answers.get(memo);\n };\n\n const declared = async (key: string, called: boolean, depth: number): Promise<boolean | undefined> => {\n const at = key.slice(0, key.lastIndexOf('#'));\n const local = key.slice(at.length + 1);\n let scope: Scope;\n try {\n scope = scan(parseFile(read(at), at), new Set());\n } catch {\n return undefined;\n }\n const node = scope.bindings.get(local);\n if (!node) return undefined;\n const { result } = await settled(\n (foreign) => (called ? isFn(node) && mayReturnStory(node, { ...scope, foreign }) : mayBeStory(node, { ...scope, foreign })),\n asking(at, depth + 1),\n );\n return result;\n };\n\n const asking =\n (at: string, depth: number): Ask =>\n async (kind, name) => {\n const mod = trace.info(at);\n const exp = mod?.exports.get(name);\n const from = kind === 'reexports' ? (exp?.kind === 'from' ? exp : undefined) : mod?.imports.get(name);\n if (!from || from.imported === '*') return undefined;\n const target = await trace.target(from.spec, at);\n return target ? exported(target, from.imported, kind === 'calls', depth) : undefined;\n };\n\n // Indexing the file is what asks: it reads exactly the exports a native file's index depends on.\n try {\n const program = parseFile(read(file), file);\n return (await settled((foreign) => void indexProgram(program, file, '', wrappers, foreign), asking(file, 0))).known;\n } catch {\n return { values: {}, calls: {}, reexports: {} };\n }\n}\n","import { type ModuleInfo, moduleInfo, type ResolveImport } from './depGraph.ts';\n\n/** One pass of following imports for one story file: what it read, and whether anything failed to resolve. */\nexport interface Trace {\n reads: Set<string>;\n unresolved: boolean;\n info(file: string): ModuleInfo | null;\n /** The file `spec` names from `importer`, or null for nothing, or for a virtual module. */\n target(spec: string, importer: string): Promise<string | null>;\n /** `file#local` for the binding `name` exported from `at` is declared as, through imports and re-exports. */\n declaring(at: string, name: string): Promise<string | null>;\n}\n\n/** Follows imports and re-exports to the binding a name was declared as. Each file is parsed once per tracer. */\nexport function createTracer(read: (file: string) => string): (resolve: ResolveImport) => Trace {\n const modules = new Map<string, ModuleInfo | null>();\n const info = (file: string): ModuleInfo | null => {\n if (!modules.has(file)) {\n let parsed: ModuleInfo | null = null;\n try {\n parsed = moduleInfo(read(file), file);\n } catch {\n parsed = null;\n }\n modules.set(file, parsed);\n }\n return modules.get(file) ?? null;\n };\n\n return (resolve) => {\n const trace: Trace = {\n reads: new Set(),\n unresolved: false,\n info,\n async target(spec, importer) {\n const id = (await resolve(spec, importer).catch(() => null))?.split('?')[0];\n if (!id) trace.unresolved = true;\n return id && !id.startsWith('\\0') ? id : null;\n },\n declaring: (at, name) => declaring(at, name, 0),\n };\n const declaring = async (at: string, name: string, depth: number): Promise<string | null> => {\n trace.reads.add(at);\n const mod = info(at);\n if (!mod || depth > 32) return null;\n const exp = mod.exports.get(name);\n if (exp?.kind === 'local') {\n const imp = mod.imports.get(exp.local);\n if (!imp) return `${at}#${exp.local}`;\n if (imp.imported === '*') return null;\n const next = await trace.target(imp.spec, at);\n return next ? declaring(next, imp.imported, depth + 1) : null;\n }\n if (exp?.kind === 'from') {\n const next = await trace.target(exp.spec, at);\n return next ? declaring(next, exp.imported, depth + 1) : null;\n }\n if (name === 'default') return null;\n for (const spec of mod.stars) {\n const next = await trace.target(spec, at);\n const found = next ? await declaring(next, name, depth + 1) : null;\n if (found) return found;\n }\n return null;\n };\n return trace;\n };\n}\n","import type { ResolveImport } from './depGraph.ts';\nimport { foreignStories } from './foreignStories.ts';\nimport type { ForeignCallee } from './indexFile.ts';\nimport type { ForeignStories } from './nativeExports.ts';\nimport { createTracer } from './trace.ts';\n\nexport interface WrapperResolution {\n /** The callees that are forge's `meta` or `story`. */\n wrappers: Set<string>;\n /** What following the file's imports found each one to be: a story, a function returning one, or neither. */\n foreign: ForeignStories;\n /** Every file read to decide it, so an edit to one can re-decide it. */\n reads: Set<string>;\n /** Whether an import on the way resolved to nothing, so a file added later could change the answer. */\n unresolved: boolean;\n}\n\nexport const NO_FOREIGN: ForeignStories = { values: {}, calls: {}, reexports: {} };\n\n/** Whether two resolutions index a file the same way. */\nexport function sameResolution(a: WrapperResolution | undefined, b: WrapperResolution): boolean {\n const key = (r: WrapperResolution | undefined) => JSON.stringify([[...(r?.wrappers ?? [])].sort(), r?.foreign ?? NO_FOREIGN]);\n return key(a) === key(b);\n}\n\n/**\n * Decides which of a story file's foreign callees are forge's own `meta` or `story`, by following each import and\n * re-export to the function it names and comparing that with the one `@weasel-js/forge` exports; then, for a file\n * whose meta is forge's, what the other imports its exports rest on are. Unlike the component graph this follows\n * into `node_modules`, where a consumer's copy of forge lives. Each file is parsed once per resolver, so a fresh one\n * sees fresh source.\n */\nexport function createWrapperResolver(read: (file: string) => string) {\n const tracer = createTracer(read);\n\n return async (file: string, callees: readonly ForeignCallee[], resolve: ResolveImport): Promise<WrapperResolution> => {\n const trace = tracer(resolve);\n const wrappers = new Set<string>();\n const direct = [...(trace.info(file)?.imports.values() ?? [])].some((imp) => imp.spec === '@weasel-js/forge');\n if (callees.length === 0 && !direct) return { wrappers, foreign: NO_FOREIGN, reads: trace.reads, unresolved: false };\n const forge = await trace.target('@weasel-js/forge', file);\n const own = new Map<string, 'meta' | 'story'>();\n if (forge) {\n for (const name of ['meta', 'story'] as const) {\n const key = await trace.declaring(forge, name);\n if (key) own.set(key, name);\n }\n for (const callee of callees) {\n const from = await trace.target(callee.spec, file);\n const key = from ? await trace.declaring(from, callee.imported) : null;\n if (key && own.has(key)) wrappers.add(callee.local);\n }\n }\n const foreign = forge ? await foreignStories(file, wrappers, own, trace, read) : NO_FOREIGN;\n return { wrappers, foreign, reads: trace.reads, unresolved: trace.unresolved };\n };\n}\n","import { readFileSync } from 'node:fs';\nimport type { IndexEntry } from '../story/types.ts';\nimport { autoTitle } from './autoTitle.ts';\nimport type { ResolveImport } from './depGraph.ts';\nimport { foreignCallees, indexFile } from './indexFile.ts';\nimport { foreignFrom } from './nativeExports.ts';\nimport { createWrapperResolver, type WrapperResolution } from './wrappers.ts';\n\n/** Where a project keeps its stories: the vite root, and the globs relative to it. */\nexport interface StorySource {\n root: string;\n stories: readonly string[];\n}\n\n/**\n * The stories `file` declares, titled as its place under `source` titles it. `resolved` is what following the\n * file's imports found, which `indexStoryResolved` works out: without it a `meta` or `story` reaching forge through\n * another module is not recognized, and an import the file exports is taken for a story.\n */\nexport function indexStory(\n code: string,\n file: string,\n source: StorySource,\n resolved?: Pick<WrapperResolution, 'wrappers' | 'foreign'>,\n): IndexEntry[] {\n const foreign = resolved ? foreignFrom(resolved.foreign) : undefined;\n return indexFile(code, file, autoTitle(file, source.root, source.stories), resolved?.wrappers, foreign);\n}\n\n/**\n * `indexStory`, after following the file's imports to decide which callees are forge's `meta` and `story`. Every\n * caller that indexes a file on its own goes through here, so a meta built by a project helper reads the same to\n * the workshop, to `forgeTest`, and to a script.\n */\nexport async function indexStoryResolved(\n code: string,\n file: string,\n source: StorySource,\n resolve: ResolveImport,\n decide = createWrapperResolver((path) => readFileSync(path, 'utf8')),\n): Promise<{ entries: IndexEntry[]; resolution: WrapperResolution }> {\n const resolution = await decide(file, foreignCallees(code, file), resolve);\n return { entries: indexStory(code, file, source, resolution), resolution };\n}\n","import { existsSync, readFileSync } from 'node:fs';\nimport { dirname, join, relative } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\n/** Entry modules of forge's own realms: source beside this file in a checkout, the built entries in an install. */\nexport function ownEntries(realms: readonly string[]): string[] {\n const here = fileURLToPath(import.meta.url);\n for (let dir = dirname(here); dir !== dirname(dir); dir = dirname(dir)) {\n const manifest = join(dir, 'package.json');\n if (!existsSync(manifest) || (JSON.parse(readFileSync(manifest, 'utf8')) as { name?: string }).name !== '@weasel-js/forge') {\n continue;\n }\n const source = !relative(join(dir, 'src'), here).startsWith('..');\n return realms.map((realm) => join(dir, source ? `src/${realm}/index.ts` : `dist/${realm}/index.js`));\n }\n return [];\n}\n","import type ts from 'typescript';\nimport type { ApiInherited, ApiMember, ApiProp, ApiRef, ApiTable } from '../story/api.ts';\n\n/** What reading one story file's component API needs. */\nexport interface ApiReading {\n tsm: typeof ts;\n checker: ts.TypeChecker;\n at: ts.SourceFile;\n /** True for a file whose declarations are inherited rather than listed: the platform's, or a skipped package's. */\n skipped: (file: string) => boolean;\n /** True for a file of the platform's own: React's types or TypeScript's libraries. */\n platform: (file: string) => boolean;\n}\n\n/** An API as read, with the project files it is declared in, which the plugin watches and the page never sees. */\nexport type ReadApi = ApiTable & { sources: string[] };\n\nconst RESERVED = new Set(['ref', 'key']);\nconst IN_PACKAGES = /[\\\\/]node_modules[\\\\/]/;\n\n/** Every prop of `props`, the props it inherits counted per declaring type, and what its `ref` exposes. */\nexport function apiTable(reading: ApiReading, declaration: ts.Declaration | undefined, props: ts.Type | null): ReadApi {\n const { checker } = reading;\n const sources = new Set<string>();\n const record = (symbol: ts.Symbol) => {\n for (const file of filesOf(symbol)) if (!IN_PACKAGES.test(file)) sources.add(file);\n };\n const defaults = declaration ? destructuredDefaults(reading.tsm, declaration) : new Map<string, string>();\n const listed: ApiProp[] = [];\n const inherited = new Map<string, number>();\n let ref: ApiRef | null = null;\n for (const prop of props ? checker.getPropertiesOfType(checker.getApparentType(props)) : []) {\n const name = prop.getName();\n if (name === 'ref') ref = refOf(reading, prop, record);\n if (RESERVED.has(name)) continue;\n const files = filesOf(prop);\n if (files.length > 0 && files.every(reading.skipped)) {\n const from = containerName(reading.tsm, prop) ?? packageOf(files[0]!);\n inherited.set(from, (inherited.get(from) ?? 0) + 1);\n continue;\n }\n listed.push(propEntry(reading, prop, defaults.get(name)));\n record(prop);\n }\n return {\n props: listed,\n inherited: [...inherited].map(([from, count]): ApiInherited => ({ from, count })),\n ref,\n sources: [...sources],\n };\n}\n\nconst filesOf = (symbol: ts.Symbol): string[] =>\n (symbol.getDeclarations() ?? []).map((declaration) => declaration.getSourceFile().fileName);\n\nconst docOf = ({ tsm, checker }: ApiReading, symbol: ts.Symbol): string =>\n tsm.displayPartsToString(symbol.getDocumentationComment(checker)).replace(/\\s+/g, ' ').trim();\n\nfunction tagText({ tsm, checker }: ApiReading, symbol: ts.Symbol, names: readonly string[]): string | undefined {\n const tag = symbol.getJsDocTags(checker).find((t) => names.includes(t.name));\n return tag ? tsm.displayPartsToString(tag.text).trim() : undefined;\n}\n\nfunction propEntry(reading: ApiReading, prop: ts.Symbol, destructured: string | undefined): ApiProp {\n const entry: ApiProp = {\n name: prop.getName(),\n type: writtenType(reading, prop),\n required: !(prop.flags & reading.tsm.SymbolFlags.Optional),\n };\n const fallback = destructured ?? tagText(reading, prop, ['default', 'defaultValue']);\n if (fallback) entry.default = fallback;\n const description = docOf(reading, prop);\n if (description) entry.description = description;\n const deprecated = tagText(reading, prop, ['deprecated']);\n if (deprecated !== undefined) entry.deprecated = deprecated;\n return entry;\n}\n\n/**\n * The type as its one declaration spells it, when that is the type the prop has here; otherwise, as for a prop\n * inherited through a generic base or a method-shorthand one, as the checker prints it, untruncated.\n */\nfunction writtenType({ tsm, checker, at }: ApiReading, symbol: ts.Symbol): string {\n const type = checker.getNonNullableType(checker.getTypeOfSymbolAtLocation(symbol, at));\n const [declaration, ...others] = symbol.getDeclarations() ?? [];\n const node = declaration && others.length === 0 && tsm.isPropertySignature(declaration) ? declaration.type : undefined;\n if (node && checker.getNonNullableType(checker.getTypeFromTypeNode(node)) === type) return node.getText().replace(/\\s+/g, ' ');\n return checker.typeToString(type, undefined, tsm.TypeFormatFlags.NoTruncation);\n}\n\n/** The package a file is in, `@scope/name` or `name`, else the file's own name. */\nfunction packageOf(file: string): string {\n const parts = file.split(/[\\\\/]/);\n const at = parts.lastIndexOf('node_modules');\n if (at < 0 || at + 1 >= parts.length) return parts.at(-1) ?? file;\n const name = parts[at + 1]!;\n return name.startsWith('@') && parts[at + 2] ? `${name}/${parts[at + 2]}` : name;\n}\n\n/** The interface, type alias or class a property is declared in, by name. */\nfunction containerName(tsm: typeof ts, prop: ts.Symbol): string | undefined {\n const parent = prop.getDeclarations()?.[0]?.parent;\n if (!parent) return undefined;\n if (tsm.isInterfaceDeclaration(parent) || tsm.isClassDeclaration(parent)) return parent.name?.text;\n if (tsm.isTypeLiteralNode(parent) && tsm.isTypeAliasDeclaration(parent.parent)) return parent.parent.name.text;\n return undefined;\n}\n\n/** What `ref` holds: the type of `current` on the ref object it accepts. */\nfunction refOf(reading: ApiReading, prop: ts.Symbol, record: (symbol: ts.Symbol) => void): ApiRef | null {\n const { tsm, checker, at } = reading;\n const type = checker.getNonNullableType(checker.getTypeOfSymbolAtLocation(prop, at));\n for (const part of type.isUnion() ? type.types : [type]) {\n const current = part.getProperty('current');\n if (!current) continue;\n const held = checker.getNonNullableType(checker.getTypeOfSymbolAtLocation(current, at));\n const name = checker.typeToString(held, undefined, tsm.TypeFormatFlags.NoTruncation);\n const declared = (held.getSymbol() ?? held.aliasSymbol)?.getDeclarations() ?? [];\n if (declared.length > 0 && declared.every((d) => reading.platform(d.getSourceFile().fileName))) {\n return { type: name, members: [] };\n }\n const members = checker.getPropertiesOfType(held).map((member) => {\n record(member);\n return memberEntry(reading, member);\n });\n return { type: name, members };\n }\n return null;\n}\n\nfunction memberEntry(reading: ApiReading, member: ts.Symbol): ApiMember {\n const { tsm, checker, at } = reading;\n const type = checker.getTypeOfSymbolAtLocation(member, at);\n const [call] = type.getCallSignatures();\n const declarations = member.getDeclarations() ?? [];\n const entry: ApiMember = {\n name: member.getName(),\n kind: call ? 'method' : 'property',\n signature: call\n ? checker.signatureToString(call, undefined, tsm.TypeFormatFlags.WriteArrowStyleSignature | tsm.TypeFormatFlags.NoTruncation)\n : checker.typeToString(type, undefined, tsm.TypeFormatFlags.NoTruncation),\n readonly: declarations.some((d) => (tsm.getCombinedModifierFlags(d) & tsm.ModifierFlags.Readonly) !== 0),\n };\n const description = docOf(reading, member);\n if (description) entry.description = description;\n return entry;\n}\n\n/** The defaults the component's own function gives its destructured props, as source text, by prop name. */\nfunction destructuredDefaults(tsm: typeof ts, declaration: ts.Declaration): Map<string, string> {\n const defaults = new Map<string, string>();\n let node: ts.Node | undefined = tsm.isVariableDeclaration(declaration) ? declaration.initializer : declaration;\n while (node && (tsm.isCallExpression(node) || tsm.isParenthesizedExpression(node) || tsm.isAsExpression(node))) {\n node = tsm.isCallExpression(node) ? node.arguments[0] : node.expression;\n }\n if (!node || !(tsm.isArrowFunction(node) || tsm.isFunctionExpression(node) || tsm.isFunctionDeclaration(node))) {\n return defaults;\n }\n const pattern = node.parameters[0]?.name;\n if (!pattern || !tsm.isObjectBindingPattern(pattern)) return defaults;\n for (const element of pattern.elements) {\n const key = element.propertyName ?? element.name;\n if (element.initializer && tsm.isIdentifier(key)) defaults.set(key.text, element.initializer.getText());\n }\n return defaults;\n}\n","import { dirname } from 'node:path';\nimport type ts from 'typescript';\nimport type { ArgShape, ArgType } from '../csf/argsToSchema.ts';\nimport { apiTable, type ReadApi } from './apiTable.ts';\nimport { componentOf } from './componentOf.ts';\n\n/** What a story file's component takes, as argTypes, and the files its props are declared in. */\nexport interface PropTable {\n argTypes: Record<string, ArgType>;\n sources: string[];\n}\n\nexport interface PropReader {\n /** The props of the component `file`'s default export names; null when it names none. */\n read(file: string): PropTable | null;\n /**\n * The API of the component `file`'s default export names, or else of the import named `fallback`; null when\n * neither names one.\n */\n api(file: string, fallback?: string): ReadApi | null;\n}\n\n/** React's own declarations and TypeScript's libraries: every DOM attribute and event handler an element takes. */\nconst PLATFORM = /[\\\\/]node_modules[\\\\/](@types[\\\\/]react(-dom)?|typescript)[\\\\/]/;\n\n/** Narrows which props get a control. */\nexport interface PropControlsOptions {\n /**\n * Leaves out a prop declared in a file this answers true for, given the file's absolute path. Props that React's\n * types or TypeScript's libraries declare are always left out.\n */\n skip?: (declaredIn: string) => boolean;\n}\n\n/**\n * Reads component props through the project's own TypeScript, so a prop's type is what the compiler resolves it to.\n * `stories` are the program's roots, named up front so the program is built once. Null without `typescript`, or\n * with TypeScript 7, which has no compiler API.\n */\nexport async function createPropReader(\n root: string,\n stories: () => readonly string[],\n { skip }: PropControlsOptions = {},\n): Promise<PropReader | null> {\n const platform = (file: string) => PLATFORM.test(file);\n const skipped = (file: string) => platform(file) || skip?.(file) === true;\n let tsm: typeof ts;\n try {\n tsm = (await import('typescript')).default;\n } catch {\n return null;\n }\n if (typeof tsm.createLanguageService !== 'function') return null;\n const { sys } = tsm;\n const configFile = tsm.findConfigFile(root, sys.fileExists);\n const read = configFile ? tsm.readConfigFile(configFile, sys.readFile) : undefined;\n const parsed = read?.config\n ? tsm.parseJsonConfigFileContent(read.config, { ...sys, readDirectory: () => [] }, dirname(configFile!))\n : undefined;\n const options: ts.CompilerOptions = {\n jsx: tsm.JsxEmit.ReactJSX,\n moduleResolution: tsm.ModuleResolutionKind.Bundler,\n module: tsm.ModuleKind.ESNext,\n target: tsm.ScriptTarget.ESNext,\n strict: true,\n ...parsed?.options,\n allowJs: true,\n noEmit: true,\n skipLibCheck: true,\n };\n const host: ts.LanguageServiceHost = {\n getScriptFileNames: () => [...stories()],\n getScriptVersion: (file) => String(sys.getModifiedTime?.(file)?.getTime() ?? 0),\n getScriptSnapshot: (file) => {\n const text = sys.readFile(file);\n return text === undefined ? undefined : tsm.ScriptSnapshot.fromString(text);\n },\n getCurrentDirectory: () => root,\n getCompilationSettings: () => options,\n getDefaultLibFileName: tsm.getDefaultLibFilePath,\n fileExists: sys.fileExists,\n readFile: sys.readFile,\n readDirectory: sys.readDirectory,\n directoryExists: sys.directoryExists,\n getDirectories: sys.getDirectories,\n };\n const service = tsm.createLanguageService(host, tsm.createDocumentRegistry());\n\n const sourceOf = (file: string) => {\n const program = service.getProgram();\n const source = program?.getSourceFile(file);\n return program && source ? { checker: program.getTypeChecker(), source } : null;\n };\n\n return {\n read(file) {\n const found = sourceOf(file);\n if (!found) return null;\n const { checker, source } = found;\n const props = componentOf(tsm, checker, source)?.props;\n return props ? propTable(tsm, checker, props, source, skipped) : null;\n },\n api(file, fallback) {\n const found = sourceOf(file);\n if (!found) return null;\n const { checker, source } = found;\n const component = componentOf(tsm, checker, source, fallback);\n if (!component) return null;\n return apiTable({ tsm, checker, at: source, skipped, platform }, component.declaration, component.props);\n },\n };\n}\n\n/** What reading one story file's props needs at every level of a prop's type. */\ninterface Reading {\n tsm: typeof ts;\n checker: ts.TypeChecker;\n at: ts.SourceFile;\n skipped: (file: string) => boolean;\n sources: Set<string>;\n}\n\n/**\n * An argType for each prop a control can edit: a boolean, a string or a union of a string with other scalars, a number,\n * a union with string literals in it, or an array, object or union of objects built of those.\n */\nfunction propTable(\n tsm: typeof ts,\n checker: ts.TypeChecker,\n props: ts.Type,\n at: ts.SourceFile,\n skipped: (file: string) => boolean,\n): PropTable {\n const argTypes: Record<string, ArgType> = {};\n const reading: Reading = { tsm, checker, at, skipped, sources: new Set() };\n for (const prop of checker.getPropertiesOfType(checker.getApparentType(props))) {\n const files = declaredIn(prop);\n if (files.length > 0 && files.every(skipped)) continue;\n const argType = controlFor(reading, checker.getNonNullableType(checker.getTypeOfSymbolAtLocation(prop, at)), () =>\n writtenOrder(tsm, checker, prop),\n );\n if (!argType) continue;\n const description = tsm.displayPartsToString(prop.getDocumentationComment(checker)).replace(/\\s+/g, ' ').trim();\n argTypes[prop.getName()] = description ? { ...argType, description } : argType;\n record(reading, files);\n }\n return { argTypes, sources: [...reading.sources] };\n}\n\nconst declaredIn = (symbol: ts.Symbol): string[] =>\n (symbol.getDeclarations() ?? []).map((declaration) => declaration.getSourceFile().fileName);\n\nconst IN_PACKAGES = /[\\\\/]node_modules[\\\\/]/;\n\nfunction record({ sources }: Reading, files: readonly string[]): void {\n for (const file of files) if (!IN_PACKAGES.test(file)) sources.add(file);\n}\n\nfunction controlFor(reading: Reading, type: ts.Type, written: () => string[] | null): ArgType | null {\n const { TypeFlags } = reading.tsm;\n const parts = type.isUnion() ? type.types : [type];\n if (parts.every((part) => part.flags & TypeFlags.BooleanLike)) return { control: { type: 'boolean' } };\n if (textLike(reading, parts)) return { control: { type: 'text' } };\n if (type.flags & TypeFlags.Number) return { control: { type: 'number' } };\n // No control type: the options alone make it a select, and a story's own argType may still say radio.\n const options = literalsOf(reading, parts);\n if (options.length > 1) {\n const order = written();\n const same = order?.length === options.length && options.every((option) => order.includes(option));\n return { options: same ? order : options };\n }\n const shape = shapeOf(reading, type, 0);\n return shape && shape.name !== 'enum' && !(shape.name in SCALARS) ? { control: 'object', type: shape } : null;\n}\n\nconst SCALARS = { boolean: true, string: true, number: true };\n\n/** A string with nothing beside it that text could not stand for: a `ReactNode`, which also takes elements, has no\n * text control, since a story's text would never be what the prop draws. */\nfunction textLike({ tsm }: Reading, parts: readonly ts.Type[]): boolean {\n return parts.some((part) => part.flags & tsm.TypeFlags.String) && !parts.some((part) => part.flags & tsm.TypeFlags.Object);\n}\n\nfunction literalsOf({ tsm }: Reading, parts: readonly ts.Type[]): string[] {\n return parts.filter((part) => part.flags & tsm.TypeFlags.StringLiteral).map((part) => (part as ts.StringLiteralType).value);\n}\n\n/** Deep enough for a list of objects holding a union of objects; past it, a type is left to the story's own argType. */\nconst MAX_DEPTH = 4;\n\n/**\n * The shape of a value of `type`, made of parts a control can edit; null when a part it needs has none. An object\n * type declared in a dependency, or one that is callable or open to any key, is opaque: its fields do not say what it\n * holds.\n */\nfunction shapeOf(reading: Reading, type: ts.Type, depth: number): ArgShape | null {\n const { tsm, checker } = reading;\n const { TypeFlags } = tsm;\n if (depth > MAX_DEPTH) return null;\n const whole = checker.getNonNullableType(type);\n const parts = whole.isUnion() ? whole.types : [whole];\n if (parts.length === 0) return null;\n if (parts.every((part) => part.flags & TypeFlags.BooleanLike)) return { name: 'boolean' };\n if (textLike(reading, parts)) return { name: 'string' };\n if (whole.flags & TypeFlags.Number) return { name: 'number' };\n const literals = literalsOf(reading, parts);\n if (literals.length === parts.length || literals.length > 1) return { name: 'enum', value: literals };\n if (parts.length > 1) {\n const members = parts.map((part) => shapeOf(reading, part, depth + 1));\n return members.every((member) => member?.name === 'object') ? { name: 'union', value: members as ArgShape[] } : null;\n }\n if (checker.isArrayType(whole)) {\n const [item] = checker.getTypeArguments(whole as ts.TypeReference);\n const shape = item && shapeOf(reading, item, depth + 1);\n return shape ? { name: 'array', value: shape } : null;\n }\n if (checker.isTupleType(whole)) {\n const items = checker.getTypeArguments(whole as ts.TypeReference).map((item) => shapeOf(reading, item, depth + 1));\n const [first] = items;\n const same = first && items.every((item) => JSON.stringify(item) === JSON.stringify(first));\n return same ? { name: 'array', value: first } : null;\n }\n if (!(whole.flags & (TypeFlags.Object | TypeFlags.Intersection))) return null;\n if (whole.getCallSignatures().length > 0 || whole.getConstructSignatures().length > 0) return null;\n if (checker.getIndexInfosOfType(whole).length > 0) return null;\n const declared = (whole.getSymbol() ?? whole.aliasSymbol)?.getDeclarations() ?? [];\n if (declared.some((declaration) => IN_PACKAGES.test(declaration.getSourceFile().fileName))) return null;\n const fields: Record<string, ArgShape> = {};\n for (const prop of checker.getPropertiesOfType(whole)) {\n const files = declaredIn(prop);\n if (files.some((file) => IN_PACKAGES.test(file) || reading.skipped(file))) return null;\n const field = shapeOf(reading, checker.getTypeOfSymbolAtLocation(prop, reading.at), depth + 1);\n if (field) fields[prop.getName()] = field;\n else if (!(prop.flags & tsm.SymbolFlags.Optional)) return null;\n record(reading, files);\n }\n return Object.keys(fields).length > 0 ? { name: 'object', value: fields } : null;\n}\n\n/**\n * A prop's string literals in the order its type is written in, following a plain alias to where it is spelled out.\n * Null when any part of the type is computed.\n */\nfunction writtenOrder(tsm: typeof ts, checker: ts.TypeChecker, prop: ts.Symbol): string[] | null {\n const [declaration, ...others] = prop.getDeclarations() ?? [];\n if (!declaration || others.length > 0) return null;\n if (!tsm.isPropertySignature(declaration) && !tsm.isPropertyDeclaration(declaration)) return null;\n const seen = new Set<ts.Node>();\n const literals = (node: ts.TypeNode | undefined): string[] | null => {\n if (!node || seen.has(node)) return null;\n seen.add(node);\n if (tsm.isParenthesizedTypeNode(node)) return literals(node.type);\n if (tsm.isLiteralTypeNode(node)) {\n if (node.literal.kind === tsm.SyntaxKind.NullKeyword) return [];\n return tsm.isStringLiteralLike(node.literal) ? [node.literal.text] : null;\n }\n if (node.kind === tsm.SyntaxKind.UndefinedKeyword) return [];\n if (tsm.isUnionTypeNode(node)) {\n const parts = node.types.map(literals);\n return parts.every((part) => part !== null) ? [...new Set(parts.flat())] : null;\n }\n if (tsm.isTypeReferenceNode(node) && !node.typeArguments) {\n const named = checker.getSymbolAtLocation(node.typeName);\n const target = named && named.flags & tsm.SymbolFlags.Alias ? checker.getAliasedSymbol(named) : named;\n const [alias, ...rest] = target?.getDeclarations() ?? [];\n if (alias && rest.length === 0 && tsm.isTypeAliasDeclaration(alias) && !alias.typeParameters) {\n return literals(alias.type);\n }\n // An interface or class holds no string literal of its own.\n if (target && target.flags & (tsm.SymbolFlags.Interface | tsm.SymbolFlags.Class)) return [];\n }\n return null;\n };\n return literals(declaration.type);\n}\n","import type { Plugin } from 'vite';\nimport { PROP_ARG_TYPES_EXPORT } from '../csf/propArgTypes.ts';\nimport { API_EXPORT } from '../story/api.ts';\nimport { createPropReader, type PropControlsOptions, type PropReader } from './propTypes.ts';\n\n/** Which readings a story module gets. */\nexport interface StoryExportsOptions {\n controls: boolean;\n api: boolean;\n}\n\nconst errorText = (err: unknown) => (err instanceof Error ? err.message : String(err));\n\n/**\n * What to append to story module `file`: the argTypes read from its component's props, and its component's API, each\n * as a named export. `sources` are the files those were read from, which an edit to must reach the story.\n */\nexport function storyExports(\n reader: PropReader,\n file: string,\n fallback: string | undefined,\n { controls, api }: StoryExportsOptions,\n warn: (message: string) => void,\n): { code: string; sources: string[] } {\n let code = '';\n const sources: string[] = [];\n if (controls) {\n try {\n const table = reader.read(file);\n if (table && Object.keys(table.argTypes).length > 0) {\n code += `\\nexport const ${PROP_ARG_TYPES_EXPORT} = ${JSON.stringify(table.argTypes)};\\n`;\n sources.push(...table.sources);\n }\n } catch (err) {\n warn(`could not read the props for ${file}: ${errorText(err)}`);\n }\n }\n if (api) {\n try {\n const read = reader.api(file, fallback);\n const table = read && { props: read.props, inherited: read.inherited, ref: read.ref };\n code += `\\nexport const ${API_EXPORT} = ${JSON.stringify(table)};\\n`;\n if (read) sources.push(...read.sources);\n } catch (err) {\n warn(`could not read the API for ${file}: ${errorText(err)}`);\n }\n }\n return { code, sources };\n}\n\n/**\n * Appends to each story module the argTypes read from the props of its meta's `component`, which the CSF loader merges\n * under the story's own, and the component's API, which its index page shows. `stories` are the story files, as\n * absolute paths; `fallbackOf` names the import standing in for a meta that names no component.\n */\nexport function propControls(\n stories: () => readonly string[],\n fallbackOf: (file: string) => string | undefined,\n readings: StoryExportsOptions,\n options: PropControlsOptions = {},\n): Plugin {\n let root = process.cwd();\n /** Built on the first story module served, so the TypeScript program costs nothing until a story is opened. */\n let reader: Promise<PropReader | null> | null = null;\n return {\n name: 'weaselforge:prop-controls',\n configResolved(config) {\n root = config.root;\n reader = null;\n },\n async transform(code, id) {\n if (!stories().includes(id)) return undefined;\n const props = await (reader ??= createPropReader(root, stories, options));\n if (!props) return undefined;\n const added = storyExports(props, id, fallbackOf(id), readings, (message) => this.warn(message));\n if (!added.code) return undefined;\n // A props type imported as a type is not in the module graph, so an edit to it would not reach the story.\n for (const source of new Set(added.sources)) this.addWatchFile(source);\n return { code: code + added.code, map: null };\n },\n };\n}\n","import { execFile } from 'node:child_process';\nimport type { ServerResponse } from 'node:http';\nimport type { ViteDevServer } from 'vite';\nimport { type Git, runGit } from '../history.ts';\nimport { type ForgeIssue, ISSUES_PATH, type IssueRepo, type IssuesAnswer, issueLabel } from './answer.ts';\n\n/** What one `gh` run came to: its stdout, no `gh` on the PATH, or a failure with its exit code and what it said. */\nexport type GhResult = { stdout: string } | { missing: true } | { failed: string; code: number | null };\n\n/** Runs `gh` in `cwd` under the machine's own login. */\nexport type Gh = (args: readonly string[], cwd: string) => Promise<GhResult>;\n\nexport const runGh: Gh = (args, cwd) =>\n new Promise((done) => {\n execFile(\n 'gh',\n [...args],\n { cwd, maxBuffer: 16 << 20, env: { ...process.env, GH_PROMPT_DISABLED: '1' } },\n (error, stdout, stderr) => {\n if (!error) return done({ stdout });\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') return done({ missing: true });\n done({ failed: stderr.trim() || error.message, code: typeof error.code === 'number' ? error.code : null });\n },\n );\n });\n\n/** A GitHub repository as `gh -R` names it and as its page is found. */\nexport interface RemoteRepo extends IssueRepo {\n /** What `gh -R` takes: `owner/name` on github.com, `host/owner/name` on an Enterprise host. */\n ghRepo: string;\n}\n\nconst SCP = /^(?:[^@\\s/]+@)?([\\w.-]+):(?!\\/)([\\w.-]+)\\/([\\w.-]+?)(?:\\.git)?\\/?$/;\nconst URL_FORM = /^(?:ssh|git|https?):\\/\\/(?:[^@/\\s]+@)?([\\w.-]+)(?::\\d+)?\\/([\\w.-]+)\\/([\\w.-]+?)(?:\\.git)?\\/?$/;\n\n/**\n * The repository a remote URL names, in either the `git@host:owner/name.git` or the URL form. A host under\n * `github.com`, such as an SSH alias `work.github.com`, is taken as github.com itself.\n */\nexport function repoOf(remote: string): RemoteRepo | null {\n const match = SCP.exec(remote.trim()) ?? URL_FORM.exec(remote.trim());\n if (!match) return null;\n const [, rawHost = '', owner = '', name = ''] = match;\n const host = rawHost === 'github.com' || rawHost.endsWith('.github.com') ? 'github.com' : rawHost;\n const slug = `${owner}/${name}`;\n return { slug, url: `https://${host}/${slug}`, ghRepo: host === 'github.com' ? slug : `${host}/${slug}` };\n}\n\nconst attempt = async (run: () => Promise<string>): Promise<string | null> => {\n try {\n return (await run()).trim() || null;\n } catch {\n return null;\n }\n};\n\n/** gh's exit code for a command that needs a login it does not have. */\nconst GH_AUTH_EXIT = 4;\n\ninterface GhIssue {\n number: number;\n title: string;\n url: string;\n createdAt: string;\n}\n\nconst json = (res: ServerResponse, status: number, body: unknown) => {\n res.statusCode = status;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify(body));\n};\n\n/**\n * Answers a GET of `<base>__forge/issues?component=<name>` with an `IssuesAnswer`: the open issues labeled\n * `forge:<name>` in the repository `origin` names, listed by `gh` under the machine's own login, and the branch and\n * commit checked out at `root`.\n */\nexport function serveIssues(\n server: Pick<ViteDevServer, 'middlewares'>,\n base: string,\n root: () => string,\n { gh = runGh, git = runGit }: { gh?: Gh; git?: Git } = {},\n): void {\n const answer = async (component: string): Promise<{ status: number; body: IssuesAnswer }> => {\n const cwd = root();\n const [remote, head, commit] = await Promise.all([\n attempt(() => git(['remote', 'get-url', 'origin'], cwd)),\n attempt(() => git(['rev-parse', '--abbrev-ref', 'HEAD'], cwd)),\n attempt(() => git(['rev-parse', 'HEAD'], cwd)),\n ]);\n const found = remote === null ? null : repoOf(remote);\n const context: IssuesAnswer = {\n repo: found && { slug: found.slug, url: found.url },\n branch: head === 'HEAD' ? null : head,\n commit,\n };\n if (!found) return { status: 200, body: { ...context, unavailable: 'This checkout’s origin is not a GitHub repository.' } };\n const fields = 'number,title,url,createdAt';\n const result = await gh(\n ['issue', 'list', '-R', found.ghRepo, '--label', issueLabel(component), '--state', 'open', '--json', fields],\n cwd,\n );\n if ('missing' in result) return { status: 200, body: { ...context, unavailable: 'The GitHub CLI (gh) is not installed.' } };\n if ('failed' in result) {\n if (result.code === GH_AUTH_EXIT || /gh auth login/.test(result.failed)) {\n return { status: 200, body: { ...context, unavailable: 'The GitHub CLI (gh) is not logged in. Run gh auth login.' } };\n }\n return { status: 502, body: { ...context, error: result.failed } };\n }\n let listed: GhIssue[];\n try {\n listed = JSON.parse(result.stdout) as GhIssue[];\n } catch {\n return { status: 502, body: { ...context, error: 'gh answered something that is not JSON' } };\n }\n const issues = listed.map(({ number, title, url, createdAt }): ForgeIssue => ({ number, title, url, opened: createdAt }));\n return { status: 200, body: { ...context, issues } };\n };\n\n server.middlewares.use((req, res, next) => {\n const url = new URL(req.url ?? '/', 'http://forge.invalid');\n if (url.pathname !== `${base}${ISSUES_PATH}`) return next();\n if (req.method !== 'GET') return next();\n const component = url.searchParams.get('component')?.trim();\n if (!component) return json(res, 400, { error: 'name a component: ?component=<name>' });\n answer(component).then(({ status, body }) => json(res, status, body), next);\n });\n}\n","import { existsSync } from 'node:fs';\nimport type { Browser, BrowserContext, Page, Route } from 'playwright';\nimport { type CapturePayload, messageOf } from './payload.ts';\n\n/** Headless Chromium, taking screenshots of capture pages one at a time. */\nexport interface CaptureBrowser {\n /** A PNG of `url` rendering `payload`, loading nothing but `url`'s own origin and `allow`. Rejects with\n * `QUEUE_FULL` while `QUEUE_CAP` captures are outstanding. */\n capture(url: string, payload: CapturePayload, allow?: readonly string[]): Promise<Buffer>;\n close(): Promise<void>;\n}\n\nexport const IDLE_CLOSE_MS = 120_000;\n/** How long one capture may take, page load included, before it fails and frees the queue. */\nexport const SHOT_DEADLINE_MS = 20_000;\nexport const QUEUE_CAP = 8;\nexport const QUEUE_FULL = 'capture queue is full';\nexport const INSTALL_PLAYWRIGHT = 'install playwright';\nexport const INSTALL_CHROMIUM = 'install Chromium for Playwright: npx playwright install chromium';\n\ntype Playwright = typeof import('playwright');\ntype Load = () => Promise<Playwright>;\n\nconst loadPlaywright: Load = () => import('playwright');\n\n/** What a capture page exposes once it has mounted. */\ninterface CaptureWindow {\n __forgeCapture?: { render(payload: CapturePayload): Promise<void> };\n}\n\n/** Whether a capture could start, without starting Chromium: Playwright loads and its Chromium is installed. */\nexport async function captureAvailability(load: Load = loadPlaywright): Promise<{ available: true } | { unavailable: string }> {\n let playwright: Playwright;\n try {\n playwright = await load();\n } catch {\n return { unavailable: INSTALL_PLAYWRIGHT };\n }\n let executable: string;\n try {\n executable = playwright.chromium.executablePath();\n } catch (err) {\n return { unavailable: messageOf(err) };\n }\n return existsSync(executable) ? { available: true } : { unavailable: INSTALL_CHROMIUM };\n}\n\n/** Headers describing the body as it came over the wire, which Node's fetch has already decoded. */\nconst WIRE_HEADERS = new Set(['content-encoding', 'content-length', 'transfer-encoding']);\n\n/** A request to an allowlisted origin, fetched from Node so its certificate is checked even when the page's\n * context ignores certificate errors. Only GET and HEAD pass, and a redirect goes back to the page as-is, so its\n * target meets the route guard on its own origin rather than being fetched from Node. */\nasync function passThrough(route: Route, fetchImpl: typeof fetch): Promise<void> {\n const request = route.request();\n const method = request.method();\n if (method !== 'GET' && method !== 'HEAD') return route.abort();\n try {\n const response = await fetchImpl(request.url(), { method, headers: request.headers(), redirect: 'manual' });\n await route.fulfill({\n status: response.status,\n headers: Object.fromEntries([...response.headers].filter(([name]) => !WIRE_HEADERS.has(name))),\n body: Buffer.from(await response.arrayBuffer()),\n });\n } catch {\n await route.abort();\n }\n}\n\n/**\n * Lets `page` reach nothing but the server `url` came from and the origins in `allow`, whatever a story or an\n * override asks it to load, and open no WebSocket but that server's own.\n */\nasync function guard(page: Page, url: string, allow: readonly string[], fetchImpl: typeof fetch): Promise<void> {\n const own = new URL(url);\n const secure = own.protocol === 'https:';\n const reach = new Set(allow);\n await page.route('**/*', (route) => {\n const origin = new URL(route.request().url()).origin;\n if (origin === own.origin) return route.continue();\n if (!reach.has(origin)) return route.abort();\n return secure ? passThrough(route, fetchImpl) : route.continue();\n });\n // Only vite's own client socket connects: closing it would have the client reload the page mid-capture.\n const ownSocket = `${secure ? 'wss:' : 'ws:'}//${own.host}`;\n await page.routeWebSocket(\n (u) => `${u.protocol}//${u.host}` !== ownSocket,\n (ws) => ws.close(),\n );\n}\n\n/**\n * Loads Playwright and starts Chromium, or says why it cannot. Chromium closes after `IDLE_CLOSE_MS` with nothing\n * to capture and starts again for the next capture, so there is never more than one.\n */\nexport async function launchCaptureBrowser(\n load: Load = loadPlaywright,\n fetchImpl: typeof fetch = fetch,\n): Promise<CaptureBrowser | { unavailable: string }> {\n let playwright: Playwright;\n try {\n playwright = await load();\n } catch {\n return { unavailable: INSTALL_PLAYWRIGHT };\n }\n let chromium: Promise<Browser> | null;\n try {\n chromium = Promise.resolve(await playwright.chromium.launch({ headless: true }));\n } catch (err) {\n return { unavailable: messageOf(err) };\n }\n\n const contexts = new Map<string, Promise<BrowserContext>>();\n let idle: ReturnType<typeof setTimeout> | undefined;\n let outstanding = 0;\n let tail: Promise<unknown> = Promise.resolve();\n\n const shut = async () => {\n clearTimeout(idle);\n const closing = chromium;\n chromium = null;\n contexts.clear();\n await closing?.then((b) => b.close(), () => {});\n };\n const arm = () => {\n clearTimeout(idle);\n idle = setTimeout(() => void shut(), IDLE_CLOSE_MS);\n idle.unref?.();\n };\n const browser = (): Promise<Browser> => {\n if (!chromium) {\n const launching = playwright.chromium.launch({ headless: true });\n chromium = launching;\n launching.catch(() => {\n if (chromium === launching) chromium = null;\n });\n }\n return chromium;\n };\n /**\n * One context per device pixel ratio, since a context's scale factor is fixed when it is made, and per whether the\n * dev server is served over https: only then are certificate errors ignored, for its self-signed certificate.\n */\n const contextFor = (dpr: number, secure: boolean): Promise<BrowserContext> => {\n const key = `${dpr}:${secure}`;\n let context = contexts.get(key);\n if (!context) {\n const making = browser().then((b) =>\n b.newContext({ deviceScaleFactor: dpr, ignoreHTTPSErrors: secure, serviceWorkers: 'block' }),\n );\n context = making;\n contexts.set(key, making);\n making.catch(() => {\n if (contexts.get(key) === making) contexts.delete(key);\n });\n }\n return context;\n };\n const render = async (page: Page, payload: CapturePayload, url: string, allow: readonly string[]): Promise<Buffer> => {\n await guard(page, url, allow, fetchImpl);\n await page.setViewportSize({ width: Math.ceil(payload.box.width), height: Math.ceil(payload.box.height) });\n await page.emulateMedia({ colorScheme: payload.colorScheme });\n await page.goto(url);\n await page.waitForFunction(() => (window as CaptureWindow).__forgeCapture !== undefined);\n await page.evaluate((p) => (window as CaptureWindow).__forgeCapture!.render(p), payload);\n return page.locator('[data-fg-capture]').screenshot({ type: 'png' });\n };\n /** One capture, failed and its page closed once `SHOT_DEADLINE_MS` passes, so a render that never settles cannot\n * hold the queue. */\n const shoot = async (url: string, payload: CapturePayload, allow: readonly string[]): Promise<Buffer> => {\n let page: Page | null = null;\n let late = false;\n let timer: ReturnType<typeof setTimeout> | undefined;\n const deadline = new Promise<never>((_, reject) => {\n timer = setTimeout(() => reject(new Error(`capture took longer than ${SHOT_DEADLINE_MS / 1000} s`)), SHOT_DEADLINE_MS);\n });\n const work = (async () => {\n const opened = await (await contextFor(payload.dpr, url.startsWith('https:'))).newPage();\n page = opened;\n if (late) throw new Error('capture timed out');\n return render(opened, payload, url, allow);\n })();\n try {\n return await Promise.race([work, deadline]);\n } finally {\n late = true;\n clearTimeout(timer);\n // Closing the page rejects whatever of the capture is still waiting on it.\n await (page as Page | null)?.close().catch(() => {});\n void work.catch(() => (page as Page | null)?.close().catch(() => {}));\n }\n };\n\n arm();\n return {\n capture(url, payload, allow = []) {\n if (outstanding >= QUEUE_CAP) return Promise.reject(new Error(QUEUE_FULL));\n outstanding += 1;\n clearTimeout(idle);\n const run = tail.then(() => shoot(url, payload, allow));\n tail = run.catch(() => {});\n return run.finally(() => {\n outstanding -= 1;\n if (outstanding === 0) arm();\n });\n },\n close: shut,\n };\n}\n","/** Captured PNGs by payload key, least recently used out first. */\nexport interface CaptureCache {\n get(key: string): Buffer | undefined;\n set(key: string, png: Buffer): void;\n clear(): void;\n readonly size: number;\n /** The PNG bytes held, in all. */\n readonly bytes: number;\n}\n\n/** A cache bounded both by entry count and by bytes; an image larger than the byte budget is not kept at all. */\nexport function createCaptureCache(limits: { entries: number; bytes: number } = { entries: 64, bytes: 64 * 1024 * 1024 }): CaptureCache {\n // A Map iterates in insertion order, so re-inserting on every read keeps the least recently used first.\n const held = new Map<string, Buffer>();\n let bytes = 0;\n const drop = (key: string) => {\n const png = held.get(key);\n if (!png) return;\n held.delete(key);\n bytes -= png.length;\n };\n return {\n get(key) {\n const png = held.get(key);\n if (!png) return undefined;\n held.delete(key);\n held.set(key, png);\n return png;\n },\n set(key, png) {\n drop(key);\n if (png.length > limits.bytes) return;\n held.set(key, png);\n bytes += png.length;\n for (const oldest of held.keys()) {\n if (held.size <= limits.entries && bytes <= limits.bytes) break;\n drop(oldest);\n }\n },\n clear() {\n held.clear();\n bytes = 0;\n },\n get size() {\n return held.size;\n },\n get bytes() {\n return bytes;\n },\n };\n}\n","import { createHash } from 'node:crypto';\nimport type { IncomingMessage, ServerResponse } from 'node:http';\nimport { stableStringify } from '@weasel-js/core/json';\nimport type { ViteDevServer } from 'vite';\nimport { type CaptureBrowser, captureAvailability, launchCaptureBrowser, QUEUE_FULL } from './browser.ts';\nimport { createCaptureCache } from './cache.ts';\nimport { CAPTURE_PAGES, CAPTURE_PATH, type CapturePayload, messageOf, parsePayload } from './payload.ts';\n\n/** The capture endpoint as the plugin drives it. */\nexport interface CaptureEndpoint {\n /** Drops every cached capture: a client module changed, so none of them shows the story as it is now. */\n revise(): void;\n /** Closes Chromium and drops the cache, for the server closing. */\n close(): Promise<void>;\n}\n\nconst MAX_BODY = 16 * 1024 * 1024;\n\ntype Launched = CaptureBrowser | { unavailable: string };\n\nconst keyOf = (payload: CapturePayload) => createHash('sha1').update(stableStringify(payload)).digest('hex');\n\n/** A socket address as a URL's host: IPv6 bracketed with its zone id escaped (RFC 6874), IPv4-mapped unwrapped. */\nexport const urlHost = (address: string): string => {\n const v4 = address.replace(/^::ffff:(?=\\d+\\.\\d+\\.\\d+\\.\\d+$)/, '');\n return v4.includes(':') ? `[${v4.replace('%', '%25')}]` : v4;\n};\n\n/**\n * The origin the request arrived on, read from its socket. Never from its `Host` header, which the client writes:\n * the capture page is loaded from here, and a forged host would have Chromium screenshot someone else's page.\n */\nconst socketOrigin = (req: IncomingMessage, protocol: string) =>\n `${protocol}://${urlHost(req.socket.localAddress ?? '127.0.0.1')}:${req.socket.localPort}`;\n\nconst LOOPBACK = new Set(['localhost', '127.0.0.1', '[::1]']);\n\n/** Whether a browser's `Origin` names this server: the address the request came in on, a loopback name for its\n * port, or one of the URLs vite printed for it. */\nfunction ownOrigin(origin: string, req: IncomingMessage, protocol: string, server: ViteDevServer): boolean {\n let url: URL;\n try {\n url = new URL(origin);\n } catch {\n return false;\n }\n if (url.origin === socketOrigin(req, protocol)) return true;\n if (url.protocol === `${protocol}:` && LOOPBACK.has(url.hostname) && url.port === String(req.socket.localPort)) return true;\n const printed = [...(server.resolvedUrls?.local ?? []), ...(server.resolvedUrls?.network ?? [])];\n return printed.some((u) => new URL(u).origin === url.origin);\n}\n\nconst json = (res: ServerResponse, status: number, body: unknown) => {\n res.statusCode = status;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify(body));\n};\n\nfunction readBody(req: IncomingMessage): Promise<string | null> {\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n let size = 0;\n req.on('data', (chunk: Buffer) => {\n size += chunk.length;\n if (size <= MAX_BODY) return void chunks.push(chunk);\n // Stop reading rather than drain the rest; the 413 goes out before the socket closes.\n req.pause();\n req.removeAllListeners('data');\n resolve(null);\n });\n req.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));\n req.on('error', reject);\n });\n}\n\n/**\n * Answers `<base>__forge/capture`: a GET says whether Pixels is available, and a POST of a `CapturePayload` answers\n * with a PNG of the story rendered from it, from the cache when the same payload was captured since the last\n * `revise()`. Chromium starts on the first POST that is not served from the cache. `allowOrigins` names what a\n * capture page may load besides this server, read at each capture.\n */\nexport function serveCapture(\n server: ViteDevServer,\n base: string,\n allowOrigins: () => readonly string[] = () => [],\n): CaptureEndpoint {\n const cache = createCaptureCache();\n let launched: Promise<Launched> | null = null;\n /** Bumped by `revise()`, so a capture that started before an edit is not cached after it. */\n let revision = 0;\n\n const browser = (): Promise<Launched> => {\n if (!launched) {\n const launching = launchCaptureBrowser();\n launched = launching;\n // An unavailable answer is asked again next time: Playwright may have been installed since.\n void launching.then((result) => {\n if ('unavailable' in result && launched === launching) launched = null;\n });\n }\n return launched;\n };\n\n const protocol = server.config.server.https ? 'https' : 'http';\n\n const capture = async (req: IncomingMessage, res: ServerResponse) => {\n const origin = req.headers.origin;\n if (origin !== undefined && !ownOrigin(origin, req, protocol, server)) {\n return json(res, 403, { error: 'a capture is only taken for this server’s own pages' });\n }\n const type = (req.headers['content-type'] ?? '').split(';')[0]?.trim().toLowerCase();\n if (type !== 'application/json') return json(res, 415, { error: 'a capture payload is sent as application/json' });\n const body = await readBody(req);\n if (body === null) {\n res.setHeader('Connection', 'close');\n json(res, 413, { error: 'capture payload is too large' });\n return void res.once('finish', () => req.destroy());\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(body);\n } catch {\n return json(res, 400, { error: 'capture payload is not JSON' });\n }\n const payload = parsePayload(parsed);\n if ('error' in payload) return json(res, 400, payload);\n\n const key = keyOf(payload);\n let png = cache.get(key);\n if (!png) {\n const result = await browser();\n if ('unavailable' in result) return json(res, 503, { available: false, reason: result.unavailable });\n const page = `${socketOrigin(req, protocol)}${base}${payload.isolate ? CAPTURE_PAGES.frame : CAPTURE_PAGES.shell}`;\n const at = revision;\n try {\n png = await result.capture(page, payload, allowOrigins());\n } catch (err) {\n const message = messageOf(err);\n if (message === QUEUE_FULL) return json(res, 503, { available: false, reason: QUEUE_FULL });\n return json(res, 500, { error: message });\n }\n if (at === revision) cache.set(key, png);\n }\n res.statusCode = 200;\n res.setHeader('Content-Type', 'image/png');\n res.end(png);\n };\n\n /** Answered without starting Chromium; a launch failure surfaces on the first POST instead. */\n const status = async (res: ServerResponse) => {\n const result = await captureAvailability();\n json(res, 200, 'unavailable' in result ? { available: false, reason: result.unavailable } : { available: true });\n };\n\n server.middlewares.use((req, res, next) => {\n if (req.url?.split('?')[0] !== `${base}${CAPTURE_PATH}`) return next();\n if (req.method === 'GET') return void status(res).catch(next);\n if (req.method === 'POST') return void capture(req, res).catch(next);\n next();\n });\n\n return {\n revise() {\n revision += 1;\n cache.clear();\n },\n async close() {\n revision += 1;\n cache.clear();\n const closing = launched;\n launched = null;\n const result = await closing;\n if (result && !('unavailable' in result)) await result.close();\n },\n };\n}\n","import type { ViteDevServer } from 'vite';\nimport { type CaptureEndpoint, serveCapture } from './capture/endpoint.ts';\nimport { CAPTURE_PAGES } from './capture/payload.ts';\nimport { html } from './html.ts';\nimport type { ShellFields } from './shellTitle.ts';\n\nconst PAGES: Record<string, string> = {\n '/': 'shell-entry.js',\n '/index.html': 'shell-entry.js',\n '/frame.html': 'frame-entry.js',\n [`/${CAPTURE_PAGES.shell}`]: 'capture-entry.js',\n [`/${CAPTURE_PAGES.frame}`]: 'capture-frame-entry.js',\n};\n\n/**\n * Answers a GET for the workshop page, the frame document or a capture page, under `base`, with the page built\n * around its entry; and serves the capture endpoint beside them. `shell` is read again for each page and capture.\n */\nexport function servePages(server: ViteDevServer, base: string, shell: () => ShellFields): CaptureEndpoint {\n server.middlewares.use((req, res, next) => {\n const url = req.url ?? '/';\n const path = url.split('?')[0] ?? '/';\n const prefix = base.endsWith('/') ? base.slice(0, -1) : base;\n const page = path === prefix ? '/' : path.startsWith(`${prefix}/`) ? path.slice(prefix.length) : null;\n const entry = req.method === 'GET' && page !== null ? PAGES[page] : undefined;\n if (!entry) return next();\n server.transformIndexHtml(url, html(entry, 'serve', shell().title)).then(\n (doc) => {\n res.statusCode = 200;\n res.setHeader('Content-Type', 'text/html');\n res.end(doc);\n },\n (err: unknown) => next(err),\n );\n });\n return serveCapture(server, base, () => shell().allowOrigins);\n}\n","import { readFileSync } from 'node:fs';\nimport type * as t from '@babel/types';\nimport { type Bindings, calleeOf, exportedName, objectOf, parseFile, prop, stringOf } from './ast.ts';\n\n/** A shell config module's default export as the object literal its source writes, with the file's top-level `const`s. */\nfunction configOf(code: string, file: string): { config: t.ObjectExpression | null; bindings: Bindings } | null {\n let program: t.Program;\n try {\n program = parseFile(code, file);\n } catch {\n return null;\n }\n const bindings: Bindings = new Map();\n let config: t.Node | undefined;\n for (const stmt of program.body) {\n if (stmt.type === 'VariableDeclaration') {\n for (const d of stmt.declarations) if (d.id.type === 'Identifier' && d.init) bindings.set(d.id.name, d.init);\n }\n if (stmt.type === 'ExportDefaultDeclaration') config = stmt.declaration;\n if (stmt.type !== 'ExportNamedDeclaration' || stmt.source) continue;\n for (const spec of stmt.specifiers) {\n if (spec.type === 'ExportSpecifier' && exportedName(spec.exported) === 'default') config = spec.local;\n }\n }\n // Whatever wraps the object, `defineShellConfig` or a project's own helper, is taken to hand it back.\n const wrapper = calleeOf(config, bindings);\n return { config: objectOf(config, bindings, new Set(wrapper ? [wrapper] : [])), bindings };\n}\n\n/**\n * The `title` a shell config module's default export names, read from its source: the served document carries it\n * before any script runs. Undefined when the module names none, or builds it in a way that only running it tells.\n */\nexport function shellTitle(code: string, file: string): string | undefined {\n const read = configOf(code, file);\n return read ? stringOf(prop(read.config, 'title'), read.bindings) : undefined;\n}\n\n/** The array literal `node` is written as, through casts and top-level `const`s. */\nfunction arrayOf(node: t.Node | undefined, bindings: Bindings, depth = 0): t.ArrayExpression | null {\n if (!node || depth > 16) return null;\n if (node.type === 'ArrayExpression') return node;\n if (node.type === 'Identifier') return arrayOf(bindings.get(node.name), bindings, depth + 1);\n if ('expression' in node && (node.type.startsWith('TS') || node.type === 'ParenthesizedExpression')) {\n return arrayOf(node.expression as t.Node, bindings, depth + 1);\n }\n return null;\n}\n\nconst originOf = (url: string | undefined): string[] => {\n if (url === undefined) return [];\n try {\n const { origin } = new URL(url);\n return origin === 'null' ? [] : [origin];\n } catch {\n return [];\n }\n};\n\n/**\n * The origins a shell config's `capture.allowOrigins` lists, read from its source as the title is: the dev server\n * reads it without running the module. An entry that is not a string written out, or not a URL, is left out.\n */\nexport function shellAllowOrigins(code: string, file: string): string[] {\n const read = configOf(code, file);\n if (!read) return [];\n const capture = objectOf(prop(read.config, 'capture'), read.bindings, new Set());\n const list = arrayOf(prop(capture, 'allowOrigins'), read.bindings);\n return (list?.elements ?? []).flatMap((el) => (el && el.type !== 'SpreadElement' ? originOf(stringOf(el, read.bindings)) : []));\n}\n\n/** What the dev server reads from a shell config module's source. */\nexport interface ShellFields {\n title: string | undefined;\n allowOrigins: readonly string[];\n}\n\n/** Reads `file`'s shell fields; none when there is no file or it cannot be read. */\nexport function readShellFields(file: string | undefined): ShellFields {\n let code: string;\n try {\n if (file === undefined) throw new Error('no shell config');\n code = readFileSync(file, 'utf8');\n } catch {\n return { title: undefined, allowOrigins: [] };\n }\n return { title: shellTitle(code, file), allowOrigins: shellAllowOrigins(code, file) };\n}\n","import { fileURLToPath } from 'node:url';\nimport type { Plugin } from 'vite';\n\n/** Storybook specifiers a CSF file may import, and the forge entry each answers to. */\nconst SHIMS: readonly (readonly [RegExp, string])[] = [\n [/^@?storybook\\/preview-api$/, '@weasel-js/forge/preview-api'],\n [/^@?storybook\\/test$/, '@weasel-js/forge/play'],\n];\n\n/** Points the Storybook runtime specifiers a CSF file may carry at forge's own entries. */\nexport function storybookShims(): Plugin {\n // Resolved from forge's own location, through the app's aliases, so a monorepo reaches source and an install reaches dist.\n return {\n name: 'weaselforge:storybook-shims',\n enforce: 'pre',\n resolveId(id) {\n const hit = SHIMS.find(([pattern]) => pattern.test(id));\n if (!hit) return undefined;\n return this.resolve(hit[1], fileURLToPath(import.meta.url), { skipSelf: true });\n },\n };\n}\n","const body = (mount: string) => `import index from 'virtual:forge/index.js';\nimport importers from 'virtual:forge/importers.js';\nimport setup from 'virtual:forge/frame-config.js';\n\n${mount}\n// The endpoint drops its captures on any edit; a page loaded before one would render the old module.\nimport.meta.hot?.accept('virtual:forge/importers.js', () => location.reload());\n`;\n\n/** The capture page for a story rendered in the workshop document: the shell's stylesheets and lab theme. */\nexport function captureEntry(): string {\n return `import { mountCapture } from '@weasel-js/forge/frame';\nimport '@weasel-js/labkit/styles.css';\nimport '@weasel-js/forge/shell.css';\nimport config from 'virtual:forge/shell-config.js';\n${body(`mountCapture({\n index,\n importers,\n setup,\n labTheme: config.labTheme,\n libraries: config.libraries,\n dependencies: () => import('virtual:forge/deps.js').then((m) => m.default),\n});`)}`;\n}\n\n/** The capture page for an isolated story: a frame document's stylesheets. `styles` are absolute paths. */\nexport function captureFrameEntry(styles: readonly string[]): string {\n return `import { mountCapture } from '@weasel-js/forge/frame';\nimport '@weasel-js/forge/frame.css';\n${styles.map((path) => `import ${JSON.stringify(path)};\\n`).join('')}${body('mountCapture({ index, importers, setup });')}`;\n}\n","/** The workshop page's entry module. `stories` are the globs, shown when they match nothing. */\nexport function shellEntry(base: string, stories: readonly string[]): string {\n return `import { followEdits, mountWorkshop } from '@weasel-js/forge/shell';\nimport '@weasel-js/labkit/styles.css';\nimport '@weasel-js/forge/shell.css';\nimport index from 'virtual:forge/index.js';\nimport importers from 'virtual:forge/importers.js';\nimport config from 'virtual:forge/shell-config.js';\nimport setup from 'virtual:forge/frame-config.js';\n\nconst workshop = mountWorkshop({\n index,\n importers,\n setup,\n config,\n frameUrl: ${JSON.stringify(`${base}frame.html`)},\n captureBase: ${JSON.stringify(base)},\n issuesBase: ${JSON.stringify(base)},\n stories: ${JSON.stringify(stories)},\n});\n// Read from source on first request, so the graph costs nothing until the page is up.\nimport('virtual:forge/deps.js').then((m) => workshop.setDependencies(m.default));\nconst edits = followEdits(import.meta.hot, workshop);\nimport.meta.hot?.accept('virtual:forge/importers.js', (next) => edits.importers(next?.default));\n`;\n}\n\n/** A frame document's entry module. `styles` are absolute paths to the stylesheets frames alone load. */\nexport function frameEntry(styles: readonly string[]): string {\n return `import { mountFrame } from '@weasel-js/forge/frame';\nimport '@weasel-js/forge/frame.css';\n${styles.map((path) => `import ${JSON.stringify(path)};\\n`).join('')}import index from 'virtual:forge/index.js';\nimport importers from 'virtual:forge/importers.js';\nimport setup from 'virtual:forge/frame-config.js';\n\nmountFrame({ index, importers, setup });\n// The importers module is shared with the workshop page, which accepts a story edit in place; a frame document\n// showing the old module reloads instead, and without this the edit would dead-end here and reload every page.\nimport.meta.hot?.accept('virtual:forge/importers.js', () => location.reload());\n`;\n}\n","import { resolve } from 'node:path';\nimport type { IndexEntry } from '../story/types.ts';\nimport { captureEntry, captureFrameEntry } from './capture/entries.ts';\nimport { frameEntry, shellEntry } from './entries.ts';\n\nexport const PREFIX = 'virtual:forge/';\n\n/** Every `virtual:forge/*` module name; `deps.js` is built apart, since it needs the resolver. */\nexport const MODULES = new Set([\n 'index.js',\n 'importers.js',\n 'deps.js',\n 'frame-config.js',\n 'shell-config.js',\n 'shell-entry.js',\n 'frame-entry.js',\n 'capture-entry.js',\n 'capture-frame-entry.js',\n]);\n\n/** The plugin options the modules are written from. */\nexport interface VirtualModuleOptions {\n stories: readonly string[];\n frameConfig?: string | undefined;\n shellConfig?: string | undefined;\n frameStyles?: readonly string[] | undefined;\n}\n\n/** The plugin state the modules are read from, each read when a module loads. */\nexport interface VirtualModuleState {\n index(): IndexEntry[];\n /** Story files, each with its entries; a file that failed to parse has none. */\n files(): Map<string, IndexEntry[]>;\n root(): string;\n base(): string;\n}\n\n/** The source of every virtual module but `deps.js`, by name. */\nexport function virtualModules(options: VirtualModuleOptions, src: VirtualModuleState): Record<string, () => string> {\n const configModule = (path: string | undefined) =>\n path ? `export { default } from ${JSON.stringify(resolve(src.root(), path))};\\n` : 'export default {};\\n';\n const frameStyles = () => (options.frameStyles ?? []).map((path) => resolve(src.root(), path));\n return {\n 'index.js': () => `export default ${JSON.stringify(src.index())};\\n`,\n 'importers.js': () => {\n const lines = [...src.files()]\n .filter(([, entries]) => entries.length > 0)\n .map(([file]) => ` ${JSON.stringify(file)}: () => import(${JSON.stringify(file)}),`);\n return `export default {\\n${lines.join('\\n')}\\n};\\n`;\n },\n 'frame-config.js': () => configModule(options.frameConfig),\n 'shell-config.js': () => configModule(options.shellConfig),\n 'shell-entry.js': () => shellEntry(src.base(), options.stories),\n 'frame-entry.js': () => frameEntry(frameStyles()),\n 'capture-entry.js': () => captureEntry(),\n 'capture-frame-entry.js': () => captureFrameEntry(frameStyles()),\n };\n}\n","import { statSync } from 'node:fs';\nimport { isAbsolute, relative } from 'node:path';\nimport { normalizePath, type Plugin, type ViteDevServer } from 'vite';\n\n/** The plugin's name; a server with two copies runs only the first. */\nexport const WATCH_RECOVERY = 'weasel-watch-recovery';\n\n/** Options for the `watchRecovery` vite plugin. */\nexport interface WatchRecoveryOptions {\n /**\n * How long the watcher must have reported nothing before the served files are checked for changes it missed,\n * and how often they are checked while it stays quiet, in milliseconds. Default 2000.\n */\n quietMs?: number;\n}\n\nconst QUIET_MS = 2000;\n\nconst mtimeOf = (file: string): number | undefined => {\n try {\n return statSync(file).mtimeMs;\n } catch {\n return undefined;\n }\n};\n\nconst withoutQuery = (url: string) => url.replace(/[?#].*$/s, '');\n\n/**\n * A plugin that serves an edit the OS never reported. Each module vite serves from a file is stamped with the file's\n * modification time when vite reads it. A request for a module whose file has changed since, and a check of every\n * served file once the watcher has been quiet for `quietMs`, replays the missed change through vite's watcher: the\n * module is transformed again and the open page gets the update, or a reload, as it would have from the event.\n * Each recovery logs one line naming the file.\n */\nexport function watchRecovery({ quietMs = QUIET_MS }: WatchRecoveryOptions = {}): Plugin {\n /** Each served file's modules, with the file's modification time when vite read it for that module. */\n const stamps = new Map<string, Map<string, number>>();\n const read = new Map<string, number>();\n const fileOfUrl = new Map<string, string>();\n let server: ViteDevServer | undefined;\n let active = false;\n let skipped: (file: string) => boolean = () => true;\n let lastEvent = 0;\n let replaying = false;\n let timer: ReturnType<typeof setInterval> | undefined;\n\n const restamp = (file: string) => {\n const modules = stamps.get(file);\n const now = mtimeOf(file);\n if (!modules || now === undefined) return;\n for (const id of modules.keys()) modules.set(id, now);\n };\n\n const missed = (file: string) => {\n const modules = stamps.get(file);\n const now = mtimeOf(file);\n if (!modules || now === undefined) return false;\n for (const stamp of modules.values()) if (stamp !== now) return true;\n return false;\n };\n\n const recover = (file: string, outcome: string) => {\n if (!server) return;\n restamp(file);\n for (const environment of Object.values(server.environments)) environment.moduleGraph.onFileChange(file);\n server.config.logger.warn(`[watch] ${relative(server.config.root, file)} changed with no file event; ${outcome}`, {\n timestamp: true,\n });\n replaying = true;\n try {\n server.watcher.emit('change', file);\n } finally {\n replaying = false;\n }\n };\n\n const sweep = () => {\n if (Date.now() - lastEvent < quietMs) return;\n for (const file of stamps.keys()) if (missed(file)) recover(file, 'pushing it to the page');\n };\n\n const self: Plugin = {\n name: WATCH_RECOVERY,\n apply: 'serve',\n configResolved(config) {\n active = config.server.watch !== null && config.plugins.find((p) => p.name === WATCH_RECOVERY) === self;\n const cacheDir = normalizePath(config.cacheDir) + '/';\n skipped = (file) => !isAbsolute(file) || file.includes('/node_modules/') || file.startsWith(cacheDir);\n },\n configureServer(s) {\n if (!active) return;\n server = s;\n for (const event of ['add', 'change', 'unlink'] as const) {\n s.watcher.on(event, (path: string) => {\n if (replaying) return;\n lastEvent = Date.now();\n const file = normalizePath(path);\n if (event === 'unlink') stamps.delete(file);\n else restamp(file);\n });\n }\n const base = s.config.base;\n s.middlewares.use(function weaselWatchRecovery(req, _res, next) {\n let url = withoutQuery(req.url ?? '');\n if (base !== '/' && url.startsWith(base)) url = url.slice(base.length - 1);\n let file: string | undefined;\n try {\n file = fileOfUrl.get(decodeURI(url));\n } catch {\n // A malformed URL is vite's to answer.\n }\n if (file && missed(file)) recover(file, 'serving the new text');\n next();\n });\n timer = setInterval(sweep, quietMs);\n timer.unref();\n },\n load: {\n order: 'pre',\n handler(id) {\n if (!active || this.environment.name !== 'client') return;\n const file = withoutQuery(id);\n if (skipped(file)) return;\n const mtime = mtimeOf(file);\n if (mtime !== undefined) read.set(id, mtime);\n },\n },\n transform: {\n order: 'pre',\n handler(_code, id) {\n const mtime = read.get(id);\n if (mtime === undefined) return;\n read.delete(id);\n if (this.environment.mode !== 'dev') return;\n const mod = this.environment.moduleGraph.getModuleById(id);\n if (!mod?.file) return;\n let modules = stamps.get(mod.file);\n if (!modules) stamps.set(mod.file, (modules = new Map()));\n modules.set(id, mtime);\n fileOfUrl.set(withoutQuery(mod.url), mod.file);\n },\n },\n buildEnd() {\n clearInterval(timer);\n },\n };\n return self;\n}\n","import { mkdtempSync, rmSync, watch as fsWatch, writeFileSync } from 'node:fs';\nimport { tmpdir } from 'node:os';\nimport { join } from 'node:path';\nimport type { Plugin, ViteDevServer } from 'vite';\nimport { WATCH_RECOVERY } from './watchRecovery.ts';\n\n/** Starts a watch on a directory and returns what stops it. */\nexport type WatchDir = (dir: string, onEvent: () => void) => () => void;\n\nexport interface FileEventsOptions {\n /** How long to wait for the report, in milliseconds. Default 5000. */\n waitMs?: number;\n /** Default: `fs.watch`. */\n watch?: WatchDir;\n}\n\nconst WAIT_MS = 5000;\nconst REWRITE_MS = 250;\n\nconst watchDir: WatchDir = (dir, onEvent) => {\n const watcher = fsWatch(dir, onEvent);\n watcher.on('error', () => {});\n watcher.unref();\n return () => watcher.close();\n};\n\n/** Writes a file in a temp directory of its own and answers whether the OS reported the write within the wait. */\nexport function fileEventsArrive({ waitMs = WAIT_MS, watch = watchDir }: FileEventsOptions = {}): Promise<boolean> {\n const dir = mkdtempSync(join(tmpdir(), 'forge-watch-'));\n return new Promise((resolve) => {\n let settled = false;\n let writes = 0;\n let stop: (() => void) | undefined;\n let rewrite: ReturnType<typeof setInterval> | undefined;\n let deadline: ReturnType<typeof setTimeout> | undefined;\n const settle = (arrived: boolean) => {\n if (settled) return;\n settled = true;\n clearInterval(rewrite);\n clearTimeout(deadline);\n stop?.();\n rmSync(dir, { recursive: true, force: true });\n resolve(arrived);\n };\n const write = () => writeFileSync(join(dir, 'probe'), String(writes++));\n try {\n stop = watch(dir, () => settle(true));\n write();\n } catch {\n settle(false);\n return;\n }\n rewrite = setInterval(write, REWRITE_MS);\n deadline = setTimeout(() => settle(false), waitMs);\n rewrite.unref();\n deadline.unref();\n });\n}\n\nconst UNREPORTED = `[watch] a file written ${WAIT_MS / 1000} s ago has not been reported by the OS file watcher, `;\nconst FSEVENTSD = 'On macOS, look for `fseventsd` held at 100% CPU.';\n\nconst SILENT =\n UNREPORTED +\n 'so an edit will not reach the page until file events arrive again. `server.watch: { usePolling: true }` serves edits ' +\n 'without them, and so does the `watchRecovery()` plugin beside `watchProbe()`. ' +\n FSEVENTSD;\n\nconst RECOVERING =\n UNREPORTED +\n 'so edits are found by their modification times instead: on the next request for the module, or within seconds ' +\n 'once the watcher is quiet, each logged as it is served. ' +\n FSEVENTSD;\n\n/** Logs a warning when a dev server that relies on file events is getting none. */\nexport async function warnWhenWatchIsSilent(server: ViteDevServer, probe: () => Promise<boolean> = fileEventsArrive): Promise<void> {\n const { watch } = server.config.server;\n if (watch === null || watch?.usePolling) return;\n if (await probe()) return;\n const recovering = server.config.plugins.some((p) => p.name === WATCH_RECOVERY);\n server.config.logger.warn(recovering ? RECOVERING : SILENT);\n}\n\n/** Options for the `watchProbe` vite plugin. */\nexport interface WatchProbeOptions {\n /**\n * Answers whether the OS is reporting file changes: false makes the plugin log its warning. Called once, as the\n * dev server starts, and not at all where the server polls or does not watch. Default: `fileEventsArrive`,\n * which writes a temp file and waits five seconds for the report.\n */\n probe?: () => Promise<boolean>;\n}\n\n/** A plugin giving any dev server the warning forge's own gives when the OS reports no file changes. */\nexport function watchProbe({ probe }: WatchProbeOptions = {}): Plugin {\n return {\n name: 'weasel-watch-probe',\n apply: 'serve',\n configureServer(server) {\n void warnWhenWatchIsSilent(server, probe);\n },\n };\n}\n","import { globSync, readFileSync, statSync } from 'node:fs';\nimport { basename, relative, resolve, sep } from 'node:path';\nimport type { EnvironmentModuleNode, Logger, Plugin, ViteDevServer } from 'vite';\nimport { byComponent } from '../story/indexPages.ts';\nimport type { DepGraph, IndexEntry } from '../story/types.ts';\nimport { hoistPages, writePages } from './build.ts';\nimport { createDepGraph, type DepGraphBuilder, type ResolveImport } from './depGraph.ts';\nimport { createHistoryReader, type HistoryReader } from './history.ts';\nimport { foreignCallees } from './indexFile.ts';\nimport { indexStory } from './indexStory.ts';\nimport { ownEntries } from './ownEntries.ts';\nimport { propControls } from './propControls.ts';\nimport type { PropControlsOptions } from './propTypes.ts';\nimport type { CaptureEndpoint } from './capture/endpoint.ts';\nimport { serveIssues } from './issues/endpoint.ts';\nimport { servePages } from './servePages.ts';\nimport { readShellFields } from './shellTitle.ts';\nimport { storybookShims } from './storybookShims.ts';\nimport { storyGlobOf } from './storyGlob.ts';\nimport { MODULES, PREFIX, virtualModules } from './virtualModules.ts';\nimport { titleStandIn } from './componentOf.ts';\nimport { warnWhenWatchIsSilent } from './watchProbe.ts';\nimport { watchRecovery } from './watchRecovery.ts';\nimport { createWrapperResolver, sameResolution, type WrapperResolution } from './wrappers.ts';\n\n/** Options for the `forge` vite plugin. */\nexport interface ForgeOptions {\n /** Globs of story files, relative to the vite root. */\n stories: string[];\n /** Path to the frame config module, relative to the vite root. The workshop page and every frame document import it. Optional. */\n frameConfig?: string;\n /** Path to the shell config module, relative to the vite root. Only the workshop page imports it. Optional. */\n shellConfig?: string;\n /** Stylesheets for frame documents alone, relative to the vite root: a page background, a body font. The workshop page never loads them. */\n frameStyles?: string[];\n /** Alias Storybook's runtime modules to forge shims. Default true. */\n storybookShims?: boolean;\n /**\n * Give a CSF story a control for each prop of its meta's `component`, read from the component's TypeScript types;\n * the story's own `args` and `argTypes` refine them. Needs `typescript` installed. Default true; an object narrows\n * which props are read.\n */\n propControls?: boolean | PropControlsOptions;\n /**\n * Show each component's API on its index page: every prop, and what its `ref` exposes, read from the component's\n * TypeScript types. Needs `typescript` installed. Default true; `propControls`' `skip` narrows it the same way.\n */\n api?: boolean;\n}\n\nconst SCRIPT = /\\.[cm]?[jt]sx?$/;\n\ninterface SourceWatch {\n files: readonly string[];\n depGraph: () => DepGraphBuilder;\n reindex: (server: ViteDevServer, file: string, event: 'add' | 'change' | 'unlink') => Promise<boolean>;\n redeps: (server: ViteDevServer) => void;\n logError: (err: unknown) => void;\n}\n\n/** Watches the story files and everything they import, reindexing a changed story and pushing new deps. */\nfunction watchSources(server: ViteDevServer, { files, depGraph, reindex, redeps, logError }: SourceWatch): void {\n server.watcher.add([...files]);\n void warnWhenWatchIsSilent(server);\n for (const event of ['add', 'change', 'unlink'] as const) {\n server.watcher.on(event, (path) => {\n const file = resolve(path);\n // A new file can answer an import that resolved to nothing before.\n const added = event === 'add' && SCRIPT.test(file) && !file.split(sep).includes('node_modules');\n if (added) depGraph().reset();\n const read = added || (event !== 'add' && depGraph().invalidate(file));\n reindex(server, file, event).then((indexed) => {\n if (indexed || read) redeps(server);\n }, logError);\n });\n }\n}\n\n/** The plugins forge serves beside its own, as its options ask. */\nfunction companions(options: ForgeOptions, files: () => Map<string, IndexEntry[]>): Plugin[] {\n const { storybookShims: shims, propControls: controls, api } = options;\n const storyFiles = () => [...files().keys()];\n const fallbackOf = (file: string) => {\n const title = files().get(file)?.[0]?.title;\n return title === undefined ? undefined : titleStandIn(title);\n };\n const readings = { controls: controls !== false, api: api !== false };\n const narrowed = typeof controls === 'object' ? controls : undefined;\n return [\n watchRecovery(),\n ...(shims === false ? [] : [storybookShims()]),\n ...(readings.controls || readings.api ? [propControls(storyFiles, fallbackOf, readings, narrowed)] : []),\n ];\n}\n\n/**\n * The vite plugin that serves the workshop: it indexes the story files, serves the workshop at `/` and the frame\n * document at `/frame.html`, pushes a new index to the open page as story files change, and builds both pages.\n */\nexport function forge(options: ForgeOptions): Plugin[] {\n let root = process.cwd();\n let base = '/';\n let byFile: Map<string, IndexEntry[]> | null = null;\n let logger: Logger | undefined;\n let deps: DepGraphBuilder | null = null;\n /** The graph last served or pushed; null until a page first asks for it, so no edit rebuilds it before then. */\n let depsSent: string | null = null;\n let depsPending: Promise<void> | null = null;\n /** Per story file, which of its foreign callees are forge's `meta`/`story`, and what was read to decide it. */\n const wrappersOf = new Map<string, WrapperResolution>();\n /** The first pass over every story file, run before the index is first served. */\n let settledAll: Promise<void> | null = null;\n\n const glob = (): string[] => {\n const files = options.stories.flatMap((pattern) =>\n globSync(pattern, { cwd: root, exclude: (name) => basename(String(name)) === 'node_modules' })\n .map((f) => resolve(root, f))\n // A failed story run leaves `__screenshots__/<file>.stories.tsx/` directories that match the globs.\n .filter((f) => statSync(f).isFile())\n .sort(),\n );\n return [...new Set(files)];\n };\n const matches = (file: string): boolean => {\n const path = relative(root, file).split(sep).join('/');\n return !path.split('/').includes('node_modules') && storyGlobOf(path, options.stories) !== undefined;\n };\n const read = (file: string) =>\n indexStory(readFileSync(file, 'utf8'), file, { root, stories: options.stories }, wrappersOf.get(file));\n const logError = (err: unknown) => logger?.error(`[forge] ${err instanceof Error ? err.message : String(err)}`);\n /** A file that fails to parse stays in the map with no entries, so an edit that fixes it re-indexes it. */\n const files = (): Map<string, IndexEntry[]> => {\n byFile ??= new Map(\n glob().map((file) => {\n try {\n return [file, read(file)];\n } catch (err) {\n logError(err);\n return [file, []];\n }\n }),\n );\n return byFile;\n };\n const index = () => byComponent([...files().values()].flat());\n\n /**\n * Decides, for each of `targets`, which imports reached through another module are forge's `meta`/`story`, and\n * re-reads a file whose answer changed. Without it a meta imported from a project helper reads as no meta at all.\n */\n const settle = async (targets: readonly string[], resolveImport: ResolveImport): Promise<void> => {\n const decide = createWrapperResolver((file) => readFileSync(file, 'utf8'));\n const current = files();\n for (const file of targets) {\n if (!current.has(file)) continue;\n let next: WrapperResolution;\n try {\n next = await decide(file, foreignCallees(readFileSync(file, 'utf8'), file), resolveImport);\n } catch {\n // `read` has already logged a file that fails to parse.\n continue;\n }\n const before = wrappersOf.get(file);\n wrappersOf.set(file, next);\n if (sameResolution(before, next)) continue;\n try {\n current.set(file, read(file));\n } catch (err) {\n logError(err);\n }\n }\n };\n const depGraph = (): DepGraphBuilder => (deps ??= createDepGraph({ root, read: (file) => readFileSync(file, 'utf8') }));\n let history: HistoryReader | null = null;\n\n /** The component graph, each component with what git says of its source file. */\n async function graphOf(resolveImport: ResolveImport): Promise<DepGraph> {\n const graph = await depGraph().build(index(), resolveImport);\n const sources = Object.values(graph).flatMap((entry) => (entry.source === null ? [] : [entry.source]));\n const histories = await (history ??= createHistoryReader(root)).read(sources);\n for (const entry of Object.values(graph)) {\n const found = entry.source === null ? undefined : histories[entry.source];\n if (found) entry.history = found;\n }\n return graph;\n }\n\n /** What the shell config's source names under `at`: its title, undefined and so the default when unread. */\n const shellUnder = (at: string) => readShellFields(options.shellConfig ? resolve(at, options.shellConfig) : undefined);\n\n const modules = virtualModules(options, { index, files, root: () => root, base: () => base });\n let capture: CaptureEndpoint | null = null;\n\n const invalidate = (server: ViteDevServer, names: readonly string[]): void => {\n for (const env of Object.values(server.environments)) {\n for (const name of names) {\n const mod = env.moduleGraph.getModuleById(`\\0${PREFIX}${name}`);\n if (mod) env.moduleGraph.invalidateModule(mod);\n }\n }\n };\n\n /** Rebuilds the graph after an edit and pushes it when it changed. Edits landing while one runs share the next. */\n function redeps(server: ViteDevServer): void {\n if (depsSent === null || depsPending) return;\n const resolve: ResolveImport = async (spec, importer) =>\n (await server.environments.client.pluginContainer.resolveId(spec, importer))?.id ?? null;\n depsPending = Promise.resolve()\n .then(async () => {\n const graph = await graphOf(resolve);\n const json = JSON.stringify(graph);\n if (json === depsSent) return;\n depsSent = json;\n invalidate(server, ['deps.js']);\n server.ws.send({ type: 'custom', event: 'forge:deps', data: graph });\n })\n .catch(logError)\n .finally(() => {\n depsPending = null;\n });\n }\n\n /** The story files an edit to `changed` reaches, climbing the way vite's own update does: through every importer. */\n const storiesReaching = (changed: readonly EnvironmentModuleNode[]): string[] => {\n const current = files();\n const seen = new Set<EnvironmentModuleNode>();\n const reached = new Set<string>();\n const climb = (mod: EnvironmentModuleNode): void => {\n if (seen.has(mod)) return;\n seen.add(mod);\n if (mod.file && current.has(mod.file)) reached.add(mod.file);\n // A stylesheet takes its own update, so the edit stops there.\n if (mod.isSelfAccepting && !(mod.file && SCRIPT.test(mod.file))) return;\n for (const importer of mod.importers) climb(importer);\n };\n for (const mod of changed) climb(mod);\n return [...reached];\n };\n\n /** Re-reads a story file after `event`, and any story file whose meta or stories were resolved through it; true when the index changed. */\n async function reindex(server: ViteDevServer, file: string, event: 'add' | 'change' | 'unlink'): Promise<boolean> {\n const current = files();\n const own = event === 'add' ? matches(file) : current.has(file);\n const through = [...wrappersOf]\n .filter(([story, { reads, unresolved }]) => story !== file && (reads.has(file) || (event === 'add' && unresolved)))\n .map(([story]) => story);\n if (!own && through.length === 0) return false;\n\n const before = JSON.stringify(index());\n const importable = () => JSON.stringify([...current].filter(([, entries]) => entries.length > 0).map(([path]) => path));\n const importableBefore = importable();\n if (own && event === 'unlink') {\n current.delete(file);\n wrappersOf.delete(file);\n } else if (own) {\n try {\n current.set(file, read(file));\n } catch (err) {\n logError(err);\n if (through.length === 0) return false;\n }\n }\n const resolveImport: ResolveImport = async (spec, importer) =>\n (await server.environments.client.pluginContainer.resolveId(spec, importer))?.id ?? null;\n await settle([...(own && event !== 'unlink' ? [file] : []), ...through], resolveImport);\n const next = index();\n if (JSON.stringify(next) === before) return false;\n\n invalidate(server, ['index.js', 'importers.js']);\n server.ws.send({ type: 'custom', event: 'forge:index', data: next });\n // Nothing imports a file that was just added, so vite has no update of its own to hand the open page the importer.\n const importers = server.environments.client.moduleGraph.getModuleById(`\\0${PREFIX}importers.js`);\n if (importers && importable() !== importableBefore) await server.environments.client.reloadModule(importers);\n return true;\n }\n\n return [\n ...companions(options, files),\n {\n name: 'weaselforge',\n config(config, { command }) {\n const at = resolve(config.root ?? process.cwd());\n // The pages are virtual, so vite's scan finds no entry of its own to crawl for dependencies.\n const entries = [\n ...options.stories,\n ...[options.frameConfig, options.shellConfig].flatMap((path) => (path ? [resolve(at, path)] : [])),\n ...ownEntries(['shell', 'frame']),\n ];\n const optimizeDeps = { entries };\n if (command !== 'build') return { optimizeDeps };\n return { optimizeDeps, build: { rolldownOptions: { input: writePages(at, shellUnder(at).title) } } };\n },\n generateBundle: {\n order: 'post',\n handler(_, bundle) {\n hoistPages(bundle, (file) => this.emitFile(file));\n },\n },\n configResolved(config) {\n root = config.root;\n base = config.base;\n logger = config.logger;\n byFile = null;\n wrappersOf.clear();\n settledAll = null;\n deps = null;\n history = null;\n depsSent = null;\n },\n resolveId(id) {\n return id.startsWith(PREFIX) && MODULES.has(id.slice(PREFIX.length)) ? `\\0${id}` : undefined;\n },\n async load(id) {\n if (!id.startsWith(`\\0${PREFIX}`)) return undefined;\n const name = id.slice(PREFIX.length + 1);\n if (name === 'index.js') {\n settledAll ??= settle([...files().keys()], async (spec, importer) => (await this.resolve(spec, importer))?.id ?? null);\n await settledAll;\n }\n if (name !== 'deps.js') return modules[name]?.();\n const graph = await graphOf(async (spec, importer) => (await this.resolve(spec, importer))?.id ?? null);\n depsSent = JSON.stringify(graph);\n return `export default ${depsSent};\\n`;\n },\n hotUpdate({ modules, server }) {\n if (this.environment.name !== 'client') return;\n capture?.revise();\n for (const file of storiesReaching(modules)) server.ws.send({ type: 'custom', event: 'forge:story', data: { file } });\n },\n configureServer(server) {\n watchSources(server, { files: [...files().keys()], depGraph, reindex, redeps, logError });\n capture = servePages(server, base, () => shellUnder(root));\n serveIssues(server, base, () => root);\n },\n closeServer: () => capture?.close(),\n },\n ];\n}\n","import { relative, resolve, sep } from 'node:path';\nimport type { Plugin } from 'vite';\nimport { indexStoryResolved } from './indexStory.ts';\nimport { ownEntries } from './ownEntries.ts';\nimport { storybookShims } from './storybookShims.ts';\nimport { storyGlobOf } from './storyGlob.ts';\n\n/** Options for the `forgeTest` vite plugin. */\nexport interface ForgeTestOptions {\n /** Globs of story files, relative to the vite root. Each matching file becomes a test file. */\n stories: string[];\n /** Path to the frame config module, relative to the vite root; it sets up every story. Optional. */\n frameConfig?: string;\n /** Alias Storybook's runtime modules to forge shims. Default true. */\n storybookShims?: boolean;\n}\n\nconst TIMEOUT_MS = 15_000;\n\n/**\n * A vite plugin for vitest browser mode: every story in a matching file runs as one test, rendered and played\n * through forge's frame in the test page itself.\n */\nexport function forgeTest(options: ForgeTestOptions): Plugin[] {\n let root = process.cwd();\n\n const matches = (id: string): boolean => {\n if (id.startsWith('\\0') || id.includes('?')) return false;\n const path = relative(root, id).split(sep).join('/');\n if (path.startsWith('../') || path.split('/').includes('node_modules')) return false;\n return storyGlobOf(path, options.stories) !== undefined;\n };\n\n return [\n ...(options.storybookShims === false ? [] : [storybookShims()]),\n {\n name: 'weaselforge:test',\n enforce: 'pre',\n config(config) {\n const at = resolve(config.root ?? process.cwd());\n const entries = [\n ...options.stories,\n ...(options.frameConfig ? [resolve(at, options.frameConfig)] : []),\n ...ownEntries(['test']),\n ];\n return { optimizeDeps: { entries } };\n },\n configResolved(config) {\n root = config.root;\n },\n async transform(code, id) {\n if (!matches(id)) return undefined;\n const { entries } = await indexStoryResolved(\n code,\n id,\n { root, stories: options.stories },\n async (spec, importer) => (await this.resolve(spec, importer))?.id ?? null,\n );\n const title = entries[0]?.title;\n if (title === undefined) return undefined;\n const q = (value: string) => JSON.stringify(value);\n // The module comes from its own URL at test time: vitest imports a test file with a cache-busting query,\n // so a static self-import would evaluate the file a second time and register every test twice.\n const lines = [\n '',\n `import { test as __forge_test } from \"vitest\";`,\n `import { runStory as __forge_runStory } from \"@weasel-js/forge/test\";`,\n // shell.css draws the story host; frame.css still holds the boundary's fault rule.\n `import \"@weasel-js/forge/shell.css\";`,\n `import \"@weasel-js/forge/frame.css\";`,\n ...(options.frameConfig ? [`import __forge_frame_config from ${q(resolve(root, options.frameConfig))};`] : []),\n `const __forge_file = ${q(id)};`,\n `const __forge_title = ${q(title)};`,\n `const __forge_timeout = ${TIMEOUT_MS};`,\n 'const __forge_options = {',\n ` setup: ${options.frameConfig ? '__forge_frame_config' : 'undefined'},`,\n '};',\n 'const __forge_run = async (exportName) => __forge_runStory(await import(/* @vite-ignore */ import.meta.url), exportName, __forge_file, __forge_title, __forge_options);',\n // An isolated story asks for a document of its own, which the test page is not; its reason goes in the name.\n ...entries.map((entry) =>\n entry.isolate === undefined\n ? `__forge_test(${q(entry.name)}, () => __forge_run(${q(entry.exportName)}), __forge_timeout);`\n : `__forge_test.skip(${q(`${entry.name} (isolated: ${entry.isolate})`)}, () => {});`,\n ),\n ];\n return { code: `${code}\\n${lines.join('\\n')}\\n`, map: null };\n },\n },\n ];\n}\n"]}
|