uentropy 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/context.ts","../src/symbols.ts","../src/utils.ts","../src/computed.ts","../src/watchers.ts","../src/dom/queries.ts","../src/directives/builtins.ts","../src/directives/index.ts","../src/core.ts","../src/dom/components.ts","../src/instance.ts","../src/index.ts"],"names":["getValue","clone"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { Watcher, DirectiveEntry, ComputedList } from './types';\n\n// ─── Sub-state shapes ─────────────────────────────────────────────────────────\n\nexport interface DepsState {\n /** True while a computed function is being evaluated for dep-tracking */\n isEvaluating: boolean;\n /** Keys accessed during the current dep-tracking evaluation */\n set: Set<string>;\n /** Map from dependency key → list of computed values that depend on it */\n map: Map<string, ComputedList>;\n /**\n * Monotonically increasing version number per computed key.\n * Used to discard stale async computed results.\n */\n versions: Map<string, number>;\n}\n\n// ─── Main context ─────────────────────────────────────────────────────────────\n\nexport interface EntropyContext {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data: any | null;\n prefix: string;\n watchers: Map<string, Watcher[]>;\n directives: Map<string, DirectiveEntry>;\n deps: DepsState;\n /**\n * Tracks functions that are *results* of computed calls (not computed\n * definitions). These must not be invoked again by the proxy get-trap.\n */\n computedResultFns: WeakSet<Function>;\n /**\n * When non-null, DOM updates are queued here instead of applied\n * immediately. Call `flushBatch` to apply them.\n */\n batchQueue: Array<() => void> | null;\n /** Set to true after destroy() is called – ignores further updates */\n destroyed: boolean;\n /**\n * Cache of querySelectorAll results keyed by query string.\n * Populated lazily, cleared automatically by the MutationObserver\n * whenever the DOM changes.\n */\n elementCache: Map<string, Element[]>;\n /** Watches the document for DOM mutations to invalidate elementCache. */\n observer: MutationObserver | null;\n}\n\n// ─── Factory ──────────────────────────────────────────────────────────────────\n\nexport function createContext(): EntropyContext {\n return {\n data: null,\n prefix: 'en-',\n watchers: new Map(),\n directives: new Map(),\n deps: {\n isEvaluating: false,\n set: new Set(),\n map: new Map(),\n versions: new Map(),\n },\n computedResultFns: new WeakSet(),\n batchQueue: null,\n destroyed: false,\n elementCache: new Map(),\n observer: null,\n };\n}\n","/** Stores the reactive key-path prefix on reactive objects and functions */\nexport const enPrefix = Symbol('@en/prefix');\n\n/**\n * Set on functions returned as the *result* of a computed call.\n * Prevents the proxy get-trap from calling them a second time.\n * Replaces the original DONT_CALL symbol hack – kept in a WeakSet on the\n * context so there is no property mutation on arbitrary user functions.\n */\nexport const COMPUTED_RESULT_TAG = Symbol('@en/computed-result');\n","import { enPrefix } from './symbols';\nimport type { Prefixed } from './types';\n\n// ─── Key helpers ──────────────────────────────────────────────────────────────\n\nexport function getKey(prop: string, prefix: string): string {\n return prefix === '' ? prop : `${prefix}.${prop}`;\n}\n\nexport function getParam(\n el: Element,\n attrName: string,\n isParametric: boolean,\n): string | undefined {\n if (!isParametric) return undefined;\n const value = el.getAttribute(attrName);\n if (!value) return undefined;\n return value.slice(value.indexOf(':') + 1);\n}\n\n// ─── Type guards ──────────────────────────────────────────────────────────────\n\nexport function isPrefixedObject(value: unknown): value is Prefixed<object> {\n return typeof value === 'object' && value !== null && enPrefix in value;\n}\n\n// ─── Deep clone ───────────────────────────────────────────────────────────────\n\n/**\n * Deep clones a value.\n * Handles: primitives, Date, RegExp, Map, Set, Arrays, plain objects.\n * Unknown exotic types fall back to a plain-object shallow copy.\n */\nexport function clone<T>(target: T): T {\n if (target === null || typeof target !== 'object') return target;\n\n if (target instanceof Date) {\n return new Date(target.getTime()) as unknown as T;\n }\n if (target instanceof RegExp) {\n return new RegExp(target.source, target.flags) as unknown as T;\n }\n if (target instanceof Map) {\n return new Map(\n [...target].map(([k, v]) => [clone(k), clone(v)]),\n ) as unknown as T;\n }\n if (target instanceof Set) {\n return new Set([...target].map(v => clone(v))) as unknown as T;\n }\n if (Array.isArray(target)) {\n return target.map(v => clone(v)) as unknown as T;\n }\n\n const result: Record<string, unknown> = Object.create(\n Object.getPrototypeOf(target),\n );\n for (const key of Object.keys(target as object)) {\n result[key] = clone((target as Record<string, unknown>)[key]);\n }\n return result as T;\n}\n","import type { EntropyContext } from './context';\nimport type { Prefixed, ComputedDep } from './types';\n\n// ─── Public computed() wrapper ────────────────────────────────────────────────\n\nconst IS_COMPUTED = Symbol('@en/computed');\n\n/**\n * Marks a function as a computed value so entropy knows to call it\n * reactively instead of treating it as a plain function reference.\n *\n * @example\n * ```ts\n * const data = en.init();\n * data.fullName = en.computed(() => `${data.firstName} ${data.lastName}`);\n * ```\n */\nexport function computed<T extends (...args: unknown[]) => unknown>(fn: T): T {\n Object.defineProperty(fn, IS_COMPUTED, {\n value: true,\n enumerable: false,\n configurable: true,\n writable: false,\n });\n return fn;\n}\n\nexport function isUserComputed(fn: unknown): fn is Function {\n return typeof fn === 'function' && IS_COMPUTED in fn;\n}\n\n// ─── Dep graph helpers ────────────────────────────────────────────────────────\n\n/**\n * Removes all dep-graph entries whose output key matches `key`.\n * Called before re-registering deps so the graph never accumulates stale edges.\n */\nexport function clearDepsForKey(ctx: EntropyContext, key: string): void {\n for (const [depKey, list] of ctx.deps.map) {\n const filtered = list.filter(d => d.key !== key);\n if (filtered.length === 0) {\n ctx.deps.map.delete(depKey);\n } else {\n ctx.deps.map.set(depKey, filtered);\n }\n }\n}\n\n/**\n * Reads `ctx.deps.set` (populated during a tracked evaluation) and writes\n * edges into `ctx.deps.map` for each accessed key.\n */\nexport function registerTrackedDeps(\n ctx: EntropyContext,\n key: string,\n computedFn: Prefixed<Function>,\n parent: Prefixed<object>,\n prop: string,\n): void {\n const dependent: ComputedDep = { key, computed: computedFn, parent, prop };\n for (const dep of ctx.deps.set) {\n const list = ctx.deps.map.get(dep) ?? [];\n list.push(dependent);\n ctx.deps.map.set(dep, list);\n }\n}\n\n// ─── Dependency tracking ──────────────────────────────────────────────────────\n\n/**\n * Evaluates `value` to discover which reactive keys it reads, then stores\n * those dependencies in `ctx.deps.map` so the computed can be re-evaluated\n * when any dependency changes.\n *\n * Used on *initial assignment* only. Re-evaluations go through `runComputed`\n * in core.ts which tracks deps inline during the actual execution.\n */\nexport function setDependents(\n ctx: EntropyContext,\n value: Prefixed<Function>,\n key: string,\n parent: Prefixed<object>,\n prop: string,\n): void {\n clearDepsForKey(ctx, key);\n\n ctx.deps.isEvaluating = true;\n ctx.deps.set.clear();\n try {\n value();\n } catch {\n // Errors during dep-capture are intentionally swallowed; the computed\n // may reference data not yet initialised.\n } finally {\n ctx.deps.isEvaluating = false;\n }\n\n registerTrackedDeps(ctx, key, value, parent, prop);\n ctx.deps.set.clear();\n}\n\n// ─── Computed update propagation ──────────────────────────────────────────────\n\n/**\n * Returns all ComputedDeps that transitively depend on `changedKey`,\n * deduplicating by the computed function reference.\n */\nexport function getDependentsOf(\n ctx: EntropyContext,\n changedKey: string,\n): ComputedDep[] {\n const matched: ComputedDep[] = [...ctx.deps.map.entries()]\n .filter(\n ([k]) =>\n k === changedKey ||\n k.startsWith(changedKey + '.') ||\n changedKey.startsWith(k + '.'),\n )\n .flatMap(([, list]) => list);\n\n // Deduplicate by computed function reference\n const seen = new Set<Function>();\n return matched.filter(dep => {\n if (seen.has(dep.computed)) return false;\n seen.add(dep.computed);\n return true;\n });\n}\n\n/**\n * Removes all dependency entries for a given key (called on deleteProperty).\n */\nexport function removeDependentsFor(\n ctx: EntropyContext,\n deletedKey: string,\n): void {\n ctx.deps.map.delete(deletedKey);\n for (const [k, list] of ctx.deps.map) {\n const filtered = list.filter(d => d.key !== deletedKey);\n if (filtered.length === 0) {\n ctx.deps.map.delete(k);\n } else {\n ctx.deps.map.set(k, filtered);\n }\n }\n}\n\n// ─── Async version tracking ───────────────────────────────────────────────────\n\nexport function bumpVersion(ctx: EntropyContext, key: string): number {\n const v = (ctx.deps.versions.get(key) ?? 0) + 1;\n ctx.deps.versions.set(key, v);\n return v;\n}\n\nexport function isCurrentVersion(\n ctx: EntropyContext,\n key: string,\n version: number,\n): boolean {\n return ctx.deps.versions.get(key) === version;\n}\n","import type { EntropyContext } from './context';\nimport type { Watcher } from './types';\n\n/**\n * Registers a watcher for `key`. The watcher is called with the new value\n * whenever `key` or any child key changes.\n */\nexport function watch(\n ctx: EntropyContext,\n key: string,\n watcher: Watcher,\n): void {\n const list = ctx.watchers.get(key) ?? [];\n list.push(watcher);\n // Always set to handle the case where the list was freshly created\n ctx.watchers.set(key, list);\n}\n\n/**\n * Removes watchers. All combinations are supported:\n * - `unwatch()` – clears everything\n * - `unwatch(key)` – clears all watchers for a key\n * - `unwatch(undefined, fn)` – removes one fn from all keys\n * - `unwatch(key, fn)` – removes one fn from a specific key\n */\nexport function unwatch(\n ctx: EntropyContext,\n key?: string,\n watcher?: Watcher,\n): void {\n if (!key && !watcher) {\n ctx.watchers.clear();\n return;\n }\n\n if (key && !watcher) {\n ctx.watchers.delete(key);\n return;\n }\n\n const targets: [string, Watcher[]][] = key\n ? [[key, ctx.watchers.get(key) ?? []]]\n : [...ctx.watchers.entries()];\n\n for (const [k, list] of targets) {\n const filtered = list.filter(w => w !== watcher);\n if (filtered.length === 0) {\n ctx.watchers.delete(k);\n } else {\n ctx.watchers.set(k, filtered);\n }\n }\n}\n\n/**\n * Invokes all watchers whose key matches or is an ancestor of `changedKey`.\n */\nexport function callWatchers(\n ctx: EntropyContext,\n changedKey: string,\n changedValue: unknown,\n getValue: (k: string) => unknown,\n): void {\n for (const [watchedKey, watchers] of ctx.watchers) {\n if (changedKey === watchedKey) {\n watchers.forEach(cb => cb(changedValue));\n } else if (changedKey.startsWith(watchedKey + '.')) {\n // A child changed – call the watcher with the whole sub-tree value\n const parentValue = getValue(watchedKey);\n watchers.forEach(cb => cb(parentValue));\n }\n }\n}\n","import type { EntropyContext } from '../context';\nimport type { Prefixed } from '../types';\n\nexport type GetValueResult = {\n value: unknown;\n parent: Prefixed<object> | null;\n prop: string;\n};\n\n/**\n * Resolves a period-separated key against the reactive data tree.\n * Returns the value, its immediate parent object, and the property name.\n *\n * @example\n * // data = { user: { name: 'Alice' } }\n * getValue(ctx, 'user.name') // → { value: 'Alice', parent: data.user, prop: 'name' }\n */\nexport function getValue(ctx: EntropyContext, key: string): GetValueResult {\n let parent = ctx.data as Prefixed<object> | null;\n let value: unknown = undefined;\n let prop = '';\n\n if (parent === null) {\n return { parent, value, prop };\n }\n\n const parts = key.split('.');\n for (let i = 0; i < parts.length; i++) {\n prop = parts[i]!;\n value = Reflect.get(parent, prop);\n\n if (i < parts.length - 1) {\n if (typeof value !== 'object' || value === null) {\n // Path doesn't exist – return what we have\n return { parent, value: undefined, prop };\n }\n parent = value as Prefixed<object>;\n }\n }\n\n return { parent, value, prop };\n}\n","import type { DirectiveEntry, DirectiveParams } from '../types';\nimport type { EntropyContext } from '../context';\nimport { getValue } from '../dom/queries';\n\n// ─── mark ─────────────────────────────────────────────────────────────────────\n\nfunction markDirective({ el, value, isDelete }: DirectiveParams): void {\n if (isDelete) {\n removeElement(el);\n return;\n }\n\n if (!(el instanceof HTMLElement)) return;\n\n if (typeof value === 'object' && value !== null) {\n value = JSON.stringify(value);\n }\n\n el.textContent = typeof value === 'string' ? value : String(value);\n}\n\n// ─── model ────────────────────────────────────────────────────────────────────\n\n/**\n * Two-way binding directive. Syncs a reactive key with an input element:\n *\n * - DOM → data: listens to `input` (text, number, textarea), `change`\n * (select, checkbox, radio), keeping data in sync as the user types.\n * - data → DOM: sets the element value / checked state when the reactive\n * key changes, exactly like `en-mark` does for textContent.\n *\n * Supported elements: input[type=text|number|email|password|range|date|…],\n * input[type=checkbox], input[type=radio], textarea, select.\n *\n * Usage: `<input en-model=\"key\" />`\n */\n\n// WeakSet so listeners are GC-able with their elements\nconst modelListeners = new WeakMap<Element, () => void>();\n\nfunction modelDirective(ctx: EntropyContext): (params: DirectiveParams) => void {\n return ({ el, value, key }: DirectiveParams) => {\n if (!(el instanceof HTMLInputElement ||\n el instanceof HTMLTextAreaElement ||\n el instanceof HTMLSelectElement)) return;\n\n // ── data → DOM ──────────────────────────────────────────────────────────\n if (el instanceof HTMLInputElement && el.type === 'checkbox') {\n el.checked = !!value;\n } else if (el instanceof HTMLInputElement && el.type === 'radio') {\n el.checked = el.value === String(value);\n } else {\n // text, number, email, password, range, date, textarea, select\n const strVal = value === null || value === undefined ? '' : String(value);\n if (el.value !== strVal) el.value = strVal;\n }\n\n // ── DOM → data (attach listener once per element) ───────────────────────\n if (modelListeners.has(el)) return;\n\n const isCheckbox = el instanceof HTMLInputElement && el.type === 'checkbox';\n const isRadio = el instanceof HTMLInputElement && el.type === 'radio';\n const isNumber = el instanceof HTMLInputElement && el.type === 'number';\n const isSelect = el instanceof HTMLSelectElement;\n const eventName = (isCheckbox || isRadio || isSelect) ? 'change' : 'input';\n\n const handler = () => {\n const { parent, prop } = getValue(ctx, key);\n if (!parent) return;\n\n let incoming: unknown;\n if (isCheckbox) incoming = (el as HTMLInputElement).checked;\n else if (isNumber) incoming = (el as HTMLInputElement).valueAsNumber;\n else incoming = (el as HTMLElement & { value: string }).value;\n\n Reflect.set(parent, prop, incoming);\n };\n\n el.addEventListener(eventName, handler);\n modelListeners.set(el, handler);\n };\n}\n\n// ─── if / ifnot ──────────────────────────────────────────────────────────────\n\n/**\n * Factory: returns directive entries for `if` and `ifnot` that delegate to\n * `ifOrIfNotFn`. The function is injected to avoid a circular import between\n * this module and core.ts.\n */\nexport function createConditionalDirectives(\n ifOrIfNotFn: (\n el: Element,\n value: unknown,\n key: string,\n type: 'if' | 'ifnot',\n ) => void,\n): { if: DirectiveEntry; ifnot: DirectiveEntry } {\n return {\n if: {\n cb: ({ el, value, key }: DirectiveParams) =>\n ifOrIfNotFn(el, value, key, 'if'),\n },\n ifnot: {\n cb: ({ el, value, key }: DirectiveParams) =>\n ifOrIfNotFn(el, value, key, 'ifnot'),\n },\n };\n}\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction removeElement(el: Element): void {\n const parent = el.parentElement;\n\n if (!(el instanceof HTMLElement) || !parent) {\n return el.remove();\n }\n\n const elMark = el.getAttribute('data-en-mark') ?? el.getAttribute('en-mark');\n const parentMark =\n parent.getAttribute('data-en-mark') ?? parent.getAttribute('en-mark');\n\n if (elMark && elMark === parentMark) {\n return parent.remove();\n }\n\n el.remove();\n}\n\n// ─── Exports ──────────────────────────────────────────────────────────────────\n\nexport const markEntry: DirectiveEntry = { cb: markDirective };\n\nexport function createModelEntry(ctx: EntropyContext): DirectiveEntry {\n return { cb: modelDirective(ctx) };\n}\n","import type { EntropyContext } from '../context';\nimport type { Directive, DirectiveEntry } from '../types';\nimport { markEntry, createModelEntry } from './builtins';\n\n/**\n * Seeds the directive map with built-in directives.\n * Conditional directives (if / ifnot) are registered later from core.ts\n * once the `ifOrIfNot` implementation is available.\n */\nexport function registerBuiltins(ctx: EntropyContext): void {\n ctx.directives.set('mark', markEntry);\n ctx.directives.set('model', createModelEntry(ctx));\n}\n\n/**\n * Registers a custom directive. No-ops if the name is already taken to\n * prevent accidental overrides during hot-reload scenarios.\n */\nexport function registerDirective(\n ctx: EntropyContext,\n name: string,\n cb: Directive,\n isParametric = false,\n): void {\n if (ctx.directives.has(name)) return;\n ctx.directives.set(name, { cb, isParametric });\n}\n\nexport function getDirective(\n ctx: EntropyContext,\n name: string,\n): DirectiveEntry | undefined {\n return ctx.directives.get(name);\n}\n\nexport function allDirectives(\n ctx: EntropyContext,\n): IterableIterator<[string, DirectiveEntry]> {\n return ctx.directives.entries();\n}\n","/**\n * core.ts – Reactive engine\n *\n * Contains the tightly-coupled pieces that cannot be cleanly separated\n * without introducing circular imports:\n *\n * • reactive() – wraps a value in a Proxy\n * • Proxy handler – traps get / set / deleteProperty / defineProperty\n * • update() – propagates a change to watchers + directives\n * • callDirectives() – split into focused helpers (array / object / primitive)\n * • DOM array helpers – updateArrayItemElement, sortArrayItemElements, …\n * • syncNode / Conditional (if/ifnot) handlers\n */\n\nimport { enPrefix } from './symbols';\nimport { getKey, getParam, isPrefixedObject, clone } from './utils';\nimport type { EntropyContext } from './context';\nimport type { Prefixed, SyncConfig, DirectiveEntry } from './types';\nimport {\n setDependents,\n getDependentsOf,\n removeDependentsFor,\n bumpVersion,\n isCurrentVersion,\n clearDepsForKey,\n registerTrackedDeps,\n} from './computed';\nimport { callWatchers } from './watchers';\nimport { getValue } from './dom/queries';\nimport { registerBuiltins } from './directives/index';\nimport { createConditionalDirectives } from './directives/builtins';\n\n// ─── Bootstrap ────────────────────────────────────────────────────────────────\n\n/**\n * Seeds built-in directives on the context.\n * Must be called once after `createContext()` and before `init()`.\n */\nexport function bootstrapDirectives(ctx: EntropyContext): void {\n registerBuiltins(ctx);\n\n const conditionals = createConditionalDirectives(\n (el, value, key, type) => ifOrIfNot(ctx, el, value, key, type),\n );\n ctx.directives.set('if', conditionals.if);\n ctx.directives.set('ifnot', conditionals.ifnot);\n}\n\n// ─── Element cache ────────────────────────────────────────────────────────────\n\n/**\n * Attaches a MutationObserver that clears ctx.elementCache whenever the DOM\n * changes. Without this, cached querySelectorAll results would become stale\n * after nodes are inserted or removed (e.g. en-if, array updates).\n *\n * Safe to call multiple times – a second call is a no-op.\n */\nexport function setupObserver(ctx: EntropyContext): void {\n if (ctx.observer || typeof MutationObserver === 'undefined') return;\n ctx.observer = new MutationObserver(() => ctx.elementCache.clear());\n ctx.observer.observe(document, { childList: true, subtree: true });\n}\n\n/**\n * Runs querySelectorAll with a per-context result cache.\n * Results are only cached when the search root is the whole document —\n * scoped searches (e.g. inside a single array item) are never cached because\n * their root element may itself be transient.\n */\nfunction queryAll(\n ctx: EntropyContext,\n root: Document | Element,\n query: string,\n): Element[] {\n if (!(root instanceof Document)) {\n return Array.from(root.querySelectorAll(query));\n }\n const cached = ctx.elementCache.get(query);\n if (cached) return cached;\n const result = Array.from(root.querySelectorAll(query));\n ctx.elementCache.set(query, result);\n return result;\n}\n\n// ─── reactive() ───────────────────────────────────────────────────────────────\n\n/**\n * Makes a value reactive by wrapping objects/arrays in a Proxy and attaching\n * the `enPrefix` key-path marker. Functions become computed values and have\n * their dependencies tracked.\n */\nexport function reactive<T>(\n ctx: EntropyContext,\n obj: T,\n prefix: string,\n parent?: Prefixed<object>,\n prop?: string,\n): T | Prefixed<T> {\n if (obj === null) return obj;\n\n const isObject = typeof obj === 'object';\n const isFunction = typeof obj === 'function';\n\n if (isFunction && parent) {\n obj = (obj as unknown as Function).bind(parent) as unknown as T;\n }\n\n if (isObject || isFunction) {\n Object.defineProperty(obj, enPrefix, {\n value: prefix,\n enumerable: false,\n writable: true,\n configurable: true,\n });\n }\n\n // Functions are computed values – track their deps and return early\n // (functions are NOT further wrapped in a Proxy)\n if (isFunction && prop && parent) {\n setDependents(ctx, obj as unknown as Prefixed<Function>, prefix, parent, prop);\n return obj;\n }\n\n if (!isObject) return obj;\n\n type K = keyof T;\n const proxied = new Proxy(\n obj as unknown as Prefixed<object>,\n makeHandler(ctx),\n ) as Prefixed<T>;\n\n for (const p of Object.keys(obj as object)) {\n const childPrefix = getKey(p, prefix);\n const value = (obj as Record<string, unknown>)[p];\n (obj as Record<string, unknown>)[p] = reactive(\n ctx,\n value,\n childPrefix,\n proxied,\n p,\n );\n }\n\n return proxied;\n}\n\n// ─── Proxy handler factory ────────────────────────────────────────────────────\n\nfunction makeHandler(ctx: EntropyContext): ProxyHandler<Prefixed<object>> {\n return {\n // ── get ───────────────────────────────────────────────────────────────────\n get(\n target: Prefixed<object>,\n prop: string | symbol,\n receiver: Prefixed<object>,\n ): unknown {\n // Track dependencies during computed evaluation\n if (\n ctx.deps.isEvaluating &&\n typeof prop === 'string' &&\n Object.getOwnPropertyDescriptor(target, prop)?.enumerable\n ) {\n ctx.deps.set.add(getKey(prop, target[enPrefix]));\n }\n\n const value = Reflect.get(target, prop, receiver);\n\n // Call computed functions, but not if they are a computed *result*\n if (\n typeof value === 'function' &&\n enPrefix in value &&\n !ctx.computedResultFns.has(value)\n ) {\n const result = value();\n if (result instanceof Promise) {\n return result.then(v => proxyComputed(ctx, v));\n }\n return proxyComputed(ctx, result);\n }\n\n return value;\n },\n\n // ── set ───────────────────────────────────────────────────────────────────\n set(\n target: Prefixed<object>,\n prop: string | symbol,\n value: unknown,\n receiver: Prefixed<object>,\n ): boolean {\n if (typeof prop === 'symbol') {\n return Reflect.set(target, prop, value, receiver);\n }\n\n const key = getKey(prop, target[enPrefix]);\n const reactiveValue = reactive(ctx, value, key, receiver, prop);\n const success = Reflect.set(target, prop, reactiveValue, receiver);\n\n scheduleUpdate(ctx, () =>\n update(ctx, reactiveValue, key, false, receiver, prop),\n );\n scheduleUpdate(ctx, () => updateComputed(ctx, key));\n\n return success;\n },\n\n // ── deleteProperty ────────────────────────────────────────────────────────\n deleteProperty(target: Prefixed<object>, prop: string | symbol): boolean {\n if (typeof prop === 'symbol') {\n return Reflect.deleteProperty(target, prop);\n }\n\n const key = getKey(prop, target[enPrefix]);\n const success = Reflect.deleteProperty(target, prop);\n\n update(ctx, undefined, key, true, target, prop);\n removeDependentsFor(ctx, key);\n\n return success;\n },\n\n // ── defineProperty ────────────────────────────────────────────────────────\n defineProperty(\n target: Prefixed<object>,\n prop: string | symbol,\n descriptor: PropertyDescriptor,\n ): boolean {\n // Allow array index re-keying (e.g. when an array element is moved)\n if (\n prop === enPrefix &&\n enPrefix in target &&\n typeof descriptor.value === 'string' &&\n /\\.\\d+$/.test(descriptor.value)\n ) {\n return Reflect.set(target, prop, descriptor.value);\n }\n return Reflect.defineProperty(target, prop, descriptor);\n },\n };\n}\n\n// ─── Batch scheduling ─────────────────────────────────────────────────────────\n\nfunction scheduleUpdate(ctx: EntropyContext, fn: () => void): void {\n if (ctx.batchQueue !== null) {\n ctx.batchQueue.push(fn);\n } else {\n fn();\n }\n}\n\n// ─── Computed propagation ─────────────────────────────────────────────────────\n\nfunction updateComputed(ctx: EntropyContext, changedKey: string): void {\n const deps = getDependentsOf(ctx, changedKey);\n for (const dep of deps) {\n update(ctx, dep.computed, dep.key, false, dep.parent, dep.prop);\n }\n}\n\n// ─── Core update ─────────────────────────────────────────────────────────────\n\n/**\n * The central propagation function. Called whenever a reactive value changes.\n * Resolves computed functions, handles async Promises, then notifies watchers\n * and directives.\n */\nexport function update(\n ctx: EntropyContext,\n value: unknown,\n key: string,\n isDelete: boolean,\n parent: Prefixed<object>,\n prop: string,\n syncConfig?: SyncConfig,\n): void {\n if (ctx.destroyed) return;\n\n // If value is a computed function, run it\n if (\n typeof value === 'function' &&\n !ctx.computedResultFns.has(value as Function)\n ) {\n value = runComputed(ctx, value as Function, key, parent, prop);\n if (value === undefined) return; // async – will re-enter when resolved\n }\n\n // Async value: re-enter when the Promise resolves\n if (value instanceof Promise) {\n const version = bumpVersion(ctx, key);\n (value as Promise<unknown>).then((v: unknown) => {\n if (!isCurrentVersion(ctx, key, version)) return;\n update(ctx, v, key, false, parent, prop, syncConfig);\n });\n return;\n }\n\n if (!syncConfig) {\n callWatchers(ctx, key, value, (k) => getValue(ctx, k).value);\n }\n\n callDirectives(ctx, value, key, isDelete, parent, prop, undefined, undefined, syncConfig);\n}\n\n// ─── Computed helpers ─────────────────────────────────────────────────────────\n\nfunction runComputed(\n ctx: EntropyContext,\n computedFn: Function,\n key: string,\n parent: Prefixed<object>,\n prop: string,\n): unknown {\n const version = bumpVersion(ctx, key);\n const result = computedFn();\n\n if (result instanceof Promise) {\n result\n .then(v => {\n if (!isCurrentVersion(ctx, key, version)) return;\n const proxied = proxyComputed(ctx, v, key, parent, prop);\n update(ctx, proxied, key, false, parent, prop);\n })\n .catch(err =>\n console.error(`[entropy] Async computed error at \"${key}\":`, err),\n );\n return undefined;\n }\n\n return proxyComputed(ctx, result, key, parent, prop);\n}\n\nfunction proxyComputed(\n ctx: EntropyContext,\n value: unknown,\n key?: string,\n parent?: Prefixed<object>,\n prop?: string,\n): unknown {\n if (typeof value === 'function') {\n // Tag function as a computed result so the get-trap won't call it again\n ctx.computedResultFns.add(value as Function);\n return value;\n }\n\n if (key === undefined || parent === undefined || prop === undefined) {\n return clone(value);\n }\n\n return reactive(ctx, clone(value), key, parent, prop);\n}\n\n// ─── callDirectives (split into focused sub-functions) ────────────────────────\n\nfunction callDirectives(\n ctx: EntropyContext,\n value: unknown,\n key: string,\n isDelete: boolean,\n parent: Prefixed<object>,\n prop: string,\n searchRoot?: Element | Document,\n skipUpdateArrayElements?: boolean,\n syncConfig?: SyncConfig,\n): void {\n const isParentArray = Array.isArray(parent);\n\n // Handle array item updates / length changes\n if (isParentArray && /^\\d+$/.test(prop) && !skipUpdateArrayElements && syncConfig?.skipMark !== true) {\n updateArrayItemElement(ctx, key, prop, value, parent as Prefixed<unknown[]>);\n } else if (isParentArray && prop === 'length') {\n sortArrayItemElements(ctx, parent as Prefixed<unknown[]>);\n }\n\n // Recurse into reactive objects / arrays\n if (isPrefixedObject(value)) {\n if (Array.isArray(value) && syncConfig?.skipMark !== true) {\n callDirectivesForArray(ctx, value, key, isDelete, parent, prop, searchRoot, syncConfig);\n } else {\n callDirectivesForObject(ctx, value, key, isDelete, parent, prop, searchRoot);\n }\n // Also fire directives bound directly to this key (e.g. en-mark=\"obj\" → JSON).\n // Arrays are handled separately via their placeholder mechanism.\n if (!Array.isArray(value)) {\n callDirectivesForLeaf(ctx, value, key, isDelete, parent, prop, searchRoot, syncConfig);\n }\n return;\n }\n\n // Primitive / non-reactive value – call matching directive callbacks\n callDirectivesForLeaf(ctx, value, key, isDelete, parent, prop, searchRoot, syncConfig);\n}\n\nfunction callDirectivesForArray(\n ctx: EntropyContext,\n value: Prefixed<unknown[]>,\n key: string,\n isDelete: boolean,\n parent: Prefixed<object>,\n prop: string,\n searchRoot?: Element | Document,\n syncConfig?: SyncConfig,\n): void {\n const placeholderKey = `${key}.#`;\n const attrMark = ctx.prefix + 'mark';\n const query = `[${attrMark}=\"${placeholderKey}\"]`;\n\n let target: Document | Element = document;\n if (syncConfig?.el.parentElement) {\n target = syncConfig.el.parentElement;\n }\n\n const elsArrays: Element[][] = [];\n queryAll(ctx, target, query).forEach(plc => {\n const els = initializeArrayElements(ctx, plc, placeholderKey, value);\n elsArrays.push(els);\n });\n\n for (const els of elsArrays) {\n for (const i in value) {\n callDirectives(\n ctx,\n value[i as unknown as number],\n getKey(i, key),\n isDelete,\n value,\n i,\n els[i as unknown as number] ?? undefined,\n true,\n );\n }\n }\n\n // Propagate to directives watching `key.length` (e.g. en-ifnot=\"items.length\")\n callDirectivesForLeaf(\n ctx,\n value.length,\n getKey('length', key),\n isDelete,\n value as unknown as Prefixed<object>,\n 'length',\n searchRoot,\n );\n}\n\nfunction callDirectivesForObject(\n ctx: EntropyContext,\n value: Prefixed<object>,\n key: string,\n isDelete: boolean,\n parent: Prefixed<object>,\n prop: string,\n searchRoot?: Element | Document,\n): void {\n for (const k in value) {\n callDirectives(\n ctx,\n (value as Record<string, unknown>)[k],\n getKey(k, key),\n isDelete,\n value,\n k,\n searchRoot,\n );\n }\n}\n\nfunction callDirectivesForLeaf(\n ctx: EntropyContext,\n value: unknown,\n key: string,\n isDelete: boolean,\n parent: Prefixed<object>,\n prop: string,\n searchRoot?: Element | Document,\n syncConfig?: SyncConfig,\n): void {\n if (syncConfig) {\n const { el, directive: attrSuffix, skipConditionals, skipMark } = syncConfig;\n if (\n (skipMark && attrSuffix === 'mark') ||\n (skipConditionals && (attrSuffix === 'if' || attrSuffix === 'ifnot'))\n ) {\n return;\n }\n const entry = ctx.directives.get(attrSuffix);\n if (!entry) return;\n const { cb, isParametric } = entry;\n const param = getParam(el, ctx.prefix + attrSuffix, !!isParametric);\n cb({ el, value, key, isDelete, parent, prop, param });\n return;\n }\n\n const root = searchRoot ?? document;\n\n for (const [attrSuffix, { cb, isParametric }] of ctx.directives) {\n const attrName = ctx.prefix + attrSuffix;\n const query = isParametric\n ? `[${attrName}^='${key}:']`\n : `[${attrName}='${key}']`;\n\n queryAll(ctx, root, query).forEach(el => {\n const param = getParam(el, attrName, !!isParametric);\n cb({ el, value, key, isDelete, parent, prop, param });\n });\n\n // Also check the search root itself when it is a concrete element\n if (root instanceof Element && root.getAttribute(attrName) === key) {\n const param = getParam(root, attrName, !!isParametric);\n cb({ el: root, value, key, isDelete, parent, prop, param });\n }\n }\n}\n\n// ─── Conditional directives (if / ifnot) ─────────────────────────────────────\n\nfunction ifOrIfNot(\n ctx: EntropyContext,\n el: Element,\n value: unknown,\n key: string,\n type: 'if' | 'ifnot',\n): void {\n const isShow = type === 'if' ? !!value : !value;\n const isTemplate = el instanceof HTMLTemplateElement;\n const attrType = ctx.prefix + type;\n const attrMark = ctx.prefix + 'mark';\n\n if (isShow && isTemplate) {\n const child = el.content.firstElementChild;\n if (!child) return;\n\n child.setAttribute(attrType, key);\n syncNode(ctx, child, true);\n el.replaceWith(child);\n }\n\n if (!isShow && !isTemplate) {\n const temp = document.createElement('template');\n temp.content.appendChild(el.cloneNode(true));\n temp.setAttribute(attrType, key);\n\n const mark = el.getAttribute(attrMark);\n if (mark) temp.setAttribute(attrMark, mark);\n\n el.replaceWith(temp);\n }\n}\n\n// ─── Sync helpers ─────────────────────────────────────────────────────────────\n\n/**\n * Recursively syncs an element tree that is about to be inserted into the DOM\n * (called from `if`/`ifnot` before insertion). Evaluates conditionals on the\n * way down but skips `mark` – actual values are filled in by `syncClone`.\n */\nfunction syncNode(\n ctx: EntropyContext,\n el: Element,\n isSyncRoot: boolean,\n): void {\n Array.from(el.children).forEach(child => syncNode(ctx, child, false));\n syncDirectives(ctx, el, isSyncRoot, false);\n}\n\n/**\n * Recursively syncs a clone that has already been inserted. Skips\n * conditionals (already evaluated during `syncNode`) and processes `mark`.\n */\nfunction syncClone(ctx: EntropyContext, clone: Element): void {\n Array.from(clone.children).forEach(child => syncClone(ctx, child));\n syncDirectives(ctx, clone, false, true);\n}\n\nfunction syncDirectives(\n ctx: EntropyContext,\n el: Element,\n skipConditionals?: boolean,\n skipMark?: boolean,\n): void {\n for (const [name] of ctx.directives) {\n if (skipMark && name === 'mark') continue;\n if (skipConditionals && (name === 'if' || name === 'ifnot')) continue;\n\n const { isParametric } = ctx.directives.get(name)!;\n const attrFull = ctx.prefix + name;\n let key = el.getAttribute(attrFull);\n\n if (isParametric) key = key?.split(':')[0] ?? null;\n if (key?.endsWith('.#')) key = key.slice(0, -2);\n if (key === null) continue;\n\n const { value, parent, prop } = getValue(ctx, key);\n if (!parent) continue;\n\n update(ctx, value, key, false, parent, prop, {\n directive: name,\n el,\n ...(skipConditionals !== undefined ? { skipConditionals } : {}),\n ...(skipMark !== undefined ? { skipMark } : {}),\n });\n }\n}\n\n// ─── Array DOM management ─────────────────────────────────────────────────────\n\nfunction updateArrayItemElement(\n ctx: EntropyContext,\n key: string,\n idx: string,\n item: unknown,\n array: Prefixed<unknown[]>,\n): void {\n const attrMark = ctx.prefix + 'mark';\n const arrayItems = document.querySelectorAll(`[${attrMark}=\"${key}\"]`);\n\n if (arrayItems.length && !isPrefixedObject(item)) {\n // Primitives: innerText update is sufficient, no DOM replacement needed\n return;\n }\n\n const prefix = ((array as unknown as Record<symbol, string>)[enPrefix]) ?? '';\n const placeholderKey = key.replace(/\\d+$/, '#');\n let itemReplaced = false;\n\n // Replace existing DOM items that map to this array index\n Array.from(arrayItems).forEach(existingEl => {\n const cl = cloneFromPlaceholder(ctx, existingEl, placeholderKey, attrMark);\n if (!cl) return;\n\n initializeClone(ctx, idx, prefix, placeholderKey, cl);\n existingEl.replaceWith(cl);\n syncClone(ctx, cl);\n itemReplaced = true;\n });\n\n if (itemReplaced) return;\n\n // No existing item – insert before the template placeholder\n Array.from(document.querySelectorAll(`[${attrMark}=\"${placeholderKey}\"]`)).forEach(template => {\n if (!(template instanceof HTMLTemplateElement)) return;\n const clone = template.content.firstElementChild?.cloneNode(true);\n if (!(clone instanceof Element)) return;\n\n initializeClone(ctx, idx, prefix, placeholderKey, clone);\n template.before(clone);\n syncClone(ctx, clone);\n });\n}\n\nfunction cloneFromPlaceholder(\n ctx: EntropyContext,\n item: Element,\n placeholderKey: string,\n attrMark: string,\n): Element | null {\n let placeholder = item.nextElementSibling;\n while (placeholder) {\n if (placeholder.getAttribute(attrMark) === placeholderKey) break;\n placeholder = placeholder.nextElementSibling;\n }\n\n if (placeholder instanceof HTMLTemplateElement) {\n const c = placeholder.content.firstElementChild?.cloneNode(true);\n return c instanceof Element ? c : null;\n }\n if (placeholder?.getAttribute(attrMark) === placeholderKey) {\n return placeholder.cloneNode(true) as Element;\n }\n return null;\n}\n\nfunction sortArrayItemElements(\n ctx: EntropyContext,\n array: Prefixed<unknown[]>,\n): void {\n const attrMark = ctx.prefix + 'mark';\n const templateKey = getKey('#', ((array as unknown as Record<symbol, string>)[enPrefix]) ?? '');\n Array.from(document.querySelectorAll(`[${attrMark}=\"${templateKey}\"]`)).forEach(template => {\n const items: Element[] = [];\n let prev = template.previousElementSibling;\n let isSorted = true;\n let lastIdx = -1;\n\n while (prev) {\n const curr = prev;\n prev = curr.previousElementSibling;\n\n const k = curr.getAttribute(attrMark);\n if (!k) continue;\n if (k === templateKey) break;\n\n if (k.replace(/\\d+$/, '#') === templateKey) {\n items.push(curr);\n if (isSorted) {\n const idx = Number(k.slice(k.lastIndexOf('.') + 1) ?? -1);\n if (lastIdx !== -1 && lastIdx !== idx + 1) isSorted = false;\n lastIdx = idx;\n }\n }\n }\n\n if (isSorted) return;\n\n const sorted = [...items].sort((a, b) => {\n const am = a.getAttribute(attrMark) ?? '';\n const bm = b.getAttribute(attrMark) ?? '';\n const ai = +(am.split('.').pop() ?? 0);\n const bi = +(bm.split('.').pop() ?? 0);\n return ai - bi;\n });\n\n sorted.forEach(el => template.before(el));\n });\n}\n\nfunction initializeArrayElements(\n ctx: EntropyContext,\n plc: Element,\n placeholderKey: string,\n array: unknown[],\n): Element[] {\n const attrMark = ctx.prefix + 'mark';\n\n // ── 1. Remove previous item elements ────────────────────────────────────\n let prev = plc.previousElementSibling;\n while (prev) {\n const curr = prev;\n prev = curr.previousElementSibling;\n const k = curr.getAttribute(attrMark);\n if (!k) continue;\n if (k !== placeholderKey && k.replace(/\\d+$/, '#') === placeholderKey) {\n curr.remove();\n } else {\n break;\n }\n }\n\n // ── 2. Resolve template and placeholder ──────────────────────────────────\n let template: HTMLTemplateElement;\n let placeholder: Element | null;\n\n if (plc instanceof HTMLTemplateElement) {\n template = plc;\n placeholder = plc.content.firstElementChild;\n placeholder?.setAttribute(attrMark, placeholderKey);\n } else {\n placeholder = plc;\n template = document.createElement('template');\n template.content.appendChild(plc.cloneNode(true));\n template.setAttribute(attrMark, placeholderKey);\n plc.replaceWith(template);\n }\n\n if (!placeholder) {\n console.warn(`[entropy] Empty template for key \"${placeholderKey}\"`);\n return [];\n }\n\n // ── 3. Create one element per array item ─────────────────────────────────\n const prefix = placeholderKey.slice(0, -2); // strip \".#\"\n const elements: Element[] = [];\n\n for (const idx in array) {\n if (Number.isNaN(+idx)) continue;\n\n const clone = placeholder.cloneNode(true);\n if (!(clone instanceof Element)) continue;\n\n initializeClone(ctx, idx, prefix, placeholderKey, clone);\n template.before(clone);\n syncClone(ctx, clone);\n elements.push(clone);\n }\n\n return elements;\n}\n\nfunction initializeClone(\n ctx: EntropyContext,\n idx: string,\n prefix: string,\n placeholderKey: string,\n clone: Element,\n): void {\n const key = getKey(idx, prefix);\n\n for (const attrSuffix of ctx.directives.keys()) {\n const attrName = ctx.prefix + attrSuffix;\n rewriteKey(clone, attrName, key, placeholderKey);\n clone.querySelectorAll(`[${attrName}]`).forEach(child => {\n rewriteKey(child, attrName, key, placeholderKey);\n });\n }\n}\n\nfunction rewriteKey(\n el: Element,\n attrName: string,\n key: string,\n placeholderKey: string,\n): void {\n const current = el.getAttribute(attrName);\n if (current?.startsWith(placeholderKey)) {\n el.setAttribute(attrName, key + current.slice(placeholderKey.length));\n }\n}\n\n// ─── Batch API ────────────────────────────────────────────────────────────────\n\n/**\n * Runs `fn` synchronously while collecting all DOM updates into a queue,\n * then flushes the queue in one pass. Useful when multiple properties are\n * changed at once.\n *\n * @example\n * ```ts\n * en.batch(() => {\n * data.firstName = 'John';\n * data.lastName = 'Doe';\n * });\n * ```\n */\nexport function batch(ctx: EntropyContext, fn: () => void): void {\n ctx.batchQueue = [];\n try {\n fn();\n } finally {\n const queue = ctx.batchQueue ?? [];\n ctx.batchQueue = null;\n for (const task of queue) task();\n }\n}\n","/**\n * Registers named `<template>` elements as custom Web Components using\n * Shadow DOM. Fully independent of the reactive core – no context needed.\n */\n\nexport function registerTemplates(rootElement?: Element | Document): void {\n const root = rootElement ?? document;\n Array.from(root.querySelectorAll<HTMLTemplateElement>('template[name]')).forEach(\n template => registerComponent(template),\n );\n}\n\nexport function registerComponent(template: HTMLTemplateElement): void {\n const name = template.getAttribute('name')?.toLowerCase();\n if (!name || customElements.get(name)) return;\n\n const ctor = class extends HTMLElement {\n constructor() {\n super();\n const shadow = this.attachShadow({ mode: 'open' });\n\n // Inherit top-level stylesheets so components look consistent\n Array.from(document.getElementsByTagName('style')).forEach(style => {\n shadow.appendChild(style.cloneNode(true));\n });\n Array.from(document.querySelectorAll<HTMLLinkElement>('link[rel=\"stylesheet\"]')).forEach(\n link => shadow.appendChild(link.cloneNode(true)),\n );\n\n // Clone template content into shadow root\n Array.from(template.content.childNodes).forEach(child => {\n shadow.appendChild(child.cloneNode(true));\n });\n }\n };\n\n customElements.define(name, ctor);\n}\n\nexport async function loadTemplateFile(file: string): Promise<void> {\n try {\n const html = await fetch(file).then(r => {\n if (!r.ok) throw new Error(`HTTP ${r.status}`);\n return r.text();\n });\n const wrapper = document.createElement('div');\n wrapper.innerHTML = html;\n registerTemplates(wrapper);\n } catch (err) {\n console.error(`[entropy] Failed to load template file \"${file}\":`, err);\n }\n}\n\nexport function stitchTagTemplate(\n strings: string[],\n ...values: unknown[]\n): string {\n return strings.reduce(\n (acc, s, i) => acc + (values[i - 1] ?? '') + s,\n );\n}\n\nexport function wrapInDiv(html: string): HTMLElement {\n const el = document.createElement('div');\n el.innerHTML = html;\n return el;\n}\n","import { createContext } from './context';\nimport type { EntropyContext } from './context';\nimport type { Prefixed } from './types';\nimport type { Directive, Watcher } from './types';\nimport { enPrefix } from './symbols';\nimport { reactive, bootstrapDirectives, setupObserver, update, batch } from './core';\nimport { watch, unwatch } from './watchers';\nimport { registerDirective } from './directives/index';\nimport { computed } from './computed';\nimport {\n registerTemplates,\n loadTemplateFile,\n stitchTagTemplate,\n wrapInDiv,\n} from './dom/components';\nimport { getValue } from './dom/queries';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type Meta = Record<string, unknown>; // opaque marker type for the reactive root\n\n// ─── EntropyInstance ───────────────────────────────────────────────────────\n\nexport class EntropyInstance {\n private readonly ctx: EntropyContext;\n private readyStateHandler: (() => void) | null = null;\n\n constructor() {\n this.ctx = createContext();\n bootstrapDirectives(this.ctx);\n }\n\n // ─── init ──────────────────────────────────────────────────────────────────\n\n /**\n * Initialises the reactive data object and begins listening for DOM changes.\n * Returns the reactive data proxy – assign properties directly on it.\n *\n * @example\n * ```ts\n * const data = en.init();\n * data.count = 0;\n * ```\n */\n init(): Record<string, unknown> & Meta {\n if (!this.ctx.data) {\n this.ctx.data = reactive(this.ctx, {}, '') as Prefixed<{}>;\n }\n\n registerTemplates();\n setupObserver(this.ctx);\n\n if (!this.readyStateHandler) {\n this.readyStateHandler = () => {\n if (document.readyState === 'interactive') {\n registerTemplates();\n }\n };\n document.addEventListener('readystatechange', this.readyStateHandler);\n }\n\n return this.ctx.data;\n }\n\n // ─── computed ──────────────────────────────────────────────────────────────\n\n /**\n * Marks a function as a computed value so entropy calls it reactively.\n *\n * @example\n * ```ts\n * data.fullName = en.computed(() => `${data.first} ${data.last}`);\n * ```\n */\n computed = computed;\n\n // ─── watch ─────────────────────────────────────────────────────────────────\n\n /**\n * Registers a watcher for `key`. Called with the new value whenever `key`\n * or any of its children changes.\n *\n * @example\n * ```ts\n * en.watch('user.name', newName => console.log('Name changed:', newName));\n * ```\n */\n watch(key: string, watcher: Watcher): void {\n watch(this.ctx, key, watcher);\n }\n\n /**\n * Removes watchers. See parameter combinations in the source for details.\n */\n unwatch(key?: string, watcher?: Watcher): void {\n unwatch(this.ctx, key, watcher);\n }\n\n // ─── directive ─────────────────────────────────────────────────────────────\n\n /**\n * Registers a custom directive.\n *\n * @example\n * ```ts\n * en.directive('color', ({ el, value }) => {\n * (el as HTMLElement).style.color = String(value);\n * });\n * ```\n */\n directive(name: string, cb: Directive, isParametric = false): void {\n registerDirective(this.ctx, name, cb, isParametric);\n }\n\n // ─── prefix ────────────────────────────────────────────────────────────────\n\n /**\n * Overrides the default attribute prefix (`en-`).\n * Must be called before `init()`.\n *\n * @example\n * ```ts\n * en.prefix('data-en');\n * const data = en.init();\n * // now use data-en-mark=\"...\" in your HTML\n * ```\n */\n prefix(value = 'en'): void {\n this.ctx.prefix = value.endsWith('-') ? value : value + '-';\n }\n\n // ─── batch ─────────────────────────────────────────────────────────────────\n\n /**\n * Batches multiple reactive changes into a single DOM update pass.\n *\n * @example\n * ```ts\n * en.batch(() => {\n * data.firstName = 'Jane';\n * data.lastName = 'Doe';\n * });\n * ```\n */\n batch(fn: () => void): void {\n batch(this.ctx, fn);\n }\n\n // ─── load ──────────────────────────────────────────────────────────────────\n\n /**\n * Fetches one or more HTML files and registers any `<template name=\"...\">` \n * elements found inside them as custom components.\n *\n * @example\n * ```ts\n * await en.load(['components/card.html', 'components/modal.html']);\n * ```\n */\n async load(files: string | string[]): Promise<void> {\n const list = Array.isArray(files) ? files : [files];\n await Promise.all(list.map(f => loadTemplateFile(f)));\n }\n\n // ─── register ──────────────────────────────────────────────────────────────\n\n /**\n * Registers component templates at runtime.\n *\n * Accepts:\n * - No args → scans the whole document\n * - An `HTMLElement` root\n * - A template string\n * - A tagged-template literal\n *\n * @example\n * ```ts\n * en.register`<template name=\"my-btn\"><button><slot /></button></template>`;\n * ```\n */\n register(root: TemplateStringsArray, ...args: unknown[]): void;\n register(root: HTMLElement): void;\n register(template: string): void;\n register(): void;\n register(\n root?: TemplateStringsArray | HTMLElement | string,\n ...args: unknown[]\n ): void {\n if (Array.isArray(root)) {\n root = stitchTagTemplate(root as string[], ...args);\n }\n if (typeof root === 'string') {\n root = wrapInDiv(root);\n }\n registerTemplates(root as HTMLElement | undefined);\n }\n\n // ─── destroy ───────────────────────────────────────────────────────────────\n\n /**\n * Tears down the instance: removes event listeners, clears watchers,\n * and prevents further DOM updates.\n */\n destroy(): void {\n this.ctx.destroyed = true;\n\n if (this.readyStateHandler) {\n document.removeEventListener(\n 'readystatechange',\n this.readyStateHandler,\n );\n this.readyStateHandler = null;\n }\n\n this.ctx.watchers.clear();\n this.ctx.deps.map.clear();\n this.ctx.deps.versions.clear();\n this.ctx.elementCache.clear();\n this.ctx.observer?.disconnect();\n this.ctx.observer = null;\n this.ctx.data = null;\n }\n}\n\n// ─── Default singleton factory ────────────────────────────────────────────────\n\n/**\n * Creates a new isolated entropy instance.\n * Most applications only need the default export.\n */\nexport function createInstance(): EntropyInstance {\n return new EntropyInstance();\n}\n","/**\n * entropy – Lightweight reactive DOM library\n *\n * @example Quick start\n * ```html\n * <script type=\"module\">\n * import en from 'entropy-js';\n * const data = en.init();\n * data.count = 0;\n * </script>\n *\n * <span en-mark=\"count\"></span>\n * <button onclick=\"data.count++\">+1</button>\n * ```\n */\n\nexport { EntropyInstance, createInstance } from './instance';\nexport type { Meta } from './instance';\nexport { computed } from './computed';\n\n// Public types\nexport type {\n Directive,\n DirectiveParams,\n DirectiveEntry,\n Watcher,\n Prefixed,\n SyncConfig,\n} from './types';\n\n// ─── Default singleton instance ───────────────────────────────────────────────\n\nimport { EntropyInstance } from './instance';\n\n/**\n * The default entropy instance.\n *\n * For single-page applications this is all you need.\n * For micro-frontends or isolated widgets, use `createInstance()` instead.\n */\nconst en = new EntropyInstance();\nexport default en;\n"]}
@@ -0,0 +1,187 @@
1
+ /** Stores the reactive key-path prefix on reactive objects and functions */
2
+ declare const enPrefix: unique symbol;
3
+
4
+ type Complex = object | Function;
5
+ type Prefixed<T> = T extends Complex ? T & {
6
+ [enPrefix]: string;
7
+ } : never;
8
+ type Watcher = (newValue: unknown) => unknown;
9
+ type DirectiveParams = {
10
+ /** The element to which the directive has been applied */
11
+ el: Element;
12
+ /** The updated value */
13
+ value: unknown;
14
+ /** Period-delimited key that points to the value in the global data object */
15
+ key: string;
16
+ /** Whether the value was deleted via `delete data.prop` */
17
+ isDelete: boolean;
18
+ /** The proxied parent object to which the value belongs */
19
+ parent: Prefixed<object>;
20
+ /** Property of the parent which points to the value: `parent[prop] ≈ value` */
21
+ prop: string;
22
+ /** For parametric directives, the portion after the colon */
23
+ param: string | undefined;
24
+ };
25
+ type Directive = (params: DirectiveParams) => void;
26
+ type DirectiveEntry = {
27
+ cb: Directive;
28
+ isParametric?: boolean;
29
+ };
30
+ type SyncConfig = {
31
+ directive: string;
32
+ el: Element;
33
+ skipConditionals?: boolean;
34
+ skipMark?: boolean;
35
+ };
36
+
37
+ /**
38
+ * Marks a function as a computed value so entropy knows to call it
39
+ * reactively instead of treating it as a plain function reference.
40
+ *
41
+ * @example
42
+ * ```ts
43
+ * const data = en.init();
44
+ * data.fullName = en.computed(() => `${data.firstName} ${data.lastName}`);
45
+ * ```
46
+ */
47
+ declare function computed<T extends (...args: unknown[]) => unknown>(fn: T): T;
48
+
49
+ type Meta = Record<string, unknown>;
50
+ declare class EntropyInstance {
51
+ private readonly ctx;
52
+ private readyStateHandler;
53
+ constructor();
54
+ /**
55
+ * Initialises the reactive data object and begins listening for DOM changes.
56
+ * Returns the reactive data proxy – assign properties directly on it.
57
+ *
58
+ * @example
59
+ * ```ts
60
+ * const data = en.init();
61
+ * data.count = 0;
62
+ * ```
63
+ */
64
+ init(): Record<string, unknown> & Meta;
65
+ /**
66
+ * Marks a function as a computed value so entropy calls it reactively.
67
+ *
68
+ * @example
69
+ * ```ts
70
+ * data.fullName = en.computed(() => `${data.first} ${data.last}`);
71
+ * ```
72
+ */
73
+ computed: typeof computed;
74
+ /**
75
+ * Registers a watcher for `key`. Called with the new value whenever `key`
76
+ * or any of its children changes.
77
+ *
78
+ * @example
79
+ * ```ts
80
+ * en.watch('user.name', newName => console.log('Name changed:', newName));
81
+ * ```
82
+ */
83
+ watch(key: string, watcher: Watcher): void;
84
+ /**
85
+ * Removes watchers. See parameter combinations in the source for details.
86
+ */
87
+ unwatch(key?: string, watcher?: Watcher): void;
88
+ /**
89
+ * Registers a custom directive.
90
+ *
91
+ * @example
92
+ * ```ts
93
+ * en.directive('color', ({ el, value }) => {
94
+ * (el as HTMLElement).style.color = String(value);
95
+ * });
96
+ * ```
97
+ */
98
+ directive(name: string, cb: Directive, isParametric?: boolean): void;
99
+ /**
100
+ * Overrides the default attribute prefix (`en-`).
101
+ * Must be called before `init()`.
102
+ *
103
+ * @example
104
+ * ```ts
105
+ * en.prefix('data-en');
106
+ * const data = en.init();
107
+ * // now use data-en-mark="..." in your HTML
108
+ * ```
109
+ */
110
+ prefix(value?: string): void;
111
+ /**
112
+ * Batches multiple reactive changes into a single DOM update pass.
113
+ *
114
+ * @example
115
+ * ```ts
116
+ * en.batch(() => {
117
+ * data.firstName = 'Jane';
118
+ * data.lastName = 'Doe';
119
+ * });
120
+ * ```
121
+ */
122
+ batch(fn: () => void): void;
123
+ /**
124
+ * Fetches one or more HTML files and registers any `<template name="...">`
125
+ * elements found inside them as custom components.
126
+ *
127
+ * @example
128
+ * ```ts
129
+ * await en.load(['components/card.html', 'components/modal.html']);
130
+ * ```
131
+ */
132
+ load(files: string | string[]): Promise<void>;
133
+ /**
134
+ * Registers component templates at runtime.
135
+ *
136
+ * Accepts:
137
+ * - No args → scans the whole document
138
+ * - An `HTMLElement` root
139
+ * - A template string
140
+ * - A tagged-template literal
141
+ *
142
+ * @example
143
+ * ```ts
144
+ * en.register`<template name="my-btn"><button><slot /></button></template>`;
145
+ * ```
146
+ */
147
+ register(root: TemplateStringsArray, ...args: unknown[]): void;
148
+ register(root: HTMLElement): void;
149
+ register(template: string): void;
150
+ register(): void;
151
+ /**
152
+ * Tears down the instance: removes event listeners, clears watchers,
153
+ * and prevents further DOM updates.
154
+ */
155
+ destroy(): void;
156
+ }
157
+ /**
158
+ * Creates a new isolated entropy instance.
159
+ * Most applications only need the default export.
160
+ */
161
+ declare function createInstance(): EntropyInstance;
162
+
163
+ /**
164
+ * entropy – Lightweight reactive DOM library
165
+ *
166
+ * @example Quick start
167
+ * ```html
168
+ * <script type="module">
169
+ * import en from 'entropy-js';
170
+ * const data = en.init();
171
+ * data.count = 0;
172
+ * </script>
173
+ *
174
+ * <span en-mark="count"></span>
175
+ * <button onclick="data.count++">+1</button>
176
+ * ```
177
+ */
178
+
179
+ /**
180
+ * The default entropy instance.
181
+ *
182
+ * For single-page applications this is all you need.
183
+ * For micro-frontends or isolated widgets, use `createInstance()` instead.
184
+ */
185
+ declare const en: EntropyInstance;
186
+
187
+ export { type Directive, type DirectiveEntry, type DirectiveParams, EntropyInstance, type Meta, type Prefixed, type SyncConfig, type Watcher, computed, createInstance, en as default };
@@ -0,0 +1,187 @@
1
+ /** Stores the reactive key-path prefix on reactive objects and functions */
2
+ declare const enPrefix: unique symbol;
3
+
4
+ type Complex = object | Function;
5
+ type Prefixed<T> = T extends Complex ? T & {
6
+ [enPrefix]: string;
7
+ } : never;
8
+ type Watcher = (newValue: unknown) => unknown;
9
+ type DirectiveParams = {
10
+ /** The element to which the directive has been applied */
11
+ el: Element;
12
+ /** The updated value */
13
+ value: unknown;
14
+ /** Period-delimited key that points to the value in the global data object */
15
+ key: string;
16
+ /** Whether the value was deleted via `delete data.prop` */
17
+ isDelete: boolean;
18
+ /** The proxied parent object to which the value belongs */
19
+ parent: Prefixed<object>;
20
+ /** Property of the parent which points to the value: `parent[prop] ≈ value` */
21
+ prop: string;
22
+ /** For parametric directives, the portion after the colon */
23
+ param: string | undefined;
24
+ };
25
+ type Directive = (params: DirectiveParams) => void;
26
+ type DirectiveEntry = {
27
+ cb: Directive;
28
+ isParametric?: boolean;
29
+ };
30
+ type SyncConfig = {
31
+ directive: string;
32
+ el: Element;
33
+ skipConditionals?: boolean;
34
+ skipMark?: boolean;
35
+ };
36
+
37
+ /**
38
+ * Marks a function as a computed value so entropy knows to call it
39
+ * reactively instead of treating it as a plain function reference.
40
+ *
41
+ * @example
42
+ * ```ts
43
+ * const data = en.init();
44
+ * data.fullName = en.computed(() => `${data.firstName} ${data.lastName}`);
45
+ * ```
46
+ */
47
+ declare function computed<T extends (...args: unknown[]) => unknown>(fn: T): T;
48
+
49
+ type Meta = Record<string, unknown>;
50
+ declare class EntropyInstance {
51
+ private readonly ctx;
52
+ private readyStateHandler;
53
+ constructor();
54
+ /**
55
+ * Initialises the reactive data object and begins listening for DOM changes.
56
+ * Returns the reactive data proxy – assign properties directly on it.
57
+ *
58
+ * @example
59
+ * ```ts
60
+ * const data = en.init();
61
+ * data.count = 0;
62
+ * ```
63
+ */
64
+ init(): Record<string, unknown> & Meta;
65
+ /**
66
+ * Marks a function as a computed value so entropy calls it reactively.
67
+ *
68
+ * @example
69
+ * ```ts
70
+ * data.fullName = en.computed(() => `${data.first} ${data.last}`);
71
+ * ```
72
+ */
73
+ computed: typeof computed;
74
+ /**
75
+ * Registers a watcher for `key`. Called with the new value whenever `key`
76
+ * or any of its children changes.
77
+ *
78
+ * @example
79
+ * ```ts
80
+ * en.watch('user.name', newName => console.log('Name changed:', newName));
81
+ * ```
82
+ */
83
+ watch(key: string, watcher: Watcher): void;
84
+ /**
85
+ * Removes watchers. See parameter combinations in the source for details.
86
+ */
87
+ unwatch(key?: string, watcher?: Watcher): void;
88
+ /**
89
+ * Registers a custom directive.
90
+ *
91
+ * @example
92
+ * ```ts
93
+ * en.directive('color', ({ el, value }) => {
94
+ * (el as HTMLElement).style.color = String(value);
95
+ * });
96
+ * ```
97
+ */
98
+ directive(name: string, cb: Directive, isParametric?: boolean): void;
99
+ /**
100
+ * Overrides the default attribute prefix (`en-`).
101
+ * Must be called before `init()`.
102
+ *
103
+ * @example
104
+ * ```ts
105
+ * en.prefix('data-en');
106
+ * const data = en.init();
107
+ * // now use data-en-mark="..." in your HTML
108
+ * ```
109
+ */
110
+ prefix(value?: string): void;
111
+ /**
112
+ * Batches multiple reactive changes into a single DOM update pass.
113
+ *
114
+ * @example
115
+ * ```ts
116
+ * en.batch(() => {
117
+ * data.firstName = 'Jane';
118
+ * data.lastName = 'Doe';
119
+ * });
120
+ * ```
121
+ */
122
+ batch(fn: () => void): void;
123
+ /**
124
+ * Fetches one or more HTML files and registers any `<template name="...">`
125
+ * elements found inside them as custom components.
126
+ *
127
+ * @example
128
+ * ```ts
129
+ * await en.load(['components/card.html', 'components/modal.html']);
130
+ * ```
131
+ */
132
+ load(files: string | string[]): Promise<void>;
133
+ /**
134
+ * Registers component templates at runtime.
135
+ *
136
+ * Accepts:
137
+ * - No args → scans the whole document
138
+ * - An `HTMLElement` root
139
+ * - A template string
140
+ * - A tagged-template literal
141
+ *
142
+ * @example
143
+ * ```ts
144
+ * en.register`<template name="my-btn"><button><slot /></button></template>`;
145
+ * ```
146
+ */
147
+ register(root: TemplateStringsArray, ...args: unknown[]): void;
148
+ register(root: HTMLElement): void;
149
+ register(template: string): void;
150
+ register(): void;
151
+ /**
152
+ * Tears down the instance: removes event listeners, clears watchers,
153
+ * and prevents further DOM updates.
154
+ */
155
+ destroy(): void;
156
+ }
157
+ /**
158
+ * Creates a new isolated entropy instance.
159
+ * Most applications only need the default export.
160
+ */
161
+ declare function createInstance(): EntropyInstance;
162
+
163
+ /**
164
+ * entropy – Lightweight reactive DOM library
165
+ *
166
+ * @example Quick start
167
+ * ```html
168
+ * <script type="module">
169
+ * import en from 'entropy-js';
170
+ * const data = en.init();
171
+ * data.count = 0;
172
+ * </script>
173
+ *
174
+ * <span en-mark="count"></span>
175
+ * <button onclick="data.count++">+1</button>
176
+ * ```
177
+ */
178
+
179
+ /**
180
+ * The default entropy instance.
181
+ *
182
+ * For single-page applications this is all you need.
183
+ * For micro-frontends or isolated widgets, use `createInstance()` instead.
184
+ */
185
+ declare const en: EntropyInstance;
186
+
187
+ export { type Directive, type DirectiveEntry, type DirectiveParams, EntropyInstance, type Meta, type Prefixed, type SyncConfig, type Watcher, computed, createInstance, en as default };