@vobs/vobs 1.2.2 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/jsx.d.ts +132 -0
- package/package.json +7 -4
- package/src/index.ts +1 -0
- package/src/jsx.d.ts +37 -2
package/dist/index.cjs
CHANGED
|
@@ -52,6 +52,7 @@ __export(src_exports, {
|
|
|
52
52
|
getRenderer: () => import_runtime7.getRenderer,
|
|
53
53
|
getRuntimeDebugContext: () => import_runtime6.getRuntimeDebugContext,
|
|
54
54
|
getRuntimeDebugHooks: () => import_runtime6.getRuntimeDebugHooks,
|
|
55
|
+
hmrStateRef: () => import_runtime13.hmrStateRef,
|
|
55
56
|
inject: () => inject,
|
|
56
57
|
injectRequired: () => injectRequired,
|
|
57
58
|
insertAsyncBoundary: () => import_runtime16.insertAsyncBoundary,
|
|
@@ -373,6 +374,7 @@ var Vobs = { Fragment };
|
|
|
373
374
|
getRenderer,
|
|
374
375
|
getRuntimeDebugContext,
|
|
375
376
|
getRuntimeDebugHooks,
|
|
377
|
+
hmrStateRef,
|
|
376
378
|
inject,
|
|
377
379
|
injectRequired,
|
|
378
380
|
insertAsyncBoundary,
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/app.ts","../src/context.ts","../src/jsx-dev-runtime.ts"],"sourcesContent":["/// <reference path=\"./jsx.d.ts\" />\n\nexport * from '@vobs/reactivity'\nexport { createDOMRenderer } from '@vobs/dom'\nexport type { VobsRenderer } from '@vobs/runtime'\nexport {\n getRuntimeDebugContext,\n getRuntimeDebugHooks,\n pushRuntimeDebugContext,\n runWithRuntimeDebugContext,\n setRuntimeDebugHooks\n} from '@vobs/runtime'\nexport type {\n RuntimeDebugContext,\n RuntimeDebugEnvironment,\n RuntimeDebugHooks,\n RuntimeDomMutation,\n RuntimeDomMutationOperation,\n RuntimeErrorEvent,\n RuntimeHydrationMismatch\n} from '@vobs/runtime'\nexport {\n setRenderer,\n getRenderer,\n createText,\n createElement,\n createComment,\n insertBefore,\n removeChild,\n setTextContent,\n setProperty,\n setAttribute,\n setStaticProps,\n spreadProps,\n addEventListener,\n removeEventListener,\n clear,\n createComponent,\n createFragment,\n isVobsFragment,\n disposeNodeOwner\n} from '@vobs/runtime'\nexport type { FragmentFactory, VobsFragment, VobsNode } from '@vobs/runtime'\nexport { bindText, bindAttribute, bindProperty } from '@vobs/runtime'\nexport type { ValueSource } from '@vobs/runtime'\nexport { ref, setRef } from '@vobs/runtime'\nexport type { Ref, RefTarget } from '@vobs/runtime'\nexport { insertDynamic, insertDynamicValue, insertList, normalizeDynamicChild } from '@vobs/runtime'\nexport type { DynamicChild, NodeFactory } from '@vobs/runtime'\nexport { createTemplate, cloneTemplate } from '@vobs/runtime'\nexport type { VobsLocatedError, VobsSourceLocation } from '@vobs/runtime'\nexport {\n VobsError,\n createVobsError,\n formatVobsError,\n isVobsError,\n normalizeVobsError\n} from '@vobs/runtime'\nexport type {\n FormatVobsErrorOptions,\n VobsErrorDefaults,\n VobsErrorLayer,\n VobsErrorLocation,\n VobsErrorOptions,\n VobsErrorSeverity\n} from '@vobs/runtime'\nexport {\n createHmrStateStore,\n disposeHmrModule,\n resolveComponent,\n updateHmrModule\n} from '@vobs/runtime'\nexport type { HmrComponent, HmrInstance, HmrStateStore } from '@vobs/runtime'\nexport { insertErrorBoundary } from '@vobs/runtime'\nexport { ErrorBoundary, insertBoundary } from '@vobs/runtime'\nexport type { BoundaryFallback, BoundaryOptions, BoundaryRetry, ErrorBoundaryFallback, ErrorBoundaryOptions, ErrorBoundaryProps } from '@vobs/runtime'\nexport { AsyncBoundary, insertAsyncBoundary, Profiler, insertProfiler } from '@vobs/runtime'\nexport type { AsyncBoundaryFallback, AsyncBoundaryOptions, AsyncBoundaryProps, AsyncBoundaryView, ProfilerOptions, ProfilerProps, ProfilerRenderInfo } from '@vobs/runtime'\nexport { createVobs, createInjectionKey } from './app'\nexport { Fragment, Vobs } from './jsx-dev-runtime'\nexport { provide, inject, injectRequired } from './context'\nexport type {\n InjectionKey,\n ProvideOptions,\n VobsApp,\n VobsConfig,\n VobsPlugin,\n VobsContext\n} from './app'\n","import { createOwner, scheduler, setOwnerDebugName, type Owner } from '@vobs/reactivity'\nimport { createDOMRenderer } from '@vobs/dom'\nimport { insertBefore as insertRuntimeNode, setRenderer, type VobsFragment, type VobsRenderer } from '@vobs/runtime'\nimport { injectFromOwner, provideToOwner } from './context'\n\nexport type InjectionKey<T> = symbol & {\n readonly __vobsType?: T\n}\n\nexport interface ProvideOptions {\n override?: boolean\n}\n\nexport interface VobsPlugin {\n name: string\n version?: string\n requires?: readonly VobsPlugin[]\n optional?: readonly VobsPlugin[]\n install?: (ctx: VobsContext) => void | (() => void)\n}\n\nexport interface VobsContext {\n readonly app: VobsApp\n provide<T>(key: InjectionKey<T>, value: T, options?: ProvideOptions): void\n inject<T>(key: InjectionKey<T>): T | undefined\n injectRequired<T>(key: InjectionKey<T>, description?: string): T\n onDestroy(cleanup: () => void): void\n onError(handler: (error: unknown) => void): () => void\n}\n\nexport interface VobsConfig<\n NodeType = Node,\n TextNode extends NodeType = NodeType,\n ElementNode extends NodeType = NodeType,\n CommentNode extends NodeType = NodeType\n> {\n render: () => NodeType | VobsFragment | Node | null | undefined\n renderer?: VobsRenderer<NodeType, TextNode, ElementNode, CommentNode>\n plugins?: VobsPlugin[]\n /** Optional application-level error observer. Observers are isolated from the app. */\n onError?: (error: unknown) => void\n}\n\nexport interface VobsApp<NodeType = Node> {\n readonly mounted: boolean\n readonly destroyed: boolean\n use(plugin: VobsPlugin): VobsApp<NodeType>\n mount(target: string | NodeType): void\n hydrate(target: string | NodeType): void\n update(): void\n destroy(): void\n}\n\nexport function createInjectionKey<T>(description: string): InjectionKey<T> {\n return Symbol(description) as InjectionKey<T>\n}\n\nexport function createVobs(\n config: VobsConfig<Node, Text, Element, Comment>\n): VobsApp<Node>\nexport function createVobs<\n NodeType = Node,\n TextNode extends NodeType = NodeType,\n ElementNode extends NodeType = NodeType,\n CommentNode extends NodeType = NodeType\n>(\n config: VobsConfig<NodeType, TextNode, ElementNode, CommentNode> & {\n renderer: VobsRenderer<NodeType, TextNode, ElementNode, CommentNode>\n }\n): VobsApp<NodeType>\nexport function createVobs(\n config: VobsConfig<any, any, any, any>\n): VobsApp<any> {\n if (!config.render) throw new Error('createVobs: render 不能为空')\n\n const renderer = config.renderer ?? createDOMRenderer()\n const rootOwner: Owner = createOwner()\n setOwnerDebugName(rootOwner, 'App')\n const cleanups: Array<() => void> = []\n const errorHandlers = new Set<(error: unknown) => void>()\n const installed = new Set<string>()\n const installing = new Set<string>()\n let mounted = false\n let destroyed = false\n let container: any = null\n let app!: VobsApp<any>\n\n if (config.onError) {\n errorHandlers.add(config.onError)\n cleanups.push(() => errorHandlers.delete(config.onError!))\n }\n\n const context: VobsContext = {\n get app(): VobsApp<any> {\n return app\n },\n\n provide<T>(key: InjectionKey<T>, value: T, options: ProvideOptions = {}): void {\n provideToOwner(rootOwner, key, value, options)\n },\n\n inject<T>(key: InjectionKey<T>): T | undefined {\n return injectFromOwner(rootOwner, key)\n },\n\n injectRequired<T>(key: InjectionKey<T>, description?: string): T {\n const value = injectFromOwner(rootOwner, key)\n if (value === undefined) {\n throw new Error(`Vobs: 找不到必需注入项${description ? ` ${description}` : ''}`)\n }\n return value\n },\n\n onDestroy(cleanup: () => void): void {\n cleanups.push(cleanup)\n },\n\n onError(handler: (error: unknown) => void): () => void {\n errorHandlers.add(handler)\n const remove = () => errorHandlers.delete(handler)\n cleanups.push(remove)\n return remove\n }\n }\n\n function notifyError(error: unknown): void {\n for (const handler of [...errorHandlers]) {\n try {\n handler(error)\n } catch {\n // 错误处理器不能覆盖触发它的原始错误。\n }\n }\n }\n\n function installPlugin(plugin: VobsPlugin): void {\n if (installed.has(plugin.name)) return\n if (installing.has(plugin.name)) {\n throw new Error(`Vobs: 插件依赖存在循环:${plugin.name}`)\n }\n\n installing.add(plugin.name)\n try {\n for (const dependency of plugin.requires ?? []) installPlugin(dependency)\n const cleanup = plugin.install?.(context)\n if (cleanup) cleanups.push(cleanup)\n installed.add(plugin.name)\n } finally {\n installing.delete(plugin.name)\n }\n }\n\n function cleanup(clearContainer = true): unknown {\n let firstError: unknown\n for (let index = cleanups.length - 1; index >= 0; index--) {\n try {\n cleanups[index]()\n } catch (error) {\n firstError ??= error\n }\n }\n cleanups.length = 0\n\n try {\n rootOwner.dispose()\n } catch (error) {\n firstError ??= error\n }\n\n if (container && clearContainer) {\n try {\n renderer.clear(container)\n } catch (error) {\n firstError ??= error\n }\n }\n return firstError\n }\n\n function start(target: string | any, hydrating: boolean): void {\n if (destroyed) throw new Error('Vobs: 已销毁的应用不能挂载')\n if (mounted) return\n\n container = typeof target === 'string' ? document.querySelector(target) : target\n if (!container) throw new Error(`mount: 目标不存在: ${target}`)\n if (hydrating && !renderer.beginHydration) {\n throw new Error('Vobs: 当前渲染器不支持 Hydration')\n }\n\n setRenderer(renderer)\n try {\n if (hydrating) renderer.beginHydration?.()\n const rootNode = rootOwner.run(config.render)\n if (!hydrating) renderer.clear(container)\n if (rootNode) insertRuntimeNode(container, rootNode as any, null)\n if (hydrating) renderer.completeHydration?.()\n mounted = true\n } catch (error) {\n notifyError(error)\n const cleanupError = cleanup(!hydrating)\n destroyed = true\n throw cleanupError ?? error\n }\n }\n\n app = {\n get mounted(): boolean {\n return mounted\n },\n\n get destroyed(): boolean {\n return destroyed\n },\n\n use(plugin: VobsPlugin): VobsApp<any> {\n if (destroyed) throw new Error('Vobs: 已销毁的应用不能安装插件')\n installPlugin(plugin)\n return app\n },\n\n mount(target: string | any): void {\n start(target, false)\n },\n\n hydrate(target: string | any): void {\n start(target, true)\n },\n\n update(): void {\n if (destroyed) throw new Error('Vobs: 已销毁的应用不能更新')\n try {\n scheduler.flush()\n } catch (error) {\n notifyError(error)\n throw error\n }\n },\n\n destroy(): void {\n if (destroyed) return\n try {\n const cleanupError = cleanup()\n if (cleanupError) {\n notifyError(cleanupError)\n throw cleanupError\n }\n } finally {\n mounted = false\n destroyed = true\n }\n }\n }\n\n try {\n for (const plugin of config.plugins ?? []) app.use(plugin)\n } catch (error) {\n notifyError(error)\n cleanup()\n destroyed = true\n throw error\n }\n\n return app\n}\n","import { getCurrentOwner, type Owner } from '@vobs/reactivity'\nimport type { InjectionKey, ProvideOptions } from './app'\n\nconst ownerProviders = new WeakMap<Owner, Map<InjectionKey<unknown>, unknown>>()\n\nexport function provide<T>(key: InjectionKey<T>, value: T, options: ProvideOptions = {}): void {\n const owner = getCurrentOwner()\n if (!owner) throw new Error('Vobs: provide 必须在组件或 Owner 作用域内调用')\n provideToOwner(owner, key, value, options)\n}\n\nexport function inject<T>(key: InjectionKey<T>): T | undefined\nexport function inject<T>(key: InjectionKey<T>, fallback: T): T\nexport function inject<T>(key: InjectionKey<T>, fallback?: T): T | undefined {\n const owner = getCurrentOwner()\n const value = owner ? injectFromOwner(owner, key) : undefined\n return value === undefined ? fallback : value\n}\n\nexport function injectRequired<T>(key: InjectionKey<T>, description?: string): T {\n const value = inject(key)\n if (value === undefined) {\n throw new Error(`Vobs: 找不到必需注入项${description ? ` ${description}` : ''}`)\n }\n return value\n}\n\nexport function provideToOwner<T>(\n owner: Owner,\n key: InjectionKey<T>,\n value: T,\n options: ProvideOptions = {}\n): void {\n let providers = ownerProviders.get(owner)\n if (!providers) {\n providers = new Map<InjectionKey<unknown>, unknown>()\n ownerProviders.set(owner, providers)\n owner.onDispose(() => ownerProviders.delete(owner))\n }\n if (providers.has(key) && !options.override) {\n throw new Error(`Vobs: 注入项 ${String(key)} 已存在;如需覆盖请传入 override: true`)\n }\n providers.set(key, value)\n}\n\nexport function injectFromOwner<T>(owner: Owner, key: InjectionKey<T>): T | undefined {\n let current: Owner | null = owner\n while (current) {\n const providers = ownerProviders.get(current)\n if (providers?.has(key)) return providers.get(key) as T\n current = current.parent\n }\n return undefined\n}\n","import {\n createComponent,\n createElement,\n createFragment,\n insertBefore,\n normalizeDynamicChild,\n spreadProps,\n type VobsNode\n} from '@vobs/runtime'\n\r\nexport function jsxDEV(\r\n tag: string | Function,\r\n props: Record<string, unknown> | null,\r\n _key?: unknown,\r\n _isStaticChildren?: boolean,\r\n _source?: unknown,\r\n _self?: unknown\r\n): VobsNode {\n if (typeof tag === 'function') {\n return createComponent(tag as (props: Record<string, unknown>) => VobsNode, props ?? {})\n }\r\n\r\n const { children, ...attrs } = props ?? {}\r\n\r\n const el = createElement(tag as string)\n\r\n spreadProps(el, attrs)\n\r\n appendChildren(el, children)\r\n\r\n return el\r\n}\r\n\r\nfunction appendChildren(parent: Node, children: unknown, anchor: Node | null = null): void {\n if (children === undefined || children === null) return\r\n\r\n const childArray = Array.isArray(children) ? children : [children]\r\n\r\n for (const child of childArray) {\r\n const node = normalizeDynamicChild(child as Parameters<typeof normalizeDynamicChild>[0])\n if (node) insertBefore(parent, node, anchor)\n }\r\n}\r\n\r\nexport function jsx(tag: string | Function, props: Record<string, unknown> | null): VobsNode {\n return jsxDEV(tag, props)\r\n}\r\n\r\nexport function jsxs(tag: string | Function, props: Record<string, unknown> | null): VobsNode {\n return jsxDEV(tag, props)\r\n}\r\n\r\nexport function Fragment(props: { children?: unknown }): VobsNode {\n return createFragment((parent, anchor) => appendChildren(parent, props?.children, anchor))\n}\n\n/** Namespace for explicit built-in JSX primitives such as <Vobs.Fragment>. */\nexport const Vobs = { Fragment }\n"],"mappings":"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","names":["import_dom","import_runtime","import_reactivity","import_runtime","cleanup","insertRuntimeNode","import_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/app.ts","../src/context.ts","../src/jsx-dev-runtime.ts"],"sourcesContent":["/// <reference path=\"./jsx.d.ts\" />\n\nexport * from '@vobs/reactivity'\nexport { createDOMRenderer } from '@vobs/dom'\nexport type { VobsRenderer } from '@vobs/runtime'\nexport {\n getRuntimeDebugContext,\n getRuntimeDebugHooks,\n pushRuntimeDebugContext,\n runWithRuntimeDebugContext,\n setRuntimeDebugHooks\n} from '@vobs/runtime'\nexport type {\n RuntimeDebugContext,\n RuntimeDebugEnvironment,\n RuntimeDebugHooks,\n RuntimeDomMutation,\n RuntimeDomMutationOperation,\n RuntimeErrorEvent,\n RuntimeHydrationMismatch\n} from '@vobs/runtime'\nexport {\n setRenderer,\n getRenderer,\n createText,\n createElement,\n createComment,\n insertBefore,\n removeChild,\n setTextContent,\n setProperty,\n setAttribute,\n setStaticProps,\n spreadProps,\n addEventListener,\n removeEventListener,\n clear,\n createComponent,\n createFragment,\n isVobsFragment,\n disposeNodeOwner\n} from '@vobs/runtime'\nexport type { FragmentFactory, VobsFragment, VobsNode } from '@vobs/runtime'\nexport { bindText, bindAttribute, bindProperty } from '@vobs/runtime'\nexport type { ValueSource } from '@vobs/runtime'\nexport { ref, setRef } from '@vobs/runtime'\nexport type { Ref, RefTarget } from '@vobs/runtime'\nexport { insertDynamic, insertDynamicValue, insertList, normalizeDynamicChild } from '@vobs/runtime'\nexport type { DynamicChild, NodeFactory } from '@vobs/runtime'\nexport { createTemplate, cloneTemplate } from '@vobs/runtime'\nexport type { VobsLocatedError, VobsSourceLocation } from '@vobs/runtime'\nexport {\n VobsError,\n createVobsError,\n formatVobsError,\n isVobsError,\n normalizeVobsError\n} from '@vobs/runtime'\nexport type {\n FormatVobsErrorOptions,\n VobsErrorDefaults,\n VobsErrorLayer,\n VobsErrorLocation,\n VobsErrorOptions,\n VobsErrorSeverity\n} from '@vobs/runtime'\nexport {\n createHmrStateStore,\n disposeHmrModule,\n hmrStateRef,\n resolveComponent,\n updateHmrModule\n} from '@vobs/runtime'\nexport type { HmrComponent, HmrInstance, HmrStateStore } from '@vobs/runtime'\nexport { insertErrorBoundary } from '@vobs/runtime'\nexport { ErrorBoundary, insertBoundary } from '@vobs/runtime'\nexport type { BoundaryFallback, BoundaryOptions, BoundaryRetry, ErrorBoundaryFallback, ErrorBoundaryOptions, ErrorBoundaryProps } from '@vobs/runtime'\nexport { AsyncBoundary, insertAsyncBoundary, Profiler, insertProfiler } from '@vobs/runtime'\nexport type { AsyncBoundaryFallback, AsyncBoundaryOptions, AsyncBoundaryProps, AsyncBoundaryView, ProfilerOptions, ProfilerProps, ProfilerRenderInfo } from '@vobs/runtime'\nexport { createVobs, createInjectionKey } from './app'\nexport { Fragment, Vobs } from './jsx-dev-runtime'\nexport { provide, inject, injectRequired } from './context'\nexport type {\n InjectionKey,\n ProvideOptions,\n VobsApp,\n VobsConfig,\n VobsPlugin,\n VobsContext\n} from './app'\n","import { createOwner, scheduler, setOwnerDebugName, type Owner } from '@vobs/reactivity'\nimport { createDOMRenderer } from '@vobs/dom'\nimport { insertBefore as insertRuntimeNode, setRenderer, type VobsFragment, type VobsRenderer } from '@vobs/runtime'\nimport { injectFromOwner, provideToOwner } from './context'\n\nexport type InjectionKey<T> = symbol & {\n readonly __vobsType?: T\n}\n\nexport interface ProvideOptions {\n override?: boolean\n}\n\nexport interface VobsPlugin {\n name: string\n version?: string\n requires?: readonly VobsPlugin[]\n optional?: readonly VobsPlugin[]\n install?: (ctx: VobsContext) => void | (() => void)\n}\n\nexport interface VobsContext {\n readonly app: VobsApp\n provide<T>(key: InjectionKey<T>, value: T, options?: ProvideOptions): void\n inject<T>(key: InjectionKey<T>): T | undefined\n injectRequired<T>(key: InjectionKey<T>, description?: string): T\n onDestroy(cleanup: () => void): void\n onError(handler: (error: unknown) => void): () => void\n}\n\nexport interface VobsConfig<\n NodeType = Node,\n TextNode extends NodeType = NodeType,\n ElementNode extends NodeType = NodeType,\n CommentNode extends NodeType = NodeType\n> {\n render: () => NodeType | VobsFragment | Node | null | undefined\n renderer?: VobsRenderer<NodeType, TextNode, ElementNode, CommentNode>\n plugins?: VobsPlugin[]\n /** Optional application-level error observer. Observers are isolated from the app. */\n onError?: (error: unknown) => void\n}\n\nexport interface VobsApp<NodeType = Node> {\n readonly mounted: boolean\n readonly destroyed: boolean\n use(plugin: VobsPlugin): VobsApp<NodeType>\n mount(target: string | NodeType): void\n hydrate(target: string | NodeType): void\n update(): void\n destroy(): void\n}\n\nexport function createInjectionKey<T>(description: string): InjectionKey<T> {\n return Symbol(description) as InjectionKey<T>\n}\n\nexport function createVobs(\n config: VobsConfig<Node, Text, Element, Comment>\n): VobsApp<Node>\nexport function createVobs<\n NodeType = Node,\n TextNode extends NodeType = NodeType,\n ElementNode extends NodeType = NodeType,\n CommentNode extends NodeType = NodeType\n>(\n config: VobsConfig<NodeType, TextNode, ElementNode, CommentNode> & {\n renderer: VobsRenderer<NodeType, TextNode, ElementNode, CommentNode>\n }\n): VobsApp<NodeType>\nexport function createVobs(\n config: VobsConfig<any, any, any, any>\n): VobsApp<any> {\n if (!config.render) throw new Error('createVobs: render 不能为空')\n\n const renderer = config.renderer ?? createDOMRenderer()\n const rootOwner: Owner = createOwner()\n setOwnerDebugName(rootOwner, 'App')\n const cleanups: Array<() => void> = []\n const errorHandlers = new Set<(error: unknown) => void>()\n const installed = new Set<string>()\n const installing = new Set<string>()\n let mounted = false\n let destroyed = false\n let container: any = null\n let app!: VobsApp<any>\n\n if (config.onError) {\n errorHandlers.add(config.onError)\n cleanups.push(() => errorHandlers.delete(config.onError!))\n }\n\n const context: VobsContext = {\n get app(): VobsApp<any> {\n return app\n },\n\n provide<T>(key: InjectionKey<T>, value: T, options: ProvideOptions = {}): void {\n provideToOwner(rootOwner, key, value, options)\n },\n\n inject<T>(key: InjectionKey<T>): T | undefined {\n return injectFromOwner(rootOwner, key)\n },\n\n injectRequired<T>(key: InjectionKey<T>, description?: string): T {\n const value = injectFromOwner(rootOwner, key)\n if (value === undefined) {\n throw new Error(`Vobs: 找不到必需注入项${description ? ` ${description}` : ''}`)\n }\n return value\n },\n\n onDestroy(cleanup: () => void): void {\n cleanups.push(cleanup)\n },\n\n onError(handler: (error: unknown) => void): () => void {\n errorHandlers.add(handler)\n const remove = () => errorHandlers.delete(handler)\n cleanups.push(remove)\n return remove\n }\n }\n\n function notifyError(error: unknown): void {\n for (const handler of [...errorHandlers]) {\n try {\n handler(error)\n } catch {\n // 错误处理器不能覆盖触发它的原始错误。\n }\n }\n }\n\n function installPlugin(plugin: VobsPlugin): void {\n if (installed.has(plugin.name)) return\n if (installing.has(plugin.name)) {\n throw new Error(`Vobs: 插件依赖存在循环:${plugin.name}`)\n }\n\n installing.add(plugin.name)\n try {\n for (const dependency of plugin.requires ?? []) installPlugin(dependency)\n const cleanup = plugin.install?.(context)\n if (cleanup) cleanups.push(cleanup)\n installed.add(plugin.name)\n } finally {\n installing.delete(plugin.name)\n }\n }\n\n function cleanup(clearContainer = true): unknown {\n let firstError: unknown\n for (let index = cleanups.length - 1; index >= 0; index--) {\n try {\n cleanups[index]()\n } catch (error) {\n firstError ??= error\n }\n }\n cleanups.length = 0\n\n try {\n rootOwner.dispose()\n } catch (error) {\n firstError ??= error\n }\n\n if (container && clearContainer) {\n try {\n renderer.clear(container)\n } catch (error) {\n firstError ??= error\n }\n }\n return firstError\n }\n\n function start(target: string | any, hydrating: boolean): void {\n if (destroyed) throw new Error('Vobs: 已销毁的应用不能挂载')\n if (mounted) return\n\n container = typeof target === 'string' ? document.querySelector(target) : target\n if (!container) throw new Error(`mount: 目标不存在: ${target}`)\n if (hydrating && !renderer.beginHydration) {\n throw new Error('Vobs: 当前渲染器不支持 Hydration')\n }\n\n setRenderer(renderer)\n try {\n if (hydrating) renderer.beginHydration?.()\n const rootNode = rootOwner.run(config.render)\n if (!hydrating) renderer.clear(container)\n if (rootNode) insertRuntimeNode(container, rootNode as any, null)\n if (hydrating) renderer.completeHydration?.()\n mounted = true\n } catch (error) {\n notifyError(error)\n const cleanupError = cleanup(!hydrating)\n destroyed = true\n throw cleanupError ?? error\n }\n }\n\n app = {\n get mounted(): boolean {\n return mounted\n },\n\n get destroyed(): boolean {\n return destroyed\n },\n\n use(plugin: VobsPlugin): VobsApp<any> {\n if (destroyed) throw new Error('Vobs: 已销毁的应用不能安装插件')\n installPlugin(plugin)\n return app\n },\n\n mount(target: string | any): void {\n start(target, false)\n },\n\n hydrate(target: string | any): void {\n start(target, true)\n },\n\n update(): void {\n if (destroyed) throw new Error('Vobs: 已销毁的应用不能更新')\n try {\n scheduler.flush()\n } catch (error) {\n notifyError(error)\n throw error\n }\n },\n\n destroy(): void {\n if (destroyed) return\n try {\n const cleanupError = cleanup()\n if (cleanupError) {\n notifyError(cleanupError)\n throw cleanupError\n }\n } finally {\n mounted = false\n destroyed = true\n }\n }\n }\n\n try {\n for (const plugin of config.plugins ?? []) app.use(plugin)\n } catch (error) {\n notifyError(error)\n cleanup()\n destroyed = true\n throw error\n }\n\n return app\n}\n","import { getCurrentOwner, type Owner } from '@vobs/reactivity'\nimport type { InjectionKey, ProvideOptions } from './app'\n\nconst ownerProviders = new WeakMap<Owner, Map<InjectionKey<unknown>, unknown>>()\n\nexport function provide<T>(key: InjectionKey<T>, value: T, options: ProvideOptions = {}): void {\n const owner = getCurrentOwner()\n if (!owner) throw new Error('Vobs: provide 必须在组件或 Owner 作用域内调用')\n provideToOwner(owner, key, value, options)\n}\n\nexport function inject<T>(key: InjectionKey<T>): T | undefined\nexport function inject<T>(key: InjectionKey<T>, fallback: T): T\nexport function inject<T>(key: InjectionKey<T>, fallback?: T): T | undefined {\n const owner = getCurrentOwner()\n const value = owner ? injectFromOwner(owner, key) : undefined\n return value === undefined ? fallback : value\n}\n\nexport function injectRequired<T>(key: InjectionKey<T>, description?: string): T {\n const value = inject(key)\n if (value === undefined) {\n throw new Error(`Vobs: 找不到必需注入项${description ? ` ${description}` : ''}`)\n }\n return value\n}\n\nexport function provideToOwner<T>(\n owner: Owner,\n key: InjectionKey<T>,\n value: T,\n options: ProvideOptions = {}\n): void {\n let providers = ownerProviders.get(owner)\n if (!providers) {\n providers = new Map<InjectionKey<unknown>, unknown>()\n ownerProviders.set(owner, providers)\n owner.onDispose(() => ownerProviders.delete(owner))\n }\n if (providers.has(key) && !options.override) {\n throw new Error(`Vobs: 注入项 ${String(key)} 已存在;如需覆盖请传入 override: true`)\n }\n providers.set(key, value)\n}\n\nexport function injectFromOwner<T>(owner: Owner, key: InjectionKey<T>): T | undefined {\n let current: Owner | null = owner\n while (current) {\n const providers = ownerProviders.get(current)\n if (providers?.has(key)) return providers.get(key) as T\n current = current.parent\n }\n return undefined\n}\n","import {\n createComponent,\n createElement,\n createFragment,\n insertBefore,\n normalizeDynamicChild,\n spreadProps,\n type VobsNode\n} from '@vobs/runtime'\n\r\nexport function jsxDEV(\r\n tag: string | Function,\r\n props: Record<string, unknown> | null,\r\n _key?: unknown,\r\n _isStaticChildren?: boolean,\r\n _source?: unknown,\r\n _self?: unknown\r\n): VobsNode {\n if (typeof tag === 'function') {\n return createComponent(tag as (props: Record<string, unknown>) => VobsNode, props ?? {})\n }\r\n\r\n const { children, ...attrs } = props ?? {}\r\n\r\n const el = createElement(tag as string)\n\r\n spreadProps(el, attrs)\n\r\n appendChildren(el, children)\r\n\r\n return el\r\n}\r\n\r\nfunction appendChildren(parent: Node, children: unknown, anchor: Node | null = null): void {\n if (children === undefined || children === null) return\r\n\r\n const childArray = Array.isArray(children) ? children : [children]\r\n\r\n for (const child of childArray) {\r\n const node = normalizeDynamicChild(child as Parameters<typeof normalizeDynamicChild>[0])\n if (node) insertBefore(parent, node, anchor)\n }\r\n}\r\n\r\nexport function jsx(tag: string | Function, props: Record<string, unknown> | null): VobsNode {\n return jsxDEV(tag, props)\r\n}\r\n\r\nexport function jsxs(tag: string | Function, props: Record<string, unknown> | null): VobsNode {\n return jsxDEV(tag, props)\r\n}\r\n\r\nexport function Fragment(props: { children?: unknown }): VobsNode {\n return createFragment((parent, anchor) => appendChildren(parent, props?.children, anchor))\n}\n\n/** Namespace for explicit built-in JSX primitives such as <Vobs.Fragment>. */\nexport const Vobs = { Fragment }\n"],"mappings":"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","names":["import_dom","import_runtime","import_reactivity","import_runtime","cleanup","insertRuntimeNode","import_runtime"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export * from '@vobs/reactivity';
|
|
2
2
|
export { createDOMRenderer } from '@vobs/dom';
|
|
3
|
-
export { AsyncBoundary, AsyncBoundaryFallback, AsyncBoundaryOptions, AsyncBoundaryProps, AsyncBoundaryView, BoundaryFallback, BoundaryOptions, BoundaryRetry, DynamicChild, ErrorBoundary, ErrorBoundaryFallback, ErrorBoundaryOptions, ErrorBoundaryProps, FormatVobsErrorOptions, FragmentFactory, HmrComponent, HmrInstance, HmrStateStore, NodeFactory, Profiler, ProfilerOptions, ProfilerProps, ProfilerRenderInfo, Ref, RefTarget, RuntimeDebugContext, RuntimeDebugEnvironment, RuntimeDebugHooks, RuntimeDomMutation, RuntimeDomMutationOperation, RuntimeErrorEvent, RuntimeHydrationMismatch, ValueSource, VobsError, VobsErrorDefaults, VobsErrorLayer, VobsErrorLocation, VobsErrorOptions, VobsErrorSeverity, VobsFragment, VobsLocatedError, VobsNode, VobsRenderer, VobsSourceLocation, addEventListener, bindAttribute, bindProperty, bindText, clear, cloneTemplate, createComment, createComponent, createElement, createFragment, createHmrStateStore, createTemplate, createText, createVobsError, disposeHmrModule, disposeNodeOwner, formatVobsError, getRenderer, getRuntimeDebugContext, getRuntimeDebugHooks, insertAsyncBoundary, insertBefore, insertBoundary, insertDynamic, insertDynamicValue, insertErrorBoundary, insertList, insertProfiler, isVobsError, isVobsFragment, normalizeDynamicChild, normalizeVobsError, pushRuntimeDebugContext, ref, removeChild, removeEventListener, resolveComponent, runWithRuntimeDebugContext, setAttribute, setProperty, setRef, setRenderer, setRuntimeDebugHooks, setStaticProps, setTextContent, spreadProps, updateHmrModule } from '@vobs/runtime';
|
|
3
|
+
export { AsyncBoundary, AsyncBoundaryFallback, AsyncBoundaryOptions, AsyncBoundaryProps, AsyncBoundaryView, BoundaryFallback, BoundaryOptions, BoundaryRetry, DynamicChild, ErrorBoundary, ErrorBoundaryFallback, ErrorBoundaryOptions, ErrorBoundaryProps, FormatVobsErrorOptions, FragmentFactory, HmrComponent, HmrInstance, HmrStateStore, NodeFactory, Profiler, ProfilerOptions, ProfilerProps, ProfilerRenderInfo, Ref, RefTarget, RuntimeDebugContext, RuntimeDebugEnvironment, RuntimeDebugHooks, RuntimeDomMutation, RuntimeDomMutationOperation, RuntimeErrorEvent, RuntimeHydrationMismatch, ValueSource, VobsError, VobsErrorDefaults, VobsErrorLayer, VobsErrorLocation, VobsErrorOptions, VobsErrorSeverity, VobsFragment, VobsLocatedError, VobsNode, VobsRenderer, VobsSourceLocation, addEventListener, bindAttribute, bindProperty, bindText, clear, cloneTemplate, createComment, createComponent, createElement, createFragment, createHmrStateStore, createTemplate, createText, createVobsError, disposeHmrModule, disposeNodeOwner, formatVobsError, getRenderer, getRuntimeDebugContext, getRuntimeDebugHooks, hmrStateRef, insertAsyncBoundary, insertBefore, insertBoundary, insertDynamic, insertDynamicValue, insertErrorBoundary, insertList, insertProfiler, isVobsError, isVobsFragment, normalizeDynamicChild, normalizeVobsError, pushRuntimeDebugContext, ref, removeChild, removeEventListener, resolveComponent, runWithRuntimeDebugContext, setAttribute, setProperty, setRef, setRenderer, setRuntimeDebugHooks, setStaticProps, setTextContent, spreadProps, updateHmrModule } from '@vobs/runtime';
|
|
4
4
|
export { InjectionKey, ProvideOptions, VobsApp, VobsConfig, VobsContext, VobsPlugin, createInjectionKey, createVobs } from './app.cjs';
|
|
5
5
|
export { Fragment, Vobs } from './jsx-dev-runtime.cjs';
|
|
6
6
|
export { inject, injectRequired, provide } from './context.cjs';
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export * from '@vobs/reactivity';
|
|
2
2
|
export { createDOMRenderer } from '@vobs/dom';
|
|
3
|
-
export { AsyncBoundary, AsyncBoundaryFallback, AsyncBoundaryOptions, AsyncBoundaryProps, AsyncBoundaryView, BoundaryFallback, BoundaryOptions, BoundaryRetry, DynamicChild, ErrorBoundary, ErrorBoundaryFallback, ErrorBoundaryOptions, ErrorBoundaryProps, FormatVobsErrorOptions, FragmentFactory, HmrComponent, HmrInstance, HmrStateStore, NodeFactory, Profiler, ProfilerOptions, ProfilerProps, ProfilerRenderInfo, Ref, RefTarget, RuntimeDebugContext, RuntimeDebugEnvironment, RuntimeDebugHooks, RuntimeDomMutation, RuntimeDomMutationOperation, RuntimeErrorEvent, RuntimeHydrationMismatch, ValueSource, VobsError, VobsErrorDefaults, VobsErrorLayer, VobsErrorLocation, VobsErrorOptions, VobsErrorSeverity, VobsFragment, VobsLocatedError, VobsNode, VobsRenderer, VobsSourceLocation, addEventListener, bindAttribute, bindProperty, bindText, clear, cloneTemplate, createComment, createComponent, createElement, createFragment, createHmrStateStore, createTemplate, createText, createVobsError, disposeHmrModule, disposeNodeOwner, formatVobsError, getRenderer, getRuntimeDebugContext, getRuntimeDebugHooks, insertAsyncBoundary, insertBefore, insertBoundary, insertDynamic, insertDynamicValue, insertErrorBoundary, insertList, insertProfiler, isVobsError, isVobsFragment, normalizeDynamicChild, normalizeVobsError, pushRuntimeDebugContext, ref, removeChild, removeEventListener, resolveComponent, runWithRuntimeDebugContext, setAttribute, setProperty, setRef, setRenderer, setRuntimeDebugHooks, setStaticProps, setTextContent, spreadProps, updateHmrModule } from '@vobs/runtime';
|
|
3
|
+
export { AsyncBoundary, AsyncBoundaryFallback, AsyncBoundaryOptions, AsyncBoundaryProps, AsyncBoundaryView, BoundaryFallback, BoundaryOptions, BoundaryRetry, DynamicChild, ErrorBoundary, ErrorBoundaryFallback, ErrorBoundaryOptions, ErrorBoundaryProps, FormatVobsErrorOptions, FragmentFactory, HmrComponent, HmrInstance, HmrStateStore, NodeFactory, Profiler, ProfilerOptions, ProfilerProps, ProfilerRenderInfo, Ref, RefTarget, RuntimeDebugContext, RuntimeDebugEnvironment, RuntimeDebugHooks, RuntimeDomMutation, RuntimeDomMutationOperation, RuntimeErrorEvent, RuntimeHydrationMismatch, ValueSource, VobsError, VobsErrorDefaults, VobsErrorLayer, VobsErrorLocation, VobsErrorOptions, VobsErrorSeverity, VobsFragment, VobsLocatedError, VobsNode, VobsRenderer, VobsSourceLocation, addEventListener, bindAttribute, bindProperty, bindText, clear, cloneTemplate, createComment, createComponent, createElement, createFragment, createHmrStateStore, createTemplate, createText, createVobsError, disposeHmrModule, disposeNodeOwner, formatVobsError, getRenderer, getRuntimeDebugContext, getRuntimeDebugHooks, hmrStateRef, insertAsyncBoundary, insertBefore, insertBoundary, insertDynamic, insertDynamicValue, insertErrorBoundary, insertList, insertProfiler, isVobsError, isVobsFragment, normalizeDynamicChild, normalizeVobsError, pushRuntimeDebugContext, ref, removeChild, removeEventListener, resolveComponent, runWithRuntimeDebugContext, setAttribute, setProperty, setRef, setRenderer, setRuntimeDebugHooks, setStaticProps, setTextContent, spreadProps, updateHmrModule } from '@vobs/runtime';
|
|
4
4
|
export { InjectionKey, ProvideOptions, VobsApp, VobsConfig, VobsContext, VobsPlugin, createInjectionKey, createVobs } from './app.js';
|
|
5
5
|
export { Fragment, Vobs } from './jsx-dev-runtime.js';
|
|
6
6
|
export { inject, injectRequired, provide } from './context.js';
|
package/dist/index.js
CHANGED
|
@@ -46,6 +46,7 @@ import {
|
|
|
46
46
|
import {
|
|
47
47
|
createHmrStateStore,
|
|
48
48
|
disposeHmrModule,
|
|
49
|
+
hmrStateRef,
|
|
49
50
|
resolveComponent,
|
|
50
51
|
updateHmrModule
|
|
51
52
|
} from "@vobs/runtime";
|
|
@@ -334,6 +335,7 @@ export {
|
|
|
334
335
|
getRenderer,
|
|
335
336
|
getRuntimeDebugContext,
|
|
336
337
|
getRuntimeDebugHooks,
|
|
338
|
+
hmrStateRef,
|
|
337
339
|
inject,
|
|
338
340
|
injectRequired,
|
|
339
341
|
insertAsyncBoundary,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/app.ts","../src/context.ts","../src/jsx-dev-runtime.ts"],"sourcesContent":["/// <reference path=\"./jsx.d.ts\" />\n\nexport * from '@vobs/reactivity'\nexport { createDOMRenderer } from '@vobs/dom'\nexport type { VobsRenderer } from '@vobs/runtime'\nexport {\n getRuntimeDebugContext,\n getRuntimeDebugHooks,\n pushRuntimeDebugContext,\n runWithRuntimeDebugContext,\n setRuntimeDebugHooks\n} from '@vobs/runtime'\nexport type {\n RuntimeDebugContext,\n RuntimeDebugEnvironment,\n RuntimeDebugHooks,\n RuntimeDomMutation,\n RuntimeDomMutationOperation,\n RuntimeErrorEvent,\n RuntimeHydrationMismatch\n} from '@vobs/runtime'\nexport {\n setRenderer,\n getRenderer,\n createText,\n createElement,\n createComment,\n insertBefore,\n removeChild,\n setTextContent,\n setProperty,\n setAttribute,\n setStaticProps,\n spreadProps,\n addEventListener,\n removeEventListener,\n clear,\n createComponent,\n createFragment,\n isVobsFragment,\n disposeNodeOwner\n} from '@vobs/runtime'\nexport type { FragmentFactory, VobsFragment, VobsNode } from '@vobs/runtime'\nexport { bindText, bindAttribute, bindProperty } from '@vobs/runtime'\nexport type { ValueSource } from '@vobs/runtime'\nexport { ref, setRef } from '@vobs/runtime'\nexport type { Ref, RefTarget } from '@vobs/runtime'\nexport { insertDynamic, insertDynamicValue, insertList, normalizeDynamicChild } from '@vobs/runtime'\nexport type { DynamicChild, NodeFactory } from '@vobs/runtime'\nexport { createTemplate, cloneTemplate } from '@vobs/runtime'\nexport type { VobsLocatedError, VobsSourceLocation } from '@vobs/runtime'\nexport {\n VobsError,\n createVobsError,\n formatVobsError,\n isVobsError,\n normalizeVobsError\n} from '@vobs/runtime'\nexport type {\n FormatVobsErrorOptions,\n VobsErrorDefaults,\n VobsErrorLayer,\n VobsErrorLocation,\n VobsErrorOptions,\n VobsErrorSeverity\n} from '@vobs/runtime'\nexport {\n createHmrStateStore,\n disposeHmrModule,\n resolveComponent,\n updateHmrModule\n} from '@vobs/runtime'\nexport type { HmrComponent, HmrInstance, HmrStateStore } from '@vobs/runtime'\nexport { insertErrorBoundary } from '@vobs/runtime'\nexport { ErrorBoundary, insertBoundary } from '@vobs/runtime'\nexport type { BoundaryFallback, BoundaryOptions, BoundaryRetry, ErrorBoundaryFallback, ErrorBoundaryOptions, ErrorBoundaryProps } from '@vobs/runtime'\nexport { AsyncBoundary, insertAsyncBoundary, Profiler, insertProfiler } from '@vobs/runtime'\nexport type { AsyncBoundaryFallback, AsyncBoundaryOptions, AsyncBoundaryProps, AsyncBoundaryView, ProfilerOptions, ProfilerProps, ProfilerRenderInfo } from '@vobs/runtime'\nexport { createVobs, createInjectionKey } from './app'\nexport { Fragment, Vobs } from './jsx-dev-runtime'\nexport { provide, inject, injectRequired } from './context'\nexport type {\n InjectionKey,\n ProvideOptions,\n VobsApp,\n VobsConfig,\n VobsPlugin,\n VobsContext\n} from './app'\n","import { createOwner, scheduler, setOwnerDebugName, type Owner } from '@vobs/reactivity'\nimport { createDOMRenderer } from '@vobs/dom'\nimport { insertBefore as insertRuntimeNode, setRenderer, type VobsFragment, type VobsRenderer } from '@vobs/runtime'\nimport { injectFromOwner, provideToOwner } from './context'\n\nexport type InjectionKey<T> = symbol & {\n readonly __vobsType?: T\n}\n\nexport interface ProvideOptions {\n override?: boolean\n}\n\nexport interface VobsPlugin {\n name: string\n version?: string\n requires?: readonly VobsPlugin[]\n optional?: readonly VobsPlugin[]\n install?: (ctx: VobsContext) => void | (() => void)\n}\n\nexport interface VobsContext {\n readonly app: VobsApp\n provide<T>(key: InjectionKey<T>, value: T, options?: ProvideOptions): void\n inject<T>(key: InjectionKey<T>): T | undefined\n injectRequired<T>(key: InjectionKey<T>, description?: string): T\n onDestroy(cleanup: () => void): void\n onError(handler: (error: unknown) => void): () => void\n}\n\nexport interface VobsConfig<\n NodeType = Node,\n TextNode extends NodeType = NodeType,\n ElementNode extends NodeType = NodeType,\n CommentNode extends NodeType = NodeType\n> {\n render: () => NodeType | VobsFragment | Node | null | undefined\n renderer?: VobsRenderer<NodeType, TextNode, ElementNode, CommentNode>\n plugins?: VobsPlugin[]\n /** Optional application-level error observer. Observers are isolated from the app. */\n onError?: (error: unknown) => void\n}\n\nexport interface VobsApp<NodeType = Node> {\n readonly mounted: boolean\n readonly destroyed: boolean\n use(plugin: VobsPlugin): VobsApp<NodeType>\n mount(target: string | NodeType): void\n hydrate(target: string | NodeType): void\n update(): void\n destroy(): void\n}\n\nexport function createInjectionKey<T>(description: string): InjectionKey<T> {\n return Symbol(description) as InjectionKey<T>\n}\n\nexport function createVobs(\n config: VobsConfig<Node, Text, Element, Comment>\n): VobsApp<Node>\nexport function createVobs<\n NodeType = Node,\n TextNode extends NodeType = NodeType,\n ElementNode extends NodeType = NodeType,\n CommentNode extends NodeType = NodeType\n>(\n config: VobsConfig<NodeType, TextNode, ElementNode, CommentNode> & {\n renderer: VobsRenderer<NodeType, TextNode, ElementNode, CommentNode>\n }\n): VobsApp<NodeType>\nexport function createVobs(\n config: VobsConfig<any, any, any, any>\n): VobsApp<any> {\n if (!config.render) throw new Error('createVobs: render 不能为空')\n\n const renderer = config.renderer ?? createDOMRenderer()\n const rootOwner: Owner = createOwner()\n setOwnerDebugName(rootOwner, 'App')\n const cleanups: Array<() => void> = []\n const errorHandlers = new Set<(error: unknown) => void>()\n const installed = new Set<string>()\n const installing = new Set<string>()\n let mounted = false\n let destroyed = false\n let container: any = null\n let app!: VobsApp<any>\n\n if (config.onError) {\n errorHandlers.add(config.onError)\n cleanups.push(() => errorHandlers.delete(config.onError!))\n }\n\n const context: VobsContext = {\n get app(): VobsApp<any> {\n return app\n },\n\n provide<T>(key: InjectionKey<T>, value: T, options: ProvideOptions = {}): void {\n provideToOwner(rootOwner, key, value, options)\n },\n\n inject<T>(key: InjectionKey<T>): T | undefined {\n return injectFromOwner(rootOwner, key)\n },\n\n injectRequired<T>(key: InjectionKey<T>, description?: string): T {\n const value = injectFromOwner(rootOwner, key)\n if (value === undefined) {\n throw new Error(`Vobs: 找不到必需注入项${description ? ` ${description}` : ''}`)\n }\n return value\n },\n\n onDestroy(cleanup: () => void): void {\n cleanups.push(cleanup)\n },\n\n onError(handler: (error: unknown) => void): () => void {\n errorHandlers.add(handler)\n const remove = () => errorHandlers.delete(handler)\n cleanups.push(remove)\n return remove\n }\n }\n\n function notifyError(error: unknown): void {\n for (const handler of [...errorHandlers]) {\n try {\n handler(error)\n } catch {\n // 错误处理器不能覆盖触发它的原始错误。\n }\n }\n }\n\n function installPlugin(plugin: VobsPlugin): void {\n if (installed.has(plugin.name)) return\n if (installing.has(plugin.name)) {\n throw new Error(`Vobs: 插件依赖存在循环:${plugin.name}`)\n }\n\n installing.add(plugin.name)\n try {\n for (const dependency of plugin.requires ?? []) installPlugin(dependency)\n const cleanup = plugin.install?.(context)\n if (cleanup) cleanups.push(cleanup)\n installed.add(plugin.name)\n } finally {\n installing.delete(plugin.name)\n }\n }\n\n function cleanup(clearContainer = true): unknown {\n let firstError: unknown\n for (let index = cleanups.length - 1; index >= 0; index--) {\n try {\n cleanups[index]()\n } catch (error) {\n firstError ??= error\n }\n }\n cleanups.length = 0\n\n try {\n rootOwner.dispose()\n } catch (error) {\n firstError ??= error\n }\n\n if (container && clearContainer) {\n try {\n renderer.clear(container)\n } catch (error) {\n firstError ??= error\n }\n }\n return firstError\n }\n\n function start(target: string | any, hydrating: boolean): void {\n if (destroyed) throw new Error('Vobs: 已销毁的应用不能挂载')\n if (mounted) return\n\n container = typeof target === 'string' ? document.querySelector(target) : target\n if (!container) throw new Error(`mount: 目标不存在: ${target}`)\n if (hydrating && !renderer.beginHydration) {\n throw new Error('Vobs: 当前渲染器不支持 Hydration')\n }\n\n setRenderer(renderer)\n try {\n if (hydrating) renderer.beginHydration?.()\n const rootNode = rootOwner.run(config.render)\n if (!hydrating) renderer.clear(container)\n if (rootNode) insertRuntimeNode(container, rootNode as any, null)\n if (hydrating) renderer.completeHydration?.()\n mounted = true\n } catch (error) {\n notifyError(error)\n const cleanupError = cleanup(!hydrating)\n destroyed = true\n throw cleanupError ?? error\n }\n }\n\n app = {\n get mounted(): boolean {\n return mounted\n },\n\n get destroyed(): boolean {\n return destroyed\n },\n\n use(plugin: VobsPlugin): VobsApp<any> {\n if (destroyed) throw new Error('Vobs: 已销毁的应用不能安装插件')\n installPlugin(plugin)\n return app\n },\n\n mount(target: string | any): void {\n start(target, false)\n },\n\n hydrate(target: string | any): void {\n start(target, true)\n },\n\n update(): void {\n if (destroyed) throw new Error('Vobs: 已销毁的应用不能更新')\n try {\n scheduler.flush()\n } catch (error) {\n notifyError(error)\n throw error\n }\n },\n\n destroy(): void {\n if (destroyed) return\n try {\n const cleanupError = cleanup()\n if (cleanupError) {\n notifyError(cleanupError)\n throw cleanupError\n }\n } finally {\n mounted = false\n destroyed = true\n }\n }\n }\n\n try {\n for (const plugin of config.plugins ?? []) app.use(plugin)\n } catch (error) {\n notifyError(error)\n cleanup()\n destroyed = true\n throw error\n }\n\n return app\n}\n","import { getCurrentOwner, type Owner } from '@vobs/reactivity'\nimport type { InjectionKey, ProvideOptions } from './app'\n\nconst ownerProviders = new WeakMap<Owner, Map<InjectionKey<unknown>, unknown>>()\n\nexport function provide<T>(key: InjectionKey<T>, value: T, options: ProvideOptions = {}): void {\n const owner = getCurrentOwner()\n if (!owner) throw new Error('Vobs: provide 必须在组件或 Owner 作用域内调用')\n provideToOwner(owner, key, value, options)\n}\n\nexport function inject<T>(key: InjectionKey<T>): T | undefined\nexport function inject<T>(key: InjectionKey<T>, fallback: T): T\nexport function inject<T>(key: InjectionKey<T>, fallback?: T): T | undefined {\n const owner = getCurrentOwner()\n const value = owner ? injectFromOwner(owner, key) : undefined\n return value === undefined ? fallback : value\n}\n\nexport function injectRequired<T>(key: InjectionKey<T>, description?: string): T {\n const value = inject(key)\n if (value === undefined) {\n throw new Error(`Vobs: 找不到必需注入项${description ? ` ${description}` : ''}`)\n }\n return value\n}\n\nexport function provideToOwner<T>(\n owner: Owner,\n key: InjectionKey<T>,\n value: T,\n options: ProvideOptions = {}\n): void {\n let providers = ownerProviders.get(owner)\n if (!providers) {\n providers = new Map<InjectionKey<unknown>, unknown>()\n ownerProviders.set(owner, providers)\n owner.onDispose(() => ownerProviders.delete(owner))\n }\n if (providers.has(key) && !options.override) {\n throw new Error(`Vobs: 注入项 ${String(key)} 已存在;如需覆盖请传入 override: true`)\n }\n providers.set(key, value)\n}\n\nexport function injectFromOwner<T>(owner: Owner, key: InjectionKey<T>): T | undefined {\n let current: Owner | null = owner\n while (current) {\n const providers = ownerProviders.get(current)\n if (providers?.has(key)) return providers.get(key) as T\n current = current.parent\n }\n return undefined\n}\n","import {\n createComponent,\n createElement,\n createFragment,\n insertBefore,\n normalizeDynamicChild,\n spreadProps,\n type VobsNode\n} from '@vobs/runtime'\n\r\nexport function jsxDEV(\r\n tag: string | Function,\r\n props: Record<string, unknown> | null,\r\n _key?: unknown,\r\n _isStaticChildren?: boolean,\r\n _source?: unknown,\r\n _self?: unknown\r\n): VobsNode {\n if (typeof tag === 'function') {\n return createComponent(tag as (props: Record<string, unknown>) => VobsNode, props ?? {})\n }\r\n\r\n const { children, ...attrs } = props ?? {}\r\n\r\n const el = createElement(tag as string)\n\r\n spreadProps(el, attrs)\n\r\n appendChildren(el, children)\r\n\r\n return el\r\n}\r\n\r\nfunction appendChildren(parent: Node, children: unknown, anchor: Node | null = null): void {\n if (children === undefined || children === null) return\r\n\r\n const childArray = Array.isArray(children) ? children : [children]\r\n\r\n for (const child of childArray) {\r\n const node = normalizeDynamicChild(child as Parameters<typeof normalizeDynamicChild>[0])\n if (node) insertBefore(parent, node, anchor)\n }\r\n}\r\n\r\nexport function jsx(tag: string | Function, props: Record<string, unknown> | null): VobsNode {\n return jsxDEV(tag, props)\r\n}\r\n\r\nexport function jsxs(tag: string | Function, props: Record<string, unknown> | null): VobsNode {\n return jsxDEV(tag, props)\r\n}\r\n\r\nexport function Fragment(props: { children?: unknown }): VobsNode {\n return createFragment((parent, anchor) => appendChildren(parent, props?.children, anchor))\n}\n\n/** Namespace for explicit built-in JSX primitives such as <Vobs.Fragment>. */\nexport const Vobs = { Fragment }\n"],"mappings":";;;;AAEA,cAAc;AACd,SAAS,qBAAAA,0BAAyB;AAElC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAUP;AAAA,EACE,eAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAAC;AAAA,EACA;AAAA,EACA,gBAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,mBAAAC;AAAA,EACA,kBAAAC;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,UAAU,eAAe,oBAAoB;AAEtD,SAAS,KAAK,cAAc;AAE5B,SAAS,eAAe,oBAAoB,YAAY,yBAAAC,8BAA6B;AAErF,SAAS,gBAAgB,qBAAqB;AAE9C;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AASP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,2BAA2B;AACpC,SAAS,eAAe,sBAAsB;AAE9C,SAAS,eAAe,qBAAqB,UAAU,sBAAsB;;;AC5E7E,SAAS,aAAa,WAAW,yBAAqC;AACtE,SAAS,yBAAyB;AAClC,SAAS,gBAAgB,mBAAmB,mBAAyD;;;ACFrG,SAAS,uBAAmC;AAG5C,IAAM,iBAAiB,oBAAI,QAAoD;AAExE,SAAS,QAAW,KAAsB,OAAU,UAA0B,CAAC,GAAS;AAC7F,QAAM,QAAQ,gBAAgB;AAC9B,MAAI,CAAC,MAAO,OAAM,IAAI,MAAM,+FAAmC;AAC/D,iBAAe,OAAO,KAAK,OAAO,OAAO;AAC3C;AAJgB;AAQT,SAAS,OAAU,KAAsB,UAA6B;AAC3E,QAAM,QAAQ,gBAAgB;AAC9B,QAAM,QAAQ,QAAQ,gBAAgB,OAAO,GAAG,IAAI;AACpD,SAAO,UAAU,SAAY,WAAW;AAC1C;AAJgB;AAMT,SAAS,eAAkB,KAAsB,aAAyB;AAC/E,QAAM,QAAQ,OAAO,GAAG;AACxB,MAAI,UAAU,QAAW;AACvB,UAAM,IAAI,MAAM,yDAAiB,cAAc,IAAI,WAAW,KAAK,EAAE,EAAE;AAAA,EACzE;AACA,SAAO;AACT;AANgB;AAQT,SAAS,eACd,OACA,KACA,OACA,UAA0B,CAAC,GACrB;AACN,MAAI,YAAY,eAAe,IAAI,KAAK;AACxC,MAAI,CAAC,WAAW;AACd,gBAAY,oBAAI,IAAoC;AACpD,mBAAe,IAAI,OAAO,SAAS;AACnC,UAAM,UAAU,MAAM,eAAe,OAAO,KAAK,CAAC;AAAA,EACpD;AACA,MAAI,UAAU,IAAI,GAAG,KAAK,CAAC,QAAQ,UAAU;AAC3C,UAAM,IAAI,MAAM,4BAAa,OAAO,GAAG,CAAC,oFAA6B;AAAA,EACvE;AACA,YAAU,IAAI,KAAK,KAAK;AAC1B;AAhBgB;AAkBT,SAAS,gBAAmB,OAAc,KAAqC;AACpF,MAAI,UAAwB;AAC5B,SAAO,SAAS;AACd,UAAM,YAAY,eAAe,IAAI,OAAO;AAC5C,QAAI,WAAW,IAAI,GAAG,EAAG,QAAO,UAAU,IAAI,GAAG;AACjD,cAAU,QAAQ;AAAA,EACpB;AACA,SAAO;AACT;AARgB;;;ADQT,SAAS,mBAAsB,aAAsC;AAC1E,SAAO,OAAO,WAAW;AAC3B;AAFgB;AAiBT,SAAS,WACd,QACc;AACd,MAAI,CAAC,OAAO,OAAQ,OAAM,IAAI,MAAM,6CAAyB;AAE7D,QAAM,WAAW,OAAO,YAAY,kBAAkB;AACtD,QAAM,YAAmB,YAAY;AACrC,oBAAkB,WAAW,KAAK;AAClC,QAAM,WAA8B,CAAC;AACrC,QAAM,gBAAgB,oBAAI,IAA8B;AACxD,QAAM,YAAY,oBAAI,IAAY;AAClC,QAAM,aAAa,oBAAI,IAAY;AACnC,MAAI,UAAU;AACd,MAAI,YAAY;AAChB,MAAI,YAAiB;AACrB,MAAI;AAEJ,MAAI,OAAO,SAAS;AAClB,kBAAc,IAAI,OAAO,OAAO;AAChC,aAAS,KAAK,MAAM,cAAc,OAAO,OAAO,OAAQ,CAAC;AAAA,EAC3D;AAEA,QAAM,UAAuB;AAAA,IAC3B,IAAI,MAAoB;AACtB,aAAO;AAAA,IACT;AAAA,IAEA,QAAW,KAAsB,OAAU,UAA0B,CAAC,GAAS;AAC7E,qBAAe,WAAW,KAAK,OAAO,OAAO;AAAA,IAC/C;AAAA,IAEA,OAAU,KAAqC;AAC7C,aAAO,gBAAgB,WAAW,GAAG;AAAA,IACvC;AAAA,IAEA,eAAkB,KAAsB,aAAyB;AAC/D,YAAM,QAAQ,gBAAgB,WAAW,GAAG;AAC5C,UAAI,UAAU,QAAW;AACvB,cAAM,IAAI,MAAM,yDAAiB,cAAc,IAAI,WAAW,KAAK,EAAE,EAAE;AAAA,MACzE;AACA,aAAO;AAAA,IACT;AAAA,IAEA,UAAUC,UAA2B;AACnC,eAAS,KAAKA,QAAO;AAAA,IACvB;AAAA,IAEA,QAAQ,SAA+C;AACrD,oBAAc,IAAI,OAAO;AACzB,YAAM,SAAS,6BAAM,cAAc,OAAO,OAAO,GAAlC;AACf,eAAS,KAAK,MAAM;AACpB,aAAO;AAAA,IACT;AAAA,EACF;AAEA,WAAS,YAAY,OAAsB;AACzC,eAAW,WAAW,CAAC,GAAG,aAAa,GAAG;AACxC,UAAI;AACF,gBAAQ,KAAK;AAAA,MACf,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AARS;AAUT,WAAS,cAAc,QAA0B;AAC/C,QAAI,UAAU,IAAI,OAAO,IAAI,EAAG;AAChC,QAAI,WAAW,IAAI,OAAO,IAAI,GAAG;AAC/B,YAAM,IAAI,MAAM,+DAAkB,OAAO,IAAI,EAAE;AAAA,IACjD;AAEA,eAAW,IAAI,OAAO,IAAI;AAC1B,QAAI;AACF,iBAAW,cAAc,OAAO,YAAY,CAAC,EAAG,eAAc,UAAU;AACxE,YAAMA,WAAU,OAAO,UAAU,OAAO;AACxC,UAAIA,SAAS,UAAS,KAAKA,QAAO;AAClC,gBAAU,IAAI,OAAO,IAAI;AAAA,IAC3B,UAAE;AACA,iBAAW,OAAO,OAAO,IAAI;AAAA,IAC/B;AAAA,EACF;AAfS;AAiBT,WAAS,QAAQ,iBAAiB,MAAe;AAC/C,QAAI;AACJ,aAAS,QAAQ,SAAS,SAAS,GAAG,SAAS,GAAG,SAAS;AACzD,UAAI;AACF,iBAAS,KAAK,EAAE;AAAA,MAClB,SAAS,OAAO;AACd,oCAAe;AAAA,MACjB;AAAA,IACF;AACA,aAAS,SAAS;AAElB,QAAI;AACF,gBAAU,QAAQ;AAAA,IACpB,SAAS,OAAO;AACd,kCAAe;AAAA,IACjB;AAEA,QAAI,aAAa,gBAAgB;AAC/B,UAAI;AACF,iBAAS,MAAM,SAAS;AAAA,MAC1B,SAAS,OAAO;AACd,oCAAe;AAAA,MACjB;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAzBS;AA2BT,WAAS,MAAM,QAAsB,WAA0B;AAC7D,QAAI,UAAW,OAAM,IAAI,MAAM,oEAAkB;AACjD,QAAI,QAAS;AAEb,gBAAY,OAAO,WAAW,WAAW,SAAS,cAAc,MAAM,IAAI;AAC1E,QAAI,CAAC,UAAW,OAAM,IAAI,MAAM,0CAAiB,MAAM,EAAE;AACzD,QAAI,aAAa,CAAC,SAAS,gBAAgB;AACzC,YAAM,IAAI,MAAM,kEAA0B;AAAA,IAC5C;AAEA,gBAAY,QAAQ;AACpB,QAAI;AACF,UAAI,UAAW,UAAS,iBAAiB;AACzC,YAAM,WAAW,UAAU,IAAI,OAAO,MAAM;AAC5C,UAAI,CAAC,UAAW,UAAS,MAAM,SAAS;AACxC,UAAI,SAAU,mBAAkB,WAAW,UAAiB,IAAI;AAChE,UAAI,UAAW,UAAS,oBAAoB;AAC5C,gBAAU;AAAA,IACZ,SAAS,OAAO;AACd,kBAAY,KAAK;AACjB,YAAM,eAAe,QAAQ,CAAC,SAAS;AACvC,kBAAY;AACZ,YAAM,gBAAgB;AAAA,IACxB;AAAA,EACF;AAxBS;AA0BT,QAAM;AAAA,IACJ,IAAI,UAAmB;AACrB,aAAO;AAAA,IACT;AAAA,IAEA,IAAI,YAAqB;AACvB,aAAO;AAAA,IACT;AAAA,IAEA,IAAI,QAAkC;AACpC,UAAI,UAAW,OAAM,IAAI,MAAM,gFAAoB;AACnD,oBAAc,MAAM;AACpB,aAAO;AAAA,IACT;AAAA,IAEA,MAAM,QAA4B;AAChC,YAAM,QAAQ,KAAK;AAAA,IACrB;AAAA,IAEA,QAAQ,QAA4B;AAClC,YAAM,QAAQ,IAAI;AAAA,IACpB;AAAA,IAEA,SAAe;AACb,UAAI,UAAW,OAAM,IAAI,MAAM,oEAAkB;AACjD,UAAI;AACF,kBAAU,MAAM;AAAA,MAClB,SAAS,OAAO;AACd,oBAAY,KAAK;AACjB,cAAM;AAAA,MACR;AAAA,IACF;AAAA,IAEA,UAAgB;AACd,UAAI,UAAW;AACf,UAAI;AACF,cAAM,eAAe,QAAQ;AAC7B,YAAI,cAAc;AAChB,sBAAY,YAAY;AACxB,gBAAM;AAAA,QACR;AAAA,MACF,UAAE;AACA,kBAAU;AACV,oBAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAEA,MAAI;AACF,eAAW,UAAU,OAAO,WAAW,CAAC,EAAG,KAAI,IAAI,MAAM;AAAA,EAC3D,SAAS,OAAO;AACd,gBAAY,KAAK;AACjB,YAAQ;AACR,gBAAY;AACZ,UAAM;AAAA,EACR;AAEA,SAAO;AACT;AAjMgB;;;AEtEhB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AAyBP,SAAS,eAAe,QAAc,UAAmB,SAAsB,MAAY;AACzF,MAAI,aAAa,UAAa,aAAa,KAAM;AAEjD,QAAM,aAAa,MAAM,QAAQ,QAAQ,IAAI,WAAW,CAAC,QAAQ;AAEjE,aAAW,SAAS,YAAY;AAC9B,UAAM,OAAO,sBAAsB,KAAoD;AACvF,QAAI,KAAM,cAAa,QAAQ,MAAM,MAAM;AAAA,EAC7C;AACF;AATS;AAmBF,SAAS,SAAS,OAAyC;AAChE,SAAO,eAAe,CAAC,QAAQ,WAAW,eAAe,QAAQ,OAAO,UAAU,MAAM,CAAC;AAC3F;AAFgB;AAKT,IAAM,OAAO,EAAE,SAAS;","names":["createDOMRenderer","setRenderer","createElement","insertBefore","spreadProps","createComponent","createFragment","normalizeDynamicChild","cleanup"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/app.ts","../src/context.ts","../src/jsx-dev-runtime.ts"],"sourcesContent":["/// <reference path=\"./jsx.d.ts\" />\n\nexport * from '@vobs/reactivity'\nexport { createDOMRenderer } from '@vobs/dom'\nexport type { VobsRenderer } from '@vobs/runtime'\nexport {\n getRuntimeDebugContext,\n getRuntimeDebugHooks,\n pushRuntimeDebugContext,\n runWithRuntimeDebugContext,\n setRuntimeDebugHooks\n} from '@vobs/runtime'\nexport type {\n RuntimeDebugContext,\n RuntimeDebugEnvironment,\n RuntimeDebugHooks,\n RuntimeDomMutation,\n RuntimeDomMutationOperation,\n RuntimeErrorEvent,\n RuntimeHydrationMismatch\n} from '@vobs/runtime'\nexport {\n setRenderer,\n getRenderer,\n createText,\n createElement,\n createComment,\n insertBefore,\n removeChild,\n setTextContent,\n setProperty,\n setAttribute,\n setStaticProps,\n spreadProps,\n addEventListener,\n removeEventListener,\n clear,\n createComponent,\n createFragment,\n isVobsFragment,\n disposeNodeOwner\n} from '@vobs/runtime'\nexport type { FragmentFactory, VobsFragment, VobsNode } from '@vobs/runtime'\nexport { bindText, bindAttribute, bindProperty } from '@vobs/runtime'\nexport type { ValueSource } from '@vobs/runtime'\nexport { ref, setRef } from '@vobs/runtime'\nexport type { Ref, RefTarget } from '@vobs/runtime'\nexport { insertDynamic, insertDynamicValue, insertList, normalizeDynamicChild } from '@vobs/runtime'\nexport type { DynamicChild, NodeFactory } from '@vobs/runtime'\nexport { createTemplate, cloneTemplate } from '@vobs/runtime'\nexport type { VobsLocatedError, VobsSourceLocation } from '@vobs/runtime'\nexport {\n VobsError,\n createVobsError,\n formatVobsError,\n isVobsError,\n normalizeVobsError\n} from '@vobs/runtime'\nexport type {\n FormatVobsErrorOptions,\n VobsErrorDefaults,\n VobsErrorLayer,\n VobsErrorLocation,\n VobsErrorOptions,\n VobsErrorSeverity\n} from '@vobs/runtime'\nexport {\n createHmrStateStore,\n disposeHmrModule,\n hmrStateRef,\n resolveComponent,\n updateHmrModule\n} from '@vobs/runtime'\nexport type { HmrComponent, HmrInstance, HmrStateStore } from '@vobs/runtime'\nexport { insertErrorBoundary } from '@vobs/runtime'\nexport { ErrorBoundary, insertBoundary } from '@vobs/runtime'\nexport type { BoundaryFallback, BoundaryOptions, BoundaryRetry, ErrorBoundaryFallback, ErrorBoundaryOptions, ErrorBoundaryProps } from '@vobs/runtime'\nexport { AsyncBoundary, insertAsyncBoundary, Profiler, insertProfiler } from '@vobs/runtime'\nexport type { AsyncBoundaryFallback, AsyncBoundaryOptions, AsyncBoundaryProps, AsyncBoundaryView, ProfilerOptions, ProfilerProps, ProfilerRenderInfo } from '@vobs/runtime'\nexport { createVobs, createInjectionKey } from './app'\nexport { Fragment, Vobs } from './jsx-dev-runtime'\nexport { provide, inject, injectRequired } from './context'\nexport type {\n InjectionKey,\n ProvideOptions,\n VobsApp,\n VobsConfig,\n VobsPlugin,\n VobsContext\n} from './app'\n","import { createOwner, scheduler, setOwnerDebugName, type Owner } from '@vobs/reactivity'\nimport { createDOMRenderer } from '@vobs/dom'\nimport { insertBefore as insertRuntimeNode, setRenderer, type VobsFragment, type VobsRenderer } from '@vobs/runtime'\nimport { injectFromOwner, provideToOwner } from './context'\n\nexport type InjectionKey<T> = symbol & {\n readonly __vobsType?: T\n}\n\nexport interface ProvideOptions {\n override?: boolean\n}\n\nexport interface VobsPlugin {\n name: string\n version?: string\n requires?: readonly VobsPlugin[]\n optional?: readonly VobsPlugin[]\n install?: (ctx: VobsContext) => void | (() => void)\n}\n\nexport interface VobsContext {\n readonly app: VobsApp\n provide<T>(key: InjectionKey<T>, value: T, options?: ProvideOptions): void\n inject<T>(key: InjectionKey<T>): T | undefined\n injectRequired<T>(key: InjectionKey<T>, description?: string): T\n onDestroy(cleanup: () => void): void\n onError(handler: (error: unknown) => void): () => void\n}\n\nexport interface VobsConfig<\n NodeType = Node,\n TextNode extends NodeType = NodeType,\n ElementNode extends NodeType = NodeType,\n CommentNode extends NodeType = NodeType\n> {\n render: () => NodeType | VobsFragment | Node | null | undefined\n renderer?: VobsRenderer<NodeType, TextNode, ElementNode, CommentNode>\n plugins?: VobsPlugin[]\n /** Optional application-level error observer. Observers are isolated from the app. */\n onError?: (error: unknown) => void\n}\n\nexport interface VobsApp<NodeType = Node> {\n readonly mounted: boolean\n readonly destroyed: boolean\n use(plugin: VobsPlugin): VobsApp<NodeType>\n mount(target: string | NodeType): void\n hydrate(target: string | NodeType): void\n update(): void\n destroy(): void\n}\n\nexport function createInjectionKey<T>(description: string): InjectionKey<T> {\n return Symbol(description) as InjectionKey<T>\n}\n\nexport function createVobs(\n config: VobsConfig<Node, Text, Element, Comment>\n): VobsApp<Node>\nexport function createVobs<\n NodeType = Node,\n TextNode extends NodeType = NodeType,\n ElementNode extends NodeType = NodeType,\n CommentNode extends NodeType = NodeType\n>(\n config: VobsConfig<NodeType, TextNode, ElementNode, CommentNode> & {\n renderer: VobsRenderer<NodeType, TextNode, ElementNode, CommentNode>\n }\n): VobsApp<NodeType>\nexport function createVobs(\n config: VobsConfig<any, any, any, any>\n): VobsApp<any> {\n if (!config.render) throw new Error('createVobs: render 不能为空')\n\n const renderer = config.renderer ?? createDOMRenderer()\n const rootOwner: Owner = createOwner()\n setOwnerDebugName(rootOwner, 'App')\n const cleanups: Array<() => void> = []\n const errorHandlers = new Set<(error: unknown) => void>()\n const installed = new Set<string>()\n const installing = new Set<string>()\n let mounted = false\n let destroyed = false\n let container: any = null\n let app!: VobsApp<any>\n\n if (config.onError) {\n errorHandlers.add(config.onError)\n cleanups.push(() => errorHandlers.delete(config.onError!))\n }\n\n const context: VobsContext = {\n get app(): VobsApp<any> {\n return app\n },\n\n provide<T>(key: InjectionKey<T>, value: T, options: ProvideOptions = {}): void {\n provideToOwner(rootOwner, key, value, options)\n },\n\n inject<T>(key: InjectionKey<T>): T | undefined {\n return injectFromOwner(rootOwner, key)\n },\n\n injectRequired<T>(key: InjectionKey<T>, description?: string): T {\n const value = injectFromOwner(rootOwner, key)\n if (value === undefined) {\n throw new Error(`Vobs: 找不到必需注入项${description ? ` ${description}` : ''}`)\n }\n return value\n },\n\n onDestroy(cleanup: () => void): void {\n cleanups.push(cleanup)\n },\n\n onError(handler: (error: unknown) => void): () => void {\n errorHandlers.add(handler)\n const remove = () => errorHandlers.delete(handler)\n cleanups.push(remove)\n return remove\n }\n }\n\n function notifyError(error: unknown): void {\n for (const handler of [...errorHandlers]) {\n try {\n handler(error)\n } catch {\n // 错误处理器不能覆盖触发它的原始错误。\n }\n }\n }\n\n function installPlugin(plugin: VobsPlugin): void {\n if (installed.has(plugin.name)) return\n if (installing.has(plugin.name)) {\n throw new Error(`Vobs: 插件依赖存在循环:${plugin.name}`)\n }\n\n installing.add(plugin.name)\n try {\n for (const dependency of plugin.requires ?? []) installPlugin(dependency)\n const cleanup = plugin.install?.(context)\n if (cleanup) cleanups.push(cleanup)\n installed.add(plugin.name)\n } finally {\n installing.delete(plugin.name)\n }\n }\n\n function cleanup(clearContainer = true): unknown {\n let firstError: unknown\n for (let index = cleanups.length - 1; index >= 0; index--) {\n try {\n cleanups[index]()\n } catch (error) {\n firstError ??= error\n }\n }\n cleanups.length = 0\n\n try {\n rootOwner.dispose()\n } catch (error) {\n firstError ??= error\n }\n\n if (container && clearContainer) {\n try {\n renderer.clear(container)\n } catch (error) {\n firstError ??= error\n }\n }\n return firstError\n }\n\n function start(target: string | any, hydrating: boolean): void {\n if (destroyed) throw new Error('Vobs: 已销毁的应用不能挂载')\n if (mounted) return\n\n container = typeof target === 'string' ? document.querySelector(target) : target\n if (!container) throw new Error(`mount: 目标不存在: ${target}`)\n if (hydrating && !renderer.beginHydration) {\n throw new Error('Vobs: 当前渲染器不支持 Hydration')\n }\n\n setRenderer(renderer)\n try {\n if (hydrating) renderer.beginHydration?.()\n const rootNode = rootOwner.run(config.render)\n if (!hydrating) renderer.clear(container)\n if (rootNode) insertRuntimeNode(container, rootNode as any, null)\n if (hydrating) renderer.completeHydration?.()\n mounted = true\n } catch (error) {\n notifyError(error)\n const cleanupError = cleanup(!hydrating)\n destroyed = true\n throw cleanupError ?? error\n }\n }\n\n app = {\n get mounted(): boolean {\n return mounted\n },\n\n get destroyed(): boolean {\n return destroyed\n },\n\n use(plugin: VobsPlugin): VobsApp<any> {\n if (destroyed) throw new Error('Vobs: 已销毁的应用不能安装插件')\n installPlugin(plugin)\n return app\n },\n\n mount(target: string | any): void {\n start(target, false)\n },\n\n hydrate(target: string | any): void {\n start(target, true)\n },\n\n update(): void {\n if (destroyed) throw new Error('Vobs: 已销毁的应用不能更新')\n try {\n scheduler.flush()\n } catch (error) {\n notifyError(error)\n throw error\n }\n },\n\n destroy(): void {\n if (destroyed) return\n try {\n const cleanupError = cleanup()\n if (cleanupError) {\n notifyError(cleanupError)\n throw cleanupError\n }\n } finally {\n mounted = false\n destroyed = true\n }\n }\n }\n\n try {\n for (const plugin of config.plugins ?? []) app.use(plugin)\n } catch (error) {\n notifyError(error)\n cleanup()\n destroyed = true\n throw error\n }\n\n return app\n}\n","import { getCurrentOwner, type Owner } from '@vobs/reactivity'\nimport type { InjectionKey, ProvideOptions } from './app'\n\nconst ownerProviders = new WeakMap<Owner, Map<InjectionKey<unknown>, unknown>>()\n\nexport function provide<T>(key: InjectionKey<T>, value: T, options: ProvideOptions = {}): void {\n const owner = getCurrentOwner()\n if (!owner) throw new Error('Vobs: provide 必须在组件或 Owner 作用域内调用')\n provideToOwner(owner, key, value, options)\n}\n\nexport function inject<T>(key: InjectionKey<T>): T | undefined\nexport function inject<T>(key: InjectionKey<T>, fallback: T): T\nexport function inject<T>(key: InjectionKey<T>, fallback?: T): T | undefined {\n const owner = getCurrentOwner()\n const value = owner ? injectFromOwner(owner, key) : undefined\n return value === undefined ? fallback : value\n}\n\nexport function injectRequired<T>(key: InjectionKey<T>, description?: string): T {\n const value = inject(key)\n if (value === undefined) {\n throw new Error(`Vobs: 找不到必需注入项${description ? ` ${description}` : ''}`)\n }\n return value\n}\n\nexport function provideToOwner<T>(\n owner: Owner,\n key: InjectionKey<T>,\n value: T,\n options: ProvideOptions = {}\n): void {\n let providers = ownerProviders.get(owner)\n if (!providers) {\n providers = new Map<InjectionKey<unknown>, unknown>()\n ownerProviders.set(owner, providers)\n owner.onDispose(() => ownerProviders.delete(owner))\n }\n if (providers.has(key) && !options.override) {\n throw new Error(`Vobs: 注入项 ${String(key)} 已存在;如需覆盖请传入 override: true`)\n }\n providers.set(key, value)\n}\n\nexport function injectFromOwner<T>(owner: Owner, key: InjectionKey<T>): T | undefined {\n let current: Owner | null = owner\n while (current) {\n const providers = ownerProviders.get(current)\n if (providers?.has(key)) return providers.get(key) as T\n current = current.parent\n }\n return undefined\n}\n","import {\n createComponent,\n createElement,\n createFragment,\n insertBefore,\n normalizeDynamicChild,\n spreadProps,\n type VobsNode\n} from '@vobs/runtime'\n\r\nexport function jsxDEV(\r\n tag: string | Function,\r\n props: Record<string, unknown> | null,\r\n _key?: unknown,\r\n _isStaticChildren?: boolean,\r\n _source?: unknown,\r\n _self?: unknown\r\n): VobsNode {\n if (typeof tag === 'function') {\n return createComponent(tag as (props: Record<string, unknown>) => VobsNode, props ?? {})\n }\r\n\r\n const { children, ...attrs } = props ?? {}\r\n\r\n const el = createElement(tag as string)\n\r\n spreadProps(el, attrs)\n\r\n appendChildren(el, children)\r\n\r\n return el\r\n}\r\n\r\nfunction appendChildren(parent: Node, children: unknown, anchor: Node | null = null): void {\n if (children === undefined || children === null) return\r\n\r\n const childArray = Array.isArray(children) ? children : [children]\r\n\r\n for (const child of childArray) {\r\n const node = normalizeDynamicChild(child as Parameters<typeof normalizeDynamicChild>[0])\n if (node) insertBefore(parent, node, anchor)\n }\r\n}\r\n\r\nexport function jsx(tag: string | Function, props: Record<string, unknown> | null): VobsNode {\n return jsxDEV(tag, props)\r\n}\r\n\r\nexport function jsxs(tag: string | Function, props: Record<string, unknown> | null): VobsNode {\n return jsxDEV(tag, props)\r\n}\r\n\r\nexport function Fragment(props: { children?: unknown }): VobsNode {\n return createFragment((parent, anchor) => appendChildren(parent, props?.children, anchor))\n}\n\n/** Namespace for explicit built-in JSX primitives such as <Vobs.Fragment>. */\nexport const Vobs = { Fragment }\n"],"mappings":"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","names":["createDOMRenderer","setRenderer","createElement","insertBefore","spreadProps","createComponent","createFragment","normalizeDynamicChild","cleanup"]}
|
package/dist/jsx.d.ts
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import type { Ref, RefTarget, VobsNode } from '@vobs/runtime'
|
|
2
|
+
|
|
3
|
+
// JSX 类型声明
|
|
4
|
+
|
|
5
|
+
type VobsEventHandler<T extends Event = Event> = (event: T) => void
|
|
6
|
+
|
|
7
|
+
interface VobsHTMLAttributes {
|
|
8
|
+
ref?: RefTarget<any>
|
|
9
|
+
accessKey?: string
|
|
10
|
+
autofocus?: boolean
|
|
11
|
+
checked?: boolean
|
|
12
|
+
class?: string
|
|
13
|
+
className?: string
|
|
14
|
+
cols?: number
|
|
15
|
+
disabled?: boolean
|
|
16
|
+
height?: number | string
|
|
17
|
+
hidden?: boolean
|
|
18
|
+
id?: string
|
|
19
|
+
max?: number | string
|
|
20
|
+
maxLength?: number
|
|
21
|
+
min?: number | string
|
|
22
|
+
minLength?: number
|
|
23
|
+
multiple?: boolean
|
|
24
|
+
name?: string
|
|
25
|
+
placeholder?: string
|
|
26
|
+
readOnly?: boolean
|
|
27
|
+
required?: boolean
|
|
28
|
+
rows?: number
|
|
29
|
+
selected?: boolean
|
|
30
|
+
size?: number
|
|
31
|
+
src?: string
|
|
32
|
+
step?: number | string
|
|
33
|
+
style?: string | Readonly<Record<string, string | number | boolean | null | undefined>>
|
|
34
|
+
tabIndex?: number
|
|
35
|
+
title?: string
|
|
36
|
+
type?: string
|
|
37
|
+
value?: string | number | readonly string[]
|
|
38
|
+
key?: string | number
|
|
39
|
+
width?: number | string
|
|
40
|
+
children?: unknown
|
|
41
|
+
onClick?: VobsEventHandler<MouseEvent>
|
|
42
|
+
onDblClick?: VobsEventHandler<MouseEvent>
|
|
43
|
+
onFocus?: VobsEventHandler<FocusEvent>
|
|
44
|
+
onBlur?: VobsEventHandler<FocusEvent>
|
|
45
|
+
onInput?: VobsEventHandler<InputEvent>
|
|
46
|
+
onChange?: VobsEventHandler<Event>
|
|
47
|
+
onKeyDown?: VobsEventHandler<KeyboardEvent>
|
|
48
|
+
onKeyUp?: VobsEventHandler<KeyboardEvent>
|
|
49
|
+
onSubmit?: VobsEventHandler<SubmitEvent>
|
|
50
|
+
[name: `data-${string}`]: string | number | boolean | undefined
|
|
51
|
+
[name: `aria-${string}`]: string | number | boolean | undefined
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
declare global {
|
|
55
|
+
namespace JSX {
|
|
56
|
+
type Element = VobsNode
|
|
57
|
+
interface ElementChildrenAttribute { children: {} }
|
|
58
|
+
interface IntrinsicElements {
|
|
59
|
+
a: VobsHTMLAttributes
|
|
60
|
+
abbr: VobsHTMLAttributes
|
|
61
|
+
address: VobsHTMLAttributes
|
|
62
|
+
article: VobsHTMLAttributes
|
|
63
|
+
aside: VobsHTMLAttributes
|
|
64
|
+
b: VobsHTMLAttributes
|
|
65
|
+
button: VobsHTMLAttributes
|
|
66
|
+
canvas: VobsHTMLAttributes
|
|
67
|
+
code: VobsHTMLAttributes
|
|
68
|
+
dd: VobsHTMLAttributes
|
|
69
|
+
del: VobsHTMLAttributes
|
|
70
|
+
details: VobsHTMLAttributes
|
|
71
|
+
dialog: VobsHTMLAttributes
|
|
72
|
+
div: VobsHTMLAttributes
|
|
73
|
+
dl: VobsHTMLAttributes
|
|
74
|
+
dt: VobsHTMLAttributes
|
|
75
|
+
em: VobsHTMLAttributes
|
|
76
|
+
fieldset: VobsHTMLAttributes
|
|
77
|
+
figcaption: VobsHTMLAttributes
|
|
78
|
+
figure: VobsHTMLAttributes
|
|
79
|
+
footer: VobsHTMLAttributes
|
|
80
|
+
form: VobsHTMLAttributes
|
|
81
|
+
h1: VobsHTMLAttributes
|
|
82
|
+
h2: VobsHTMLAttributes
|
|
83
|
+
h3: VobsHTMLAttributes
|
|
84
|
+
h4: VobsHTMLAttributes
|
|
85
|
+
h5: VobsHTMLAttributes
|
|
86
|
+
h6: VobsHTMLAttributes
|
|
87
|
+
header: VobsHTMLAttributes
|
|
88
|
+
hr: VobsHTMLAttributes
|
|
89
|
+
i: VobsHTMLAttributes
|
|
90
|
+
img: VobsHTMLAttributes
|
|
91
|
+
input: VobsHTMLAttributes
|
|
92
|
+
ins: VobsHTMLAttributes
|
|
93
|
+
kbd: VobsHTMLAttributes
|
|
94
|
+
label: VobsHTMLAttributes
|
|
95
|
+
legend: VobsHTMLAttributes
|
|
96
|
+
li: VobsHTMLAttributes
|
|
97
|
+
main: VobsHTMLAttributes
|
|
98
|
+
mark: VobsHTMLAttributes
|
|
99
|
+
nav: VobsHTMLAttributes
|
|
100
|
+
ol: VobsHTMLAttributes
|
|
101
|
+
optgroup: VobsHTMLAttributes
|
|
102
|
+
option: VobsHTMLAttributes
|
|
103
|
+
output: VobsHTMLAttributes
|
|
104
|
+
pre: VobsHTMLAttributes
|
|
105
|
+
p: VobsHTMLAttributes
|
|
106
|
+
q: VobsHTMLAttributes
|
|
107
|
+
s: VobsHTMLAttributes
|
|
108
|
+
section: VobsHTMLAttributes
|
|
109
|
+
select: VobsHTMLAttributes
|
|
110
|
+
small: VobsHTMLAttributes
|
|
111
|
+
span: VobsHTMLAttributes
|
|
112
|
+
strong: VobsHTMLAttributes
|
|
113
|
+
sub: VobsHTMLAttributes
|
|
114
|
+
summary: VobsHTMLAttributes
|
|
115
|
+
sup: VobsHTMLAttributes
|
|
116
|
+
table: VobsHTMLAttributes
|
|
117
|
+
tbody: VobsHTMLAttributes
|
|
118
|
+
td: VobsHTMLAttributes
|
|
119
|
+
textarea: VobsHTMLAttributes
|
|
120
|
+
tfoot: VobsHTMLAttributes
|
|
121
|
+
th: VobsHTMLAttributes
|
|
122
|
+
thead: VobsHTMLAttributes
|
|
123
|
+
time: VobsHTMLAttributes
|
|
124
|
+
tr: VobsHTMLAttributes
|
|
125
|
+
u: VobsHTMLAttributes
|
|
126
|
+
ul: VobsHTMLAttributes
|
|
127
|
+
video: VobsHTMLAttributes
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export {}
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"type": "git",
|
|
12
12
|
"url": "git+https://github.com/vobsjs/vobs.git"
|
|
13
13
|
},
|
|
14
|
-
"version": "1.
|
|
14
|
+
"version": "1.3.0",
|
|
15
15
|
"publishConfig": {
|
|
16
16
|
"access": "public"
|
|
17
17
|
},
|
|
@@ -38,6 +38,9 @@
|
|
|
38
38
|
"require": "./dist/jsx-dev-runtime.cjs",
|
|
39
39
|
"default": "./dist/jsx-dev-runtime.js"
|
|
40
40
|
},
|
|
41
|
+
"./jsx": {
|
|
42
|
+
"types": "./dist/jsx.d.ts"
|
|
43
|
+
},
|
|
41
44
|
"./source": {
|
|
42
45
|
"types": "./src/index.ts",
|
|
43
46
|
"default": "./src/index.ts"
|
|
@@ -45,8 +48,8 @@
|
|
|
45
48
|
"./source/*": "./src/*"
|
|
46
49
|
},
|
|
47
50
|
"dependencies": {
|
|
48
|
-
"@vobs/reactivity": "1.
|
|
49
|
-
"@vobs/dom": "1.
|
|
50
|
-
"@vobs/runtime": "1.
|
|
51
|
+
"@vobs/reactivity": "1.3.0",
|
|
52
|
+
"@vobs/dom": "1.3.0",
|
|
53
|
+
"@vobs/runtime": "1.3.0"
|
|
51
54
|
}
|
|
52
55
|
}
|
package/src/index.ts
CHANGED
package/src/jsx.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type { VobsNode } from '
|
|
2
|
-
import type { Ref, RefTarget } from '@vobs/runtime'
|
|
1
|
+
import type { Ref, RefTarget, VobsNode } from '@vobs/runtime'
|
|
3
2
|
|
|
4
3
|
// JSX 类型声明
|
|
5
4
|
|
|
@@ -9,6 +8,7 @@ interface VobsHTMLAttributes {
|
|
|
9
8
|
ref?: RefTarget<any>
|
|
10
9
|
accessKey?: string
|
|
11
10
|
autofocus?: boolean
|
|
11
|
+
checked?: boolean
|
|
12
12
|
class?: string
|
|
13
13
|
className?: string
|
|
14
14
|
cols?: number
|
|
@@ -57,30 +57,62 @@ declare global {
|
|
|
57
57
|
interface ElementChildrenAttribute { children: {} }
|
|
58
58
|
interface IntrinsicElements {
|
|
59
59
|
a: VobsHTMLAttributes
|
|
60
|
+
abbr: VobsHTMLAttributes
|
|
61
|
+
address: VobsHTMLAttributes
|
|
60
62
|
article: VobsHTMLAttributes
|
|
61
63
|
aside: VobsHTMLAttributes
|
|
64
|
+
b: VobsHTMLAttributes
|
|
62
65
|
button: VobsHTMLAttributes
|
|
66
|
+
canvas: VobsHTMLAttributes
|
|
63
67
|
code: VobsHTMLAttributes
|
|
68
|
+
dd: VobsHTMLAttributes
|
|
69
|
+
del: VobsHTMLAttributes
|
|
70
|
+
details: VobsHTMLAttributes
|
|
71
|
+
dialog: VobsHTMLAttributes
|
|
64
72
|
div: VobsHTMLAttributes
|
|
73
|
+
dl: VobsHTMLAttributes
|
|
74
|
+
dt: VobsHTMLAttributes
|
|
75
|
+
em: VobsHTMLAttributes
|
|
76
|
+
fieldset: VobsHTMLAttributes
|
|
77
|
+
figcaption: VobsHTMLAttributes
|
|
78
|
+
figure: VobsHTMLAttributes
|
|
65
79
|
footer: VobsHTMLAttributes
|
|
66
80
|
form: VobsHTMLAttributes
|
|
67
81
|
h1: VobsHTMLAttributes
|
|
68
82
|
h2: VobsHTMLAttributes
|
|
69
83
|
h3: VobsHTMLAttributes
|
|
84
|
+
h4: VobsHTMLAttributes
|
|
85
|
+
h5: VobsHTMLAttributes
|
|
86
|
+
h6: VobsHTMLAttributes
|
|
70
87
|
header: VobsHTMLAttributes
|
|
88
|
+
hr: VobsHTMLAttributes
|
|
89
|
+
i: VobsHTMLAttributes
|
|
71
90
|
img: VobsHTMLAttributes
|
|
72
91
|
input: VobsHTMLAttributes
|
|
92
|
+
ins: VobsHTMLAttributes
|
|
93
|
+
kbd: VobsHTMLAttributes
|
|
73
94
|
label: VobsHTMLAttributes
|
|
95
|
+
legend: VobsHTMLAttributes
|
|
74
96
|
li: VobsHTMLAttributes
|
|
75
97
|
main: VobsHTMLAttributes
|
|
98
|
+
mark: VobsHTMLAttributes
|
|
76
99
|
nav: VobsHTMLAttributes
|
|
77
100
|
ol: VobsHTMLAttributes
|
|
101
|
+
optgroup: VobsHTMLAttributes
|
|
78
102
|
option: VobsHTMLAttributes
|
|
103
|
+
output: VobsHTMLAttributes
|
|
79
104
|
pre: VobsHTMLAttributes
|
|
80
105
|
p: VobsHTMLAttributes
|
|
106
|
+
q: VobsHTMLAttributes
|
|
107
|
+
s: VobsHTMLAttributes
|
|
81
108
|
section: VobsHTMLAttributes
|
|
82
109
|
select: VobsHTMLAttributes
|
|
110
|
+
small: VobsHTMLAttributes
|
|
83
111
|
span: VobsHTMLAttributes
|
|
112
|
+
strong: VobsHTMLAttributes
|
|
113
|
+
sub: VobsHTMLAttributes
|
|
114
|
+
summary: VobsHTMLAttributes
|
|
115
|
+
sup: VobsHTMLAttributes
|
|
84
116
|
table: VobsHTMLAttributes
|
|
85
117
|
tbody: VobsHTMLAttributes
|
|
86
118
|
td: VobsHTMLAttributes
|
|
@@ -88,8 +120,11 @@ declare global {
|
|
|
88
120
|
tfoot: VobsHTMLAttributes
|
|
89
121
|
th: VobsHTMLAttributes
|
|
90
122
|
thead: VobsHTMLAttributes
|
|
123
|
+
time: VobsHTMLAttributes
|
|
91
124
|
tr: VobsHTMLAttributes
|
|
125
|
+
u: VobsHTMLAttributes
|
|
92
126
|
ul: VobsHTMLAttributes
|
|
127
|
+
video: VobsHTMLAttributes
|
|
93
128
|
}
|
|
94
129
|
}
|
|
95
130
|
}
|