@farm.js/react 0.1.0-beta.0 → 0.1.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +277 -11
- package/dist/compiler-runtime.cjs +1290 -17
- package/dist/compiler-runtime.cjs.map +1 -1
- package/dist/compiler-runtime.d.mts +132 -5
- package/dist/compiler-runtime.d.ts +132 -5
- package/dist/compiler-runtime.mjs +1290 -17
- package/dist/compiler-runtime.mjs.map +1 -1
- package/dist/index.cjs +24 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +8 -1
- package/dist/index.d.ts +8 -1
- package/dist/index.mjs +24 -2
- package/dist/index.mjs.map +1 -1
- package/dist/list.cjs +27 -0
- package/dist/list.cjs.map +1 -0
- package/dist/list.d.mts +20 -0
- package/dist/list.d.ts +20 -0
- package/dist/list.mjs +21 -0
- package/dist/list.mjs.map +1 -0
- package/dist/vite.cjs +2332 -140
- package/dist/vite.cjs.map +1 -1
- package/dist/vite.mjs +2332 -140
- package/dist/vite.mjs.map +1 -1
- package/package.json +10 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/compiler-runtime.tsx"],"names":["index"],"mappings":"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","file":"compiler-runtime.mjs","sourcesContent":["import React from \"react\";\n\nexport type CompilerStateUpdater = unknown | ((previous: unknown) => unknown);\n\nexport interface CompilerCell {\n get(): unknown;\n set(next: CompilerStateUpdater): void;\n}\n\ninterface RuntimeCell extends CompilerCell {\n flush(): boolean;\n}\n\nexport interface CompilerTextBinding<Props> {\n kind: \"text\";\n path: readonly number[];\n dependencies: readonly number[];\n read(props: Props, state: readonly CompilerCell[]): unknown;\n}\n\nexport interface CompilerAttributeBinding<Props> {\n kind: \"attribute\";\n path: readonly number[];\n dependencies: readonly number[];\n name: string;\n read(props: Props, state: readonly CompilerCell[]): unknown;\n}\n\nexport type CompilerBinding<Props> = CompilerTextBinding<Props> | CompilerAttributeBinding<Props>;\n\nexport interface CompiledComponentDefinition<Props> {\n displayName: string;\n initialize(props: Props): readonly unknown[];\n render(props: Props, state: readonly CompilerCell[]): React.ReactElement;\n bindings: readonly CompilerBinding<Props>[];\n}\n\nfunction renderTextValue(value: unknown): string {\n if (Array.isArray(value)) return value.map(renderTextValue).join(\"\");\n if (value === null || value === undefined || typeof value === \"boolean\") return \"\";\n return String(value);\n}\n\nfunction findBindingTarget(root: Element, path: readonly number[]): Element | null {\n let current: Element | null = root;\n for (const index of path) {\n current = current?.children.item(index) || null;\n }\n return current;\n}\n\nfunction updateAttribute(element: Element, name: string, value: unknown): void {\n const attributeName = name === \"className\" ? \"class\" : name === \"htmlFor\" ? \"for\" : name;\n const stringifiesBoolean = attributeName.startsWith(\"data-\") || attributeName.startsWith(\"aria-\");\n\n if (name === \"value\" && element instanceof HTMLInputElement) {\n element.value = value === null || value === undefined ? \"\" : String(value);\n return;\n }\n\n if (name === \"checked\" && element instanceof HTMLInputElement) {\n element.checked = Boolean(value);\n return;\n }\n\n if (name === \"selected\" && element instanceof HTMLOptionElement) {\n element.selected = Boolean(value);\n return;\n }\n\n if (name === \"disabled\" && \"disabled\" in element) {\n (element as HTMLButtonElement).disabled = Boolean(value);\n return;\n }\n\n if (value === null || value === undefined || (value === false && !stringifiesBoolean)) {\n element.removeAttribute(attributeName);\n } else if (value === true && !stringifiesBoolean) {\n element.setAttribute(attributeName, \"\");\n } else {\n element.setAttribute(attributeName, String(value));\n }\n}\n\n/**\n * Runtime target emitted by the AOT transform.\n *\n * React owns component placement, SSR, hydration, props, and event semantics.\n * Compiler cells own local state updates and patch only precomputed DOM paths.\n */\nexport function createCompiledComponent<Props>(\n definition: CompiledComponentDefinition<Props>,\n): React.ComponentType<Props> {\n class FarmCompiledComponent extends React.Component<Props> {\n private root: Element | null = null;\n private mounted = false;\n private flushQueued = false;\n private readonly dirtyState = new Set<number>();\n private readonly cells: RuntimeCell[];\n\n constructor(props: Props) {\n super(props);\n this.cells = definition.initialize(props).map((initialValue, index) => {\n let value = initialValue;\n const pending: CompilerStateUpdater[] = [];\n return {\n get: () => value,\n set: (next) => {\n pending.push(next);\n this.scheduleBindingFlush(index);\n },\n flush: () => {\n if (pending.length === 0) return false;\n const previous = value;\n for (const next of pending.splice(0)) {\n value = typeof next === \"function\" ? next(value) : next;\n }\n return !Object.is(previous, value);\n },\n };\n });\n }\n\n private captureRoot = (root: Element | null) => {\n this.root = root;\n };\n\n private scheduleBindingFlush(index: number): void {\n this.dirtyState.add(index);\n if (!this.mounted || this.flushQueued) return;\n this.flushQueued = true;\n queueMicrotask(() => {\n this.flushQueued = false;\n if (!this.mounted) return;\n const dirty = new Set<number>();\n for (const index of this.dirtyState) {\n if (this.cells[index]?.flush()) dirty.add(index);\n }\n this.dirtyState.clear();\n if (dirty.size === 0) return;\n for (const binding of definition.bindings) {\n if (binding.dependencies.some((dependency) => dirty.has(dependency))) {\n this.applyBinding(binding);\n }\n }\n });\n }\n\n private applyBinding(binding: CompilerBinding<Props>): void {\n if (!this.root) return;\n const target = findBindingTarget(this.root, binding.path);\n if (!target) return;\n const value = binding.read(this.props, this.cells);\n if (binding.kind === \"text\") {\n target.textContent = renderTextValue(value);\n } else {\n updateAttribute(target, binding.name, value);\n }\n }\n\n componentDidMount(): void {\n this.mounted = true;\n }\n\n componentDidUpdate(): void {\n // React has reconciled a parent-driven prop update. Reapply compiled\n // bindings from the current cells so React and the imperative state stay\n // coherent even when both change in the same turn.\n for (const binding of definition.bindings) this.applyBinding(binding);\n }\n\n componentWillUnmount(): void {\n this.mounted = false;\n this.root = null;\n this.dirtyState.clear();\n }\n\n render(): React.ReactNode {\n const element = definition.render(this.props, this.cells);\n if (!React.isValidElement(element) || typeof element.type !== \"string\") {\n throw new TypeError(\n `Compiled component ${definition.displayName} must return one host element.`,\n );\n }\n return React.cloneElement(element, {\n ref: this.captureRoot,\n } as React.Attributes);\n }\n }\n\n (FarmCompiledComponent as React.ComponentType<Props>).displayName =\n `FarmCompiled(${definition.displayName})`;\n return FarmCompiledComponent;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/compiler-runtime.tsx"],"names":["index"],"mappings":"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","file":"compiler-runtime.mjs","sourcesContent":["import React from \"react\";\nimport { flushSync } from \"react-dom\";\n\nexport type CompilerStateUpdater = unknown | ((previous: unknown) => unknown);\n\nexport interface CompilerCell {\n get(): unknown;\n set(next: CompilerStateUpdater): void;\n}\n\ninterface RuntimeCell extends CompilerCell {\n flush(): boolean;\n}\n\ntype SelectableTextControl = HTMLInputElement | HTMLTextAreaElement;\n\ninterface InputSelectionSnapshot {\n element: SelectableTextControl;\n start: number;\n end: number;\n direction: \"forward\" | \"backward\" | \"none\";\n}\n\nexport interface CompilerTextBinding<Props> {\n kind: \"text\";\n path: readonly number[];\n /** Stable ref target emitted by newer compiler versions. */\n target?: number;\n dependencies: readonly number[];\n read(props: Props, state: readonly CompilerCell[]): unknown;\n}\n\nexport interface CompilerAttributeBinding<Props> {\n kind: \"attribute\";\n path: readonly number[];\n /** Stable ref target emitted by newer compiler versions. */\n target?: number;\n dependencies: readonly number[];\n name: string;\n read(props: Props, state: readonly CompilerCell[]): unknown;\n}\n\nexport interface CompilerStyleBinding<Props> {\n kind: \"style\";\n path: readonly number[];\n /** Stable ref target emitted by newer compiler versions. */\n target?: number;\n dependencies: readonly number[];\n name: string;\n read(props: Props, state: readonly CompilerCell[]): unknown;\n}\n\nexport interface CompilerConditionalBlockBinding {\n kind: \"block\";\n id: number;\n /** Nearest conditional boundary that owns this block, when nested. */\n parent?: number;\n dependencies: readonly number[];\n}\n\nexport interface CompilerConditionalBlockProps {\n id: number;\n render(): React.ReactNode;\n}\n\nexport interface CompilerKeyedListBlockProps {\n id: number;\n render(): React.ReactNode;\n}\n\nexport interface CompilerHostElement {\n kind: \"element\";\n tag: string;\n attributes: readonly { name: string; value: unknown }[];\n styles: readonly { name: string; value: unknown }[];\n children: readonly (CompilerHostElement | unknown)[];\n}\n\nexport type CompilerKeyedRowElement = CompilerHostElement;\n\nexport interface CompilerKeyedRowEvent {\n name: string;\n invoke(item: unknown, index: number, event: React.SyntheticEvent): unknown;\n}\n\nexport interface CompilerKeyedRowConditionalBranch {\n bindings: readonly CompilerKeyedRowBinding[];\n}\n\nexport interface CompilerKeyedRowConditional {\n id: number;\n /** Host-container path relative to the keyed row root. */\n path: readonly number[];\n test(item: unknown, index: number): unknown;\n logical: boolean;\n truthy?: CompilerKeyedRowConditionalBranch;\n falsy?: CompilerKeyedRowConditionalBranch;\n}\n\nexport interface CompilerHostConditionalBinding {\n kind: \"text\" | \"attribute\" | \"style\";\n path: readonly number[];\n name?: string;\n read(): unknown;\n}\n\nexport interface CompilerHostConditionalBranch {\n create(): CompilerHostElement;\n bindings: readonly CompilerHostConditionalBinding[];\n}\n\nexport interface CompilerHostConditionalBlockProps {\n id: number;\n render(): React.ReactElement;\n test(): unknown;\n /** Logical && can produce a visible number instead of an empty branch. */\n logical?: boolean;\n truthy?: CompilerHostConditionalBranch;\n falsy?: CompilerHostConditionalBranch;\n}\n\nexport interface CompilerKeyedRowBinding {\n kind: \"text\" | \"attribute\" | \"style\";\n path: readonly number[];\n name?: string;\n read(item: unknown, index: number): unknown;\n}\n\nexport interface CompilerKeyedRowsBlockProps {\n id: number;\n render(\n event: (\n item: unknown,\n index: number,\n eventId: number,\n ) => React.EventHandler<React.SyntheticEvent>,\n conditional: (\n item: unknown,\n index: number,\n conditionalId: number,\n render: (item: unknown, index: number) => React.ReactNode,\n ) => React.ReactNode,\n ): React.ReactElement;\n items(): Iterable<unknown> | null | undefined;\n rowKey(item: unknown, index: number): React.Key;\n create(item: unknown, index: number): CompilerKeyedRowElement;\n bindings: readonly CompilerKeyedRowBinding[];\n events?: readonly CompilerKeyedRowEvent[];\n conditionals?: readonly CompilerKeyedRowConditional[];\n}\n\nexport interface CompilerKeyedRange {\n /** Number of static direct host siblings between this range and the previous range. */\n before: number;\n items(): Iterable<unknown> | null | undefined;\n rowKey(item: unknown, index: number): React.Key;\n create(item: unknown, index: number): CompilerKeyedRowElement;\n bindings: readonly CompilerKeyedRowBinding[];\n}\n\nexport interface CompilerKeyedRangesBlockProps {\n id: number;\n render(): React.ReactElement;\n rootRef?: React.RefCallback<Element>;\n ranges: readonly CompilerKeyedRange[];\n /** Number of static direct host siblings after the final keyed range. */\n trailing: number;\n}\n\nexport interface CompilerComponentBlockProps {\n id: number;\n render(): React.ReactNode;\n}\n\nexport interface CompilerBlockRuntime {\n Conditional: React.ComponentType<CompilerConditionalBlockProps>;\n HostConditional: React.ComponentType<CompilerHostConditionalBlockProps>;\n KeyedList: React.ComponentType<CompilerKeyedListBlockProps>;\n KeyedRows: React.ComponentType<CompilerKeyedRowsBlockProps>;\n KeyedRanges: React.ComponentType<CompilerKeyedRangesBlockProps>;\n Component: React.ComponentType<CompilerComponentBlockProps>;\n target(id: number): React.RefCallback<Element>;\n}\n\nexport type CompilerBinding<Props> =\n | CompilerTextBinding<Props>\n | CompilerAttributeBinding<Props>\n | CompilerStyleBinding<Props>\n | CompilerConditionalBlockBinding;\n\nexport interface CompiledComponentDefinition<Props> {\n displayName: string;\n /** Stable development-only identity used to preserve state across compatible refreshes. */\n hmrId?: string;\n /** Changes when the compiler-owned state layout is no longer refresh-compatible. */\n stateSignature?: string;\n initialize(props: Props): readonly unknown[];\n render(\n props: Props,\n state: readonly CompilerCell[],\n blocks: CompilerBlockRuntime,\n ): React.ReactElement;\n bindings: readonly CompilerBinding<Props>[];\n}\n\ninterface CompiledDefinitionReference<Props> {\n current: CompiledComponentDefinition<Props>;\n}\n\ninterface CompilerHmrRegistryEntry {\n component: React.ComponentType<unknown>;\n definition: CompiledDefinitionReference<unknown>;\n refreshListeners: Set<() => void>;\n stateSignature: string;\n}\n\ntype CompilerHmrRegistry = Map<string, CompilerHmrRegistryEntry>;\n\nconst COMPILER_HMR_REGISTRY = Symbol.for(\"@farm.js/react/compiler-hmr-registry\");\n\nfunction getCompilerHmrRegistry(): CompilerHmrRegistry {\n const globalTarget = globalThis as typeof globalThis & Record<symbol, unknown>;\n const existing = globalTarget[COMPILER_HMR_REGISTRY];\n if (existing instanceof Map) return existing as CompilerHmrRegistry;\n const registry: CompilerHmrRegistry = new Map();\n globalTarget[COMPILER_HMR_REGISTRY] = registry;\n return registry;\n}\n\nfunction renderTextValue(value: unknown): string {\n if (Array.isArray(value)) return value.map(renderTextValue).join(\"\");\n if (value === null || value === undefined || typeof value === \"boolean\") return \"\";\n return String(value);\n}\n\nfunction findBindingTarget(\n root: Element,\n path: readonly number[],\n blockRoots: ReadonlySet<Element>,\n): Element | null {\n let current: Element | null = root;\n for (const index of path) {\n if (!current) return null;\n current = [...current.children].filter((child) => !blockRoots.has(child))[index] || null;\n }\n return current;\n}\n\nconst UNITLESS_STYLE_PROPERTIES = new Set([\n \"animationIterationCount\",\n \"aspectRatio\",\n \"borderImageOutset\",\n \"borderImageSlice\",\n \"borderImageWidth\",\n \"boxFlex\",\n \"boxFlexGroup\",\n \"boxOrdinalGroup\",\n \"columnCount\",\n \"columns\",\n \"flex\",\n \"flexGrow\",\n \"flexNegative\",\n \"flexOrder\",\n \"flexPositive\",\n \"flexShrink\",\n \"fontWeight\",\n \"gridArea\",\n \"gridColumn\",\n \"gridColumnEnd\",\n \"gridColumnSpan\",\n \"gridColumnStart\",\n \"gridRow\",\n \"gridRowEnd\",\n \"gridRowSpan\",\n \"gridRowStart\",\n \"lineClamp\",\n \"lineHeight\",\n \"opacity\",\n \"order\",\n \"orphans\",\n \"scale\",\n \"tabSize\",\n \"widows\",\n \"zIndex\",\n \"zoom\",\n \"fillOpacity\",\n \"floodOpacity\",\n \"stopOpacity\",\n \"strokeDasharray\",\n \"strokeDashoffset\",\n \"strokeMiterlimit\",\n \"strokeOpacity\",\n \"strokeWidth\",\n]);\n\nfunction unprefixedStyleName(name: string): string {\n const unprefixed = name.replace(/^(?:Webkit|Moz|ms|O)(?=[A-Z])/, \"\");\n return unprefixed ? unprefixed[0].toLowerCase() + unprefixed.slice(1) : name;\n}\n\nfunction isHtmlOrSvgElement(element: Element): element is HTMLElement | SVGElement {\n const view = element.ownerDocument.defaultView;\n return Boolean(\n view && (element instanceof view.HTMLElement || element instanceof view.SVGElement),\n );\n}\n\nfunction isInputElement(element: Element): element is HTMLInputElement {\n const view = element.ownerDocument.defaultView;\n return Boolean(view && element instanceof view.HTMLInputElement);\n}\n\nfunction isTextAreaElement(element: Element): element is HTMLTextAreaElement {\n const view = element.ownerDocument.defaultView;\n return Boolean(view && element instanceof view.HTMLTextAreaElement);\n}\n\nfunction isSelectElement(element: Element): element is HTMLSelectElement {\n const view = element.ownerDocument.defaultView;\n return Boolean(view && element instanceof view.HTMLSelectElement);\n}\n\nfunction isOptionElement(element: Element): element is HTMLOptionElement {\n const view = element.ownerDocument.defaultView;\n return Boolean(view && element instanceof view.HTMLOptionElement);\n}\n\nfunction isSelectableTextControl(\n element: Element | null | undefined,\n): element is SelectableTextControl {\n return Boolean(element && (isInputElement(element) || isTextAreaElement(element)));\n}\n\nfunction updateStyle(element: Element, name: string, value: unknown): void {\n if (!isHtmlOrSvgElement(element)) return;\n const customProperty = name.startsWith(\"--\");\n let nextValue = \"\";\n if (value !== null && value !== undefined && typeof value !== \"boolean\" && value !== \"\") {\n nextValue =\n typeof value === \"number\" &&\n value !== 0 &&\n !customProperty &&\n !UNITLESS_STYLE_PROPERTIES.has(unprefixedStyleName(name))\n ? `${value}px`\n : String(value).trim();\n }\n\n if (customProperty || name.includes(\"-\")) {\n element.style.setProperty(name, nextValue);\n } else {\n (element.style as unknown as Record<string, string>)[name] = nextValue;\n }\n}\n\nfunction updateSelectValue(element: HTMLSelectElement, value: unknown): void {\n const options = [...element.options];\n if (element.multiple) {\n const selected = new Set(\n (Array.isArray(value) ? value : value === null || value === undefined ? [] : [value]).map(\n String,\n ),\n );\n for (const option of options) option.selected = selected.has(option.value);\n return;\n }\n\n const selectedValue = value === null || value === undefined ? \"\" : String(value);\n let fallback: HTMLOptionElement | undefined;\n for (const option of options) {\n if (!option.disabled && !fallback) fallback = option;\n if (option.value === selectedValue) {\n option.selected = true;\n return;\n }\n }\n if (fallback) fallback.selected = true;\n}\n\nfunction updateAttribute(element: Element, name: string, value: unknown): void {\n const attributeName = name === \"className\" ? \"class\" : name === \"htmlFor\" ? \"for\" : name;\n const stringifiesBoolean = attributeName.startsWith(\"data-\") || attributeName.startsWith(\"aria-\");\n\n if (name === \"value\" && (isInputElement(element) || isTextAreaElement(element))) {\n const nextValue = value === null || value === undefined ? \"\" : String(value);\n if (element.value !== nextValue) element.value = nextValue;\n return;\n }\n\n if (name === \"value\" && isSelectElement(element)) {\n updateSelectValue(element, value);\n return;\n }\n\n if (name === \"checked\" && isInputElement(element)) {\n element.checked = Boolean(value);\n return;\n }\n\n if (name === \"selected\" && isOptionElement(element)) {\n element.selected = Boolean(value);\n return;\n }\n\n if (name === \"disabled\" && \"disabled\" in element) {\n (element as HTMLButtonElement).disabled = Boolean(value);\n return;\n }\n\n if (value === null || value === undefined || (value === false && !stringifiesBoolean)) {\n element.removeAttribute(attributeName);\n } else if (value === true && !stringifiesBoolean) {\n element.setAttribute(attributeName, \"\");\n } else {\n element.setAttribute(attributeName, String(value));\n }\n}\n\ninterface ConditionalBlockOwner {\n setRoot(id: number, root: Element | null): void;\n subscribe(id: number, refresh: (afterCommit?: () => void) => void): () => void;\n}\n\nfunction createConditionalBlockComponent(\n owner: ConditionalBlockOwner,\n): React.ComponentType<CompilerConditionalBlockProps> {\n class FarmConditionalBlock extends React.Component<CompilerConditionalBlockProps> {\n static displayName = \"FarmCompiledConditionalBlock\";\n\n private unsubscribe: (() => void) | undefined;\n\n private captureRoot = (root: Element | null) => {\n owner.setRoot(this.props.id, root);\n };\n\n private refresh = (afterCommit?: () => void) => {\n this.forceUpdate(afterCommit);\n };\n\n private subscribe(): void {\n this.unsubscribe = owner.subscribe(this.props.id, this.refresh);\n }\n\n componentDidMount(): void {\n this.subscribe();\n }\n\n componentDidUpdate(previous: CompilerConditionalBlockProps): void {\n if (previous.id === this.props.id) return;\n this.unsubscribe?.();\n owner.setRoot(previous.id, null);\n this.subscribe();\n }\n\n componentWillUnmount(): void {\n this.unsubscribe?.();\n owner.setRoot(this.props.id, null);\n }\n\n render(): React.ReactNode {\n const node = this.props.render();\n if (!React.isValidElement(node)) {\n if (\n node === null ||\n node === undefined ||\n typeof node === \"boolean\" ||\n typeof node === \"string\" ||\n typeof node === \"number\" ||\n typeof node === \"bigint\"\n ) {\n return node;\n }\n throw new TypeError(\n `Compiled conditional block ${this.props.id} must return one host element or an empty value.`,\n );\n }\n if (typeof node.type !== \"string\") {\n throw new TypeError(\n `Compiled conditional block ${this.props.id} must return one host element.`,\n );\n }\n return React.cloneElement(node, {\n ref: this.captureRoot,\n } as React.Attributes);\n }\n }\n\n return FarmConditionalBlock;\n}\n\nfunction createKeyedListBlockComponent(\n owner: Pick<ConditionalBlockOwner, \"subscribe\">,\n): React.ComponentType<CompilerKeyedListBlockProps> {\n class FarmKeyedListBlock extends React.Component<CompilerKeyedListBlockProps> {\n static displayName = \"FarmCompiledKeyedListBlock\";\n\n private unsubscribe: (() => void) | undefined;\n\n private refresh = (afterCommit?: () => void) => {\n this.forceUpdate(afterCommit);\n };\n\n private subscribe(): void {\n this.unsubscribe = owner.subscribe(this.props.id, this.refresh);\n }\n\n componentDidMount(): void {\n this.subscribe();\n }\n\n componentDidUpdate(previous: CompilerKeyedListBlockProps): void {\n if (previous.id === this.props.id) return;\n this.unsubscribe?.();\n this.subscribe();\n }\n\n componentWillUnmount(): void {\n this.unsubscribe?.();\n }\n\n render(): React.ReactNode {\n return this.props.render();\n }\n }\n\n return FarmKeyedListBlock;\n}\n\ninterface CompilerHostInstance {\n element: Element;\n values: unknown[];\n}\n\nfunction isCompilerHostElement(value: unknown): value is CompilerHostElement {\n return (\n typeof value === \"object\" && value !== null && (value as { kind?: unknown }).kind === \"element\"\n );\n}\n\nfunction createCompilerHostElement(document: Document, descriptor: CompilerHostElement): Element {\n const element = document.createElement(descriptor.tag);\n for (const attribute of descriptor.attributes) {\n updateAttribute(element, attribute.name, attribute.value);\n }\n for (const style of descriptor.styles) updateStyle(element, style.name, style.value);\n for (const child of descriptor.children) {\n if (isCompilerHostElement(child)) {\n element.append(createCompilerHostElement(document, child));\n continue;\n }\n const text = renderTextValue(child);\n if (text) element.append(document.createTextNode(text));\n }\n // Select options and textarea text must exist before their controlled value\n // is finalized. Reapplying is harmless for other attributes and avoids a\n // transient/default selection becoming the compiled branch's final state.\n for (const attribute of descriptor.attributes) {\n if (attribute.name === \"value\" && (isSelectElement(element) || isTextAreaElement(element))) {\n updateAttribute(element, attribute.name, attribute.value);\n }\n }\n return element;\n}\n\nfunction matchesCompilerHostElement(\n element: Element,\n descriptor: CompilerHostElement,\n opaquePaths: ReadonlySet<string> = new Set(),\n path: readonly number[] = [],\n): boolean {\n if (element.tagName.toLowerCase() !== descriptor.tag.toLowerCase()) return false;\n if (opaquePaths.has(path.join(\".\"))) return true;\n const expectedChildren = descriptor.children.filter(isCompilerHostElement);\n if (element.children.length !== expectedChildren.length) return false;\n return expectedChildren.every((child, index) =>\n matchesCompilerHostElement(element.children[index], child, opaquePaths, [...path, index]),\n );\n}\n\nfunction findCompilerHostTarget(root: Element, path: readonly number[]): Element | null {\n let current: Element | null = root;\n for (const index of path) current = current?.children[index] || null;\n return current;\n}\n\ninterface CompilerKeyedRowInstance extends CompilerHostInstance {\n key: string;\n item: unknown;\n index: number;\n conditionalValues: Map<number, readonly unknown[]>;\n}\n\nconst UNSET_KEYED_ROW_BINDING = Symbol(\"unset interactive keyed-row binding\");\n\nfunction keyedRowIdentity(key: React.Key): string {\n return String(key);\n}\n\nfunction normalizedKeyedRowBindingValue(binding: CompilerKeyedRowBinding, value: unknown): unknown {\n return binding.kind === \"text\" ? renderTextValue(value) : value;\n}\n\ntype CompilerKeyedRowBindingSource = Pick<CompilerKeyedRowsBlockProps, \"bindings\">;\n\nfunction readKeyedRowBindingValues(\n props: CompilerKeyedRowBindingSource,\n item: unknown,\n index: number,\n): unknown[] {\n return props.bindings.map((binding) =>\n normalizedKeyedRowBindingValue(binding, binding.read(item, index)),\n );\n}\n\nfunction applyKeyedRowBindings(\n props: CompilerKeyedRowBindingSource,\n instance: CompilerKeyedRowInstance,\n item: unknown,\n index: number,\n): void {\n for (let bindingIndex = 0; bindingIndex < props.bindings.length; bindingIndex += 1) {\n const binding = props.bindings[bindingIndex];\n const rawValue = binding.read(item, index);\n const value = normalizedKeyedRowBindingValue(binding, rawValue);\n if (Object.is(instance.values[bindingIndex], value)) continue;\n instance.values[bindingIndex] = value;\n const target = findCompilerHostTarget(instance.element, binding.path);\n if (!target) continue;\n if (binding.kind === \"text\") {\n target.textContent = value as string;\n } else if (binding.kind === \"style\" && binding.name) {\n updateStyle(target, binding.name, rawValue);\n } else if (binding.kind === \"attribute\" && binding.name) {\n updateAttribute(target, binding.name, rawValue);\n }\n }\n}\n\nfunction keyedRowConditionalSnapshot(\n conditional: CompilerKeyedRowConditional,\n item: unknown,\n index: number,\n): readonly unknown[] {\n const test = conditional.test(item, index);\n if (conditional.logical && !test) {\n return typeof test === \"number\" || typeof test === \"bigint\" ? [\"primitive\", test] : [\"empty\"];\n }\n const key = test ? \"truthy\" : \"falsy\";\n const branch = key === \"truthy\" ? conditional.truthy : conditional.falsy;\n if (!branch) return [\"empty\"];\n return [\n key,\n ...branch.bindings.map((binding) =>\n normalizedKeyedRowBindingValue(binding, binding.read(item, index)),\n ),\n ];\n}\n\nfunction readKeyedRowConditionalValues(\n props: CompilerKeyedRowsBlockProps,\n item: unknown,\n index: number,\n): Map<number, readonly unknown[]> {\n return new Map(\n (props.conditionals || []).map((conditional) => [\n conditional.id,\n keyedRowConditionalSnapshot(conditional, item, index),\n ]),\n );\n}\n\nfunction keyedRowConditionalChanged(\n previous: readonly unknown[] | undefined,\n next: readonly unknown[],\n): boolean {\n return (\n !previous ||\n previous.length !== next.length ||\n next.some((value, index) => !Object.is(value, previous[index]))\n );\n}\n\ntype CompilerHostConditionalSelection =\n | { kind: \"branch\"; key: \"truthy\" | \"falsy\"; branch: CompilerHostConditionalBranch }\n | { kind: \"empty\" }\n | { kind: \"fallback\" };\n\nfunction hostConditionalSelection(\n props: CompilerHostConditionalBlockProps,\n): CompilerHostConditionalSelection {\n const test = props.test();\n if (props.logical && !test) {\n // React renders 0, NaN, and (where supported) 0n from `value && <Element />`.\n // The host-only fast path cannot represent that primitive branch, so retain\n // React's exact behavior rather than coercing it to an empty branch.\n if (typeof test === \"number\" || typeof test === \"bigint\") return { kind: \"fallback\" };\n return { kind: \"empty\" };\n }\n const key = test ? \"truthy\" : \"falsy\";\n const branch = key === \"truthy\" ? props.truthy : props.falsy;\n return branch ? { kind: \"branch\", key, branch } : { kind: \"empty\" };\n}\n\nfunction normalizedHostConditionalBindingValue(\n binding: CompilerHostConditionalBinding,\n value: unknown,\n): unknown {\n return binding.kind === \"text\" ? renderTextValue(value) : value;\n}\n\nfunction readHostConditionalBindingValues(branch: CompilerHostConditionalBranch): unknown[] {\n return branch.bindings.map((binding) =>\n normalizedHostConditionalBindingValue(binding, binding.read()),\n );\n}\n\nfunction applyHostConditionalBindings(\n branch: CompilerHostConditionalBranch,\n instance: CompilerHostInstance,\n): void {\n for (let bindingIndex = 0; bindingIndex < branch.bindings.length; bindingIndex += 1) {\n const binding = branch.bindings[bindingIndex];\n const rawValue = binding.read();\n const value = normalizedHostConditionalBindingValue(binding, rawValue);\n if (Object.is(instance.values[bindingIndex], value)) continue;\n instance.values[bindingIndex] = value;\n const target = findCompilerHostTarget(instance.element, binding.path);\n if (!target) continue;\n if (binding.kind === \"text\") {\n target.textContent = value as string;\n } else if (binding.kind === \"style\" && binding.name) {\n updateStyle(target, binding.name, rawValue);\n } else if (binding.kind === \"attribute\" && binding.name) {\n updateAttribute(target, binding.name, rawValue);\n }\n }\n}\n\nfunction createHostConditionalBlockComponent(\n owner: Pick<ConditionalBlockOwner, \"subscribe\">,\n): React.ComponentType<CompilerHostConditionalBlockProps> {\n interface State {\n fallback: boolean;\n }\n\n class FarmHostConditionalBlock extends React.Component<CompilerHostConditionalBlockProps, State> {\n static displayName = \"FarmCompiledHostConditional\";\n\n state: State = { fallback: false };\n private root: Element | null = null;\n private mounted = false;\n private fallbackRequested = false;\n private fallbackVersion = 0;\n private propSyncQueued = false;\n private currentProps = this.props;\n private unsubscribe: (() => void) | undefined;\n private activeBranch: \"truthy\" | \"falsy\" | null = null;\n private instance: CompilerHostInstance | null = null;\n\n private captureRoot = (root: Element | null) => {\n this.root = root;\n };\n\n private adopt(): boolean {\n if (!this.root) return false;\n const selection = hostConditionalSelection(this.currentProps);\n if (selection.kind === \"fallback\") return false;\n if (selection.kind === \"empty\") {\n if (this.root.childNodes.length !== 0) return false;\n this.activeBranch = null;\n this.instance = null;\n return true;\n }\n if (\n this.root.childNodes.length !== 1 ||\n this.root.firstElementChild === null ||\n this.root.firstElementChild !== this.root.firstChild\n ) {\n return false;\n }\n const descriptor = selection.branch.create();\n const element = this.root.firstElementChild;\n if (!matchesCompilerHostElement(element, descriptor)) return false;\n this.activeBranch = selection.key;\n this.instance = {\n element,\n values: readHostConditionalBindingValues(selection.branch),\n };\n return true;\n }\n\n private activateFallback(afterCommit?: () => void): void {\n if (!this.mounted || this.state.fallback || this.fallbackRequested) {\n afterCommit?.();\n return;\n }\n this.fallbackRequested = true;\n // One key change on entry: the compiled path mutated the DOM behind\n // React's back, so the first fallback render must rebuild the subtree.\n this.fallbackVersion += 1;\n this.setState({ fallback: true }, afterCommit);\n }\n\n private reconcile(afterCommit?: () => void): void {\n if (!this.mounted || !this.root) {\n afterCommit?.();\n return;\n }\n if (this.state.fallback) {\n // React owns the container while in fallback; re-render with the\n // stable key so updates reconcile in place instead of remounting the\n // subtree (which would wipe uncontrolled inputs, focus, and scroll).\n this.forceUpdate(afterCommit);\n return;\n }\n\n const selection = hostConditionalSelection(this.currentProps);\n if (selection.kind === \"fallback\") {\n this.activateFallback(afterCommit);\n return;\n }\n if (selection.kind === \"empty\") {\n if (this.instance) this.instance.element.remove();\n this.activeBranch = null;\n this.instance = null;\n afterCommit?.();\n return;\n }\n if (this.activeBranch === selection.key && this.instance) {\n applyHostConditionalBindings(selection.branch, this.instance);\n afterCommit?.();\n return;\n }\n\n const element = createCompilerHostElement(this.root.ownerDocument, selection.branch.create());\n this.root.replaceChildren(element);\n this.activeBranch = selection.key;\n this.instance = {\n element,\n values: readHostConditionalBindingValues(selection.branch),\n };\n afterCommit?.();\n }\n\n private refresh = (afterCommit?: () => void) => {\n this.reconcile(afterCommit);\n };\n\n private schedulePropSync(): void {\n if (this.propSyncQueued) return;\n this.propSyncQueued = true;\n queueMicrotask(() => {\n this.propSyncQueued = false;\n if (this.mounted && !this.state.fallback) this.reconcile();\n });\n }\n\n shouldComponentUpdate(nextProps: CompilerHostConditionalBlockProps, nextState: State): boolean {\n this.currentProps = nextProps;\n if (nextState.fallback || this.state.fallback) return true;\n this.schedulePropSync();\n return false;\n }\n\n componentDidMount(): void {\n this.mounted = true;\n this.unsubscribe = owner.subscribe(this.props.id, this.refresh);\n if (!this.adopt()) this.activateFallback();\n }\n\n componentWillUnmount(): void {\n this.mounted = false;\n this.unsubscribe?.();\n this.root = null;\n this.activeBranch = null;\n this.instance = null;\n }\n\n render(): React.ReactNode {\n const container = this.currentProps.render();\n if (!React.isValidElement(container) || typeof container.type !== \"string\") {\n throw new TypeError(\n `Compiled host conditional ${this.currentProps.id} must own one host container.`,\n );\n }\n return React.cloneElement(container, {\n key: this.state.fallback ? `react-${this.fallbackVersion}` : \"compiled\",\n ref: this.captureRoot,\n } as React.Attributes);\n }\n }\n\n return FarmHostConditionalBlock;\n}\n\n/** Returns positions forming the LIS while ignoring newly inserted (-1) entries. */\nfunction longestIncreasingSubsequencePositions(sequence: readonly number[]): Set<number> {\n const tails: number[] = [];\n const previous = Array.from({ length: sequence.length }, () => -1);\n\n for (let index = 0; index < sequence.length; index += 1) {\n if (sequence[index] < 0) continue;\n let low = 0;\n let high = tails.length;\n while (low < high) {\n const middle = (low + high) >> 1;\n if (sequence[tails[middle]] < sequence[index]) low = middle + 1;\n else high = middle;\n }\n if (low > 0) previous[index] = tails[low - 1];\n tails[low] = index;\n }\n\n const positions = new Set<number>();\n let cursor = tails.at(-1) ?? -1;\n while (cursor >= 0) {\n positions.add(cursor);\n cursor = previous[cursor];\n }\n return positions;\n}\n\nfunction createKeyedRowsBlockComponent(\n owner: Pick<ConditionalBlockOwner, \"subscribe\">,\n): React.ComponentType<CompilerKeyedRowsBlockProps> {\n interface State {\n fallback: boolean;\n }\n\n type RowConditionalRefresh = (item: unknown, index: number, afterCommit?: () => void) => void;\n\n interface RowConditionalOwner {\n subscribe(key: string, id: number, refresh: RowConditionalRefresh): () => void;\n }\n\n interface RowConditionalProps {\n owner: RowConditionalOwner;\n rowKey: string;\n id: number;\n renderVersion: number;\n item: unknown;\n index: number;\n render(item: unknown, index: number): React.ReactNode;\n }\n\n interface RowConditionalState {\n renderVersion: number;\n item: unknown;\n index: number;\n }\n\n class FarmKeyedRowConditional extends React.Component<RowConditionalProps, RowConditionalState> {\n static displayName = \"FarmCompiledKeyedRowConditional\";\n\n state: RowConditionalState = {\n renderVersion: this.props.renderVersion,\n item: this.props.item,\n index: this.props.index,\n };\n private unsubscribe: (() => void) | undefined;\n\n static getDerivedStateFromProps(\n props: RowConditionalProps,\n state: RowConditionalState,\n ): Partial<RowConditionalState> | null {\n if (props.renderVersion === state.renderVersion) return null;\n return {\n renderVersion: props.renderVersion,\n item: props.item,\n index: props.index,\n };\n }\n\n private refresh: RowConditionalRefresh = (item, index, afterCommit) => {\n this.setState({ item, index }, afterCommit);\n };\n\n private subscribe(): void {\n this.unsubscribe = this.props.owner.subscribe(this.props.rowKey, this.props.id, this.refresh);\n }\n\n componentDidMount(): void {\n this.subscribe();\n }\n\n componentDidUpdate(previous: RowConditionalProps): void {\n if (\n previous.owner === this.props.owner &&\n previous.rowKey === this.props.rowKey &&\n previous.id === this.props.id\n ) {\n return;\n }\n this.unsubscribe?.();\n this.subscribe();\n }\n\n componentWillUnmount(): void {\n this.unsubscribe?.();\n }\n\n render(): React.ReactNode {\n return this.props.render(this.state.item, this.state.index);\n }\n }\n\n class FarmKeyedRowsBlock extends React.Component<CompilerKeyedRowsBlockProps, State> {\n static displayName = \"FarmCompiledKeyedRows\";\n\n state: State = { fallback: false };\n private root: Element | null = null;\n private mounted = false;\n private fallbackRequested = false;\n private fallbackVersion = 0;\n private fallbackKeysWereUnsafe = false;\n private propSyncQueued = false;\n private currentProps = this.props;\n private unsubscribe: (() => void) | undefined;\n private instances = new Map<string, CompilerKeyedRowInstance>();\n private renderVersion = 0;\n private readonly eventHandlers = new Map<\n string,\n Map<number, React.EventHandler<React.SyntheticEvent>>\n >();\n private readonly conditionalListeners = new Map<string, Map<number, RowConditionalRefresh>>();\n private readonly conditionalOwner: RowConditionalOwner = {\n subscribe: (key, id, refresh) => this.subscribeToRowConditional(key, id, refresh),\n };\n\n private captureRoot = (root: Element | null) => {\n this.root = root;\n };\n\n private readRows(\n props: CompilerKeyedRowsBlockProps,\n ): { items: unknown[]; keys: string[] } | null {\n const source = props.items();\n const items = source ? Array.from(source) : [];\n const keys = items.map((item, index) => keyedRowIdentity(props.rowKey(item, index)));\n if (new Set(keys).size !== keys.length) return null;\n return { items, keys };\n }\n\n private rowEvent = (\n item: unknown,\n index: number,\n eventId: number,\n ): React.EventHandler<React.SyntheticEvent> => {\n if (this.state.fallback) {\n return (event) => this.currentProps.events?.[eventId]?.invoke(item, index, event);\n }\n const key = keyedRowIdentity(this.currentProps.rowKey(item, index));\n let handlers = this.eventHandlers.get(key);\n if (!handlers) {\n handlers = new Map();\n this.eventHandlers.set(key, handlers);\n }\n const existing = handlers.get(eventId);\n if (existing) return existing;\n const handler: React.EventHandler<React.SyntheticEvent> = (event) => {\n const instance = this.instances.get(key);\n const descriptor = this.currentProps.events?.[eventId];\n if (!instance || !descriptor) return;\n return descriptor.invoke(instance.item, instance.index, event);\n };\n handlers.set(eventId, handler);\n return handler;\n };\n\n private rowConditional = (\n item: unknown,\n index: number,\n conditionalId: number,\n render: (item: unknown, index: number) => React.ReactNode,\n ): React.ReactNode => {\n if (this.state.fallback) return render(item, index);\n const key = keyedRowIdentity(this.currentProps.rowKey(item, index));\n return React.createElement(FarmKeyedRowConditional, {\n key: `${key}:${conditionalId}`,\n owner: this.conditionalOwner,\n rowKey: key,\n id: conditionalId,\n renderVersion: this.renderVersion,\n item,\n index,\n render,\n });\n };\n\n private subscribeToRowConditional(\n key: string,\n id: number,\n refresh: RowConditionalRefresh,\n ): () => void {\n let listeners = this.conditionalListeners.get(key);\n if (!listeners) {\n listeners = new Map();\n this.conditionalListeners.set(key, listeners);\n }\n listeners.set(id, refresh);\n return () => {\n const current = this.conditionalListeners.get(key);\n if (current?.get(id) !== refresh) return;\n current.delete(id);\n if (current.size === 0) this.conditionalListeners.delete(key);\n };\n }\n\n private hasReactOwnedRows(props: CompilerKeyedRowsBlockProps = this.currentProps): boolean {\n return Boolean(props.events?.length || props.conditionals?.length);\n }\n\n private pruneEventHandlers(keys: readonly string[]): void {\n const active = new Set(keys);\n for (const key of this.eventHandlers.keys()) {\n if (!active.has(key)) this.eventHandlers.delete(key);\n }\n }\n\n private pruneConditionalListeners(keys: readonly string[]): void {\n const active = new Set(keys);\n for (const key of this.conditionalListeners.keys()) {\n if (!active.has(key)) this.conditionalListeners.delete(key);\n }\n }\n\n private adopt(): boolean {\n if (!this.root) return false;\n const rows = this.readRows(this.currentProps);\n const elements = [...this.root.children];\n if (!rows || rows.items.length !== elements.length) return false;\n const opaqueConditionalPaths = new Set(\n (this.currentProps.conditionals || []).map((conditional) => conditional.path.join(\".\")),\n );\n const instances = new Map<string, CompilerKeyedRowInstance>();\n for (let index = 0; index < rows.items.length; index += 1) {\n if (\n this.hasReactOwnedRows() &&\n !matchesCompilerHostElement(\n elements[index],\n this.currentProps.create(rows.items[index], index),\n opaqueConditionalPaths,\n )\n ) {\n return false;\n }\n const instance: CompilerKeyedRowInstance = {\n key: rows.keys[index],\n element: elements[index],\n values: this.hasReactOwnedRows()\n ? this.currentProps.bindings.map(() => UNSET_KEYED_ROW_BINDING)\n : readKeyedRowBindingValues(this.currentProps, rows.items[index], index),\n item: rows.items[index],\n index,\n conditionalValues: readKeyedRowConditionalValues(\n this.currentProps,\n rows.items[index],\n index,\n ),\n };\n if (this.hasReactOwnedRows()) {\n // React compares the next row against its previous virtual props, not\n // against DOM values patched by Farm between commits. Reapply every\n // binding after a structural React commit so both views converge\n // before direct same-key patches resume.\n applyKeyedRowBindings(this.currentProps, instance, rows.items[index], index);\n }\n instances.set(rows.keys[index], instance);\n }\n this.instances = instances;\n this.pruneEventHandlers(rows.keys);\n this.pruneConditionalListeners(rows.keys);\n return true;\n }\n\n private hasUnsafeFallbackKeys(): boolean {\n try {\n return this.readRows(this.currentProps) === null;\n } catch {\n return true;\n }\n }\n\n private activateFallback(afterCommit?: () => void): void {\n if (!this.mounted || this.state.fallback || this.fallbackRequested) {\n afterCommit?.();\n return;\n }\n this.fallbackRequested = true;\n this.fallbackKeysWereUnsafe = this.hasUnsafeFallbackKeys();\n // One key change on entry: the compiled path mutated the DOM behind\n // React's back, so the first fallback render must rebuild the subtree.\n this.fallbackVersion += 1;\n this.setState({ fallback: true }, afterCommit);\n }\n\n private synchronizeReactOwnedRows(afterCommit?: () => void): void {\n this.forceUpdate(() => {\n if (!this.mounted) {\n afterCommit?.();\n return;\n }\n if (!this.adopt()) {\n this.activateFallback(afterCommit);\n return;\n }\n afterCommit?.();\n });\n }\n\n private notifyConditionalChanges(\n changes: readonly {\n key: string;\n id: number;\n item: unknown;\n index: number;\n }[],\n afterCommit?: () => void,\n ): void {\n if (changes.length === 0) {\n afterCommit?.();\n return;\n }\n let pending = changes.length;\n const committed = () => {\n pending -= 1;\n if (pending === 0) afterCommit?.();\n };\n // The normal row bindings above are patched synchronously. Flush the\n // React-owned conditional boundaries in the same turn as well so React\n // 18 cannot expose a transient row where text and branch disagree.\n flushSync(() => {\n for (const change of changes) {\n const refresh = this.conditionalListeners.get(change.key)?.get(change.id);\n if (refresh) refresh(change.item, change.index, committed);\n else committed();\n }\n });\n }\n\n private reconcile(afterCommit?: () => void): void {\n if (!this.mounted || !this.root) {\n afterCommit?.();\n return;\n }\n if (this.state.fallback) {\n // React owns the container while in fallback; keep the key stable so\n // updates reconcile in place instead of remounting the subtree (which\n // would wipe uncontrolled inputs, focus, and scroll). The exception\n // is duplicate runtime keys: React's reconciliation of a keyed list\n // with duplicates is unreliable, so any render touched by them (this\n // one, or the previously committed one) still remounts.\n const unsafeKeys = this.hasUnsafeFallbackKeys();\n if (unsafeKeys || this.fallbackKeysWereUnsafe) {\n this.fallbackVersion += 1;\n }\n this.fallbackKeysWereUnsafe = unsafeKeys;\n this.forceUpdate(afterCommit);\n return;\n }\n\n const rows = this.readRows(this.currentProps);\n if (!rows) {\n this.activateFallback(afterCommit);\n return;\n }\n\n const previousKeys = [...this.instances.keys()];\n if (\n this.hasReactOwnedRows() &&\n (rows.keys.length !== previousKeys.length ||\n rows.keys.some((key, index) => key !== previousKeys[index]))\n ) {\n this.synchronizeReactOwnedRows(afterCommit);\n return;\n }\n\n const oldIndices = new Map<string, number>();\n const activeElement = this.root.ownerDocument.activeElement;\n const restoreFocus = Boolean(activeElement && this.root.contains(activeElement));\n [...this.instances].forEach(([key], index) => oldIndices.set(key, index));\n const nextKeys = new Set(rows.keys);\n for (const [key, instance] of this.instances) {\n if (!nextKeys.has(key)) instance.element.remove();\n }\n\n const sequence = rows.keys.map((key) => oldIndices.get(key) ?? -1);\n const stablePositions = longestIncreasingSubsequencePositions(sequence);\n const nextInstances: CompilerKeyedRowInstance[] = [];\n const conditionalChanges: Array<{\n key: string;\n id: number;\n item: unknown;\n index: number;\n }> = [];\n for (let index = 0; index < rows.items.length; index += 1) {\n const key = rows.keys[index];\n const existing = this.instances.get(key);\n if (existing) {\n applyKeyedRowBindings(this.currentProps, existing, rows.items[index], index);\n const conditionalValues = readKeyedRowConditionalValues(\n this.currentProps,\n rows.items[index],\n index,\n );\n for (const [id, values] of conditionalValues) {\n if (keyedRowConditionalChanged(existing.conditionalValues.get(id), values)) {\n conditionalChanges.push({ key, id, item: rows.items[index], index });\n }\n }\n existing.conditionalValues = conditionalValues;\n existing.item = rows.items[index];\n existing.index = index;\n nextInstances.push(existing);\n continue;\n }\n const element = createCompilerHostElement(\n this.root.ownerDocument,\n this.currentProps.create(rows.items[index], index),\n );\n nextInstances.push({\n key,\n element,\n values: readKeyedRowBindingValues(this.currentProps, rows.items[index], index),\n item: rows.items[index],\n index,\n conditionalValues: readKeyedRowConditionalValues(\n this.currentProps,\n rows.items[index],\n index,\n ),\n });\n }\n\n let anchor: ChildNode | null = null;\n for (let index = nextInstances.length - 1; index >= 0; index -= 1) {\n const instance = nextInstances[index];\n if (sequence[index] < 0) {\n this.root.insertBefore(instance.element, anchor);\n } else if (!stablePositions.has(index) && instance.element.nextSibling !== anchor) {\n this.root.insertBefore(instance.element, anchor);\n }\n anchor = instance.element;\n }\n this.instances = new Map(nextInstances.map((instance) => [instance.key, instance]));\n this.pruneEventHandlers(rows.keys);\n this.pruneConditionalListeners(rows.keys);\n if (\n restoreFocus &&\n activeElement?.isConnected &&\n activeElement.ownerDocument.activeElement !== activeElement &&\n \"focus\" in activeElement\n ) {\n (activeElement as HTMLElement).focus({ preventScroll: true });\n }\n this.notifyConditionalChanges(conditionalChanges, afterCommit);\n }\n\n private refresh = (afterCommit?: () => void) => {\n this.reconcile(afterCommit);\n };\n\n private schedulePropSync(): void {\n if (this.propSyncQueued) return;\n this.propSyncQueued = true;\n queueMicrotask(() => {\n this.propSyncQueued = false;\n if (this.mounted && !this.state.fallback) this.reconcile();\n });\n }\n\n shouldComponentUpdate(nextProps: CompilerKeyedRowsBlockProps, nextState: State): boolean {\n const wasReactOwned = this.hasReactOwnedRows(this.currentProps);\n const willBeReactOwned = this.hasReactOwnedRows(nextProps);\n this.currentProps = nextProps;\n if (nextState.fallback || this.state.fallback) return true;\n if (wasReactOwned || willBeReactOwned) {\n // Parent prop updates and Fast Refresh definitions must pass through\n // React so event locations, static row markup, and proxy identities\n // cannot remain tied to an older render definition.\n this.eventHandlers.clear();\n return true;\n }\n this.schedulePropSync();\n return false;\n }\n\n componentDidUpdate(previousProps: CompilerKeyedRowsBlockProps): void {\n if (\n this.state.fallback ||\n previousProps === this.props ||\n (!this.hasReactOwnedRows(previousProps) && !this.hasReactOwnedRows(this.props)) ||\n this.adopt()\n ) {\n return;\n }\n this.activateFallback();\n }\n\n componentDidMount(): void {\n this.mounted = true;\n this.unsubscribe = owner.subscribe(this.props.id, this.refresh);\n if (!this.adopt()) this.activateFallback();\n }\n\n componentWillUnmount(): void {\n this.mounted = false;\n this.unsubscribe?.();\n this.root = null;\n this.instances.clear();\n this.eventHandlers.clear();\n this.conditionalListeners.clear();\n }\n\n render(): React.ReactNode {\n this.renderVersion += 1;\n const container = this.currentProps.render(this.rowEvent, this.rowConditional);\n if (!React.isValidElement(container) || typeof container.type !== \"string\") {\n throw new TypeError(\n `Compiled keyed rows ${this.currentProps.id} must own one host container.`,\n );\n }\n return React.cloneElement(container, {\n key: this.state.fallback ? `react-${this.fallbackVersion}` : \"compiled\",\n ref: this.captureRoot,\n } as React.Attributes);\n }\n }\n\n return FarmKeyedRowsBlock;\n}\n\nfunction createKeyedRangesBlockComponent(\n owner: Pick<ConditionalBlockOwner, \"subscribe\">,\n): React.ComponentType<CompilerKeyedRangesBlockProps> {\n interface State {\n fallback: boolean;\n }\n\n interface ReadRange {\n items: unknown[];\n keys: string[];\n }\n\n class FarmKeyedRangesBlock extends React.Component<CompilerKeyedRangesBlockProps, State> {\n static displayName = \"FarmCompiledKeyedRanges\";\n\n state: State = { fallback: false };\n private root: Element | null = null;\n private mounted = false;\n private fallbackRequested = false;\n private fallbackVersion = 0;\n private propFallbackQueued = false;\n private currentProps = this.props;\n private unsubscribe: (() => void) | undefined;\n private rangeInstances: Array<Map<string, CompilerKeyedRowInstance>> = [];\n private staticSegments: Element[][] = [];\n\n private captureRoot = (root: Element | null) => {\n this.root = root;\n this.currentProps.rootRef?.(root);\n };\n\n private readRange(range: CompilerKeyedRange): ReadRange | null {\n const source = range.items();\n const items = source ? Array.from(source) : [];\n const keys = items.map((item, index) => keyedRowIdentity(range.rowKey(item, index)));\n if (new Set(keys).size !== keys.length) return null;\n return { items, keys };\n }\n\n private readRanges(props: CompilerKeyedRangesBlockProps): ReadRange[] | null {\n const ranges: ReadRange[] = [];\n for (const range of props.ranges) {\n const rows = this.readRange(range);\n if (!rows) return null;\n ranges.push(rows);\n }\n return ranges;\n }\n\n private adopt(props: CompilerKeyedRangesBlockProps = this.currentProps): boolean {\n if (!this.root || !Number.isSafeInteger(props.trailing) || props.trailing < 0) return false;\n const rowsByRange = this.readRanges(props);\n if (!rowsByRange) return false;\n const elements = [...this.root.children];\n const staticSegments: Element[][] = [];\n const instancesByRange: Array<Map<string, CompilerKeyedRowInstance>> = [];\n let cursor = 0;\n\n for (let rangeIndex = 0; rangeIndex < props.ranges.length; rangeIndex += 1) {\n const range = props.ranges[rangeIndex];\n const rows = rowsByRange[rangeIndex];\n if (!Number.isSafeInteger(range.before) || range.before < 0) return false;\n const staticEnd = cursor + range.before;\n if (staticEnd > elements.length) return false;\n staticSegments.push(elements.slice(cursor, staticEnd));\n cursor = staticEnd;\n\n const rowEnd = cursor + rows.items.length;\n if (rowEnd > elements.length) return false;\n const instances = new Map<string, CompilerKeyedRowInstance>();\n for (let index = 0; index < rows.items.length; index += 1) {\n const element = elements[cursor + index];\n if (!matchesCompilerHostElement(element, range.create(rows.items[index], index))) {\n return false;\n }\n instances.set(rows.keys[index], {\n key: rows.keys[index],\n element,\n values: readKeyedRowBindingValues(range, rows.items[index], index),\n item: rows.items[index],\n index,\n conditionalValues: new Map(),\n });\n }\n instancesByRange.push(instances);\n cursor = rowEnd;\n }\n\n if (cursor + props.trailing !== elements.length) return false;\n staticSegments.push(elements.slice(cursor));\n this.staticSegments = staticSegments;\n this.rangeInstances = instancesByRange;\n return true;\n }\n\n private anchorAfter(rangeIndex: number): ChildNode | null {\n for (let next = rangeIndex + 1; next < this.rangeInstances.length; next += 1) {\n const staticAnchor = this.staticSegments[next]?.[0];\n if (staticAnchor) return staticAnchor;\n const rowAnchor = this.rangeInstances[next].values().next().value?.element;\n if (rowAnchor) return rowAnchor;\n }\n return this.staticSegments[this.rangeInstances.length]?.[0] || null;\n }\n\n private reconcileRange(rangeIndex: number, rows: ReadRange): void {\n if (!this.root) return;\n const range = this.currentProps.ranges[rangeIndex];\n const previous = this.rangeInstances[rangeIndex];\n const oldIndices = new Map<string, number>();\n [...previous.keys()].forEach((key, index) => oldIndices.set(key, index));\n const nextKeys = new Set(rows.keys);\n for (const [key, instance] of previous) {\n if (!nextKeys.has(key)) instance.element.remove();\n }\n\n const sequence = rows.keys.map((key) => oldIndices.get(key) ?? -1);\n const stablePositions = longestIncreasingSubsequencePositions(sequence);\n const nextInstances: CompilerKeyedRowInstance[] = [];\n for (let index = 0; index < rows.items.length; index += 1) {\n const key = rows.keys[index];\n const existing = previous.get(key);\n if (existing) {\n applyKeyedRowBindings(range, existing, rows.items[index], index);\n existing.item = rows.items[index];\n existing.index = index;\n nextInstances.push(existing);\n continue;\n }\n const element = createCompilerHostElement(\n this.root.ownerDocument,\n range.create(rows.items[index], index),\n );\n nextInstances.push({\n key,\n element,\n values: readKeyedRowBindingValues(range, rows.items[index], index),\n item: rows.items[index],\n index,\n conditionalValues: new Map(),\n });\n }\n\n let anchor = this.anchorAfter(rangeIndex);\n for (let index = nextInstances.length - 1; index >= 0; index -= 1) {\n const instance = nextInstances[index];\n if (sequence[index] < 0) {\n this.root.insertBefore(instance.element, anchor);\n } else if (!stablePositions.has(index) && instance.element.nextSibling !== anchor) {\n this.root.insertBefore(instance.element, anchor);\n }\n anchor = instance.element;\n }\n this.rangeInstances[rangeIndex] = new Map(\n nextInstances.map((instance) => [instance.key, instance]),\n );\n }\n\n private reconcile(afterCommit?: () => void): void {\n if (!this.mounted || !this.root) {\n afterCommit?.();\n return;\n }\n if (this.state.fallback) {\n this.fallbackVersion += 1;\n this.forceUpdate(afterCommit);\n return;\n }\n const rowsByRange = this.readRanges(this.currentProps);\n if (!rowsByRange || rowsByRange.length !== this.rangeInstances.length) {\n this.activateFallback(afterCommit);\n return;\n }\n\n const activeElement = this.root.ownerDocument.activeElement;\n const restoreFocus = Boolean(activeElement && this.root.contains(activeElement));\n for (let rangeIndex = rowsByRange.length - 1; rangeIndex >= 0; rangeIndex -= 1) {\n this.reconcileRange(rangeIndex, rowsByRange[rangeIndex]);\n }\n if (\n restoreFocus &&\n activeElement?.isConnected &&\n activeElement.ownerDocument.activeElement !== activeElement &&\n \"focus\" in activeElement\n ) {\n (activeElement as HTMLElement).focus({ preventScroll: true });\n }\n afterCommit?.();\n }\n\n private refresh = (afterCommit?: () => void) => {\n this.reconcile(afterCommit);\n };\n\n private activateFallback(afterCommit?: () => void): void {\n if (!this.mounted || this.state.fallback || this.fallbackRequested) {\n afterCommit?.();\n return;\n }\n this.fallbackRequested = true;\n this.setState({ fallback: true }, afterCommit);\n }\n\n private schedulePropFallback(): void {\n if (this.propFallbackQueued) return;\n this.propFallbackQueued = true;\n queueMicrotask(() => {\n this.propFallbackQueued = false;\n if (this.mounted && !this.state.fallback) this.activateFallback();\n });\n }\n\n shouldComponentUpdate(nextProps: CompilerKeyedRangesBlockProps, nextState: State): boolean {\n this.currentProps = nextProps;\n if (nextState.fallback || this.state.fallback) return true;\n // Parent props and compatible Fast Refresh definitions can change static\n // siblings that are deliberately outside the range descriptors. Remount\n // this one container through React instead of retaining stale markup.\n this.schedulePropFallback();\n return false;\n }\n\n componentDidMount(): void {\n this.mounted = true;\n this.unsubscribe = owner.subscribe(this.props.id, this.refresh);\n if (!this.adopt()) this.activateFallback();\n }\n\n componentWillUnmount(): void {\n this.mounted = false;\n this.unsubscribe?.();\n this.root = null;\n this.rangeInstances = [];\n this.staticSegments = [];\n }\n\n render(): React.ReactNode {\n const container = this.currentProps.render();\n if (!React.isValidElement(container) || typeof container.type !== \"string\") {\n throw new TypeError(\n `Compiled keyed ranges ${this.currentProps.id} must own one host container.`,\n );\n }\n return React.cloneElement(container, {\n key: this.state.fallback ? `react-${this.fallbackVersion}` : \"compiled\",\n ref: this.captureRoot,\n } as React.Attributes);\n }\n }\n\n return FarmKeyedRangesBlock;\n}\n\nfunction createComponentBlockComponent(\n owner: Pick<ConditionalBlockOwner, \"subscribe\">,\n): React.ComponentType<CompilerComponentBlockProps> {\n class FarmComponentBlock extends React.Component<CompilerComponentBlockProps> {\n static displayName = \"FarmCompiledComponentIsland\";\n\n private unsubscribe: (() => void) | undefined;\n\n private refresh = (afterCommit?: () => void) => {\n this.forceUpdate(afterCommit);\n };\n\n private subscribe(): void {\n this.unsubscribe = owner.subscribe(this.props.id, this.refresh);\n }\n\n componentDidMount(): void {\n this.subscribe();\n }\n\n componentDidUpdate(previous: CompilerComponentBlockProps): void {\n if (previous.id === this.props.id) return;\n this.unsubscribe?.();\n this.subscribe();\n }\n\n componentWillUnmount(): void {\n this.unsubscribe?.();\n }\n\n render(): React.ReactNode {\n return this.props.render();\n }\n }\n\n return FarmComponentBlock;\n}\n\n/**\n * Runtime target emitted by the AOT transform.\n *\n * React owns initial placement, SSR, hydration, props, and event semantics.\n * Compiler cells own local updates and precomputed DOM paths. A proven host-only\n * keyed container may transfer its child-row ownership after mount.\n */\nexport function createCompiledComponent<Props>(\n definition: CompiledComponentDefinition<Props>,\n): React.ComponentType<Props> {\n const stateSignature = definition.stateSignature || String(definition.initialize.length);\n if (definition.hmrId) {\n const registry = getCompilerHmrRegistry();\n const existing = registry.get(definition.hmrId);\n if (existing?.stateSignature === stateSignature) {\n existing.definition.current = definition as CompiledComponentDefinition<unknown>;\n existing.component.displayName = `FarmCompiled(${definition.displayName})`;\n for (const refresh of existing.refreshListeners) refresh();\n return existing.component as React.ComponentType<Props>;\n }\n }\n\n const definitionReference: CompiledDefinitionReference<Props> = { current: definition };\n const refreshListeners = new Set<() => void>();\n\n class FarmCompiledComponent extends React.Component<Props> {\n private root: Element | null = null;\n private mounted = false;\n private flushQueued = false;\n private bindingError: unknown;\n private hasBindingError = false;\n private inputSelection: InputSelectionSnapshot | null = null;\n private readonly dirtyState = new Set<number>();\n private readonly cells: RuntimeCell[];\n private readonly blockRefreshListeners = new Map<number, (afterCommit?: () => void) => void>();\n private readonly blockRoots = new Map<number, Element>();\n private readonly blockRootElements = new Set<Element>();\n private readonly bindingTargets = new Map<number, Element>();\n private readonly bindingTargetRefs = new Map<number, React.RefCallback<Element>>();\n private readonly blockRuntime: CompilerBlockRuntime;\n\n constructor(props: Props) {\n super(props);\n this.cells = definitionReference.current.initialize(props).map((initialValue, index) => {\n let value = initialValue;\n const pending: CompilerStateUpdater[] = [];\n return {\n get: () => value,\n set: (next) => {\n pending.push(next);\n this.scheduleBindingFlush(index);\n },\n flush: () => {\n if (pending.length === 0) return false;\n const previous = value;\n for (const next of pending.splice(0)) {\n value = typeof next === \"function\" ? next(value) : next;\n }\n return !Object.is(previous, value);\n },\n };\n });\n this.blockRuntime = {\n Conditional: createConditionalBlockComponent({\n setRoot: (id, root) => this.setBlockRoot(id, root),\n subscribe: (id, refresh) => this.subscribeToBlock(id, refresh),\n }),\n HostConditional: createHostConditionalBlockComponent({\n subscribe: (id, refresh) => this.subscribeToBlock(id, refresh),\n }),\n KeyedList: createKeyedListBlockComponent({\n subscribe: (id, refresh) => this.subscribeToBlock(id, refresh),\n }),\n KeyedRows: createKeyedRowsBlockComponent({\n subscribe: (id, refresh) => this.subscribeToBlock(id, refresh),\n }),\n KeyedRanges: createKeyedRangesBlockComponent({\n subscribe: (id, refresh) => this.subscribeToBlock(id, refresh),\n }),\n Component: createComponentBlockComponent({\n subscribe: (id, refresh) => this.subscribeToBlock(id, refresh),\n }),\n target: (id) => this.bindingTarget(id),\n };\n }\n\n private captureRoot = (root: Element | null) => {\n this.root = root;\n };\n\n private refreshDefinition = () => {\n if (this.mounted) this.forceUpdate();\n };\n\n private bindingTarget(id: number): React.RefCallback<Element> {\n const existing = this.bindingTargetRefs.get(id);\n if (existing) return existing;\n const capture: React.RefCallback<Element> = (element) => {\n if (element) {\n this.bindingTargets.set(id, element);\n } else {\n this.bindingTargets.delete(id);\n }\n };\n this.bindingTargetRefs.set(id, capture);\n return capture;\n }\n\n private captureInputSelection(): void {\n const active = this.root?.ownerDocument.activeElement;\n if (\n !isSelectableTextControl(active) ||\n !this.root?.contains(active) ||\n active.selectionStart === null ||\n active.selectionEnd === null\n ) {\n return;\n }\n this.inputSelection = {\n element: active,\n start: active.selectionStart,\n end: active.selectionEnd,\n direction: active.selectionDirection || \"none\",\n };\n }\n\n private restoreInputSelection(snapshot: InputSelectionSnapshot | null): void {\n if (\n !snapshot ||\n !snapshot.element.isConnected ||\n snapshot.element.ownerDocument.activeElement !== snapshot.element\n ) {\n return;\n }\n snapshot.element.setSelectionRange(snapshot.start, snapshot.end, snapshot.direction);\n }\n\n private setBlockRoot(id: number, root: Element | null): void {\n const previous = this.blockRoots.get(id);\n if (previous) this.blockRootElements.delete(previous);\n if (root) {\n this.blockRoots.set(id, root);\n this.blockRootElements.add(root);\n } else {\n this.blockRoots.delete(id);\n }\n }\n\n private subscribeToBlock(id: number, refresh: (afterCommit?: () => void) => void): () => void {\n this.blockRefreshListeners.set(id, refresh);\n return () => {\n if (this.blockRefreshListeners.get(id) === refresh) {\n this.blockRefreshListeners.delete(id);\n }\n };\n }\n\n private scheduleBindingFlush(index: number): void {\n this.dirtyState.add(index);\n this.captureInputSelection();\n if (!this.mounted || this.flushQueued) return;\n this.flushQueued = true;\n queueMicrotask(() => {\n this.flushQueued = false;\n const inputSelection = this.inputSelection;\n this.inputSelection = null;\n if (!this.mounted) return;\n const dirty = new Set<number>();\n for (const index of this.dirtyState) {\n if (this.cells[index]?.flush()) dirty.add(index);\n }\n this.dirtyState.clear();\n if (dirty.size === 0) return;\n try {\n const bindings = definitionReference.current.bindings;\n const blockBindings = new Map<number, CompilerConditionalBlockBinding>();\n const affectedBlockIds = new Set<number>();\n\n for (const binding of bindings) {\n if (binding.kind !== \"block\") continue;\n blockBindings.set(binding.id, binding);\n if (binding.dependencies.some((dependency) => dirty.has(dependency))) {\n affectedBlockIds.add(binding.id);\n }\n }\n\n const hasAffectedMountedAncestor = (\n binding: CompilerConditionalBlockBinding,\n ): boolean => {\n let parent = binding.parent;\n while (parent !== undefined) {\n if (affectedBlockIds.has(parent) && this.blockRefreshListeners.has(parent)) {\n return true;\n }\n parent = blockBindings.get(parent)?.parent;\n }\n return false;\n };\n\n const blockRefreshes = [...affectedBlockIds]\n .map((id) => {\n const binding = blockBindings.get(id);\n const refresh = this.blockRefreshListeners.get(id);\n return binding && refresh && !hasAffectedMountedAncestor(binding)\n ? refresh\n : undefined;\n })\n .filter(\n (refresh): refresh is (afterCommit?: () => void) => void => refresh !== undefined,\n );\n\n for (const binding of bindings) {\n if (\n binding.kind !== \"block\" &&\n binding.dependencies.some((dependency) => dirty.has(dependency))\n ) {\n this.applyBinding(binding);\n }\n }\n\n let pendingBlockCommits = blockRefreshes.length;\n for (const refresh of blockRefreshes) {\n refresh(() => {\n pendingBlockCommits -= 1;\n if (pendingBlockCommits === 0) this.restoreInputSelection(inputSelection);\n });\n }\n if (blockRefreshes.length === 0) this.restoreInputSelection(inputSelection);\n } catch (error) {\n this.bindingError = error;\n this.hasBindingError = true;\n this.forceUpdate();\n }\n });\n }\n\n private applyBinding(binding: CompilerBinding<Props>): void {\n if (!this.root || binding.kind === \"block\") return;\n const target =\n binding.target === undefined\n ? findBindingTarget(this.root, binding.path, this.blockRootElements)\n : binding.path.length === 0\n ? this.root\n : this.bindingTargets.get(binding.target) || null;\n if (!target) return;\n const value = binding.read(this.props, this.cells);\n if (binding.kind === \"text\") {\n target.textContent = renderTextValue(value);\n } else if (binding.kind === \"style\") {\n updateStyle(target, binding.name, value);\n } else {\n updateAttribute(target, binding.name, value);\n }\n }\n\n componentDidMount(): void {\n this.mounted = true;\n refreshListeners.add(this.refreshDefinition);\n }\n\n componentDidUpdate(): void {\n // React has reconciled a parent-driven prop update. Reapply compiled\n // bindings from the current cells so React and the imperative state stay\n // coherent even when both change in the same turn.\n for (const binding of definitionReference.current.bindings) {\n if (binding.kind !== \"block\") this.applyBinding(binding);\n }\n }\n\n componentWillUnmount(): void {\n this.mounted = false;\n this.root = null;\n this.dirtyState.clear();\n this.inputSelection = null;\n this.blockRefreshListeners.clear();\n this.blockRoots.clear();\n this.blockRootElements.clear();\n this.bindingTargets.clear();\n this.bindingTargetRefs.clear();\n refreshListeners.delete(this.refreshDefinition);\n }\n\n render(): React.ReactNode {\n if (this.hasBindingError) throw this.bindingError;\n const currentDefinition = definitionReference.current;\n const element = currentDefinition.render(this.props, this.cells, this.blockRuntime);\n if (!React.isValidElement(element)) {\n throw new TypeError(\n `Compiled component ${currentDefinition.displayName} must return one host element.`,\n );\n }\n if (element.type === this.blockRuntime.KeyedRanges) {\n return React.cloneElement(element as React.ReactElement<CompilerKeyedRangesBlockProps>, {\n rootRef: this.captureRoot,\n });\n }\n if (typeof element.type !== \"string\") {\n throw new TypeError(\n `Compiled component ${currentDefinition.displayName} must return one host element.`,\n );\n }\n return React.cloneElement(element, {\n ref: this.captureRoot,\n } as React.Attributes);\n }\n }\n\n (FarmCompiledComponent as React.ComponentType<Props>).displayName =\n `FarmCompiled(${definition.displayName})`;\n const component = FarmCompiledComponent as React.ComponentType<Props>;\n\n if (definition.hmrId) {\n getCompilerHmrRegistry().set(definition.hmrId, {\n component: component as React.ComponentType<unknown>,\n definition: definitionReference as CompiledDefinitionReference<unknown>,\n refreshListeners,\n stateSignature,\n });\n }\n\n return component;\n}\n"]}
|
package/dist/index.cjs
CHANGED
|
@@ -2,6 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
// src/index.ts
|
|
4
4
|
var DEFAULT_COMPILER_DIRECTIVE = "use compiler";
|
|
5
|
+
var DEFAULT_COMPILER_REPORT_FILE = ".farm/react-compiler.json";
|
|
6
|
+
function normalizeCompilerReportFile(value) {
|
|
7
|
+
if (value === void 0) return DEFAULT_COMPILER_REPORT_FILE;
|
|
8
|
+
if (typeof value !== "string" || !value.trim()) {
|
|
9
|
+
throw new TypeError("The React compiler report file must be a non-empty relative path.");
|
|
10
|
+
}
|
|
11
|
+
const normalized = value.trim().replace(/\\/g, "/");
|
|
12
|
+
if (normalized.startsWith("/") || /^[A-Za-z]:\//.test(normalized) || normalized.split("/").includes("..")) {
|
|
13
|
+
throw new TypeError("The React compiler report file must stay inside the project root.");
|
|
14
|
+
}
|
|
15
|
+
return normalized;
|
|
16
|
+
}
|
|
5
17
|
function normalizeReactCompilerOptions(value) {
|
|
6
18
|
const options = value === true ? {} : value;
|
|
7
19
|
const mode = options.mode || "infer";
|
|
@@ -16,7 +28,17 @@ function normalizeReactCompilerOptions(value) {
|
|
|
16
28
|
if (!["fallback", "warn", "error"].includes(onUnsupported)) {
|
|
17
29
|
throw new TypeError(`Unknown unsupported-component behavior: ${String(onUnsupported)}`);
|
|
18
30
|
}
|
|
19
|
-
|
|
31
|
+
if (options.report !== void 0 && typeof options.report !== "boolean") {
|
|
32
|
+
throw new TypeError("The React compiler report option must be a boolean.");
|
|
33
|
+
}
|
|
34
|
+
if (options.report === false && options.reportFile !== void 0) {
|
|
35
|
+
throw new TypeError(
|
|
36
|
+
"A React compiler report file cannot be configured when reporting is false."
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
const reportFile = normalizeCompilerReportFile(options.reportFile);
|
|
40
|
+
const report = options.report === true || options.reportFile !== void 0;
|
|
41
|
+
return { mode, directive, onUnsupported, report, reportFile };
|
|
20
42
|
}
|
|
21
43
|
var REACT_RENDERER = Object.freeze({
|
|
22
44
|
name: "react",
|
|
@@ -54,6 +76,7 @@ function react(options = {}) {
|
|
|
54
76
|
}
|
|
55
77
|
|
|
56
78
|
exports.DEFAULT_COMPILER_DIRECTIVE = DEFAULT_COMPILER_DIRECTIVE;
|
|
79
|
+
exports.DEFAULT_COMPILER_REPORT_FILE = DEFAULT_COMPILER_REPORT_FILE;
|
|
57
80
|
exports.REACT_RENDERER = REACT_RENDERER;
|
|
58
81
|
exports.normalizeReactCompilerOptions = normalizeReactCompilerOptions;
|
|
59
82
|
exports.react = react;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["import type { FarmRenderer } from \"@farm.js/core/renderer\";\n\nexport type ReactCompilerMode = \"infer\" | \"annotation\";\nexport type UnsupportedCompilerBehavior = \"fallback\" | \"warn\" | \"error\";\n\nexport interface ReactCompilerOptions {\n /** Compile every component that the safe subset can prove eligible. */\n mode?: ReactCompilerMode;\n /** Function or module directive used only by annotation mode. */\n directive?: string;\n /** What to do when a selected component is outside the safe subset. */\n onUnsupported?: UnsupportedCompilerBehavior;\n /** Write a machine-readable compiler coverage report after a production build. */\n report?: boolean;\n /** Project-relative report location. Providing it also enables reporting. */\n reportFile?: string;\n}\n\nexport interface ReactRendererOptions {\n experimental?: {\n /** `true` enables automatic inference; an object customizes selection. */\n compiler?: boolean | ReactCompilerOptions;\n };\n}\n\nexport interface NormalizedReactCompilerOptions {\n mode: ReactCompilerMode;\n directive: string;\n onUnsupported: UnsupportedCompilerBehavior;\n report: boolean;\n reportFile: string;\n}\n\nexport const DEFAULT_COMPILER_DIRECTIVE = \"use compiler\";\nexport const DEFAULT_COMPILER_REPORT_FILE = \".farm/react-compiler.json\";\n\nfunction normalizeCompilerReportFile(value: unknown): string {\n if (value === undefined) return DEFAULT_COMPILER_REPORT_FILE;\n if (typeof value !== \"string\" || !value.trim()) {\n throw new TypeError(\"The React compiler report file must be a non-empty relative path.\");\n }\n const normalized = value.trim().replace(/\\\\/g, \"/\");\n if (\n normalized.startsWith(\"/\") ||\n /^[A-Za-z]:\\//.test(normalized) ||\n normalized.split(\"/\").includes(\"..\")\n ) {\n throw new TypeError(\"The React compiler report file must stay inside the project root.\");\n }\n return normalized;\n}\n\nexport function normalizeReactCompilerOptions(\n value: true | ReactCompilerOptions,\n): NormalizedReactCompilerOptions {\n const options = value === true ? {} : value;\n const mode = options.mode || \"infer\";\n\n if (mode !== \"infer\" && mode !== \"annotation\") {\n throw new TypeError(`Unknown React compiler mode: ${String(mode)}`);\n }\n\n if (options.directive !== undefined && mode !== \"annotation\") {\n throw new TypeError(\"The React compiler directive can only be configured in annotation mode.\");\n }\n\n const directive = options.directive?.trim() || DEFAULT_COMPILER_DIRECTIVE;\n const onUnsupported = options.onUnsupported || \"fallback\";\n if (!([\"fallback\", \"warn\", \"error\"] as const).includes(onUnsupported)) {\n throw new TypeError(`Unknown unsupported-component behavior: ${String(onUnsupported)}`);\n }\n\n if (options.report !== undefined && typeof options.report !== \"boolean\") {\n throw new TypeError(\"The React compiler report option must be a boolean.\");\n }\n if (options.report === false && options.reportFile !== undefined) {\n throw new TypeError(\n \"A React compiler report file cannot be configured when reporting is false.\",\n );\n }\n const reportFile = normalizeCompilerReportFile(options.reportFile);\n const report = options.report === true || options.reportFile !== undefined;\n\n return { mode, directive, onUnsupported, report, reportFile };\n}\n\nconst REACT_RENDERER: Readonly<FarmRenderer> = Object.freeze({\n name: \"react\",\n vite: \"@farm.js/react/vite\",\n server: \"@farm.js/react/server\",\n client: \"@farm.js/react/client\",\n jsxImportSource: \"react\",\n dedupe: [\"react\", \"react-dom\", \"react/jsx-runtime\", \"react/jsx-dev-runtime\"],\n optimizeDeps: [\n \"react\",\n \"react-dom\",\n \"react-dom/client\",\n \"react/jsx-runtime\",\n \"react/jsx-dev-runtime\",\n \"@farm.js/react/compiler-runtime\",\n ],\n capabilities: {\n streaming: { node: true, web: false },\n },\n});\n\n/** Select React and optionally enable Farm's experimental AOT compiler. */\nexport function react(options: ReactRendererOptions = {}): FarmRenderer {\n const compiler = options.experimental?.compiler;\n const normalizedCompiler = compiler ? normalizeReactCompilerOptions(compiler) : false;\n\n return {\n ...REACT_RENDERER,\n dedupe: [...(REACT_RENDERER.dedupe || [])],\n optimizeDeps: [...(REACT_RENDERER.optimizeDeps || [])],\n capabilities: {\n streaming: { ...REACT_RENDERER.capabilities?.streaming },\n },\n options: {\n experimental: { compiler: normalizedCompiler },\n },\n };\n}\n\nexport { REACT_RENDERER };\nexport type { FarmRenderer } from \"@farm.js/core/renderer\";\n"]}
|
package/dist/index.d.mts
CHANGED
|
@@ -10,6 +10,10 @@ interface ReactCompilerOptions {
|
|
|
10
10
|
directive?: string;
|
|
11
11
|
/** What to do when a selected component is outside the safe subset. */
|
|
12
12
|
onUnsupported?: UnsupportedCompilerBehavior;
|
|
13
|
+
/** Write a machine-readable compiler coverage report after a production build. */
|
|
14
|
+
report?: boolean;
|
|
15
|
+
/** Project-relative report location. Providing it also enables reporting. */
|
|
16
|
+
reportFile?: string;
|
|
13
17
|
}
|
|
14
18
|
interface ReactRendererOptions {
|
|
15
19
|
experimental?: {
|
|
@@ -21,11 +25,14 @@ interface NormalizedReactCompilerOptions {
|
|
|
21
25
|
mode: ReactCompilerMode;
|
|
22
26
|
directive: string;
|
|
23
27
|
onUnsupported: UnsupportedCompilerBehavior;
|
|
28
|
+
report: boolean;
|
|
29
|
+
reportFile: string;
|
|
24
30
|
}
|
|
25
31
|
declare const DEFAULT_COMPILER_DIRECTIVE = "use compiler";
|
|
32
|
+
declare const DEFAULT_COMPILER_REPORT_FILE = ".farm/react-compiler.json";
|
|
26
33
|
declare function normalizeReactCompilerOptions(value: true | ReactCompilerOptions): NormalizedReactCompilerOptions;
|
|
27
34
|
declare const REACT_RENDERER: Readonly<FarmRenderer>;
|
|
28
35
|
/** Select React and optionally enable Farm's experimental AOT compiler. */
|
|
29
36
|
declare function react(options?: ReactRendererOptions): FarmRenderer;
|
|
30
37
|
|
|
31
|
-
export { DEFAULT_COMPILER_DIRECTIVE, type NormalizedReactCompilerOptions, REACT_RENDERER, type ReactCompilerMode, type ReactCompilerOptions, type ReactRendererOptions, type UnsupportedCompilerBehavior, normalizeReactCompilerOptions, react };
|
|
38
|
+
export { DEFAULT_COMPILER_DIRECTIVE, DEFAULT_COMPILER_REPORT_FILE, type NormalizedReactCompilerOptions, REACT_RENDERER, type ReactCompilerMode, type ReactCompilerOptions, type ReactRendererOptions, type UnsupportedCompilerBehavior, normalizeReactCompilerOptions, react };
|
package/dist/index.d.ts
CHANGED
|
@@ -10,6 +10,10 @@ interface ReactCompilerOptions {
|
|
|
10
10
|
directive?: string;
|
|
11
11
|
/** What to do when a selected component is outside the safe subset. */
|
|
12
12
|
onUnsupported?: UnsupportedCompilerBehavior;
|
|
13
|
+
/** Write a machine-readable compiler coverage report after a production build. */
|
|
14
|
+
report?: boolean;
|
|
15
|
+
/** Project-relative report location. Providing it also enables reporting. */
|
|
16
|
+
reportFile?: string;
|
|
13
17
|
}
|
|
14
18
|
interface ReactRendererOptions {
|
|
15
19
|
experimental?: {
|
|
@@ -21,11 +25,14 @@ interface NormalizedReactCompilerOptions {
|
|
|
21
25
|
mode: ReactCompilerMode;
|
|
22
26
|
directive: string;
|
|
23
27
|
onUnsupported: UnsupportedCompilerBehavior;
|
|
28
|
+
report: boolean;
|
|
29
|
+
reportFile: string;
|
|
24
30
|
}
|
|
25
31
|
declare const DEFAULT_COMPILER_DIRECTIVE = "use compiler";
|
|
32
|
+
declare const DEFAULT_COMPILER_REPORT_FILE = ".farm/react-compiler.json";
|
|
26
33
|
declare function normalizeReactCompilerOptions(value: true | ReactCompilerOptions): NormalizedReactCompilerOptions;
|
|
27
34
|
declare const REACT_RENDERER: Readonly<FarmRenderer>;
|
|
28
35
|
/** Select React and optionally enable Farm's experimental AOT compiler. */
|
|
29
36
|
declare function react(options?: ReactRendererOptions): FarmRenderer;
|
|
30
37
|
|
|
31
|
-
export { DEFAULT_COMPILER_DIRECTIVE, type NormalizedReactCompilerOptions, REACT_RENDERER, type ReactCompilerMode, type ReactCompilerOptions, type ReactRendererOptions, type UnsupportedCompilerBehavior, normalizeReactCompilerOptions, react };
|
|
38
|
+
export { DEFAULT_COMPILER_DIRECTIVE, DEFAULT_COMPILER_REPORT_FILE, type NormalizedReactCompilerOptions, REACT_RENDERER, type ReactCompilerMode, type ReactCompilerOptions, type ReactRendererOptions, type UnsupportedCompilerBehavior, normalizeReactCompilerOptions, react };
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
// src/index.ts
|
|
2
2
|
var DEFAULT_COMPILER_DIRECTIVE = "use compiler";
|
|
3
|
+
var DEFAULT_COMPILER_REPORT_FILE = ".farm/react-compiler.json";
|
|
4
|
+
function normalizeCompilerReportFile(value) {
|
|
5
|
+
if (value === void 0) return DEFAULT_COMPILER_REPORT_FILE;
|
|
6
|
+
if (typeof value !== "string" || !value.trim()) {
|
|
7
|
+
throw new TypeError("The React compiler report file must be a non-empty relative path.");
|
|
8
|
+
}
|
|
9
|
+
const normalized = value.trim().replace(/\\/g, "/");
|
|
10
|
+
if (normalized.startsWith("/") || /^[A-Za-z]:\//.test(normalized) || normalized.split("/").includes("..")) {
|
|
11
|
+
throw new TypeError("The React compiler report file must stay inside the project root.");
|
|
12
|
+
}
|
|
13
|
+
return normalized;
|
|
14
|
+
}
|
|
3
15
|
function normalizeReactCompilerOptions(value) {
|
|
4
16
|
const options = value === true ? {} : value;
|
|
5
17
|
const mode = options.mode || "infer";
|
|
@@ -14,7 +26,17 @@ function normalizeReactCompilerOptions(value) {
|
|
|
14
26
|
if (!["fallback", "warn", "error"].includes(onUnsupported)) {
|
|
15
27
|
throw new TypeError(`Unknown unsupported-component behavior: ${String(onUnsupported)}`);
|
|
16
28
|
}
|
|
17
|
-
|
|
29
|
+
if (options.report !== void 0 && typeof options.report !== "boolean") {
|
|
30
|
+
throw new TypeError("The React compiler report option must be a boolean.");
|
|
31
|
+
}
|
|
32
|
+
if (options.report === false && options.reportFile !== void 0) {
|
|
33
|
+
throw new TypeError(
|
|
34
|
+
"A React compiler report file cannot be configured when reporting is false."
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
const reportFile = normalizeCompilerReportFile(options.reportFile);
|
|
38
|
+
const report = options.report === true || options.reportFile !== void 0;
|
|
39
|
+
return { mode, directive, onUnsupported, report, reportFile };
|
|
18
40
|
}
|
|
19
41
|
var REACT_RENDERER = Object.freeze({
|
|
20
42
|
name: "react",
|
|
@@ -51,6 +73,6 @@ function react(options = {}) {
|
|
|
51
73
|
};
|
|
52
74
|
}
|
|
53
75
|
|
|
54
|
-
export { DEFAULT_COMPILER_DIRECTIVE, REACT_RENDERER, normalizeReactCompilerOptions, react };
|
|
76
|
+
export { DEFAULT_COMPILER_DIRECTIVE, DEFAULT_COMPILER_REPORT_FILE, REACT_RENDERER, normalizeReactCompilerOptions, react };
|
|
55
77
|
//# sourceMappingURL=index.mjs.map
|
|
56
78
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import type { FarmRenderer } from \"@farm.js/core/renderer\";\n\nexport type ReactCompilerMode = \"infer\" | \"annotation\";\nexport type UnsupportedCompilerBehavior = \"fallback\" | \"warn\" | \"error\";\n\nexport interface ReactCompilerOptions {\n /** Compile every component that the safe subset can prove eligible. */\n mode?: ReactCompilerMode;\n /** Function or module directive used only by annotation mode. */\n directive?: string;\n /** What to do when a selected component is outside the safe subset. */\n onUnsupported?: UnsupportedCompilerBehavior;\n /** Write a machine-readable compiler coverage report after a production build. */\n report?: boolean;\n /** Project-relative report location. Providing it also enables reporting. */\n reportFile?: string;\n}\n\nexport interface ReactRendererOptions {\n experimental?: {\n /** `true` enables automatic inference; an object customizes selection. */\n compiler?: boolean | ReactCompilerOptions;\n };\n}\n\nexport interface NormalizedReactCompilerOptions {\n mode: ReactCompilerMode;\n directive: string;\n onUnsupported: UnsupportedCompilerBehavior;\n report: boolean;\n reportFile: string;\n}\n\nexport const DEFAULT_COMPILER_DIRECTIVE = \"use compiler\";\nexport const DEFAULT_COMPILER_REPORT_FILE = \".farm/react-compiler.json\";\n\nfunction normalizeCompilerReportFile(value: unknown): string {\n if (value === undefined) return DEFAULT_COMPILER_REPORT_FILE;\n if (typeof value !== \"string\" || !value.trim()) {\n throw new TypeError(\"The React compiler report file must be a non-empty relative path.\");\n }\n const normalized = value.trim().replace(/\\\\/g, \"/\");\n if (\n normalized.startsWith(\"/\") ||\n /^[A-Za-z]:\\//.test(normalized) ||\n normalized.split(\"/\").includes(\"..\")\n ) {\n throw new TypeError(\"The React compiler report file must stay inside the project root.\");\n }\n return normalized;\n}\n\nexport function normalizeReactCompilerOptions(\n value: true | ReactCompilerOptions,\n): NormalizedReactCompilerOptions {\n const options = value === true ? {} : value;\n const mode = options.mode || \"infer\";\n\n if (mode !== \"infer\" && mode !== \"annotation\") {\n throw new TypeError(`Unknown React compiler mode: ${String(mode)}`);\n }\n\n if (options.directive !== undefined && mode !== \"annotation\") {\n throw new TypeError(\"The React compiler directive can only be configured in annotation mode.\");\n }\n\n const directive = options.directive?.trim() || DEFAULT_COMPILER_DIRECTIVE;\n const onUnsupported = options.onUnsupported || \"fallback\";\n if (!([\"fallback\", \"warn\", \"error\"] as const).includes(onUnsupported)) {\n throw new TypeError(`Unknown unsupported-component behavior: ${String(onUnsupported)}`);\n }\n\n if (options.report !== undefined && typeof options.report !== \"boolean\") {\n throw new TypeError(\"The React compiler report option must be a boolean.\");\n }\n if (options.report === false && options.reportFile !== undefined) {\n throw new TypeError(\n \"A React compiler report file cannot be configured when reporting is false.\",\n );\n }\n const reportFile = normalizeCompilerReportFile(options.reportFile);\n const report = options.report === true || options.reportFile !== undefined;\n\n return { mode, directive, onUnsupported, report, reportFile };\n}\n\nconst REACT_RENDERER: Readonly<FarmRenderer> = Object.freeze({\n name: \"react\",\n vite: \"@farm.js/react/vite\",\n server: \"@farm.js/react/server\",\n client: \"@farm.js/react/client\",\n jsxImportSource: \"react\",\n dedupe: [\"react\", \"react-dom\", \"react/jsx-runtime\", \"react/jsx-dev-runtime\"],\n optimizeDeps: [\n \"react\",\n \"react-dom\",\n \"react-dom/client\",\n \"react/jsx-runtime\",\n \"react/jsx-dev-runtime\",\n \"@farm.js/react/compiler-runtime\",\n ],\n capabilities: {\n streaming: { node: true, web: false },\n },\n});\n\n/** Select React and optionally enable Farm's experimental AOT compiler. */\nexport function react(options: ReactRendererOptions = {}): FarmRenderer {\n const compiler = options.experimental?.compiler;\n const normalizedCompiler = compiler ? normalizeReactCompilerOptions(compiler) : false;\n\n return {\n ...REACT_RENDERER,\n dedupe: [...(REACT_RENDERER.dedupe || [])],\n optimizeDeps: [...(REACT_RENDERER.optimizeDeps || [])],\n capabilities: {\n streaming: { ...REACT_RENDERER.capabilities?.streaming },\n },\n options: {\n experimental: { compiler: normalizedCompiler },\n },\n };\n}\n\nexport { REACT_RENDERER };\nexport type { FarmRenderer } from \"@farm.js/core/renderer\";\n"]}
|
package/dist/list.cjs
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
|
|
5
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
6
|
+
|
|
7
|
+
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
8
|
+
|
|
9
|
+
// src/list.tsx
|
|
10
|
+
function List({ each, by, children }) {
|
|
11
|
+
const rows = each ? Array.from(each) : [];
|
|
12
|
+
return React__default.default.createElement(
|
|
13
|
+
React__default.default.Fragment,
|
|
14
|
+
null,
|
|
15
|
+
...rows.map((item, index) => {
|
|
16
|
+
const row = children(item, index);
|
|
17
|
+
if (!React__default.default.isValidElement(row)) {
|
|
18
|
+
throw new TypeError("@farm.js/react List children must return one React element.");
|
|
19
|
+
}
|
|
20
|
+
return React__default.default.cloneElement(row, { key: by(item, index) });
|
|
21
|
+
})
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
exports.List = List;
|
|
26
|
+
//# sourceMappingURL=list.cjs.map
|
|
27
|
+
//# sourceMappingURL=list.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/list.tsx"],"names":["React"],"mappings":";;;;;;;;;AAkBO,SAAS,IAAA,CAAW,EAAE,IAAA,EAAM,EAAA,EAAI,UAAS,EAAwC;AACtF,EAAA,MAAM,OAAO,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,IAAI,IAAI,EAAC;AACxC,EAAA,OAAOA,sBAAA,CAAM,aAAA;AAAA,IACXA,sBAAA,CAAM,QAAA;AAAA,IACN,IAAA;AAAA,IACA,GAAG,IAAA,CAAK,GAAA,CAAI,CAAC,MAAM,KAAA,KAAU;AAC3B,MAAA,MAAM,GAAA,GAAM,QAAA,CAAS,IAAA,EAAM,KAAK,CAAA;AAChC,MAAA,IAAI,CAACA,sBAAA,CAAM,cAAA,CAAe,GAAG,CAAA,EAAG;AAC9B,QAAA,MAAM,IAAI,UAAU,6DAA6D,CAAA;AAAA,MACnF;AACA,MAAA,OAAOA,sBAAA,CAAM,aAAa,GAAA,EAAK,EAAE,KAAK,EAAA,CAAG,IAAA,EAAM,KAAK,CAAA,EAAuB,CAAA;AAAA,IAC7E,CAAC;AAAA,GACH;AACF","file":"list.cjs","sourcesContent":["import React from \"react\";\n\nexport interface ListProps<Item> {\n /** Items to render. Nullish collections are treated as empty. */\n each: Iterable<Item> | null | undefined;\n /** Returns the stable React key for one item. */\n by(item: Item, index: number): React.Key;\n /** Renders one keyed row. */\n children(item: Item, index: number): React.ReactElement;\n}\n\n/**\n * An explicit keyed collection boundary for advanced list expressions.\n *\n * It behaves like ordinary React when the compiler is disabled. With the\n * experimental compiler enabled, eligible usages are isolated so local list\n * updates do not execute the surrounding user component.\n */\nexport function List<Item>({ each, by, children }: ListProps<Item>): React.ReactElement {\n const rows = each ? Array.from(each) : [];\n return React.createElement(\n React.Fragment,\n null,\n ...rows.map((item, index) => {\n const row = children(item, index);\n if (!React.isValidElement(row)) {\n throw new TypeError(\"@farm.js/react List children must return one React element.\");\n }\n return React.cloneElement(row, { key: by(item, index) } as React.Attributes);\n }),\n );\n}\n"]}
|
package/dist/list.d.mts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
interface ListProps<Item> {
|
|
4
|
+
/** Items to render. Nullish collections are treated as empty. */
|
|
5
|
+
each: Iterable<Item> | null | undefined;
|
|
6
|
+
/** Returns the stable React key for one item. */
|
|
7
|
+
by(item: Item, index: number): React.Key;
|
|
8
|
+
/** Renders one keyed row. */
|
|
9
|
+
children(item: Item, index: number): React.ReactElement;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* An explicit keyed collection boundary for advanced list expressions.
|
|
13
|
+
*
|
|
14
|
+
* It behaves like ordinary React when the compiler is disabled. With the
|
|
15
|
+
* experimental compiler enabled, eligible usages are isolated so local list
|
|
16
|
+
* updates do not execute the surrounding user component.
|
|
17
|
+
*/
|
|
18
|
+
declare function List<Item>({ each, by, children }: ListProps<Item>): React.ReactElement;
|
|
19
|
+
|
|
20
|
+
export { List, type ListProps };
|