@geektech/tsone-cli 0.1.0 → 0.2.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/README.md +2 -2
- package/dist/cli.js +1 -1
- package/dist/{index-p7jrckn1.js → index-y6qrqbwv.js} +1021 -1458
- package/dist/index-y6qrqbwv.js.map +18 -0
- package/dist/index.js +1 -1
- package/package.json +7 -2
- package/dist/index-p7jrckn1.js.map +0 -18
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/config.ts", "../src/build.ts", "../src/build-output.ts", "../../tsone/dist/dom/index.js", "../src/project.ts", "../src/safe-path.ts", "../src/server.ts", "../src/proxy.ts", "../src/watch.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"import { existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type {\n BuildConfig,\n ProxyOptions,\n ResolveConfigOptions,\n ResolvedConfig,\n ServerConfig,\n UserConfig,\n} from './types';\n\ninterface MergedConfig {\n entry: string;\n pages?: Record<string, string>;\n server: {\n host: string;\n port: number;\n proxy: Record<string, string | ProxyOptions>;\n };\n build: {\n outDir: string;\n };\n}\n\ntype ConfigFileLoadResult =\n | { exists: false }\n | { exists: true; config: unknown };\n\nconst DEFAULT_CONFIG: MergedConfig = {\n entry: 'src/main.ts',\n server: {\n host: '127.0.0.1',\n port: 52211,\n proxy: {},\n },\n build: {\n outDir: 'dist',\n },\n};\n\nexport function defineConfig(config: UserConfig): UserConfig {\n return config;\n}\n\nexport async function resolveConfig(\n options: ResolveConfigOptions = {}\n): Promise<ResolvedConfig> {\n const root = resolve(options.root ?? process.cwd());\n const configFile = resolve(root, 'tsone.config.ts');\n const hasInlineConfig = options.config !== undefined;\n const loadedConfig: ConfigFileLoadResult = hasInlineConfig\n ? { exists: false }\n : await loadConfigFile(configFile);\n let fileConfig: UserConfig = {};\n if (loadedConfig.exists) {\n const config = loadedConfig.config;\n validateUserConfig(config);\n fileConfig = config;\n }\n if (hasInlineConfig) {\n validateUserConfig(options.config);\n }\n const inlineOverrides = toInlineOverrides(options);\n validateUserConfig(inlineOverrides);\n const config = mergeConfig(fileConfig, options.config ?? {}, inlineOverrides);\n\n const entry = resolve(root, config.entry);\n if (!existsSync(entry)) {\n throw new Error(`Entry file does not exist: ${entry}`);\n }\n const pages = await resolvePages(root, entry, config.pages);\n\n return {\n root,\n ...(loadedConfig.exists ? { configFile } : {}),\n entry,\n pages,\n server: {\n host: config.server.host,\n port: config.server.port,\n proxy: config.server.proxy,\n },\n build: {\n outDir: resolve(root, config.build.outDir),\n },\n };\n}\n\nasync function resolvePages(\n root: string,\n entry: string,\n pages: Record<string, string> | undefined\n): Promise<Record<string, string>> {\n const resolved: Record<string, string> = { '/': entry };\n for (const [route, pageEntry] of Object.entries(pages ?? {})) {\n const normalized = normalizePageRoute(route);\n const absolute = resolve(root, pageEntry);\n if (!existsSync(absolute)) {\n throw new Error(\n `Page entry file does not exist for \"${normalized}\": ${absolute}`\n );\n }\n resolved[normalized] = absolute;\n }\n return resolved;\n}\n\nfunction normalizePageRoute(route: string): string {\n if (route === '/') {\n throw new Error(\n 'Config pages must not redefine the root page \"/\"; use config.entry instead'\n );\n }\n const normalized = route.replace(/\\/+$/, '');\n if (normalized === '') {\n throw new Error(`Page route must not be empty: ${route}`);\n }\n return normalized;\n}\n\nlet configLoadSequence = 0;\n\nasync function loadConfigFile(\n configFile: string\n): Promise<ConfigFileLoadResult> {\n if (!existsSync(configFile)) {\n return { exists: false };\n }\n\n configLoadSequence += 1;\n const module = await import(\n `${configFile}?tsone_config=${configLoadSequence}`\n );\n return { exists: true, config: module.default };\n}\n\nfunction toInlineOverrides(options: ResolveConfigOptions): UserConfig {\n const server: ServerConfig = {};\n const build: BuildConfig = {};\n\n if (options.host !== undefined) {\n server.host = options.host;\n }\n if (options.port !== undefined) {\n server.port = options.port;\n }\n if (options.outDir !== undefined) {\n build.outDir = options.outDir;\n }\n\n return {\n ...(Object.keys(server).length > 0 ? { server } : {}),\n ...(Object.keys(build).length > 0 ? { build } : {}),\n };\n}\n\nfunction mergeConfig(...configs: UserConfig[]): MergedConfig {\n return configs.reduce<MergedConfig>((merged, config) => {\n const server = config.server;\n const build = config.build;\n\n return {\n entry: config.entry ?? merged.entry,\n pages: config.pages ?? merged.pages,\n server: {\n host: server?.host ?? merged.server.host,\n port: server?.port ?? merged.server.port,\n proxy: {\n ...merged.server.proxy,\n ...server?.proxy,\n },\n },\n build: {\n outDir: build?.outDir ?? merged.build.outDir,\n },\n };\n }, DEFAULT_CONFIG);\n}\n\nfunction validateUserConfig(config: unknown): asserts config is UserConfig {\n assertRecord(config, 'Config');\n\n if (config.entry !== undefined && typeof config.entry !== 'string') {\n throw new Error('Config entry must be a string');\n }\n if (config.pages !== undefined) {\n validatePagesConfig(config.pages);\n }\n if (config.server !== undefined) {\n validateServerConfig(config.server);\n }\n if (config.build !== undefined) {\n validateBuildConfig(config.build);\n }\n}\n\nfunction validatePagesConfig(\n pages: unknown\n): asserts pages is Record<string, string> {\n assertRecord(pages, 'Config pages');\n\n for (const [route, entry] of Object.entries(pages)) {\n if (!route.startsWith('/')) {\n throw new Error(`Page route must start with \"/\": ${route}`);\n }\n if (typeof entry !== 'string') {\n throw new Error(`Page entry for \"${route}\" must be a string`);\n }\n }\n}\n\nfunction validateServerConfig(server: unknown): asserts server is ServerConfig {\n assertRecord(server, 'Config server');\n\n if (server.host !== undefined && typeof server.host !== 'string') {\n throw new Error('Config server.host must be a string');\n }\n const port = server.port;\n if (\n port !== undefined &&\n (typeof port !== 'number' ||\n !Number.isInteger(port) ||\n port < 0 ||\n port > 65535)\n ) {\n throw new Error(\n 'Config server.port must be an integer between 0 and 65535'\n );\n }\n if (server.proxy === undefined) {\n return;\n }\n assertRecord(server.proxy, 'Config server.proxy');\n\n for (const [prefix, value] of Object.entries(server.proxy)) {\n if (!prefix.startsWith('/')) {\n throw new Error(`Proxy prefix must start with \"/\": ${prefix}`);\n }\n\n const target = getProxyTarget(value);\n validateProxyTarget(target);\n }\n}\n\nfunction validateBuildConfig(build: unknown): asserts build is BuildConfig {\n assertRecord(build, 'Config build');\n if (build.outDir !== undefined && typeof build.outDir !== 'string') {\n throw new Error('Config build.outDir must be a string');\n }\n}\n\nfunction getProxyTarget(value: unknown): string {\n if (typeof value === 'string') {\n return value;\n }\n\n assertRecord(value, 'Proxy options');\n if (typeof value.target !== 'string') {\n throw new Error('Proxy target must be a string');\n }\n if (\n value.changeOrigin !== undefined &&\n typeof value.changeOrigin !== 'boolean'\n ) {\n throw new Error('Proxy changeOrigin must be a boolean');\n }\n if (value.rewrite !== undefined && typeof value.rewrite !== 'function') {\n throw new Error('Proxy rewrite must be a function');\n }\n\n return value.target;\n}\n\nfunction validateProxyTarget(target: string): void {\n try {\n const url = new URL(target);\n if (url.protocol === 'http:' || url.protocol === 'https:') {\n return;\n }\n } catch {\n // Keep the public error stable for malformed URLs and unsupported protocols.\n }\n\n throw new Error(`Proxy target must use http or https: ${target}`);\n}\n\nfunction assertRecord(\n value: unknown,\n name: string\n): asserts value is Record<string, unknown> {\n if (\n typeof value !== 'object' ||\n value === null ||\n Array.isArray(value) ||\n (Object.getPrototypeOf(value) !== Object.prototype &&\n Object.getPrototypeOf(value) !== null)\n ) {\n throw new Error(`${name} must be an object`);\n }\n}\n",
|
|
6
|
-
"import { mkdir, rm, writeFile } from 'node:fs/promises';\nimport { dirname, isAbsolute, relative, resolve, sep } from 'node:path';\nimport { isEntryJavaScriptOutput, isStylesheetOutput } from './build-output';\nimport { resolveConfig } from './config';\nimport { renderProjectHtml } from './project';\nimport { assertSafeSubdirectoryDoesNotContain } from './safe-path';\nimport type { BuildOptions, BuildResult } from './types';\n\nconst INVALID_OUTPUT_DIRECTORY_MESSAGE =\n 'Build output must be a subdirectory of the project root';\n\ninterface BuiltPage {\n route: string;\n entry: string;\n assets: string[];\n javascriptAssets: string[];\n stylesheetAssets: string[];\n}\n\nexport async function build(options: BuildOptions = {}): Promise<BuildResult> {\n const config = await resolveConfig(options);\n\n for (const entry of Object.values(config.pages)) {\n await assertSafeSubdirectoryDoesNotContain(\n config.root,\n config.build.outDir,\n entry,\n INVALID_OUTPUT_DIRECTORY_MESSAGE\n );\n }\n for (const entry of Object.values(config.pages)) {\n await renderProjectHtml(config, {}, entry);\n }\n\n await rm(config.build.outDir, { recursive: true, force: true });\n await mkdir(config.build.outDir, { recursive: true });\n\n const pages: BuiltPage[] = [];\n const failures: string[] = [];\n for (const [route, entry] of Object.entries(config.pages)) {\n const built = await buildPage(config, route, entry);\n if (typeof built === 'string') {\n failures.push(built);\n continue;\n }\n pages.push(built);\n }\n if (failures.length > 0) {\n throw buildFailure(failures);\n }\n\n const assetsBuilt: string[] = [];\n for (const page of pages) {\n const html = await renderProjectHtml(\n config,\n {\n head: page.stylesheetAssets.map((asset) => ({\n tag: 'link',\n attributes: {\n rel: 'stylesheet',\n href: toAssetUrl(\n config.build.outDir,\n htmlPath(config, page.route),\n asset\n ),\n },\n })),\n scripts: page.javascriptAssets.map((asset) => ({\n type: 'module',\n src: toAssetUrl(\n config.build.outDir,\n htmlPath(config, page.route),\n asset\n ),\n })),\n },\n page.entry\n );\n const pageHtmlPath = htmlPath(config, page.route);\n await mkdir(dirname(pageHtmlPath), { recursive: true });\n await writeFile(pageHtmlPath, html);\n assetsBuilt.push(...page.assets, pageHtmlPath);\n }\n\n return {\n root: config.root,\n outDir: config.build.outDir,\n assetsBuilt,\n };\n}\n\nasync function buildPage(\n config: Awaited<ReturnType<typeof resolveConfig>>,\n route: string,\n entry: string\n): Promise<BuiltPage | string> {\n let result: Awaited<ReturnType<typeof Bun.build>>;\n try {\n result = await Bun.build({\n entrypoints: [entry],\n outdir: config.build.outDir,\n target: 'browser',\n format: 'esm',\n naming: { entry: '[name].[ext]', chunk: '[name]-[hash].[ext]' },\n throw: false,\n });\n } catch (error: unknown) {\n return pageFailureReason(route, [errorMessage(error)]);\n }\n const assets = result.outputs.map((output) => resolve(output.path));\n const javascriptAssets = result.outputs\n .filter(isEntryJavaScriptOutput)\n .map((output) => resolve(output.path));\n const stylesheetAssets = result.outputs\n .filter(isStylesheetOutput)\n .map((output) => resolve(output.path));\n\n if (!result.success || assets.length === 0 || javascriptAssets.length === 0) {\n return pageFailureReason(\n route,\n result.logs.map((log) => log.message),\n {\n success: result.success,\n hasOutput: assets.length > 0,\n hasJavaScript: javascriptAssets.length > 0,\n }\n );\n }\n\n return {\n route,\n entry,\n assets,\n javascriptAssets,\n stylesheetAssets,\n };\n}\n\nfunction pageFailureReason(\n route: string,\n logs: string[],\n state?: { success: boolean; hasOutput: boolean; hasJavaScript: boolean }\n): string {\n const pageContext = route === '/' ? '' : `Page ${route}: `;\n const reasons = [\n state && !state.success ? 'Bun build reported failure' : '',\n state && !state.hasOutput ? 'Bun emitted no output files' : '',\n state && !state.hasJavaScript ? 'Bun emitted no JavaScript output' : '',\n ...logs,\n ].filter((reason) => reason !== '');\n\n return `${pageContext}${reasons.join('\\n')}`;\n}\n\nfunction buildFailure(failures: string[]): Error {\n if (failures.length === 1) {\n return new Error(`Failed to build TSone application: ${failures[0]}`);\n }\n return new Error(\n `Failed to build TSone application:\\n${failures\n .map((failure) => `- ${failure}`)\n .join('\\n')}`\n );\n}\n\nfunction htmlPath(\n config: Awaited<ReturnType<typeof resolveConfig>>,\n route: string\n): string {\n if (route === '/') {\n return resolve(config.build.outDir, 'index.html');\n }\n return resolve(config.build.outDir, `${route.replace(/^\\/+/, '')}.html`);\n}\n\nfunction toAssetUrl(\n outDir: string,\n fromHtmlFile: string,\n asset: string\n): string {\n const fromOutDir = relative(outDir, asset).split(sep).join('/');\n if (\n fromOutDir === '' ||\n fromOutDir === '..' ||\n fromOutDir.startsWith('../') ||\n isAbsolute(fromOutDir)\n ) {\n throw new Error(\n `Build asset must be inside the output directory: ${asset}`\n );\n }\n\n const fromHtmlDir = dirname(fromHtmlFile);\n const assetPath = relative(fromHtmlDir, asset).split(sep).join('/');\n return `./${assetPath}`;\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n",
|
|
7
|
-
"interface BuildOutputDescriptor {\n path: string;\n kind: string;\n}\n\nexport function isEntryJavaScriptOutput(\n output: BuildOutputDescriptor\n): boolean {\n return output.kind === 'entry-point' && isJavaScriptPath(output.path);\n}\n\nexport function isStylesheetOutput(output: { path: string }): boolean {\n return /\\.css$/i.test(output.path);\n}\n\nfunction isJavaScriptPath(path: string): boolean {\n return /\\.(?:[cm]?js)$/i.test(path);\n}\n",
|
|
8
|
-
"// lib/dom/index.ts\nvar DomNodeType;\n((DomNodeType2) => {\n DomNodeType2[DomNodeType2[\"ELEMENT_NODE\"] = 1] = \"ELEMENT_NODE\";\n DomNodeType2[DomNodeType2[\"TEXT_NODE\"] = 3] = \"TEXT_NODE\";\n DomNodeType2[DomNodeType2[\"COMMENT_NODE\"] = 8] = \"COMMENT_NODE\";\n DomNodeType2[DomNodeType2[\"DOCUMENT_NODE\"] = 9] = \"DOCUMENT_NODE\";\n DomNodeType2[DomNodeType2[\"DOCUMENT_FRAGMENT_NODE\"] = 11] = \"DOCUMENT_FRAGMENT_NODE\";\n})(DomNodeType ||= {});\n\nclass DOMException extends Error {\n code;\n constructor(message, name = \"Error\") {\n super(message);\n this.name = name;\n this.code = 0;\n }\n}\n\nclass EventTarget {\n listenerMap = new Map;\n addEventListener(type, listener, options) {\n if (!listener) {\n return;\n }\n const capture = typeof options === \"boolean\" ? options : options?.capture ?? false;\n const once = typeof options === \"object\" ? options.once ?? false : false;\n const passive = typeof options === \"object\" ? options.passive ?? false : false;\n let entries = this.listenerMap.get(type);\n if (!entries) {\n entries = [];\n this.listenerMap.set(type, entries);\n }\n if (entries.some((entry) => entry.listener === listener && entry.capture === capture)) {\n return;\n }\n entries.push({ listener, capture, once, passive });\n }\n removeEventListener(type, listener, options) {\n if (!listener) {\n return;\n }\n const capture = typeof options === \"boolean\" ? options : options?.capture ?? false;\n const entries = this.listenerMap.get(type);\n if (!entries) {\n return;\n }\n const index = entries.findIndex((entry) => entry.listener === listener && entry.capture === capture);\n if (index >= 0) {\n entries.splice(index, 1);\n }\n if (entries.length === 0) {\n this.listenerMap.delete(type);\n }\n }\n dispatchEvent(event) {\n if (!(event instanceof Event)) {\n throw new TypeError(\"dispatchEvent requires an Event instance\");\n }\n if (event.dispatched) {\n throw new Error(\"Event has already been dispatched\");\n }\n return dispatchOnTarget(this, event);\n }\n getListeners(type) {\n return this.listenerMap.get(type) ?? [];\n }\n}\n\nclass Event {\n static NONE = 0;\n static CAPTURING_PHASE = 1;\n static AT_TARGET = 2;\n static BUBBLING_PHASE = 3;\n type;\n bubbles;\n cancelable;\n composed;\n target = null;\n currentTarget = null;\n eventPhase = Event.NONE;\n defaultPrevented = false;\n isTrusted = false;\n timeStamp;\n cancelBubble = false;\n dispatched = false;\n propagationStopped = false;\n immediateStopped = false;\n canceled = false;\n constructor(type, init) {\n this.type = type;\n this.bubbles = init?.bubbles ?? false;\n this.cancelable = init?.cancelable ?? false;\n this.composed = init?.composed ?? false;\n this.timeStamp = Date.now();\n }\n preventDefault() {\n if (this.cancelable) {\n this.canceled = true;\n }\n }\n stopPropagation() {\n this.propagationStopped = true;\n this.cancelBubble = true;\n }\n stopImmediatePropagation() {\n this.propagationStopped = true;\n this.immediateStopped = true;\n this.cancelBubble = true;\n }\n propagationPrevented() {\n return this.propagationStopped;\n }\n immediatePrevented() {\n return this.immediateStopped;\n }\n wasCanceled() {\n return this.canceled;\n }\n}\n\nclass CustomEvent extends Event {\n detail;\n constructor(type, init) {\n super(type, init);\n this.detail = init?.detail;\n }\n}\n\nclass MouseEvent extends Event {\n clientX;\n clientY;\n button;\n buttons;\n relatedTarget;\n constructor(type, init) {\n super(type, init);\n this.clientX = init?.clientX ?? 0;\n this.clientY = init?.clientY ?? 0;\n this.button = init?.button ?? 0;\n this.buttons = init?.buttons ?? 0;\n this.relatedTarget = init?.relatedTarget ?? null;\n }\n}\n\nclass KeyboardEvent extends Event {\n key;\n code;\n constructor(type, init) {\n super(type, init);\n this.key = init?.key ?? \"\";\n this.code = init?.code ?? \"\";\n }\n}\nfunction invokeListener(listener, event) {\n const record = listener.listener;\n if (typeof record === \"function\") {\n record.call(event.currentTarget, event);\n } else {\n record.handleEvent(event);\n }\n}\nfunction dispatchOnTarget(target, event) {\n event.dispatched = true;\n event.target = target;\n const chain = buildEventPath(target);\n const capturePath = [...chain].reverse();\n const targetIndex = capturePath.length - 1;\n event.eventPhase = Event.CAPTURING_PHASE;\n for (let index = 0;index < targetIndex; index += 1) {\n const current = capturePath[index];\n if (event.propagationPrevented()) {\n break;\n }\n event.currentTarget = current;\n runListeners(current, event, true);\n }\n if (!event.propagationPrevented()) {\n event.eventPhase = Event.AT_TARGET;\n event.currentTarget = target;\n runListeners(target, event, true);\n if (!event.immediatePrevented()) {\n runListeners(target, event, false);\n }\n }\n if (event.bubbles && !event.propagationPrevented()) {\n event.eventPhase = Event.BUBBLING_PHASE;\n for (let index = capturePath.length - 2;index >= 0; index -= 1) {\n const current = capturePath[index];\n if (event.propagationPrevented()) {\n break;\n }\n event.currentTarget = current;\n runListeners(current, event, false);\n }\n }\n event.eventPhase = Event.NONE;\n event.currentTarget = null;\n return !event.wasCanceled();\n}\nfunction runListeners(target, event, capture) {\n const listeners = target.getListeners(event.type);\n for (const entry of [...listeners]) {\n if (entry.capture !== capture) {\n continue;\n }\n if (event.immediatePrevented()) {\n break;\n }\n if (entry.once) {\n target.removeEventListener(event.type, entry.listener, {\n capture: entry.capture\n });\n }\n invokeListener(entry, event);\n }\n}\nfunction buildEventPath(target) {\n const path = [];\n let current = target;\n while (current) {\n path.push(current);\n const node = current;\n if (node.nodeType === 9 /* DOCUMENT_NODE */) {\n const view = node.defaultView;\n if (view) {\n path.push(view);\n }\n break;\n }\n const parent = node.parentNode;\n if (parent) {\n current = parent;\n continue;\n }\n break;\n }\n return path;\n}\n\nclass DOMTokenList {\n element;\n attributeName;\n constructor(element, attributeName = \"class\") {\n this.element = element;\n this.attributeName = attributeName;\n }\n get length() {\n return this.tokens().length;\n }\n get value() {\n return this.element.getAttribute(this.attributeName) ?? \"\";\n }\n set value(value) {\n this.setTokens(splitTokens(value));\n }\n item(index) {\n return this.tokens()[index] ?? null;\n }\n contains(token) {\n return this.tokens().includes(token);\n }\n add(...tokens) {\n const current = new Set(this.tokens());\n for (const token of tokens) {\n if (token) {\n current.add(token);\n }\n }\n this.setTokens([...current]);\n }\n remove(...tokens) {\n const current = new Set(this.tokens());\n for (const token of tokens) {\n current.delete(token);\n }\n this.setTokens([...current]);\n }\n toggle(token, force) {\n const current = new Set(this.tokens());\n const shouldAdd = force ?? !current.has(token);\n if (shouldAdd) {\n current.add(token);\n } else {\n current.delete(token);\n }\n this.setTokens([...current]);\n return shouldAdd;\n }\n replace(oldToken, newToken) {\n const current = this.tokens();\n const index = current.indexOf(oldToken);\n if (index < 0) {\n return false;\n }\n current[index] = newToken;\n this.setTokens(current);\n return true;\n }\n [Symbol.iterator]() {\n return this.tokens()[Symbol.iterator]();\n }\n forEach(callback) {\n this.tokens().forEach((value, index) => callback(value, index, this));\n }\n toString() {\n return this.value;\n }\n tokens() {\n return splitTokens(this.element.getAttribute(this.attributeName) ?? \"\");\n }\n setTokens(tokens) {\n const value = tokens.filter(Boolean).join(\" \");\n if (value) {\n this.element.setAttribute(this.attributeName, value);\n } else {\n this.element.removeAttribute(this.attributeName);\n }\n }\n}\nfunction splitTokens(value) {\n return value.trim().split(/\\s+/).filter(Boolean);\n}\nfunction normalizeCssProperty(property) {\n return property.replace(/[A-Z]/g, (match) => `-${match.toLowerCase()}`);\n}\nfunction createStyleDeclaration() {\n const properties = new Map;\n const target = {\n properties,\n setProperty(property, value, priority = \"\") {\n const name = normalizeCssProperty(property);\n if (value === \"\") {\n properties.delete(name);\n } else {\n properties.set(name, { value, priority });\n }\n },\n getPropertyValue(property) {\n return properties.get(normalizeCssProperty(property))?.value ?? \"\";\n },\n getPropertyPriority(property) {\n return properties.get(normalizeCssProperty(property))?.priority ?? \"\";\n },\n removeProperty(property) {\n const name = normalizeCssProperty(property);\n const previous = properties.get(name)?.value ?? \"\";\n properties.delete(name);\n return previous;\n },\n item(index) {\n return [...properties.keys()][index] ?? \"\";\n },\n get length() {\n return properties.size;\n },\n get cssText() {\n return [...properties.entries()].map(([name, entry]) => `${name}: ${entry.value}${entry.priority ? ` ${entry.priority}` : \"\"};`).join(\" \");\n },\n set cssText(value) {\n properties.clear();\n for (const declaration of value.split(\";\")) {\n const trimmed = declaration.trim();\n if (!trimmed) {\n continue;\n }\n const separator = trimmed.indexOf(\":\");\n if (separator < 0) {\n continue;\n }\n const name = trimmed.slice(0, separator).trim();\n const propertyValue = trimmed.slice(separator + 1).trim();\n if (name) {\n target.setProperty(name, propertyValue);\n }\n }\n }\n };\n const handler = {\n get(t, property, receiver) {\n if (typeof property === \"symbol\") {\n return Reflect.get(t, property, receiver);\n }\n if (property in t) {\n const value = Reflect.get(t, property, receiver);\n return typeof value === \"function\" ? value.bind(t) : value;\n }\n return t.getPropertyValue(property);\n },\n set(t, property, value, receiver) {\n if (typeof property === \"symbol\") {\n return Reflect.set(t, property, value, receiver);\n }\n if (property in t) {\n return Reflect.set(t, property, value, receiver);\n }\n t.setProperty(property, String(value));\n return true;\n },\n has(t, property) {\n if (typeof property === \"symbol\") {\n return Reflect.has(t, property);\n }\n if (property in t) {\n return true;\n }\n return t.getPropertyValue(property) !== \"\";\n },\n ownKeys() {\n return [\n ...Reflect.ownKeys(target),\n ...[...properties.keys()].map((name) => camelCaseProperty(name))\n ];\n },\n getOwnPropertyDescriptor(t, property) {\n if (typeof property === \"symbol\") {\n return Reflect.getOwnPropertyDescriptor(t, property);\n }\n if (property in t) {\n return Reflect.getOwnPropertyDescriptor(t, property);\n }\n const value = t.getPropertyValue(property);\n if (value !== \"\") {\n return { configurable: true, enumerable: true, writable: true, value };\n }\n return;\n }\n };\n return new Proxy(target, handler);\n}\nfunction camelCaseProperty(property) {\n return property.replace(/-([a-z])/g, (_match, char) => char.toUpperCase());\n}\n\nclass NodeList {\n items;\n constructor(items = []) {\n this.items = items;\n for (let index = 0;index < items.length; index += 1) {\n Object.defineProperty(this, String(index), {\n configurable: true,\n enumerable: true,\n get: () => this.items[index]\n });\n }\n }\n get length() {\n return this.items.length;\n }\n item(index) {\n return this.items[index] ?? null;\n }\n [Symbol.iterator]() {\n return this.items[Symbol.iterator]();\n }\n forEach(callback) {\n this.items.forEach((value, index) => callback(value, index, this));\n }\n entries() {\n return this.items.entries();\n }\n keys() {\n return this.items.keys();\n }\n values() {\n return this.items.values();\n }\n toArray() {\n return [...this.items];\n }\n}\n\nclass Node extends EventTarget {\n static ELEMENT_NODE = 1 /* ELEMENT_NODE */;\n static TEXT_NODE = 3 /* TEXT_NODE */;\n static COMMENT_NODE = 8 /* COMMENT_NODE */;\n static DOCUMENT_NODE = 9 /* DOCUMENT_NODE */;\n static DOCUMENT_FRAGMENT_NODE = 11 /* DOCUMENT_FRAGMENT_NODE */;\n nodeType;\n nodeName;\n parentNode = null;\n ownerDocument = null;\n childList = [];\n constructor(nodeType, nodeName) {\n super();\n this.nodeType = nodeType;\n this.nodeName = nodeName;\n }\n get parentElement() {\n const parent = this.parentNode;\n return parent instanceof Element ? parent : null;\n }\n get childNodes() {\n return new NodeList([...this.childList]);\n }\n get firstChild() {\n return this.childList[0] ?? null;\n }\n get lastChild() {\n return this.childList[this.childList.length - 1] ?? null;\n }\n get nextSibling() {\n const parent = this.parentNode;\n if (!parent) {\n return null;\n }\n const index = parent.childList.indexOf(this);\n return index >= 0 ? parent.childList[index + 1] ?? null : null;\n }\n get previousSibling() {\n const parent = this.parentNode;\n if (!parent) {\n return null;\n }\n const index = parent.childList.indexOf(this);\n return index > 0 ? parent.childList[index - 1] : null;\n }\n get textContent() {\n let text = \"\";\n for (const child of this.childList) {\n if (child.nodeType === 3 /* TEXT_NODE */) {\n text += child.data;\n } else if (child.nodeType === 1 /* ELEMENT_NODE */) {\n text += child.textContent;\n }\n }\n return text;\n }\n set textContent(value) {\n this.childList = [];\n if (value) {\n const textNode = new Text(value);\n textNode.ownerDocument = this.ownerDocument;\n textNode.parentNode = this;\n this.childList.push(textNode);\n }\n }\n hasChildNodes() {\n return this.childList.length > 0;\n }\n appendChild(node) {\n if (node === this) {\n throw new Error(\"Cannot append a node to itself\");\n }\n this.insertBefore(node, null);\n return node;\n }\n insertBefore(node, reference) {\n if (node === this) {\n throw new Error(\"Cannot insert a node before itself\");\n }\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n node.parentNode = this;\n if (node.ownerDocument === null) {\n node.ownerDocument = this.ownerDocument;\n }\n if (reference === null) {\n this.childList.push(node);\n return node;\n }\n const index = this.childList.indexOf(reference);\n if (index < 0) {\n throw new Error(\"Reference node is not a child of this node\");\n }\n this.childList.splice(index, 0, node);\n return node;\n }\n removeChild(node) {\n const index = this.childList.indexOf(node);\n if (index < 0) {\n throw new Error(\"Node is not a child of this node\");\n }\n this.childList.splice(index, 1);\n node.parentNode = null;\n return node;\n }\n replaceChild(newChild, oldChild) {\n const index = this.childList.indexOf(oldChild);\n if (index < 0) {\n throw new Error(\"Old child is not a child of this node\");\n }\n if (newChild.parentNode) {\n newChild.parentNode.removeChild(newChild);\n }\n newChild.parentNode = this;\n if (newChild.ownerDocument === null) {\n newChild.ownerDocument = this.ownerDocument;\n }\n this.childList[index] = newChild;\n oldChild.parentNode = null;\n return newChild;\n }\n replaceChildren(...nodes) {\n for (const child of [...this.childList]) {\n this.removeChild(child);\n }\n for (const node of nodes) {\n this.appendChild(node);\n }\n }\n contains(node) {\n if (!node) {\n return false;\n }\n let current = node;\n while (current) {\n if (current === this) {\n return true;\n }\n current = current.parentNode;\n }\n return false;\n }\n remove() {\n this.parentNode?.removeChild(this);\n }\n cloneNode(deep = false) {\n const clone = this.createClone();\n if (deep) {\n for (const child of this.childList) {\n clone.appendChild(child.cloneNode(true));\n }\n }\n return clone;\n }\n createClone() {\n const clone = new Node(this.nodeType, this.nodeName);\n clone.ownerDocument = this.ownerDocument;\n return clone;\n }\n getRootNode() {\n if (!this.parentNode) {\n return this;\n }\n let parent = this.parentNode;\n while (parent.parentNode) {\n parent = parent.parentNode;\n }\n return parent;\n }\n isConnected() {\n return this.getRootNode().nodeType === 9 /* DOCUMENT_NODE */;\n }\n}\n\nclass Element extends Node {\n namespaceURI;\n attributeList = [];\n styleValue;\n classListValue;\n datasetProxy;\n constructor(tagName, namespaceURI = null) {\n super(1 /* ELEMENT_NODE */, tagName.toUpperCase());\n this.namespaceURI = namespaceURI;\n }\n get tagName() {\n return this.nodeName;\n }\n get localName() {\n return this.nodeName.toLowerCase();\n }\n get id() {\n return this.getAttribute(\"id\") ?? \"\";\n }\n set id(value) {\n this.setAttribute(\"id\", value);\n }\n get className() {\n return this.getAttribute(\"class\") ?? \"\";\n }\n set className(value) {\n this.setAttribute(\"class\", value);\n }\n get classList() {\n if (!this.classListValue) {\n this.classListValue = new DOMTokenList(this, \"class\");\n }\n return this.classListValue;\n }\n get style() {\n if (!this.styleValue) {\n this.styleValue = createStyleDeclaration();\n }\n return this.styleValue;\n }\n get dataset() {\n if (!this.datasetProxy) {\n this.datasetProxy = createDatasetProxy(this);\n }\n return this.datasetProxy;\n }\n get children() {\n return new NodeList(this.childList.filter((child) => child.nodeType === 1 /* ELEMENT_NODE */));\n }\n get firstElementChild() {\n return this.children.item(0);\n }\n get lastElementChild() {\n return this.children.item(this.children.length - 1);\n }\n get childElementCount() {\n return this.children.length;\n }\n get attributes() {\n return new NamedNodeMap(this);\n }\n getAttribute(name) {\n const entry = this.findAttribute(name);\n return entry ? entry.value : null;\n }\n getAttributeNames() {\n return this.attributeList.map((entry) => entry.name);\n }\n setAttribute(name, value) {\n const stringValue = String(value);\n if (name === \"style\") {\n this.styleValue = createStyleDeclaration();\n this.styleValue.cssText = stringValue;\n }\n const entry = this.findAttribute(name);\n if (entry) {\n entry.value = stringValue;\n } else {\n this.attributeList.push({ name, value: stringValue });\n }\n }\n removeAttribute(name) {\n if (name === \"style\") {\n this.styleValue = createStyleDeclaration();\n }\n const index = this.attributeList.findIndex((entry) => entry.name === name);\n if (index >= 0) {\n this.attributeList.splice(index, 1);\n }\n }\n hasAttribute(name) {\n return this.findAttribute(name) !== undefined;\n }\n toggleAttribute(name, force) {\n const shouldAdd = force ?? !this.hasAttribute(name);\n if (shouldAdd) {\n this.setAttribute(name, \"\");\n } else {\n this.removeAttribute(name);\n }\n return shouldAdd;\n }\n hasAttributes() {\n return this.attributeList.length > 0;\n }\n get innerHTML() {\n return serializeChildren(this);\n }\n set innerHTML(value) {\n this.replaceChildren(...parseHtmlFragment(value, this.ownerDocument));\n }\n get outerHTML() {\n return serializeNode(this);\n }\n get value() {\n return this.getAttribute(\"value\") ?? \"\";\n }\n set value(value) {\n this.setAttribute(\"value\", value);\n }\n querySelector(selector) {\n return querySelectorAll(this, selector).item(0);\n }\n querySelectorAll(selector) {\n return querySelectorAll(this, selector);\n }\n getElementsByTagName(tagName) {\n const lowered = tagName.toLowerCase();\n const results = [];\n collectElements(this, (element) => {\n if (element.localName === lowered) {\n results.push(element);\n }\n });\n return new NodeList(results);\n }\n matches(selector) {\n return matchSelector(this, selector);\n }\n closest(selector) {\n if (this.matches(selector)) {\n return this;\n }\n let parent = this.parentElement;\n while (parent) {\n if (parent.matches(selector)) {\n return parent;\n }\n parent = parent.parentElement;\n }\n return null;\n }\n getBoundingClientRect() {\n return {\n x: 0,\n y: 0,\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n width: 0,\n height: 0,\n toJSON() {\n return {\n x: 0,\n y: 0,\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n width: 0,\n height: 0\n };\n }\n };\n }\n scrollIntoView() {}\n focus() {}\n blur() {}\n click() {\n this.dispatchEvent(new MouseEvent(\"click\", { bubbles: true, cancelable: true }));\n }\n append(...nodes) {\n for (const node of nodes) {\n if (typeof node === \"string\") {\n const textNode = new Text(node);\n textNode.ownerDocument = this.ownerDocument;\n this.appendChild(textNode);\n } else {\n this.appendChild(node);\n }\n }\n }\n prepend(...nodes) {\n const reference = this.firstChild;\n for (const node of nodes) {\n if (typeof node === \"string\") {\n const textNode = new Text(node);\n textNode.ownerDocument = this.ownerDocument;\n this.insertBefore(textNode, reference);\n } else {\n this.insertBefore(node, reference);\n }\n }\n }\n before(...nodes) {\n const parent = this.parentNode;\n if (!parent) {\n return;\n }\n for (const node of nodes) {\n if (typeof node === \"string\") {\n const textNode = new Text(node);\n textNode.ownerDocument = this.ownerDocument;\n parent.insertBefore(textNode, this);\n } else {\n parent.insertBefore(node, this);\n }\n }\n }\n after(...nodes) {\n const parent = this.parentNode;\n if (!parent) {\n return;\n }\n const reference = this.nextSibling;\n for (const node of nodes) {\n if (typeof node === \"string\") {\n const textNode = new Text(node);\n textNode.ownerDocument = this.ownerDocument;\n parent.insertBefore(textNode, reference);\n } else {\n parent.insertBefore(node, reference);\n }\n }\n }\n replaceWith(...nodes) {\n const parent = this.parentNode;\n if (!parent) {\n return;\n }\n const reference = this.nextSibling;\n parent.removeChild(this);\n for (const node of nodes) {\n if (typeof node === \"string\") {\n const textNode = new Text(node);\n textNode.ownerDocument = this.ownerDocument;\n parent.insertBefore(textNode, reference);\n } else {\n parent.insertBefore(node, reference);\n }\n }\n }\n setAttributeNS(_namespace, name, value) {\n this.setAttribute(name, value);\n }\n removeAttributeNS(_namespace, name) {\n this.removeAttribute(name);\n }\n hasAttributeNS(_namespace, name) {\n return this.hasAttribute(name);\n }\n getAttributeNS(_namespace, name) {\n return this.getAttribute(name);\n }\n findAttribute(name) {\n return this.attributeList.find((entry) => entry.name === name);\n }\n attributeEntries() {\n return [...this.attributeList];\n }\n inlineStyleText() {\n return this.styleValue?.cssText ?? \"\";\n }\n createClone() {\n const clone = createElementForTag(this.localName, this.ownerDocument);\n for (const entry of this.attributeList) {\n clone.setAttribute(entry.name, entry.value);\n }\n return clone;\n }\n}\n\nclass HTMLElement extends Element {\n constructor(tagName) {\n super(tagName);\n }\n}\n\nclass NamedNodeMap {\n element;\n constructor(element) {\n this.element = element;\n for (let index = 0;index < element.attributeEntries().length; index += 1) {\n Object.defineProperty(this, String(index), {\n configurable: true,\n enumerable: true,\n get: () => this.element.attributeEntries()[index] ?? null\n });\n }\n }\n get length() {\n return this.element.attributeEntries().length;\n }\n item(index) {\n return this.element.attributeEntries()[index] ?? null;\n }\n getNamedItem(name) {\n return this.element.findAttribute(name) ?? null;\n }\n setNamedItem(attr) {\n this.element.setAttribute(attr.name, attr.value);\n }\n removeNamedItem(name) {\n this.element.removeAttribute(name);\n }\n [Symbol.iterator]() {\n return this.element.attributeEntries()[Symbol.iterator]();\n }\n}\n\nclass HTMLOptionElement extends HTMLElement {\n selectedValue;\n constructor(tagName = \"option\") {\n super(tagName);\n }\n get value() {\n return this.getAttribute(\"value\") ?? this.textContent;\n }\n set value(value) {\n this.setAttribute(\"value\", value);\n }\n get text() {\n return this.textContent;\n }\n get label() {\n return this.getAttribute(\"label\") ?? this.textContent;\n }\n get selected() {\n return this.hasSelectedValue();\n }\n set selected(value) {\n this.setSelectedRaw(value);\n if (value) {\n const select = this.parentElement;\n if (select instanceof HTMLSelectElement && !select.multiple) {\n for (const option of select.options.toArray()) {\n if (option !== this) {\n option.setSelectedRaw(false);\n }\n }\n }\n }\n }\n setSelectedRaw(value) {\n this.selectedValue = value;\n if (value) {\n this.setAttribute(\"selected\", \"\");\n } else {\n this.removeAttribute(\"selected\");\n }\n }\n hasSelectedValue() {\n if (this.selectedValue !== undefined) {\n return this.selectedValue;\n }\n return this.hasAttribute(\"selected\");\n }\n}\n\nclass HTMLSelectElement extends HTMLElement {\n constructor(tagName = \"select\") {\n super(tagName);\n }\n get multiple() {\n return this.hasAttribute(\"multiple\");\n }\n set multiple(value) {\n if (value) {\n this.setAttribute(\"multiple\", \"\");\n } else {\n this.removeAttribute(\"multiple\");\n }\n }\n get options() {\n const options = [];\n collectElements(this, (element) => {\n if (element instanceof HTMLOptionElement) {\n options.push(element);\n }\n });\n return new HTMLOptionsCollection(options);\n }\n get selectedOptions() {\n return new NodeList(this.options.toArray().filter((option) => option.hasSelectedValue()));\n }\n get selectedIndex() {\n return this.options.toArray().findIndex((option) => option.hasSelectedValue());\n }\n set selectedIndex(index) {\n const options = this.options.toArray();\n options.forEach((option, optionIndex) => option.setSelectedRaw(optionIndex === index));\n }\n get value() {\n const options = this.options.toArray();\n const selected = options.find((option) => option.hasSelectedValue());\n if (selected) {\n return selected.value;\n }\n if (!this.multiple && options.length > 0) {\n return options[0].value;\n }\n return \"\";\n }\n set value(value) {\n const options = this.options.toArray();\n for (const option of options) {\n const shouldSelect = option.value === value;\n if (shouldSelect) {\n if (this.multiple) {\n option.setSelectedRaw(true);\n } else {\n for (const other of options) {\n other.setSelectedRaw(other === option);\n }\n return;\n }\n }\n }\n }\n add(option) {\n this.appendChild(option);\n }\n removeOption(index) {\n const options = this.options.toArray();\n const option = options[index];\n if (option) {\n option.remove();\n }\n }\n}\n\nclass HTMLOptionsCollection {\n items;\n constructor(items) {\n this.items = items;\n for (let index = 0;index < items.length; index += 1) {\n Object.defineProperty(this, String(index), {\n configurable: true,\n enumerable: true,\n get: () => this.items[index]\n });\n }\n }\n get length() {\n return this.items.length;\n }\n item(index) {\n return this.items[index] ?? null;\n }\n get value() {\n return this.items.find((option) => option.hasSelectedValue())?.value ?? \"\";\n }\n get selectedIndex() {\n return this.items.findIndex((option) => option.hasSelectedValue());\n }\n toArray() {\n return [...this.items];\n }\n [Symbol.iterator]() {\n return this.items[Symbol.iterator]();\n }\n}\n\nclass HTMLInputElement extends HTMLElement {\n inputValue;\n checkedValue;\n constructor(tagName = \"input\") {\n super(tagName);\n }\n get type() {\n return this.getAttribute(\"type\") ?? \"text\";\n }\n set type(value) {\n this.setAttribute(\"type\", value);\n }\n get name() {\n return this.getAttribute(\"name\") ?? \"\";\n }\n set name(value) {\n this.setAttribute(\"name\", value);\n }\n get value() {\n return this.inputValue ?? this.getAttribute(\"value\") ?? \"\";\n }\n set value(value) {\n this.inputValue = value;\n }\n get defaultValue() {\n return this.getAttribute(\"value\") ?? \"\";\n }\n get checked() {\n return this.checkedValue ?? this.hasAttribute(\"checked\");\n }\n set checked(value) {\n this.checkedValue = value;\n }\n get disabled() {\n return this.hasAttribute(\"disabled\");\n }\n set disabled(value) {\n if (value) {\n this.setAttribute(\"disabled\", \"\");\n } else {\n this.removeAttribute(\"disabled\");\n }\n }\n createClone() {\n const clone = super.createClone();\n clone.inputValue = this.inputValue;\n clone.checkedValue = this.checkedValue;\n return clone;\n }\n}\n\nclass HTMLTextAreaElement extends HTMLElement {\n textareaValue;\n constructor(tagName = \"textarea\") {\n super(tagName);\n }\n get value() {\n return this.textareaValue ?? this.textContent;\n }\n set value(value) {\n this.textareaValue = value;\n }\n}\n\nclass HTMLButtonElement extends HTMLElement {\n constructor(tagName = \"button\") {\n super(tagName);\n }\n get type() {\n return this.getAttribute(\"type\") ?? \"submit\";\n }\n}\n\nclass HTMLStyleElement extends HTMLElement {\n constructor(tagName = \"style\") {\n super(tagName);\n }\n}\n\nclass HTMLAnchorElement extends HTMLElement {\n constructor(tagName = \"a\") {\n super(tagName);\n }\n get href() {\n return this.getAttribute(\"href\") ?? \"\";\n }\n set href(value) {\n this.setAttribute(\"href\", value);\n }\n}\n\nclass Text extends Node {\n data;\n constructor(data = \"\") {\n super(3 /* TEXT_NODE */, \"#text\");\n this.data = data;\n }\n get nodeValue() {\n return this.data;\n }\n set nodeValue(value) {\n this.data = value;\n }\n get textContent() {\n return this.data;\n }\n set textContent(value) {\n this.data = value;\n }\n get wholeText() {\n return this.data;\n }\n createClone() {\n const clone = new Text(this.data);\n clone.ownerDocument = this.ownerDocument;\n return clone;\n }\n}\n\nclass Comment extends Node {\n data;\n constructor(data = \"\") {\n super(8 /* COMMENT_NODE */, \"#comment\");\n this.data = data;\n }\n get nodeValue() {\n return this.data;\n }\n set nodeValue(value) {\n this.data = value;\n }\n createClone() {\n const clone = new Comment(this.data);\n clone.ownerDocument = this.ownerDocument;\n return clone;\n }\n}\n\nclass DocumentFragment extends Node {\n constructor() {\n super(11 /* DOCUMENT_FRAGMENT_NODE */, \"#document-fragment\");\n }\n}\n\nclass Document extends Node {\n defaultView = null;\n constructor() {\n super(9 /* DOCUMENT_NODE */, \"#document\");\n }\n createElement(tagName) {\n return createElementForTag(tagName, this);\n }\n createElementNS(namespaceURI, tagName) {\n const element = createElementForTag(tagName, this);\n element.namespaceURI = namespaceURI;\n return element;\n }\n createTextNode(data) {\n const text = new Text(data);\n text.ownerDocument = this;\n return text;\n }\n createComment(data) {\n const comment = new Comment(data);\n comment.ownerDocument = this;\n return comment;\n }\n createDocumentFragment() {\n const fragment = new DocumentFragment;\n fragment.ownerDocument = this;\n return fragment;\n }\n createEvent(type) {\n if (type === \"MouseEvent\" || type === \"mouseevent\") {\n return new MouseEvent(\"\");\n }\n if (type === \"KeyboardEvent\" || type === \"keyboardevent\") {\n return new KeyboardEvent(\"\");\n }\n if (type === \"CustomEvent\" || type === \"customevent\") {\n return new CustomEvent(\"\");\n }\n return new Event(\"\");\n }\n get documentElement() {\n const html = this.childList.find((child) => child.nodeType === 1 /* ELEMENT_NODE */);\n if (html) {\n return html;\n }\n const created = createElementForTag(\"html\", this);\n this.appendChild(created);\n return created;\n }\n get head() {\n return this.ensureDocumentChild(\"head\");\n }\n get body() {\n return this.ensureDocumentChild(\"body\");\n }\n get title() {\n const titleElement = this.querySelector(\"title\");\n return titleElement?.textContent ?? \"\";\n }\n set title(value) {\n let titleElement = this.querySelector(\"title\");\n if (!titleElement) {\n titleElement = createElementForTag(\"title\", this);\n this.head.appendChild(titleElement);\n }\n titleElement.textContent = value;\n }\n querySelector(selector) {\n return querySelectorAll(this, selector).item(0);\n }\n querySelectorAll(selector) {\n return querySelectorAll(this, selector);\n }\n getElementById(id) {\n let result = null;\n collectElements(this, (element) => {\n if (!result && element.id === id) {\n result = element;\n }\n });\n return result;\n }\n getElementsByTagName(tagName) {\n return this.documentElement.getElementsByTagName(tagName);\n }\n createClone() {\n return new Document;\n }\n ensureDocumentChild(tagName) {\n const documentElement = this.documentElement;\n let child = documentElement.childList.find((node) => node.nodeType === 1 /* ELEMENT_NODE */ && node.localName === tagName);\n if (!child) {\n child = createElementForTag(tagName, this);\n documentElement.appendChild(child);\n }\n return child;\n }\n}\n\nclass Location {\n url;\n constructor(url) {\n this.url = new URL(url);\n }\n get href() {\n return this.url.href;\n }\n set href(value) {\n this.url = new URL(value, this.url.href);\n }\n get origin() {\n return this.url.origin;\n }\n get protocol() {\n return this.url.protocol;\n }\n get host() {\n return this.url.host;\n }\n get hostname() {\n return this.url.hostname;\n }\n get port() {\n return this.url.port;\n }\n get pathname() {\n return this.url.pathname;\n }\n set pathname(value) {\n const url = this.url;\n const next = new URL(value, url.href);\n url.pathname = next.pathname;\n }\n get search() {\n return this.url.search;\n }\n set search(value) {\n this.url.search = value.startsWith(\"?\") ? value : `?${value}`;\n }\n get hash() {\n return this.url.hash;\n }\n set hash(value) {\n const nextHash = value.startsWith(\"#\") ? value : `#${value}`;\n this.url.hash = nextHash;\n }\n get username() {\n return this.url.username;\n }\n get password() {\n return this.url.password;\n }\n assign(value) {\n this.url = new URL(value, this.url.href);\n }\n replace(value) {\n this.url = new URL(value, this.url.href);\n }\n reload() {}\n toString() {\n return this.url.href;\n }\n getHashPath() {\n return this.url.hash.slice(1);\n }\n getHrefWithoutHash() {\n const url = this.url;\n return `${url.origin}${url.pathname}${url.search}`;\n }\n}\n\nclass History {\n windowRef;\n entries = [];\n index = 0;\n scrollRestoration = \"auto\";\n constructor(windowRef) {\n this.windowRef = windowRef;\n this.entries = [{ state: null, url: windowRef.location.href }];\n }\n get length() {\n return this.entries.length;\n }\n get state() {\n return this.entries[this.index]?.state ?? null;\n }\n pushState(state, _unusedTitle, url) {\n const nextUrl = url ? new URL(url, this.windowRef.location.href).href : this.windowRef.location.href;\n this.entries = this.entries.slice(0, this.index + 1);\n this.entries.push({ state, url: nextUrl });\n this.index = this.entries.length - 1;\n this.windowRef.setLocationUrl(nextUrl);\n }\n replaceState(state, _unusedTitle, url) {\n const nextUrl = url ? new URL(url, this.windowRef.location.href).href : this.windowRef.location.href;\n this.entries[this.index] = { state, url: nextUrl };\n this.windowRef.setLocationUrl(nextUrl);\n }\n back() {\n this.go(-1);\n }\n forward() {\n this.go(1);\n }\n go(delta = 0) {\n const nextIndex = this.index + delta;\n if (nextIndex < 0 || nextIndex >= this.entries.length) {\n return;\n }\n this.index = nextIndex;\n this.windowRef.setLocationUrl(this.entries[nextIndex].url);\n this.windowRef.dispatchEvent(new Event(\"popstate\", { bubbles: false, cancelable: false }));\n }\n}\n\nclass Storage {\n store = new Map;\n get length() {\n return this.store.size;\n }\n key(index) {\n return [...this.store.keys()][index] ?? null;\n }\n getItem(key) {\n return this.store.has(key) ? this.store.get(key) : null;\n }\n setItem(key, value) {\n this.store.set(key, String(value));\n }\n removeItem(key) {\n this.store.delete(key);\n }\n clear() {\n this.store.clear();\n }\n}\n\nclass Navigator {\n userAgent = \"TSone/0.1.0\";\n platform = \"TSone\";\n language = \"zh-CN\";\n languages = [\"zh-CN\"];\n onLine = true;\n maxTouchPoints = 0;\n}\nfunction createMatchMedia(_windowRef, query) {\n const listeners = new Set;\n const matches = false;\n const list = {\n media: query,\n matches,\n onchange: null,\n addEventListener(type, listener) {\n if (type === \"change\") {\n listeners.add(listener);\n }\n },\n removeEventListener(type, listener) {\n if (type === \"change\") {\n listeners.delete(listener);\n }\n },\n addListener(listener) {\n listeners.add(listener);\n },\n removeListener(listener) {\n listeners.delete(listener);\n },\n dispatchEvent(event) {\n for (const listener of [...listeners]) {\n if (typeof listener === \"function\") {\n listener.call(list, event);\n } else {\n listener.handleEvent(event);\n }\n }\n return true;\n }\n };\n return list;\n}\n\nclass ResizeObserver {\n observe() {}\n unobserve() {}\n disconnect() {}\n}\nvar DOM_GLOBAL_KEYS = [\n \"window\",\n \"document\",\n \"Node\",\n \"Text\",\n \"Comment\",\n \"Element\",\n \"HTMLElement\",\n \"HTMLInputElement\",\n \"HTMLTextAreaElement\",\n \"HTMLSelectElement\",\n \"HTMLButtonElement\",\n \"HTMLOptionElement\",\n \"HTMLStyleElement\",\n \"HTMLAnchorElement\",\n \"DocumentFragment\",\n \"Document\",\n \"Event\",\n \"MouseEvent\",\n \"KeyboardEvent\",\n \"CustomEvent\",\n \"EventTarget\",\n \"DOMException\",\n \"history\",\n \"location\",\n \"navigator\",\n \"localStorage\",\n \"matchMedia\",\n \"getComputedStyle\",\n \"requestAnimationFrame\",\n \"cancelAnimationFrame\",\n \"ResizeObserver\"\n];\n\nclass DomWindow extends EventTarget {\n window = this;\n document;\n location;\n history;\n localStorage = new Storage;\n navigator = new Navigator;\n Node = Node;\n Text = Text;\n Comment = Comment;\n Element = Element;\n HTMLElement = HTMLElement;\n HTMLInputElement = HTMLInputElement;\n HTMLTextAreaElement = HTMLTextAreaElement;\n HTMLSelectElement = HTMLSelectElement;\n HTMLButtonElement = HTMLButtonElement;\n HTMLOptionElement = HTMLOptionElement;\n HTMLStyleElement = HTMLStyleElement;\n HTMLAnchorElement = HTMLAnchorElement;\n DocumentFragment = DocumentFragment;\n Document = Document;\n Event = Event;\n MouseEvent = MouseEvent;\n KeyboardEvent = KeyboardEvent;\n CustomEvent = CustomEvent;\n EventTarget = EventTarget;\n DOMException = DOMException;\n NodeList = NodeList;\n constructor(options = {}) {\n super();\n const url = options.url ?? \"http://localhost/\";\n this.location = new Location(url);\n this.history = new History(this);\n this.document = new Document;\n this.document.defaultView = this;\n setupDocumentTree(this.document);\n }\n matchMedia(query) {\n return createMatchMedia(this, query);\n }\n getComputedStyle(element) {\n return element.style;\n }\n requestAnimationFrame(callback) {\n return setTimeout(() => callback(Date.now()), 0);\n }\n cancelAnimationFrame(handle) {\n clearTimeout(handle);\n }\n setLocationUrl(url) {\n this.location.href = url;\n }\n installKeys() {\n return [...DOM_GLOBAL_KEYS];\n }\n}\nfunction createDomWindow(options = {}) {\n return new DomWindow(options);\n}\nfunction installDomGlobals(windowRef, target = globalThis) {\n const previous = new Map;\n const keys = windowRef.installKeys();\n for (const key of keys) {\n previous.set(key, Object.getOwnPropertyDescriptor(target, key));\n }\n for (const key of keys) {\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: windowRef[key]\n });\n }\n Object.defineProperty(target, \"window\", {\n configurable: true,\n enumerable: true,\n writable: true,\n value: windowRef\n });\n return () => {\n for (const key of keys) {\n const descriptor = previous.get(key);\n if (descriptor) {\n Object.defineProperty(target, key, descriptor);\n } else {\n Reflect.deleteProperty(target, key);\n }\n }\n };\n}\nfunction parseHtmlFragment(source, documentRef) {\n const root = new DocumentFragment;\n if (documentRef) {\n root.ownerDocument = documentRef;\n }\n parseInto(root, source, documentRef);\n return [...root.childList];\n}\nfunction parseInto(parent, source, documentRef) {\n const stack = [];\n let current = parent;\n let index = 0;\n const length = source.length;\n const append = (node) => {\n if (node.ownerDocument === null) {\n node.ownerDocument = documentRef;\n }\n current.appendChild(node);\n };\n while (index < length) {\n const openIndex = source.indexOf(\"<\", index);\n if (openIndex < 0) {\n append(new Text(source.slice(index)));\n break;\n }\n if (openIndex > index) {\n append(new Text(source.slice(index, openIndex)));\n }\n if (source.startsWith(\"<!--\", openIndex)) {\n const closeIndex = source.indexOf(\"-->\", openIndex + 4);\n const commentEnd = closeIndex < 0 ? length : closeIndex;\n append(new Comment(source.slice(openIndex + 4, commentEnd)));\n index = closeIndex < 0 ? length : closeIndex + 3;\n continue;\n }\n const tagEnd = findTagEnd(source, openIndex);\n if (tagEnd < 0) {\n append(new Text(source.slice(openIndex)));\n break;\n }\n const tagSource = source.slice(openIndex + 1, tagEnd);\n const trimmed = tagSource.trim();\n if (trimmed.startsWith(\"/\")) {\n const tagName = trimmed.slice(1).trim().toLowerCase();\n if (stack.length > 0 && stack[stack.length - 1].localName === tagName) {\n stack.pop();\n current = stack[stack.length - 1] ?? parent;\n }\n index = tagEnd + 1;\n continue;\n }\n const selfClosing = trimmed.endsWith(\"/\");\n const parsed = parseTag(trimmed.replace(/\\/$/, \"\").trim());\n if (!parsed) {\n index = tagEnd + 1;\n continue;\n }\n const element = createElementForTag(parsed.name, documentRef);\n for (const attr of parsed.attributes) {\n element.setAttribute(attr.name, attr.value);\n }\n append(element);\n if (VOID_TAGS.has(parsed.name) || selfClosing) {\n index = tagEnd + 1;\n continue;\n }\n if (RAW_TEXT_TAGS.has(parsed.name)) {\n const closeTag = `</${parsed.name}>`;\n const rawEnd = source.toLowerCase().indexOf(closeTag, tagEnd + 1);\n const rawText = source.slice(tagEnd + 1, rawEnd < 0 ? length : rawEnd);\n element.appendChild(documentRef?.createTextNode(rawText) ?? new Text(rawText));\n index = rawEnd < 0 ? length : rawEnd + closeTag.length;\n continue;\n }\n stack.push(element);\n current = element;\n index = tagEnd + 1;\n }\n}\nvar VOID_TAGS = new Set([\n \"area\",\n \"base\",\n \"br\",\n \"col\",\n \"embed\",\n \"hr\",\n \"img\",\n \"input\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\"\n]);\nvar RAW_TEXT_TAGS = new Set([\"script\", \"style\", \"textarea\", \"title\"]);\nfunction findTagEnd(source, openIndex) {\n let inQuote = null;\n for (let index = openIndex + 1;index < source.length; index += 1) {\n const char = source[index];\n if (inQuote) {\n if (char === inQuote) {\n inQuote = null;\n }\n continue;\n }\n if (char === '\"' || char === \"'\") {\n inQuote = char;\n continue;\n }\n if (char === \">\") {\n return index;\n }\n }\n return -1;\n}\nfunction parseTag(source) {\n const match = source.match(/^([a-zA-Z][a-zA-Z0-9-]*)\\s*(.*)$/);\n if (!match) {\n return null;\n }\n const name = match[1].toLowerCase();\n const attributes = [];\n const attributeSource = match[2];\n const pattern = /([a-zA-Z_:][a-zA-Z0-9_:.-]*)(?:\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)'|([^\\s\"'=<>`]+)))?/g;\n let attributeMatch;\n while ((attributeMatch = pattern.exec(attributeSource)) !== null) {\n const attrName = attributeMatch[1];\n const value = attributeMatch[2] ?? attributeMatch[3] ?? attributeMatch[4] ?? \"\";\n attributes.push({ name: attrName, value: decodeEntities(value) });\n }\n return { name, attributes };\n}\nfunction decodeEntities(value) {\n return value.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/"/g, '\"').replace(/'/g, \"'\").replace(/ /g, \" \");\n}\nfunction encodeText(value) {\n return value.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\n}\nfunction encodeAttribute(value) {\n return encodeText(value).replace(/\"/g, \""\");\n}\nfunction serializeNode(node) {\n switch (node.nodeType) {\n case 3 /* TEXT_NODE */:\n return encodeText(node.data);\n case 8 /* COMMENT_NODE */:\n return `<!--${node.data}-->`;\n case 1 /* ELEMENT_NODE */:\n return serializeElement(node);\n default:\n return \"\";\n }\n}\nfunction serializeElement(element) {\n const tag = element.localName;\n const attributes = [];\n for (const entry of element.attributeEntries()) {\n if (entry.name === \"style\") {\n continue;\n }\n attributes.push(`${entry.name}=\"${encodeAttribute(entry.value)}\"`);\n }\n const inlineStyle = element.inlineStyleText();\n if (inlineStyle) {\n attributes.push(`style=\"${encodeAttribute(inlineStyle)}\"`);\n }\n const attributeText = attributes.length > 0 ? ` ${attributes.join(\" \")}` : \"\";\n if (VOID_TAGS.has(tag)) {\n return `<${tag}${attributeText}>`;\n }\n if (RAW_TEXT_TAGS.has(tag)) {\n return `<${tag}${attributeText}>${element.textContent}</${tag}>`;\n }\n return `<${tag}${attributeText}>${serializeChildren(element)}</${tag}>`;\n}\nfunction serializeChildren(element) {\n return element.childList.map((child) => serializeNode(child)).join(\"\");\n}\nfunction parseSelector(selector) {\n return selector.split(\",\").map((group) => {\n const segments = [];\n let index = 0;\n while (index < group.length) {\n while (index < group.length && group[index] === \" \") {\n index += 1;\n }\n if (index >= group.length) {\n break;\n }\n if (group[index] === \">\") {\n segments.push({ type: \"child\" });\n index += 1;\n continue;\n }\n const start = index;\n while (index < group.length && group[index] !== \" \" && group[index] !== \">\") {\n index += 1;\n }\n segments.push(parseCompound(group.slice(start, index)));\n }\n return segments;\n });\n}\nfunction parseCompound(source) {\n const selectors = [];\n let index = 0;\n while (index < source.length) {\n const char = source[index];\n if (char === \"*\") {\n selectors.push({ type: \"universal\" });\n index += 1;\n } else if (char === \"#\") {\n const end = scanIdentifier(source, index + 1);\n selectors.push({ type: \"id\", id: source.slice(index + 1, end) });\n index = end;\n } else if (char === \".\") {\n const end = scanIdentifier(source, index + 1);\n selectors.push({\n type: \"class\",\n className: source.slice(index + 1, end)\n });\n index = end;\n } else if (char === \"[\") {\n const end = source.indexOf(\"]\", index);\n const inner = source.slice(index + 1, end < 0 ? source.length : end).trim();\n const attrMatch = inner.match(/^([a-zA-Z_:][a-zA-Z0-9_:.-]*)(?:([~|^$*]?=)(?:\"([^\"]*)\"|'([^']*)'|([^\\s\"'=<>`]+)))?$/);\n if (attrMatch) {\n selectors.push({\n type: \"attribute\",\n name: attrMatch[1],\n operator: attrMatch[2],\n value: attrMatch[3] ?? attrMatch[4] ?? attrMatch[5]\n });\n } else {\n selectors.push({ type: \"attribute\", name: inner });\n }\n index = end < 0 ? source.length : end + 1;\n } else if (/[a-zA-Z_]/.test(char)) {\n const end = scanIdentifier(source, index);\n selectors.push({\n type: \"tag\",\n name: source.slice(index, end).toLowerCase()\n });\n index = end;\n } else {\n index += 1;\n }\n }\n if (selectors.length === 1) {\n return selectors[0];\n }\n return { type: \"compound\", parts: selectors };\n}\nfunction scanIdentifier(source, start) {\n let index = start;\n while (index < source.length && /[a-zA-Z0-9:_-]/.test(source[index])) {\n index += 1;\n }\n return index;\n}\nfunction matchSelector(element, selector) {\n const groups = parseSelector(selector);\n return groups.some((group) => matchGroup(element, group));\n}\nfunction matchGroup(element, group) {\n let index = group.length - 1;\n if (index < 0) {\n return true;\n }\n if (!matchSegment(element, group[index])) {\n return false;\n }\n if (index === 0) {\n return true;\n }\n let current = element.parentElement;\n index -= 1;\n while (current) {\n const selector = group[index];\n if (!selector) {\n return true;\n }\n if (selector.type === \"child\") {\n const parentSelector = group[index - 1];\n if (!parentSelector || !matchSegment(current, parentSelector)) {\n return false;\n }\n index -= 2;\n if (index < 0) {\n return true;\n }\n current = current.parentElement;\n continue;\n }\n if (matchSegment(current, selector)) {\n index -= 1;\n if (index < 0) {\n return true;\n }\n }\n current = current.parentElement;\n }\n return false;\n}\nfunction matchSegment(element, selector) {\n switch (selector.type) {\n case \"universal\":\n return true;\n case \"tag\":\n return element.localName === selector.name;\n case \"id\":\n return element.id === selector.id;\n case \"class\":\n return element.classList.contains(selector.className);\n case \"attribute\":\n return matchAttribute(element, selector);\n case \"compound\":\n return selector.parts.every((part) => matchSegment(element, part));\n case \"child\":\n return false;\n default:\n return false;\n }\n}\nfunction matchAttribute(element, selector) {\n const attributeValue = element.getAttribute(selector.name);\n if (!selector.operator) {\n return attributeValue !== null;\n }\n if (attributeValue === null) {\n return false;\n }\n const expected = selector.value ?? \"\";\n switch (selector.operator) {\n case \"=\":\n return attributeValue === expected;\n case \"~=\":\n return attributeValue.split(/\\s+/).includes(expected);\n case \"|=\":\n return attributeValue === expected || attributeValue.startsWith(`${expected}-`);\n case \"^=\":\n return attributeValue.startsWith(expected);\n case \"$=\":\n return attributeValue.endsWith(expected);\n case \"*=\":\n return attributeValue.includes(expected);\n default:\n return false;\n }\n}\nfunction querySelectorAll(root, selector) {\n const results = [];\n collectElements(root, (element) => {\n if (element !== root && matchSelector(element, selector)) {\n results.push(element);\n }\n });\n return new NodeList(results);\n}\nfunction collectElements(root, visit) {\n for (const child of root.childList) {\n if (child.nodeType === 1 /* ELEMENT_NODE */) {\n visit(child);\n collectElements(child, visit);\n }\n }\n}\nfunction createElementForTag(tagName, documentRef) {\n const tag = tagName.toLowerCase();\n let element;\n if (tag === \"input\") {\n element = new HTMLInputElement(tag);\n } else if (tag === \"textarea\") {\n element = new HTMLTextAreaElement(tag);\n } else if (tag === \"select\") {\n element = new HTMLSelectElement(tag);\n } else if (tag === \"option\") {\n element = new HTMLOptionElement(tag);\n } else if (tag === \"button\") {\n element = new HTMLButtonElement(tag);\n } else if (tag === \"style\") {\n element = new HTMLStyleElement(tag);\n } else if (tag === \"a\") {\n element = new HTMLAnchorElement(tag);\n } else {\n element = new HTMLElement(tag);\n }\n element.ownerDocument = documentRef;\n return element;\n}\nfunction setupDocumentTree(documentRef) {\n const html = documentRef.createElement(\"html\");\n html.setAttribute(\"lang\", \"en\");\n documentRef.appendChild(html);\n const head = documentRef.createElement(\"head\");\n const body = documentRef.createElement(\"body\");\n html.appendChild(head);\n html.appendChild(body);\n}\nfunction createDatasetProxy(element) {\n const handler = {\n get(_target, property) {\n if (typeof property === \"symbol\") {\n return;\n }\n return element.getAttribute(`data-${toKebabCase(property)}`) ?? \"\";\n },\n set(_target, property, value) {\n if (typeof property === \"symbol\") {\n return true;\n }\n if (value === \"\" || value === null || value === undefined) {\n element.removeAttribute(`data-${toKebabCase(property)}`);\n } else {\n element.setAttribute(`data-${toKebabCase(property)}`, String(value));\n }\n return true;\n },\n deleteProperty(_target, property) {\n if (typeof property !== \"symbol\") {\n element.removeAttribute(`data-${toKebabCase(property)}`);\n }\n return true;\n },\n has(_target, property) {\n if (typeof property === \"symbol\") {\n return false;\n }\n return element.hasAttribute(`data-${toKebabCase(property)}`);\n },\n ownKeys() {\n const keys = [];\n for (const entry of element.attributeEntries()) {\n if (entry.name.startsWith(\"data-\")) {\n keys.push(toCamelCase(entry.name.slice(5)));\n }\n }\n return keys;\n },\n getOwnPropertyDescriptor(_target, property) {\n if (typeof property === \"symbol\") {\n return;\n }\n if (element.hasAttribute(`data-${toKebabCase(property)}`)) {\n return {\n configurable: true,\n enumerable: true,\n writable: true,\n value: element.getAttribute(`data-${toKebabCase(property)}`)\n };\n }\n return;\n }\n };\n return new Proxy({}, handler);\n}\nfunction toKebabCase(value) {\n return value.replace(/[A-Z]/g, (match) => `-${match.toLowerCase()}`);\n}\nfunction toCamelCase(value) {\n return value.replace(/-([a-z])/g, (_match, char) => char.toUpperCase());\n}\nexport {\n Comment,\n CustomEvent,\n DOMException,\n DOMTokenList,\n DOM_GLOBAL_KEYS,\n Document,\n DocumentFragment,\n DomNodeType,\n DomWindow,\n Element,\n Event,\n EventTarget,\n HTMLAnchorElement,\n HTMLButtonElement,\n HTMLElement,\n HTMLInputElement,\n HTMLOptionElement,\n HTMLOptionsCollection,\n HTMLSelectElement,\n HTMLStyleElement,\n HTMLTextAreaElement,\n History,\n KeyboardEvent,\n Location,\n MouseEvent,\n NamedNodeMap,\n Navigator,\n Node,\n NodeList,\n ResizeObserver,\n Storage,\n Text,\n createDomWindow,\n createMatchMedia,\n createStyleDeclaration,\n installDomGlobals,\n parseHtmlFragment\n};\n\n//# debugId=F57E68CEB0CE40F364756E2164756E21\n//# sourceMappingURL=index.js.map\n",
|
|
9
|
-
"import {\n createDomWindow,\n installDomGlobals,\n DOM_GLOBAL_KEYS,\n} from '@geektech/tsone/dom';\nimport type { AppDocumentRenderOptions, OneApp } from '@geektech/tsone';\nimport type { ResolvedConfig } from './types';\n\nconst PROJECT_GLOBAL_KEYS = [...DOM_GLOBAL_KEYS, '__APP__'];\n\ntype ProjectGlobalKey = (typeof PROJECT_GLOBAL_KEYS)[number];\ntype GlobalDescriptorMap = Map<\n ProjectGlobalKey,\n PropertyDescriptor | undefined\n>;\n\ninterface ProjectEntryModule {\n app?: unknown;\n}\n\nlet projectDomQueue: Promise<void> = Promise.resolve();\n\nexport async function renderProjectHtml(\n config: ResolvedConfig,\n options: AppDocumentRenderOptions,\n entry: string = config.entry\n): Promise<string> {\n return withProjectDom(async () => {\n const module = await importProjectEntry(entry);\n const app = module.app as Partial<OneApp> | undefined;\n if (!app || typeof app.renderHtmlDocument !== 'function') {\n throw new Error(\n `TSone entry ${entry} must export an app with renderHtmlDocument()`\n );\n }\n\n return app.renderHtmlDocument(options);\n });\n}\n\nasync function withProjectDom<T>(callback: () => Promise<T>): Promise<T> {\n const task = projectDomQueue.then(() => runWithProjectDom(callback));\n projectDomQueue = task.then(\n () => undefined,\n () => undefined\n );\n\n return task;\n}\n\nasync function runWithProjectDom<T>(callback: () => Promise<T>): Promise<T> {\n const windowRef = createDomWindow({ url: 'http://127.0.0.1/' });\n Object.assign(windowRef, {\n Error,\n EvalError,\n RangeError,\n ReferenceError,\n SyntaxError,\n TypeError,\n URIError,\n });\n const descriptors = captureGlobalDescriptors();\n\n try {\n installDomGlobals(windowRef);\n return await callback();\n } finally {\n restoreGlobalDescriptors(descriptors);\n }\n}\n\nlet projectEntrySequence = 0;\n\nasync function importProjectEntry(entry: string): Promise<ProjectEntryModule> {\n projectEntrySequence += 1;\n return (await import(\n `${entry}?tsone_entry=${projectEntrySequence}`\n )) as ProjectEntryModule;\n}\n\nfunction captureGlobalDescriptors(): GlobalDescriptorMap {\n return new Map(\n PROJECT_GLOBAL_KEYS.map((key) => [\n key,\n Object.getOwnPropertyDescriptor(globalThis, key),\n ])\n );\n}\n\nfunction restoreGlobalDescriptors(descriptors: GlobalDescriptorMap): void {\n PROJECT_GLOBAL_KEYS.forEach((key) => {\n const descriptor = descriptors.get(key);\n if (descriptor) {\n Object.defineProperty(globalThis, key, descriptor);\n return;\n }\n\n delete (globalThis as Record<string, unknown>)[key];\n });\n}\n",
|
|
10
|
-
"import { lstat, realpath } from 'node:fs/promises';\nimport { dirname, isAbsolute, relative, resolve, sep } from 'node:path';\n\nexport async function assertSafeSubdirectory(\n root: string,\n path: string,\n errorMessage: string\n): Promise<void> {\n try {\n const canonicalRoot = await realpath(root);\n const canonicalPath = await canonicalizePotentialPath(path);\n\n if (!isStrictSubdirectory(canonicalRoot, canonicalPath)) {\n throw new Error(errorMessage);\n }\n } catch {\n throw new Error(errorMessage);\n }\n}\n\nexport async function assertSafeSubdirectoryDoesNotContain(\n root: string,\n path: string,\n protectedPath: string,\n errorMessage: string\n): Promise<void> {\n try {\n const lexicalPath = resolve(path);\n const lexicalProtectedPath = resolve(protectedPath);\n const canonicalRoot = await realpath(root);\n const canonicalPath = await canonicalizePotentialPath(path);\n const canonicalProtectedPath = await realpath(protectedPath);\n\n if (\n !isStrictSubdirectory(canonicalRoot, canonicalPath) ||\n isPathWithinOrEqual(lexicalPath, lexicalProtectedPath) ||\n isPathWithinOrEqual(canonicalPath, canonicalProtectedPath)\n ) {\n throw new Error(errorMessage);\n }\n } catch {\n throw new Error(errorMessage);\n }\n}\n\nasync function canonicalizePotentialPath(path: string): Promise<string> {\n const ancestor = await findExistingAncestor(path);\n const canonicalAncestor = await realpath(ancestor);\n return resolve(canonicalAncestor, relative(ancestor, path));\n}\n\nasync function findExistingAncestor(path: string): Promise<string> {\n let candidate = path;\n\n while (candidate !== dirname(candidate)) {\n try {\n await lstat(candidate);\n return candidate;\n } catch (error: unknown) {\n if (!isMissingPathError(error)) {\n throw error;\n }\n }\n\n candidate = dirname(candidate);\n }\n\n await lstat(candidate);\n return candidate;\n}\n\nfunction isMissingPathError(error: unknown): boolean {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'code' in error &&\n error.code === 'ENOENT'\n );\n}\n\nfunction isStrictSubdirectory(root: string, path: string): boolean {\n const pathFromRoot = relative(root, path);\n return (\n pathFromRoot !== '' &&\n pathFromRoot !== '..' &&\n !pathFromRoot.startsWith(`..${sep}`) &&\n !isAbsolute(pathFromRoot)\n );\n}\n\nfunction isPathWithinOrEqual(parent: string, candidate: string): boolean {\n const pathFromParent = relative(parent, candidate);\n return (\n pathFromParent === '' ||\n (pathFromParent !== '..' &&\n !pathFromParent.startsWith(`..${sep}`) &&\n !isAbsolute(pathFromParent))\n );\n}\n",
|
|
11
|
-
"import { randomUUID } from 'node:crypto';\nimport {\n basename,\n extname,\n isAbsolute,\n relative,\n resolve,\n sep,\n} from 'node:path';\nimport { isEntryJavaScriptOutput, isStylesheetOutput } from './build-output';\nimport { resolveConfig } from './config';\nimport { renderProjectHtml } from './project';\nimport { createProxyHandler } from './proxy';\nimport { assertSafeSubdirectory } from './safe-path';\nimport { createFileWatcher, type FileWatcher } from './watch';\nimport type { ResolveConfigOptions, ResolvedConfig } from './types';\n\nconst DEVELOPMENT_URL_PREFIX = '/dev';\nconst INVALID_DEVELOPMENT_DIRECTORY_MESSAGE =\n 'Development output must be a subdirectory of the project root';\nconst LIVE_RELOAD_PATH = '/__tsone/reload';\nconst WATCHED_EXTENSIONS = new Set([\n '.ts',\n '.js',\n '.mjs',\n '.cjs',\n '.json',\n '.css',\n '.html',\n]);\nconst IGNORED_WATCH_SEGMENTS = new Set([\n '.tsone',\n 'node_modules',\n '.git',\n '.worktrees',\n]);\nconst LIVE_RELOAD_CLIENT_SCRIPT = [\n '<script type=\"module\">',\n 'const tsoneReloadSource=new EventSource(',\n JSON.stringify(LIVE_RELOAD_PATH),\n ');',\n 'tsoneReloadSource.addEventListener(\"reload\",()=>location.reload());',\n '</script>',\n].join('');\n\ntype DevServer = ReturnType<typeof Bun.serve>;\n\nexport interface StartDevServerOptions extends ResolveConfigOptions {\n watch?: boolean;\n}\n\nexport async function startDevServer(\n options: StartDevServerOptions = {}\n): Promise<DevServer> {\n if (options.watch) {\n return startWatchingDevServer(options);\n }\n const instance = await createServerInstance(options, false);\n return instance.server;\n}\n\nasync function startWatchingDevServer(\n options: StartDevServerOptions\n): Promise<DevServer> {\n let instance = await createServerInstance(options, true);\n let watcher = createProjectWatcher(instance, onChange);\n\n async function onChange(changedPath: string): Promise<void> {\n const configFile = instance.config.configFile;\n const configRelativePath =\n configFile === undefined\n ? undefined\n : toRelativePath(instance.config.root, configFile);\n if (configRelativePath === changedPath) {\n await restart();\n return;\n }\n await rebuildAndReload();\n }\n\n async function rebuildAndReload(): Promise<void> {\n const routes = Object.keys(instance.config.pages);\n instance.markDirty(routes);\n for (const route of routes) {\n const bundle = await instance.getBundle(route);\n if (bundle instanceof Response) {\n console.error('TSone rebuild failed; keeping the last working page.');\n return;\n }\n }\n instance.liveReload?.broadcast();\n }\n\n async function restart(): Promise<void> {\n watcher.dispose();\n instance.server.stop(true);\n instance = await createServerInstance(options, true);\n watcher = createProjectWatcher(instance, onChange);\n console.log(\n `TSone dev server restarted at http://${instance.server.hostname}:${instance.server.port}`\n );\n }\n\n return createServerHandle(\n () => instance,\n () => watcher.dispose()\n );\n}\n\nfunction createProjectWatcher(\n instance: DevServerInstance,\n onChange: (changedPath: string) => Promise<void>\n): FileWatcher {\n return createFileWatcher({\n root: instance.config.root,\n isRelevant: (relativePath) => isWatchedFile(instance, relativePath),\n onChange: (changedPath) => {\n void onChange(changedPath);\n },\n });\n}\n\ninterface DevServerInstance {\n server: DevServer;\n config: ResolvedConfig;\n getBundle: (route: string) => Promise<DevelopmentBundle | Response>;\n markDirty: (routes: string[]) => void;\n liveReload: LiveReloadHub | undefined;\n}\n\nasync function createServerInstance(\n options: StartDevServerOptions,\n watch: boolean\n): Promise<DevServerInstance> {\n const config = await resolveConfig(options);\n for (const entry of Object.values(config.pages)) {\n await renderProjectHtml(config, {}, entry);\n }\n const developmentOutDir = resolve(config.root, '.tsone', 'dev');\n await assertSafeSubdirectory(\n config.root,\n developmentOutDir,\n INVALID_DEVELOPMENT_DIRECTORY_MESSAGE\n );\n const proxy = createProxyHandler(config.server.proxy);\n const sessionId = createGenerationId();\n const sessionOutDir = resolve(developmentOutDir, sessionId);\n const artifacts = new Map<string, DevelopmentOutput>();\n const buildProject = createDevelopmentBuilder(\n config,\n sessionId,\n sessionOutDir\n );\n const liveReload = watch ? createLiveReloadHub() : undefined;\n const bundles = new Map<string, DevelopmentBundle>();\n const dirtyRoutes = new Set<string>();\n\n const getBundle = async (\n route: string\n ): Promise<DevelopmentBundle | Response> => {\n const cached = bundles.get(route);\n if (watch && cached !== undefined && !dirtyRoutes.has(route)) {\n return cached;\n }\n const bundle = await buildProject(route);\n if (bundle instanceof Response) {\n if (watch) {\n dirtyRoutes.add(route);\n }\n return bundle;\n }\n if (watch) {\n bundles.set(route, bundle);\n dirtyRoutes.delete(route);\n }\n return bundle;\n };\n\n const server = Bun.serve({\n hostname: config.server.host,\n port: config.server.port,\n fetch: async (request) => {\n const reloadResponse = liveReload?.handleRequest(request);\n if (reloadResponse) {\n return reloadResponse;\n }\n return (\n (await proxy(request)) ??\n serveProjectRequest(\n request,\n config,\n config.pages,\n getBundle,\n artifacts,\n liveReload\n )\n );\n },\n });\n\n return {\n server,\n config,\n getBundle,\n markDirty: (routes) => {\n routes.forEach((route) => dirtyRoutes.add(route));\n },\n liveReload,\n };\n}\n\nfunction createServerHandle(\n getInstance: () => DevServerInstance,\n disposeWatcher: () => void\n): DevServer {\n return new Proxy({} as DevServer, {\n get(_target, property) {\n if (property === 'stop') {\n return (closeActiveConnections?: boolean) => {\n disposeWatcher();\n getInstance().server.stop(closeActiveConnections);\n };\n }\n const server = getInstance().server as unknown as Record<\n PropertyKey,\n unknown\n >;\n const value = server[property];\n return typeof value === 'function'\n ? (value as (...args: unknown[]) => unknown).bind(server)\n : value;\n },\n });\n}\n\nasync function serveProjectRequest(\n request: Request,\n config: ResolvedConfig,\n pages: Record<string, string>,\n getBundle: (route: string) => Promise<DevelopmentBundle | Response>,\n artifacts: Map<string, DevelopmentOutput>,\n liveReload: LiveReloadHub | undefined\n): Promise<Response> {\n const pathname = new URL(request.url).pathname;\n const route = pageRouteForPathname(pages, pathname);\n\n if (route !== undefined) {\n const bundle = await getBundle(route);\n if (bundle instanceof Response) {\n return bundle;\n }\n\n try {\n const html = await renderProjectHtml(\n config,\n {\n head: bundle.stylesheets.map(({ pathname: href }) => ({\n tag: 'link',\n attributes: { rel: 'stylesheet', href },\n })),\n scripts: [{ type: 'module', src: bundle.entry.pathname }],\n },\n pages[route]\n );\n publishDevelopmentBundle(bundle, artifacts);\n return new Response(liveReload ? injectLiveReloadScript(html) : html, {\n headers: {\n 'content-type': 'text/html; charset=utf-8',\n 'cache-control': 'no-store',\n },\n });\n } catch (error: unknown) {\n console.error(error);\n return buildFailureResponse();\n }\n }\n\n if (pathname === '/bundle.js') {\n const bundle = await getBundle('/');\n if (bundle instanceof Response) {\n return bundle;\n }\n\n try {\n publishDevelopmentBundle(bundle, artifacts);\n return new Response(null, {\n status: 307,\n headers: {\n location: bundle.entry.pathname,\n 'cache-control': 'no-store',\n },\n });\n } catch (error: unknown) {\n console.error(error);\n return buildFailureResponse();\n }\n }\n\n const artifact = artifacts.get(pathname);\n if (artifact) {\n return new Response(Bun.file(artifact.filePath), {\n headers: {\n 'content-type': artifact.type,\n 'cache-control': 'no-store',\n },\n });\n }\n\n return new Response('Not found', {\n status: 404,\n headers: { 'cache-control': 'no-store' },\n });\n}\n\nfunction pageRouteForPathname(\n pages: Record<string, string>,\n pathname: string\n): string | undefined {\n if (pages[pathname] !== undefined) {\n return pathname;\n }\n if (pathname === '/index.html') {\n return '/';\n }\n const candidate =\n pathname.length > 1 && pathname.endsWith('/')\n ? pathname.replace(/\\/+$/, '')\n : pathname;\n if (pages[candidate] !== undefined) {\n return candidate;\n }\n if (candidate.endsWith('/index.html')) {\n const base = candidate.slice(0, candidate.length - '/index.html'.length);\n if (base === '') {\n return '/';\n }\n if (pages[base] !== undefined) {\n return base;\n }\n }\n return undefined;\n}\n\nfunction injectLiveReloadScript(html: string): string {\n if (html.includes(LIVE_RELOAD_PATH)) {\n return html;\n }\n if (html.includes('</body>')) {\n return html.replace('</body>', `${LIVE_RELOAD_CLIENT_SCRIPT}</body>`);\n }\n return html + LIVE_RELOAD_CLIENT_SCRIPT;\n}\n\ninterface LiveReloadHub {\n handleRequest(request: Request): Response | undefined;\n broadcast(): void;\n}\n\nconst reloadEncoder = new TextEncoder();\n\nfunction createLiveReloadHub(): LiveReloadHub {\n const controllers = new Set<ReadableStreamDefaultController<Uint8Array>>();\n\n function handleRequest(request: Request): Response | undefined {\n if (new URL(request.url).pathname !== LIVE_RELOAD_PATH) {\n return undefined;\n }\n\n let streamController:\n | ReadableStreamDefaultController<Uint8Array>\n | undefined;\n const stream = new ReadableStream<Uint8Array>({\n start: (controller) => {\n streamController = controller;\n controllers.add(controller);\n try {\n controller.enqueue(reloadEncoder.encode(': connected\\n\\n'));\n } catch {\n controllers.delete(controller);\n }\n },\n cancel: () => {\n if (streamController) {\n controllers.delete(streamController);\n }\n },\n });\n\n return new Response(stream, {\n headers: {\n 'content-type': 'text/event-stream',\n 'cache-control': 'no-store',\n },\n });\n }\n\n function broadcast(): void {\n const message = reloadEncoder.encode('event: reload\\ndata: {}\\n\\n');\n for (const controller of [...controllers]) {\n try {\n controller.enqueue(message);\n } catch {\n controllers.delete(controller);\n }\n }\n }\n\n return { handleRequest, broadcast };\n}\n\nfunction isWatchedFile(\n instance: DevServerInstance,\n relativePath: string\n): boolean {\n if (relativePath === '' || relativePath.startsWith('..')) {\n return false;\n }\n const segments = relativePath.split('/');\n if (segments.some((segment) => IGNORED_WATCH_SEGMENTS.has(segment))) {\n return false;\n }\n const absolutePath = resolve(instance.config.root, relativePath);\n if (isWithinOrEqual(instance.config.build.outDir, absolutePath)) {\n return false;\n }\n const base = basename(absolutePath);\n if (base.startsWith('.') && absolutePath !== instance.config.configFile) {\n return false;\n }\n return WATCHED_EXTENSIONS.has(extname(base).toLowerCase());\n}\n\nfunction toRelativePath(root: string, absolutePath: string): string {\n return relative(root, absolutePath).split(sep).join('/');\n}\n\nfunction isWithinOrEqual(parent: string, candidate: string): boolean {\n const pathFromParent = relative(parent, candidate);\n return (\n pathFromParent === '' ||\n (pathFromParent !== '..' &&\n !pathFromParent.startsWith(`..${sep}`) &&\n !isAbsolute(pathFromParent))\n );\n}\n\ninterface DevelopmentOutput {\n filePath: string;\n pathname: string;\n type: string;\n}\n\ninterface DevelopmentBundle {\n entry: DevelopmentOutput;\n stylesheets: DevelopmentOutput[];\n artifacts: ReadonlyMap<string, DevelopmentOutput>;\n}\n\nfunction createDevelopmentBuilder(\n config: ResolvedConfig,\n sessionId: string,\n sessionOutDir: string\n): (route: string) => Promise<DevelopmentBundle | Response> {\n let queue = Promise.resolve();\n\n return (route) => {\n const entry = config.pages[route];\n const result = queue.then(() =>\n buildProjectBundle(entry, sessionId, sessionOutDir)\n );\n queue = result.then(\n () => undefined,\n () => undefined\n );\n return result;\n };\n}\n\nasync function buildProjectBundle(\n entry: string,\n sessionId: string,\n sessionOutDir: string\n): Promise<DevelopmentBundle | Response> {\n const generationId = createGenerationId();\n const generationOutDir = resolve(sessionOutDir, generationId);\n const generationUrl = `${DEVELOPMENT_URL_PREFIX}/${sessionId}/${generationId}`;\n const buildOptions = {\n entrypoints: [entry],\n outdir: generationOutDir,\n target: 'browser' as const,\n format: 'esm' as const,\n sourcemap: 'inline' as const,\n write: true,\n throw: false,\n publicPath: `${generationUrl}/`,\n naming: {\n entry: '[name]-[hash].[ext]',\n chunk: '[name]-[hash].[ext]',\n asset: 'assets/[name]-[hash].[ext]',\n },\n };\n\n try {\n const result = await Bun.build(buildOptions);\n const entryArtifact = result.outputs.find(isEntryJavaScriptOutput);\n if (!result.success || !entryArtifact) {\n result.logs.forEach((log) => console.error(log));\n if (!entryArtifact) {\n console.error('Failed to build project bundle: no JavaScript output');\n }\n return buildFailureResponse();\n }\n\n const pendingArtifacts = new Map<string, DevelopmentOutput>();\n const outputs = new Map<\n Awaited<ReturnType<typeof Bun.build>>['outputs'][number],\n DevelopmentOutput\n >();\n\n for (const output of result.outputs) {\n const developmentOutput = createDevelopmentOutput(\n generationOutDir,\n generationUrl,\n output\n );\n if (pendingArtifacts.has(developmentOutput.pathname)) {\n throw new Error(\n `Development output URL collision: ${developmentOutput.pathname}`\n );\n }\n pendingArtifacts.set(developmentOutput.pathname, developmentOutput);\n outputs.set(output, developmentOutput);\n }\n\n const entry = outputs.get(entryArtifact);\n if (!entry) {\n throw new Error('Development entry output was not indexed');\n }\n\n return {\n entry,\n stylesheets: result.outputs\n .filter(isStylesheetOutput)\n .map((output) => outputs.get(output))\n .filter((output): output is DevelopmentOutput => output !== undefined),\n artifacts: pendingArtifacts,\n };\n } catch (error: unknown) {\n console.error(error);\n return buildFailureResponse();\n }\n}\n\nfunction publishDevelopmentBundle(\n bundle: DevelopmentBundle,\n artifacts: Map<string, DevelopmentOutput>\n): void {\n for (const [pathname, output] of bundle.artifacts) {\n const existing = artifacts.get(pathname);\n if (existing) {\n if (existing.filePath === output.filePath) {\n continue;\n }\n throw new Error(`Development output URL collision: ${pathname}`);\n }\n artifacts.set(pathname, output);\n }\n}\n\nfunction createDevelopmentOutput(\n generationOutDir: string,\n generationUrl: string,\n output: Awaited<ReturnType<typeof Bun.build>>['outputs'][number]\n): DevelopmentOutput {\n const filePath = resolve(output.path);\n const pathFromGeneration = relative(generationOutDir, filePath);\n if (\n pathFromGeneration === '' ||\n pathFromGeneration === '..' ||\n pathFromGeneration.startsWith(`..${sep}`) ||\n isAbsolute(pathFromGeneration)\n ) {\n throw new Error(\n `Development output must not escape outside its generation directory: ${output.path}`\n );\n }\n\n const urlPath = pathFromGeneration\n .split(sep)\n .map((segment) => encodeURIComponent(segment))\n .join('/');\n\n return {\n filePath,\n pathname: `${generationUrl}/${urlPath}`,\n type: output.type,\n };\n}\n\nfunction createGenerationId(): string {\n return randomUUID().replace(/-/g, '');\n}\n\nfunction buildFailureResponse(): Response {\n return new Response('Failed to build project bundle', {\n status: 500,\n headers: { 'cache-control': 'no-store' },\n });\n}\n",
|
|
12
|
-
"import type { ProxyOptions, ServerConfig } from './types';\n\nconst HOP_BY_HOP_HEADERS = new Set([\n 'connection',\n 'keep-alive',\n 'proxy-authenticate',\n 'proxy-authorization',\n 'te',\n 'trailer',\n 'transfer-encoding',\n 'upgrade',\n]);\n\ninterface ProxyRule {\n prefix: string;\n target: URL;\n changeOrigin: boolean;\n rewrite?: (path: string) => string;\n}\n\nexport function createProxyHandler(\n proxy: ServerConfig['proxy']\n): (request: Request) => Promise<Response | undefined> {\n const rules = Object.entries(proxy ?? {})\n .map(([prefix, options]) => toProxyRule(prefix, options))\n .sort((first, second) => second.prefix.length - first.prefix.length);\n\n return async (request) => {\n const sourceUrl = new URL(request.url);\n const rule = rules.find(({ prefix }) =>\n sourceUrl.pathname.startsWith(prefix)\n );\n\n if (!rule) {\n return undefined;\n }\n\n const target = createTargetUrl(rule, sourceUrl);\n const headers = createRequestHeaders(request, sourceUrl, rule, target);\n const body =\n request.method === 'GET' || request.method === 'HEAD'\n ? undefined\n : request.body;\n\n try {\n const upstream = await fetch(target, {\n method: request.method,\n headers,\n body,\n signal: request.signal,\n redirect: 'manual',\n });\n\n return new Response(upstream.body, {\n status: upstream.status,\n statusText: upstream.statusText,\n headers: filterHeaders(upstream.headers),\n });\n } catch {\n return new Response('Bad Gateway', { status: 502 });\n }\n };\n}\n\nfunction toProxyRule(prefix: string, value: string | ProxyOptions): ProxyRule {\n const options = typeof value === 'string' ? { target: value } : value;\n\n return {\n prefix,\n target: new URL(options.target),\n changeOrigin: options.changeOrigin ?? false,\n ...(options.rewrite === undefined ? {} : { rewrite: options.rewrite }),\n };\n}\n\nfunction createTargetUrl(rule: ProxyRule, sourceUrl: URL): URL {\n const target = new URL(rule.target);\n const pathname = rule.rewrite?.(sourceUrl.pathname) ?? sourceUrl.pathname;\n\n target.pathname = joinPathnames(target.pathname, pathname);\n target.search = sourceUrl.search;\n return target;\n}\n\nfunction joinPathnames(basePathname: string, pathname: string): string {\n const base = basePathname === '/' ? '' : basePathname.replace(/\\/+$/, '');\n const path = pathname.startsWith('/') ? pathname : `/${pathname}`;\n\n return `${base}${path}` || '/';\n}\n\nfunction createRequestHeaders(\n request: Request,\n sourceUrl: URL,\n rule: ProxyRule,\n target: URL\n): Headers {\n const headers = filterHeaders(request.headers);\n const incomingHost = request.headers.get('host') ?? sourceUrl.host;\n\n headers.set('host', rule.changeOrigin ? target.host : incomingHost);\n return headers;\n}\n\nfunction filterHeaders(source: Headers): Headers {\n const headers = new Headers(source);\n const connection = headers.get('connection');\n\n if (connection) {\n connection.split(',').forEach((header) => {\n const name = header.trim();\n if (name) {\n headers.delete(name);\n }\n });\n }\n\n HOP_BY_HOP_HEADERS.forEach((header) => headers.delete(header));\n return headers;\n}\n",
|
|
13
|
-
"import { watch, type FSWatcher } from 'node:fs';\nimport { readdir, stat } from 'node:fs/promises';\nimport { isAbsolute, join, relative } from 'node:path';\n\nconst RECURSIVE_WATCH_UNSUPPORTED_ERROR = 'ERR_FEATURE_UNAVAILABLE_ON_PLATFORM';\nconst DEFAULT_DEBOUNCE_MS = 100;\nconst DEFAULT_POLL_INTERVAL_MS = 300;\n\nexport interface FileWatcherOptions {\n root: string;\n isRelevant: (relativePath: string) => boolean;\n onChange: (changedPath: string) => void;\n debounceMs?: number;\n pollIntervalMs?: number;\n}\n\nexport interface FileWatcher {\n dispose: () => void;\n}\n\nexport function createFileWatcher(options: FileWatcherOptions): FileWatcher {\n const debounceMs = options.debounceMs ?? DEFAULT_DEBOUNCE_MS;\n let timer: ReturnType<typeof setTimeout> | undefined;\n const disposers: Array<() => void> = [];\n\n const scheduleChange = (relativePath: string): void => {\n if (timer) {\n clearTimeout(timer);\n }\n timer = setTimeout(() => {\n timer = undefined;\n options.onChange(relativePath);\n }, debounceMs);\n };\n\n disposers.push(() => {\n if (timer) {\n clearTimeout(timer);\n }\n });\n\n const nativeWatcher = tryCreateNativeWatcher(\n options.root,\n options.isRelevant,\n scheduleChange\n );\n if (nativeWatcher) {\n disposers.push(nativeWatcher);\n } else {\n disposers.push(\n createPollingWatcher(\n options.root,\n options.isRelevant,\n options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS,\n scheduleChange\n )\n );\n }\n\n return {\n dispose: () => {\n disposers.splice(0).reverse().forEach((dispose) => dispose());\n },\n };\n}\n\nfunction tryCreateNativeWatcher(\n root: string,\n isRelevant: (relativePath: string) => boolean,\n onRelevantChange: (relativePath: string) => void\n): (() => void) | undefined {\n let watcher: FSWatcher;\n try {\n watcher = watch(root, { recursive: true }, (_event, filename) => {\n if (typeof filename !== 'string') {\n return;\n }\n const relativePath = toRelativePath(root, filename);\n if (relativePath === undefined || !isRelevant(relativePath)) {\n return;\n }\n onRelevantChange(relativePath);\n });\n } catch (error: unknown) {\n if (isRecursiveWatchUnsupported(error)) {\n return undefined;\n }\n throw error;\n }\n\n return () => watcher.close();\n}\n\nfunction createPollingWatcher(\n root: string,\n isRelevant: (relativePath: string) => boolean,\n intervalMs: number,\n onRelevantChange: (relativePath: string) => void\n): () => void {\n let running = true;\n let snapshot = new Map<string, FileSnapshot>();\n let timer: ReturnType<typeof setInterval> | undefined;\n\n const scan = async (): Promise<void> => {\n if (!running) {\n return;\n }\n const next = new Map<string, FileSnapshot>();\n try {\n await collectRelevantFiles(root, isRelevant, next);\n } catch {\n return;\n }\n\n let changedPath: string | undefined;\n for (const [relativePath, snapshotEntry] of next) {\n const previous = snapshot.get(relativePath);\n if (\n !previous ||\n previous.mtimeMs !== snapshotEntry.mtimeMs ||\n previous.size !== snapshotEntry.size\n ) {\n changedPath = relativePath;\n break;\n }\n }\n if (changedPath === undefined) {\n for (const relativePath of snapshot.keys()) {\n if (!next.has(relativePath)) {\n changedPath = relativePath;\n break;\n }\n }\n }\n snapshot = next;\n if (changedPath !== undefined) {\n onRelevantChange(changedPath);\n }\n };\n\n void scan();\n timer = setInterval(() => {\n void scan();\n }, intervalMs);\n if (typeof timer.unref === 'function') {\n timer.unref();\n }\n\n return () => {\n running = false;\n if (timer) {\n clearInterval(timer);\n }\n };\n}\n\ninterface FileSnapshot {\n mtimeMs: number;\n size: number;\n}\n\nasync function collectRelevantFiles(\n root: string,\n isRelevant: (relativePath: string) => boolean,\n output: Map<string, FileSnapshot>\n): Promise<void> {\n const pendingDirectories = [''];\n while (pendingDirectories.length > 0) {\n const relativeDirectory = pendingDirectories.pop();\n if (relativeDirectory === undefined) {\n break;\n }\n const absoluteDirectory = join(root, relativeDirectory);\n let entries;\n try {\n entries = await readdir(absoluteDirectory, { withFileTypes: true });\n } catch {\n continue;\n }\n\n for (const entry of entries) {\n const relativePath =\n relativeDirectory === '' ? entry.name : `${relativeDirectory}/${entry.name}`;\n if (entry.isDirectory()) {\n pendingDirectories.push(relativePath);\n continue;\n }\n if (!entry.isFile() || !isRelevant(relativePath)) {\n continue;\n }\n try {\n const info = await stat(join(root, relativePath));\n output.set(relativePath, { mtimeMs: info.mtimeMs, size: info.size });\n } catch {\n // The file vanished while the tree was being scanned.\n }\n }\n }\n}\n\nfunction toRelativePath(root: string, filename: string): string | undefined {\n const relativePath = isAbsolute(filename)\n ? relative(root, filename)\n : filename.split('\\\\').join('/');\n if (relativePath === '' || relativePath === '..' || relativePath.startsWith('../')) {\n return undefined;\n }\n return relativePath.split('\\\\').join('/');\n}\n\nfunction isRecursiveWatchUnsupported(error: unknown): boolean {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'code' in error &&\n error.code === RECURSIVE_WATCH_UNSUPPORTED_ERROR\n );\n}\n"
|
|
14
|
-
],
|
|
15
|
-
"mappings": "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",
|
|
16
|
-
"debugId": "41EA177E876A562564756E2164756E21",
|
|
17
|
-
"names": []
|
|
18
|
-
}
|