{"version":3,"file":"crank.cjs","sources":["../src/crank.ts"],"sourcesContent":["const NOOP = () => {};\nconst IDENTITY = <T>(value: T): T => value;\n\nfunction wrap<T>(value: Array<T> | T | undefined): Array<T> {\n\treturn value === undefined ? [] : Array.isArray(value) ? value : [value];\n}\n\nfunction unwrap<T>(arr: Array<T>): Array<T> | T | undefined {\n\treturn arr.length === 0 ? undefined : arr.length === 1 ? arr[0] : arr;\n}\n\ntype NonStringIterable<T> = Iterable<T> & object;\n\n/**\n * Ensures a value is an array.\n *\n * This function does the same thing as wrap() above except it handles nulls\n * and iterables, so it is appropriate for wrapping user-provided element\n * children.\n */\nfunction arrayify<T>(\n\tvalue: NonStringIterable<T> | T | null | undefined,\n): Array<T> {\n\treturn value == null\n\t\t? []\n\t\t: Array.isArray(value)\n\t\t? value\n\t\t: typeof value === \"string\" ||\n\t\t  typeof (value as any)[Symbol.iterator] !== \"function\"\n\t\t? [value]\n\t\t: [...(value as NonStringIterable<T>)];\n}\n\nfunction isIteratorLike(\n\tvalue: any,\n): value is Iterator<unknown> | AsyncIterator<unknown> {\n\treturn value != null && typeof value.next === \"function\";\n}\n\nfunction isPromiseLike(value: any): value is PromiseLike<unknown> {\n\treturn value != null && typeof value.then === \"function\";\n}\n\n/**\n * A type which represents all valid values for an element tag.\n */\nexport type Tag = string | symbol | Component;\n\n/**\n * A helper type to map the tag of an element to its expected props.\n *\n * @template TTag - The tag associated with the props. Can be a string, symbol\n * or a component function.\n */\nexport type TagProps<TTag extends Tag> = TTag extends string\n\t? JSX.IntrinsicElements[TTag]\n\t: TTag extends Component<infer TProps>\n\t? TProps\n\t: Record<string, unknown>;\n\n/***\n * SPECIAL TAGS\n *\n * Crank provides a couple tags which have special meaning for the renderer.\n ***/\n\n/**\n * A special tag for grouping multiple children within the same parent.\n *\n * All non-string iterables which appear in the element tree are implicitly\n * wrapped in a fragment element.\n *\n * This tag is just the empty string, and you can use the empty string in\n * createElement calls or transpiler options directly to avoid having to\n * reference this export.\n */\nexport const Fragment = \"\";\nexport type Fragment = typeof Fragment;\n\n// TODO: We assert the following symbol tags as any because TypeScript support\n// for symbol tags in JSX doesn’t exist yet.\n// https://github.com/microsoft/TypeScript/issues/38367\n\n/**\n * A special tag for rendering into a new root node via a root prop.\n *\n * This tag is useful for creating element trees with multiple roots, for\n * things like modals or tooltips.\n *\n * Renderer.prototype.render() will implicitly wrap top-level element trees in\n * a Portal element.\n */\nexport const Portal = Symbol.for(\"crank.Portal\") as any;\nexport type Portal = typeof Portal;\n\n/**\n * A special tag which preserves whatever was previously rendered in the\n * element’s position.\n *\n * Copy elements are useful for when you want to prevent a subtree from\n * rerendering as a performance optimization. Copy elements can also be keyed,\n * in which case the previously rendered keyed element will be copied.\n */\nexport const Copy = Symbol.for(\"crank.Copy\") as any;\nexport type Copy = typeof Copy;\n\n/**\n * A special tag for injecting raw nodes or strings via a value prop.\n *\n * If the value prop is a string, Renderer.prototype.parse() will be called on\n * the string and the result will be set as the element’s value.\n */\nexport const Raw = Symbol.for(\"crank.Raw\") as any;\nexport type Raw = typeof Raw;\n\n/**\n * Describes all valid values of an element tree, excluding iterables.\n *\n * Arbitrary objects can also be safely rendered, but will be converted to a\n * string using the toString() method. We exclude them from this type to catch\n * potential mistakes.\n */\nexport type Child = Element | string | number | boolean | null | undefined;\n\n/**\n * An arbitrarily nested iterable of Child values.\n *\n * We use a recursive interface here rather than making the Children type\n * directly recursive because recursive type aliases were added in TypeScript\n * 3.7.\n *\n * You should avoid referencing this type directly, as it is mainly exported to\n * prevent TypeScript errors.\n */\nexport interface ChildIterable extends Iterable<Child | ChildIterable> {}\n\n/**\n * Describes all valid values of an element tree, including arbitrarily nested\n * iterables of such values.\n */\nexport type Children = Child | ChildIterable;\n\n/**\n * Represents all functions which can be used as a component.\n *\n * @template [TProps=*] - The expected props for the component.\n */\nexport type Component<TProps extends Record<string, unknown> = any> = (\n\tthis: Context<TProps>,\n\tprops: TProps,\n) =>\n\t| Children\n\t| PromiseLike<Children>\n\t// The return type of iterators must include void because TypeScript will\n\t// infer generators which return implicitly as having a void return type.\n\t| Iterator<Children, Children | void, any>\n\t| AsyncIterator<Children, Children | void, any>;\n\ntype ChildrenIteration =\n\t| Promise<IteratorResult<Children, Children | void>>\n\t| IteratorResult<Children, Children | void>;\n\n/**\n * A type to keep track of keys. Any value can be a key, though null and\n * undefined are ignored.\n */\ntype Key = unknown;\n\nconst ElementSymbol = Symbol.for(\"crank.Element\");\n\n// To maximize compatibility between Crank versions, starting with 0.2.0, any\n// changes to the Element properties will be considered a breaking change.\nexport interface Element<TTag extends Tag = Tag> {\n\t/**\n\t * @internal\n\t * A unique symbol to identify elements as elements across versions and\n\t * realms, and to protect against basic injection attacks.\n\t * https://overreacted.io/why-do-react-elements-have-typeof-property/\n\t *\n\t * This property is defined on the element prototype rather than per\n\t * instance, because it is the same for every Element.\n\t */\n\t$$typeof: typeof ElementSymbol;\n\n\t/**\n\t * The tag of the element. Can be a string, symbol or function.\n\t */\n\ttag: TTag;\n\n\t/**\n\t * An object containing the “properties” of an element. These correspond to\n\t * the attribute syntax from JSX.\n\t */\n\tprops: TagProps<TTag>;\n\n\t/**\n\t * A value which uniquely identifies an element from its siblings so that it\n\t * can be added/updated/moved/removed by key rather than position.\n\t *\n\t * Passed in createElement() as the prop \"c-key\".\n\t */\n\tkey: Key;\n\n\t/**\n\t * A callback which is called with the element’s result when it is committed.\n\t *\n\t * Passed in createElement() as the prop \"c-ref\".\n\t */\n\tref: ((value: unknown) => unknown) | undefined;\n\n\t/**\n\t * A possible boolean which indicates that element should NOT be rerendered.\n\t * If the element has never been rendered, this property has no effect.\n\t *\n\t * Passed in createElement() as the prop \"c-static\".\n\t */\n\tstatic_: boolean | undefined;\n}\n\n/**\n * Elements are the basic building blocks of Crank applications. They are\n * JavaScript objects which are interpreted by special classes called renderers\n * to produce and manage stateful nodes.\n *\n * @template {Tag} [TTag=Tag] - The type of the tag of the element.\n *\n * @example\n * // specific element types\n * let div: Element<\"div\">;\n * let portal: Element<Portal>;\n * let myEl: Element<MyComponent>;\n *\n * // general element types\n * let host: Element<string | symbol>;\n * let component: Element<Component>;\n *\n * Typically, you use a helper function like createElement to create elements\n * rather than instatiating this class directly.\n */\nexport class Element<TTag extends Tag = Tag> {\n\tconstructor(\n\t\ttag: TTag,\n\t\tprops: TagProps<TTag>,\n\t\tkey: Key,\n\t\tref?: ((value: unknown) => unknown) | undefined,\n\t\tstatic_?: boolean | undefined,\n\t) {\n\t\tthis.tag = tag;\n\t\tthis.props = props;\n\t\tthis.key = key;\n\t\tthis.ref = ref;\n\t\tthis.static_ = static_;\n\t}\n}\n\nElement.prototype.$$typeof = ElementSymbol;\n\nexport function isElement(value: any): value is Element {\n\treturn value != null && value.$$typeof === ElementSymbol;\n}\n\n/**\n * Creates an element with the specified tag, props and children.\n *\n * This function is usually used as a transpilation target for JSX transpilers,\n * but it can also be called directly. It additionally extracts special props so\n * they aren’t accessible to renderer methods or components, and assigns the\n * children prop according to any additional arguments passed to the function.\n */\nexport function createElement<TTag extends Tag>(\n\ttag: TTag,\n\tprops?: TagProps<TTag> | null | undefined,\n\t...children: Array<unknown>\n): Element<TTag> {\n\tlet key: Key;\n\tlet ref: ((value: unknown) => unknown) | undefined;\n\tlet static_ = false;\n\tconst props1 = {} as TagProps<TTag>;\n\tif (props != null) {\n\t\tfor (const name in props) {\n\t\t\tswitch (name) {\n\t\t\t\tcase \"crank-key\":\n\t\t\t\tcase \"c-key\":\n\t\t\t\t\t// We have to make sure we don’t assign null to the key because we\n\t\t\t\t\t// don’t check for null keys in the diffing functions.\n\t\t\t\t\tif (props[name] != null) {\n\t\t\t\t\t\tkey = props[name];\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"crank-ref\":\n\t\t\t\tcase \"c-ref\":\n\t\t\t\t\tif (typeof props[name] === \"function\") {\n\t\t\t\t\t\tref = props[name];\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"crank-static\":\n\t\t\t\tcase \"c-static\":\n\t\t\t\t\tstatic_ = !!props[name];\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tprops1[name] = props[name];\n\t\t\t}\n\t\t}\n\t}\n\n\tif (children.length > 1) {\n\t\tprops1.children = children;\n\t} else if (children.length === 1) {\n\t\tprops1.children = children[0];\n\t}\n\n\treturn new Element(tag, props1, key, ref, static_);\n}\n\n/**\n * Clones a given element, shallowly copying the props object.\n */\nexport function cloneElement<TTag extends Tag>(\n\tel: Element<TTag>,\n): Element<TTag> {\n\tif (!isElement(el)) {\n\t\tthrow new TypeError(\"Cannot clone non-element\");\n\t}\n\n\treturn new Element(el.tag, {...el.props}, el.key, el.ref);\n}\n\n/*** ELEMENT UTILITIES ***/\n\n// WHAT ARE WE DOING TO THE CHILDREN???\n/**\n * All values in the element tree are narrowed from the union in Child to\n * NarrowedChild during rendering, to simplify element diffing.\n */\ntype NarrowedChild = Element | string | undefined;\n\nfunction narrow(value: Children): NarrowedChild {\n\tif (typeof value === \"boolean\" || value == null) {\n\t\treturn undefined;\n\t} else if (typeof value === \"string\" || isElement(value)) {\n\t\treturn value;\n\t} else if (typeof (value as any)[Symbol.iterator] === \"function\") {\n\t\treturn createElement(Fragment, null, value);\n\t}\n\n\treturn value.toString();\n}\n\n/**\n * A helper type which repesents all possible rendered values of an element.\n *\n * @template TNode - The node type for the element provided by the renderer.\n *\n * When asking the question, what is the “value” of a specific element, the\n * answer varies depending on the tag:\n *\n * For host elements, the value is the nodes created for the element.\n *\n * For fragments, the value is usually an array of nodes.\n *\n * For portals, the value is undefined, because a Portal element’s root and\n * children are opaque to its parent.\n *\n * For components, the value can be any of the above, because the value of a\n * component is determined by its immediate children.\n *\n * Rendered values can also be strings or arrays of nodes and strings, in the\n * case of component or fragment elements with strings or multiple children.\n *\n * All of these possible values are reflected in this utility type.\n */\nexport type ElementValue<TNode> =\n\t| Array<TNode | string>\n\t| TNode\n\t| string\n\t| undefined;\n\n/**\n * Takes an array of element values and normalizes the output as an array of\n * nodes and strings.\n *\n * @returns Normalized array of nodes and/or strings.\n *\n * Normalize will flatten only one level of nested arrays, because it is\n * designed to be called once at each level of the tree. It will also\n * concatenate adjacent strings and remove all undefined values.\n */\nfunction normalize<TNode>(\n\tvalues: Array<ElementValue<TNode>>,\n): Array<TNode | string> {\n\tconst result: Array<TNode | string> = [];\n\tlet buffer: string | undefined;\n\tfor (let i = 0; i < values.length; i++) {\n\t\tconst value = values[i];\n\t\tif (!value) {\n\t\t\t// pass\n\t\t} else if (typeof value === \"string\") {\n\t\t\tbuffer = (buffer || \"\") + value;\n\t\t} else if (!Array.isArray(value)) {\n\t\t\tif (buffer) {\n\t\t\t\tresult.push(buffer);\n\t\t\t\tbuffer = undefined;\n\t\t\t}\n\n\t\t\tresult.push(value);\n\t\t} else {\n\t\t\t// We could use recursion here but it’s just easier to do it inline.\n\t\t\tfor (let j = 0; j < value.length; j++) {\n\t\t\t\tconst value1 = value[j];\n\t\t\t\tif (!value1) {\n\t\t\t\t\t// pass\n\t\t\t\t} else if (typeof value1 === \"string\") {\n\t\t\t\t\tbuffer = (buffer || \"\") + value1;\n\t\t\t\t} else {\n\t\t\t\t\tif (buffer) {\n\t\t\t\t\t\tresult.push(buffer);\n\t\t\t\t\t\tbuffer = undefined;\n\t\t\t\t\t}\n\n\t\t\t\t\tresult.push(value1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (buffer) {\n\t\tresult.push(buffer);\n\t}\n\n\treturn result;\n}\n\n/**\n * @internal\n * The internal nodes which are cached and diffed against new elements when\n * rendering element trees.\n */\nclass Retainer<TNode> {\n\t/**\n\t * The element associated with this retainer.\n\t */\n\tdeclare el: Element;\n\t/**\n\t * The context associated with this element. Will only be defined for\n\t * component elements.\n\t */\n\tdeclare ctx: ContextImpl<TNode> | undefined;\n\t/**\n\t * The retainer children of this element. Retainers form a tree which mirrors\n\t * elements. Can be a single child or undefined as a memory optimization.\n\t */\n\tdeclare children: Array<RetainerChild<TNode>> | RetainerChild<TNode>;\n\t/**\n\t * The value associated with this element.\n\t */\n\tdeclare value: ElementValue<TNode>;\n\t/**\n\t * The cached child values of this element. Only host and component elements\n\t * will use this property.\n\t */\n\tdeclare cached: ElementValue<TNode>;\n\t/**\n\t * The child which this retainer replaces. This property is used when an\n\t * async retainer tree replaces previously rendered elements, so that the\n\t * previously rendered elements can remain visible until the async tree\n\t * fulfills. Will be set to undefined once this subtree fully renders.\n\t */\n\tdeclare fallback: RetainerChild<TNode>;\n\tdeclare inflight: Promise<ElementValue<TNode>> | undefined;\n\tdeclare onCommit: Function | undefined;\n\tconstructor(el: Element) {\n\t\tthis.el = el;\n\t\tthis.value = undefined;\n\t\tthis.ctx = undefined;\n\t\tthis.children = undefined;\n\t\tthis.cached = undefined;\n\t\tthis.fallback = undefined;\n\t\tthis.inflight = undefined;\n\t\tthis.onCommit = undefined;\n\t}\n}\n\n/**\n * The retainer equivalent of ElementValue\n */\ntype RetainerChild<TNode> = Retainer<TNode> | string | undefined;\n\n/**\n * Finds the value of the element according to its type.\n *\n * @returns The value of the element.\n */\nfunction getValue<TNode>(ret: Retainer<TNode>): ElementValue<TNode> {\n\tif (typeof ret.fallback !== \"undefined\") {\n\t\treturn typeof ret.fallback === \"object\"\n\t\t\t? getValue(ret.fallback)\n\t\t\t: ret.fallback;\n\t} else if (ret.el.tag === Portal) {\n\t\treturn;\n\t} else if (typeof ret.el.tag !== \"function\" && ret.el.tag !== Fragment) {\n\t\treturn ret.value;\n\t}\n\n\treturn unwrap(getChildValues(ret));\n}\n\n/**\n * Walks an element’s children to find its child values.\n *\n * @returns A normalized array of nodes and strings.\n */\nfunction getChildValues<TNode>(ret: Retainer<TNode>): Array<TNode | string> {\n\tif (ret.cached) {\n\t\treturn wrap(ret.cached);\n\t}\n\n\tconst values: Array<ElementValue<TNode>> = [];\n\tconst children = wrap(ret.children);\n\tfor (let i = 0; i < children.length; i++) {\n\t\tconst child = children[i];\n\t\tif (child) {\n\t\t\tvalues.push(typeof child === \"string\" ? child : getValue(child));\n\t\t}\n\t}\n\n\tconst values1 = normalize(values);\n\tconst tag = ret.el.tag;\n\tif (typeof tag === \"function\" || (tag !== Fragment && tag !== Raw)) {\n\t\tret.cached = unwrap(values1);\n\t}\n\treturn values1;\n}\n\n// TODO: Document the interface and methods\nexport interface RendererImpl<\n\tTNode,\n\tTScope,\n\tTRoot extends TNode = TNode,\n\tTResult = ElementValue<TNode>,\n> {\n\tscope<TTag extends string | symbol>(\n\t\tscope: TScope | undefined,\n\t\ttag: TTag,\n\t\tprops: TagProps<TTag>,\n\t): TScope | undefined;\n\n\tcreate<TTag extends string | symbol>(\n\t\ttag: TTag,\n\t\tprops: TagProps<TTag>,\n\t\tscope: TScope | undefined,\n\t): TNode;\n\n\t/**\n\t * Called when an element’s rendered value is exposed via render, schedule,\n\t * refresh, refs, or generator yield expressions.\n\t *\n\t * @param value - The value of the element being read. Can be a node, a\n\t * string, undefined, or an array of nodes and strings, depending on the\n\t * element.\n\t *\n\t * @returns Varies according to the specific renderer subclass. By default,\n\t * it exposes the element’s value.\n\t *\n\t * This is useful for renderers which don’t want to expose their internal\n\t * nodes. For instance, the HTML renderer will convert all internal nodes to\n\t * strings.\n\t */\n\tread(value: ElementValue<TNode>): TResult;\n\n\t/**\n\t * Called for each string in an element tree.\n\t *\n\t * @param text - The string child.\n\t * @param scope - The current scope.\n\t *\n\t * @returns The escaped string.\n\t *\n\t * Rather than returning text nodes for whatever environment we’re rendering\n\t * to, we defer that step for Renderer.prototype.arrange. We do this so that\n\t * adjacent strings can be concatenated and the actual element tree can be\n\t * rendered in a normalized form.\n\t */\n\tescape(text: string, scope: TScope | undefined): string;\n\n\t/**\n\t * Called for each Raw element whose value prop is a string.\n\t *\n\t * @param text - The string child.\n\t * @param scope - The current scope.\n\t *\n\t * @returns The parsed node or string.\n\t */\n\tparse(text: string, scope: TScope | undefined): ElementValue<TNode>;\n\n\tpatch<TTag extends string | symbol, TName extends string>(\n\t\ttag: TTag,\n\t\tnode: TNode,\n\t\tname: TName,\n\t\tvalue: TagProps<TTag>[TName],\n\t\toldValue: TagProps<TTag>[TName] | undefined,\n\t\tscope: TScope,\n\t): unknown;\n\n\tarrange<TTag extends string | symbol>(\n\t\ttag: TTag,\n\t\tnode: TNode,\n\t\tprops: TagProps<TTag>,\n\t\tchildren: Array<TNode | string>,\n\t\toldProps: TagProps<TTag> | undefined,\n\t\toldChildren: Array<TNode | string> | undefined,\n\t): unknown;\n\n\tdispose<TTag extends string | symbol>(\n\t\ttag: TTag,\n\t\tnode: TNode,\n\t\tprops: TagProps<TTag>,\n\t): unknown;\n\n\tflush(root: TRoot): unknown;\n}\n\nconst defaultRendererImpl: RendererImpl<unknown, unknown, unknown, unknown> = {\n\tcreate() {\n\t\tthrow new Error(\"Not implemented\");\n\t},\n\tscope: IDENTITY,\n\tread: IDENTITY,\n\tescape: IDENTITY,\n\tparse: IDENTITY,\n\tpatch: NOOP,\n\tarrange: NOOP,\n\tdispose: NOOP,\n\tflush: NOOP,\n};\n\nconst $RendererImpl = Symbol.for(\"crank.RendererImpl\");\n/**\n * An abstract class which is subclassed to render to different target\n * environments. This class is responsible for kicking off the rendering\n * process and caching previous trees by root.\n *\n * @template TNode - The type of the node for a rendering environment.\n * @template TScope - Data which is passed down the tree.\n * @template TRoot - The type of the root for a rendering environment.\n * @template TResult - The type of exposed values.\n */\nexport class Renderer<\n\tTNode extends object = object,\n\tTScope = unknown,\n\tTRoot extends TNode = TNode,\n\tTResult = ElementValue<TNode>,\n> {\n\t/**\n\t * @internal\n\t * A weakmap which stores element trees by root.\n\t */\n\tdeclare cache: WeakMap<object, Retainer<TNode>>;\n\n\tdeclare [$RendererImpl]: RendererImpl<TNode, TScope, TRoot, TResult>;\n\tconstructor(impl: Partial<RendererImpl<TNode, TScope, TRoot, TResult>>) {\n\t\tthis.cache = new WeakMap();\n\t\tthis[$RendererImpl] = {\n\t\t\t...(defaultRendererImpl as RendererImpl<TNode, TScope, TRoot, TResult>),\n\t\t\t...impl,\n\t\t};\n\t}\n\n\t/**\n\t * Renders an element tree into a specific root.\n\t *\n\t * @param children - An element tree. You can render null with a previously\n\t * used root to delete the previously rendered element tree from the cache.\n\t * @param root - The node to be rendered into. The renderer will cache\n\t * element trees per root.\n\t * @param ctx - An optional context that will be the ancestor context of all\n\t * elements in the tree. Useful for connecting different renderers so that\n\t * events/provisions properly propagate. The context for a given root must be\n\t * the same or an error will be thrown.\n\t *\n\t * @returns The result of rendering the children, or a possible promise of\n\t * the result if the element tree renders asynchronously.\n\t */\n\trender(\n\t\tchildren: Children,\n\t\troot?: TRoot | undefined,\n\t\tbridge?: Context | undefined,\n\t): Promise<TResult> | TResult {\n\t\tlet ret: Retainer<TNode> | undefined;\n\t\tconst ctx = bridge && (bridge[$ContextImpl] as ContextImpl<TNode>);\n\t\tif (typeof root === \"object\" && root !== null) {\n\t\t\tret = this.cache.get(root);\n\t\t}\n\n\t\tlet oldProps: Record<string, any> | undefined;\n\t\tif (ret === undefined) {\n\t\t\tret = new Retainer(createElement(Portal, {children, root}));\n\t\t\tret.value = root;\n\t\t\tret.ctx = ctx;\n\t\t\tif (typeof root === \"object\" && root !== null && children != null) {\n\t\t\t\tthis.cache.set(root, ret);\n\t\t\t}\n\t\t} else if (ret.ctx !== ctx) {\n\t\t\tthrow new Error(\"Context mismatch\");\n\t\t} else {\n\t\t\toldProps = ret.el.props;\n\t\t\tret.el = createElement(Portal, {children, root});\n\t\t\tif (typeof root === \"object\" && root !== null && children == null) {\n\t\t\t\tthis.cache.delete(root);\n\t\t\t}\n\t\t}\n\n\t\tconst impl = this[$RendererImpl];\n\t\tconst childValues = diffChildren(\n\t\t\timpl,\n\t\t\troot,\n\t\t\tret,\n\t\t\tctx,\n\t\t\timpl.scope(undefined, Portal, ret.el.props),\n\t\t\tret,\n\t\t\tchildren,\n\t\t);\n\n\t\t// We return the child values of the portal because portal elements\n\t\t// themselves have no readable value.\n\t\tif (isPromiseLike(childValues)) {\n\t\t\treturn childValues.then((childValues) =>\n\t\t\t\tcommitRootRender(impl, root, ctx, ret!, childValues, oldProps),\n\t\t\t);\n\t\t}\n\n\t\treturn commitRootRender(impl, root, ctx, ret, childValues, oldProps);\n\t}\n}\n\n/*** PRIVATE RENDERER FUNCTIONS ***/\nfunction commitRootRender<TNode, TRoot extends TNode, TResult>(\n\trenderer: RendererImpl<TNode, unknown, TRoot, TResult>,\n\troot: TRoot | undefined,\n\tctx: ContextImpl<TNode> | undefined,\n\tret: Retainer<TNode>,\n\tchildValues: Array<TNode | string>,\n\toldProps: Record<string, any> | undefined,\n): TResult {\n\t// element is a host or portal element\n\tif (root !== undefined) {\n\t\trenderer.arrange(\n\t\t\tPortal,\n\t\t\troot,\n\t\t\tret.el.props,\n\t\t\tchildValues,\n\t\t\toldProps,\n\t\t\twrap(ret.cached),\n\t\t);\n\t\tflush(renderer, root);\n\t}\n\n\tret.cached = unwrap(childValues);\n\tif (root == null) {\n\t\tunmount(renderer, ret, ctx, ret);\n\t}\n\n\treturn renderer.read(ret.cached);\n}\n\nfunction diffChildren<TNode, TScope, TRoot extends TNode, TResult>(\n\trenderer: RendererImpl<TNode, TScope, TRoot, TResult>,\n\troot: TRoot | undefined,\n\thost: Retainer<TNode>,\n\tctx: ContextImpl<TNode, TScope, TRoot, TResult> | undefined,\n\tscope: TScope | undefined,\n\tparent: Retainer<TNode>,\n\tchildren: Children,\n): Promise<Array<TNode | string>> | Array<TNode | string> {\n\tconst oldRetained = wrap(parent.children);\n\tconst newRetained: typeof oldRetained = [];\n\tconst newChildren = arrayify(children);\n\tconst values: Array<Promise<ElementValue<TNode>> | ElementValue<TNode>> = [];\n\tlet graveyard: Array<Retainer<TNode>> | undefined;\n\tlet childrenByKey: Map<Key, Retainer<TNode>> | undefined;\n\tlet seenKeys: Set<Key> | undefined;\n\tlet isAsync = false;\n\tlet oi = 0,\n\t\toldLength = oldRetained.length;\n\tfor (let ni = 0, newLength = newChildren.length; ni < newLength; ni++) {\n\t\t// We make sure we don’t access indices out of bounds to prevent\n\t\t// deoptimizations.\n\t\tlet ret = oi >= oldLength ? undefined : oldRetained[oi];\n\t\tlet child = narrow(newChildren[ni]);\n\t\t{\n\t\t\t// Aligning new children with old retainers\n\t\t\tlet oldKey = typeof ret === \"object\" ? ret.el.key : undefined;\n\t\t\tlet newKey = typeof child === \"object\" ? child.key : undefined;\n\t\t\tif (newKey !== undefined && seenKeys && seenKeys.has(newKey)) {\n\t\t\t\tconsole.error(\"Duplicate key\", newKey);\n\t\t\t\tnewKey = undefined;\n\t\t\t}\n\n\t\t\tif (oldKey === newKey) {\n\t\t\t\tif (childrenByKey !== undefined && newKey !== undefined) {\n\t\t\t\t\tchildrenByKey.delete(newKey);\n\t\t\t\t}\n\n\t\t\t\toi++;\n\t\t\t} else {\n\t\t\t\tchildrenByKey = childrenByKey || createChildrenByKey(oldRetained, oi);\n\t\t\t\tif (newKey === undefined) {\n\t\t\t\t\twhile (ret !== undefined && oldKey !== undefined) {\n\t\t\t\t\t\toi++;\n\t\t\t\t\t\tret = oldRetained[oi];\n\t\t\t\t\t\toldKey = typeof ret === \"object\" ? ret.el.key : undefined;\n\t\t\t\t\t}\n\n\t\t\t\t\toi++;\n\t\t\t\t} else {\n\t\t\t\t\tret = childrenByKey.get(newKey);\n\t\t\t\t\tif (ret !== undefined) {\n\t\t\t\t\t\tchildrenByKey.delete(newKey);\n\t\t\t\t\t}\n\n\t\t\t\t\t(seenKeys = seenKeys || new Set()).add(newKey);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Updating\n\t\tlet value: Promise<ElementValue<TNode>> | ElementValue<TNode>;\n\t\tif (typeof child === \"object\") {\n\t\t\tif (typeof ret === \"object\" && child.static_) {\n\t\t\t\tret.el = child;\n\t\t\t\tvalue = getInflightValue(ret);\n\t\t\t} else if (child.tag === Copy) {\n\t\t\t\tvalue = getInflightValue(ret);\n\t\t\t} else {\n\t\t\t\tlet oldProps: Record<string, any> | undefined;\n\t\t\t\tif (typeof ret === \"object\" && ret.el.tag === child.tag) {\n\t\t\t\t\toldProps = ret.el.props;\n\t\t\t\t\tret.el = child;\n\t\t\t\t} else {\n\t\t\t\t\tif (typeof ret === \"object\") {\n\t\t\t\t\t\t(graveyard = graveyard || []).push(ret);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst fallback = ret;\n\t\t\t\t\tret = new Retainer<TNode>(child);\n\t\t\t\t\tret.fallback = fallback;\n\t\t\t\t}\n\n\t\t\t\tif (child.tag === Raw) {\n\t\t\t\t\tvalue = updateRaw(renderer, ret, scope, oldProps);\n\t\t\t\t} else if (child.tag === Fragment) {\n\t\t\t\t\tvalue = updateFragment(renderer, root, host, ctx, scope, ret);\n\t\t\t\t} else if (typeof child.tag === \"function\") {\n\t\t\t\t\tvalue = updateComponent(\n\t\t\t\t\t\trenderer,\n\t\t\t\t\t\troot,\n\t\t\t\t\t\thost,\n\t\t\t\t\t\tctx,\n\t\t\t\t\t\tscope,\n\t\t\t\t\t\tret,\n\t\t\t\t\t\toldProps,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tvalue = updateHost(renderer, root, ctx, scope, ret, oldProps);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst ref = child.ref;\n\t\t\tif (isPromiseLike(value)) {\n\t\t\t\tisAsync = true;\n\t\t\t\tif (typeof ref === \"function\") {\n\t\t\t\t\tvalue = value.then((value) => {\n\t\t\t\t\t\tref(renderer.read(value));\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else if (typeof ref === \"function\") {\n\t\t\t\tref(renderer.read(value));\n\t\t\t}\n\t\t} else {\n\t\t\t// child is a string or undefined\n\t\t\tif (typeof ret === \"object\") {\n\t\t\t\t(graveyard = graveyard || []).push(ret);\n\t\t\t}\n\n\t\t\tif (typeof child === \"string\") {\n\t\t\t\tvalue = ret = renderer.escape(child, scope);\n\t\t\t} else {\n\t\t\t\tret = undefined;\n\t\t\t}\n\t\t}\n\n\t\tvalues[ni] = value;\n\t\tnewRetained[ni] = ret;\n\t}\n\n\t// cleanup remaining retainers\n\tfor (; oi < oldLength; oi++) {\n\t\tconst ret = oldRetained[oi];\n\t\tif (typeof ret === \"object\" && typeof ret.el.key === \"undefined\") {\n\t\t\t(graveyard = graveyard || []).push(ret);\n\t\t}\n\t}\n\n\tif (childrenByKey !== undefined && childrenByKey.size > 0) {\n\t\t(graveyard = graveyard || []).push(...childrenByKey.values());\n\t}\n\n\tparent.children = unwrap(newRetained);\n\tif (isAsync) {\n\t\tlet childValues1 = Promise.all(values).finally(() => {\n\t\t\tif (graveyard) {\n\t\t\t\tfor (let i = 0; i < graveyard.length; i++) {\n\t\t\t\t\tunmount(renderer, host, ctx, graveyard[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tlet onChildValues!: Function;\n\t\tchildValues1 = Promise.race([\n\t\t\tchildValues1,\n\t\t\tnew Promise<any>((resolve) => (onChildValues = resolve)),\n\t\t]);\n\n\t\tif (parent.onCommit) {\n\t\t\tparent.onCommit(childValues1);\n\t\t}\n\n\t\tparent.onCommit = onChildValues;\n\t\treturn childValues1.then((childValues) => {\n\t\t\tparent.inflight = parent.fallback = undefined;\n\t\t\treturn normalize(childValues);\n\t\t});\n\t}\n\n\tif (graveyard) {\n\t\tfor (let i = 0; i < graveyard.length; i++) {\n\t\t\tunmount(renderer, host, ctx, graveyard[i]);\n\t\t}\n\t}\n\n\tif (parent.onCommit) {\n\t\tparent.onCommit(values);\n\t\tparent.onCommit = undefined;\n\t}\n\n\tparent.inflight = parent.fallback = undefined;\n\t// We can assert there are no promises in the array because isAsync is false\n\treturn normalize(values as Array<ElementValue<TNode>>);\n}\n\nfunction createChildrenByKey<TNode>(\n\tchildren: Array<RetainerChild<TNode>>,\n\toffset: number,\n): Map<Key, Retainer<TNode>> {\n\tconst childrenByKey = new Map<Key, Retainer<TNode>>();\n\tfor (let i = offset; i < children.length; i++) {\n\t\tconst child = children[i];\n\t\tif (typeof child === \"object\" && typeof child.el.key !== \"undefined\") {\n\t\t\tchildrenByKey.set(child.el.key, child);\n\t\t}\n\t}\n\n\treturn childrenByKey;\n}\n\nfunction getInflightValue<TNode>(\n\tchild: RetainerChild<TNode>,\n): Promise<ElementValue<TNode>> | ElementValue<TNode> {\n\tif (typeof child !== \"object\") {\n\t\treturn child;\n\t}\n\n\tconst ctx: ContextImpl<TNode> | undefined =\n\t\ttypeof child.el.tag === \"function\" ? child.ctx : undefined;\n\tif (ctx && ctx.f & IsUpdating && ctx.inflightValue) {\n\t\treturn ctx.inflightValue;\n\t} else if (child.inflight) {\n\t\treturn child.inflight;\n\t}\n\n\treturn getValue(child);\n}\n\nfunction updateRaw<TNode, TScope>(\n\trenderer: RendererImpl<TNode, TScope, TNode, unknown>,\n\tret: Retainer<TNode>,\n\tscope: TScope | undefined,\n\toldProps: Record<string, any> | undefined,\n): ElementValue<TNode> {\n\tconst props = ret.el.props;\n\tif (typeof props.value === \"string\") {\n\t\tif (!oldProps || oldProps.value !== props.value) {\n\t\t\tret.value = renderer.parse(props.value, scope);\n\t\t}\n\t} else {\n\t\tret.value = props.value;\n\t}\n\n\treturn ret.value;\n}\n\nfunction updateFragment<TNode, TScope, TRoot extends TNode>(\n\trenderer: RendererImpl<TNode, TScope, TRoot, unknown>,\n\troot: TRoot | undefined,\n\thost: Retainer<TNode>,\n\tctx: ContextImpl<TNode, TScope, TRoot> | undefined,\n\tscope: TScope | undefined,\n\tret: Retainer<TNode>,\n): Promise<ElementValue<TNode>> | ElementValue<TNode> {\n\tconst childValues = diffChildren(\n\t\trenderer,\n\t\troot,\n\t\thost,\n\t\tctx,\n\t\tscope,\n\t\tret,\n\t\tret.el.props.children,\n\t);\n\n\tif (isPromiseLike(childValues)) {\n\t\tret.inflight = childValues.then((childValues) => unwrap(childValues));\n\t\treturn ret.inflight;\n\t}\n\n\treturn unwrap(childValues);\n}\n\nfunction updateHost<TNode, TScope, TRoot extends TNode>(\n\trenderer: RendererImpl<TNode, TScope, TRoot, unknown>,\n\troot: TRoot | undefined,\n\tctx: ContextImpl<TNode, TScope, TRoot> | undefined,\n\tscope: TScope | undefined,\n\tret: Retainer<TNode>,\n\toldProps: Record<string, any> | undefined,\n): Promise<ElementValue<TNode>> | ElementValue<TNode> {\n\tconst el = ret.el;\n\tconst tag = el.tag as string | symbol;\n\tif (el.tag === Portal) {\n\t\troot = ret.value = el.props.root;\n\t} else if (!oldProps) {\n\t\t// We use the truthiness of oldProps to determine if this the first render.\n\t\tret.value = renderer.create(tag, el.props, scope);\n\t}\n\n\tscope = renderer.scope(scope, tag, el.props);\n\tconst childValues = diffChildren(\n\t\trenderer,\n\t\troot,\n\t\tret,\n\t\tctx,\n\t\tscope,\n\t\tret,\n\t\tret.el.props.children,\n\t);\n\n\tif (isPromiseLike(childValues)) {\n\t\tret.inflight = childValues.then((childValues) =>\n\t\t\tcommitHost(renderer, scope, ret, childValues, oldProps),\n\t\t);\n\n\t\treturn ret.inflight;\n\t}\n\n\treturn commitHost(renderer, scope, ret, childValues, oldProps);\n}\n\nfunction commitHost<TNode, TScope>(\n\trenderer: RendererImpl<TNode, TScope, TNode, unknown>,\n\tscope: TScope,\n\tret: Retainer<TNode>,\n\tchildValues: Array<TNode | string>,\n\toldProps: Record<string, any> | undefined,\n): ElementValue<TNode> {\n\tconst tag = ret.el.tag as string | symbol;\n\tconst value = ret.value as TNode;\n\tlet props = ret.el.props;\n\tlet copied: Set<string> | undefined;\n\tif (tag !== Portal) {\n\t\tfor (const propName in {...oldProps, ...props}) {\n\t\t\tconst propValue = props[propName];\n\t\t\tif (propValue === Copy) {\n\t\t\t\t(copied = copied || new Set()).add(propName);\n\t\t\t} else if (propName !== \"children\") {\n\t\t\t\trenderer.patch(\n\t\t\t\t\ttag,\n\t\t\t\t\tvalue,\n\t\t\t\t\tpropName,\n\t\t\t\t\tpropValue,\n\t\t\t\t\toldProps && oldProps[propName],\n\t\t\t\t\tscope,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (copied) {\n\t\tprops = {...ret.el.props};\n\t\tfor (const name of copied) {\n\t\t\tprops[name] = oldProps && oldProps[name];\n\t\t}\n\n\t\tret.el = new Element(tag, props, ret.el.key, ret.el.ref);\n\t}\n\n\trenderer.arrange(tag, value, props, childValues, oldProps, wrap(ret.cached));\n\tret.cached = unwrap(childValues);\n\tif (tag === Portal) {\n\t\tflush(renderer, ret.value);\n\t\treturn;\n\t}\n\n\treturn value;\n}\n\nfunction flush<TRoot>(\n\trenderer: RendererImpl<unknown, unknown, TRoot>,\n\troot: TRoot,\n\tinitiator?: ContextImpl,\n) {\n\trenderer.flush(root);\n\tif (typeof root !== \"object\" || root === null) {\n\t\treturn;\n\t}\n\n\tconst flushMap = flushMaps.get(root as any);\n\tif (flushMap) {\n\t\tif (initiator) {\n\t\t\tconst flushMap1 = new Map<ContextImpl, Set<Function>>();\n\t\t\tfor (let [ctx, callbacks] of flushMap) {\n\t\t\t\tif (!ctxContains(initiator, ctx)) {\n\t\t\t\t\tflushMap.delete(ctx);\n\t\t\t\t\tflushMap1.set(ctx, callbacks);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (flushMap1.size) {\n\t\t\t\tflushMaps.set(root as any, flushMap1);\n\t\t\t} else {\n\t\t\t\tflushMaps.delete(root as any);\n\t\t\t}\n\t\t} else {\n\t\t\tflushMaps.delete(root as any);\n\t\t}\n\n\t\tfor (const [ctx, callbacks] of flushMap) {\n\t\t\tconst value = renderer.read(getValue(ctx.ret));\n\t\t\tfor (const callback of callbacks) {\n\t\t\t\tcallback(value);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction unmount<TNode, TScope, TRoot extends TNode, TResult>(\n\trenderer: RendererImpl<TNode, TScope, TRoot, TResult>,\n\thost: Retainer<TNode>,\n\tctx: ContextImpl<TNode, TScope, TRoot, TResult> | undefined,\n\tret: Retainer<TNode>,\n): void {\n\tif (typeof ret.el.tag === \"function\") {\n\t\tctx = ret.ctx as ContextImpl<TNode, TScope, TRoot, TResult>;\n\t\tunmountComponent(ctx);\n\t} else if (ret.el.tag === Portal) {\n\t\thost = ret;\n\t\trenderer.arrange(\n\t\t\tPortal,\n\t\t\thost.value as TNode,\n\t\t\thost.el.props,\n\t\t\t[],\n\t\t\thost.el.props,\n\t\t\twrap(host.cached),\n\t\t);\n\t\tflush(renderer, host.value);\n\t} else if (ret.el.tag !== Fragment) {\n\t\tif (isEventTarget(ret.value)) {\n\t\t\tconst records = getListenerRecords(ctx, host);\n\t\t\tfor (let i = 0; i < records.length; i++) {\n\t\t\t\tconst record = records[i];\n\t\t\t\tret.value.removeEventListener(\n\t\t\t\t\trecord.type,\n\t\t\t\t\trecord.callback,\n\t\t\t\t\trecord.options,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\trenderer.dispose(ret.el.tag, ret.value as TNode, ret.el.props);\n\t\thost = ret;\n\t}\n\n\tconst children = wrap(ret.children);\n\tfor (let i = 0; i < children.length; i++) {\n\t\tconst child = children[i];\n\t\tif (typeof child === \"object\") {\n\t\t\tunmount(renderer, host, ctx, child);\n\t\t}\n\t}\n}\n\n/*** CONTEXT FLAGS ***/\n/**\n * A flag which is set when the component is being updated by the parent and\n * cleared when the component has committed. Used to determine things like\n * whether the nearest host ancestor needs to be rearranged.\n */\nconst IsUpdating = 1 << 0;\n\n/**\n * A flag which is set when the component function or generator is\n * synchronously executing. This flags is used to ensure that a component which\n * triggers a second update in the course of rendering does not cause a stack\n * overflow or a generator error.\n */\nconst IsExecuting = 1 << 1;\n\n/**\n * A flag used to make sure multiple values are not pulled from context prop\n * iterators without a yield.\n */\nconst IsIterating = 1 << 2;\n\n/**\n * A flag used by async generator components in conjunction with the\n * onavailable (_oa) callback to mark whether new props can be pulled via the\n * context async iterator. See the Symbol.asyncIterator method and the\n * resumeCtxIterator function.\n */\nconst IsAvailable = 1 << 3;\n\n/**\n * A flag which is set when a generator components returns, i.e. the done\n * property on the iteration is set to true. Generator components will stick to\n * their last rendered value and ignore further updates.\n */\nconst IsDone = 1 << 4;\n\n/**\n * A flag which is set when a generator component errors.\n *\n * NOTE: This is mainly used to prevent some false positives in component\n * yields or returns undefined warnings. The reason we’re using this versus\n * IsUnmounted is a very troubling jest test (cascades sync generator parent\n * and sync generator child) where synchronous code causes a stack overflow\n * error in a non-deterministic way. Deeply disturbing stuff.\n */\nconst IsErrored = 1 << 5;\n\n/**\n * A flag which is set when the component is unmounted. Unmounted components\n * are no longer in the element tree and cannot refresh or rerender.\n */\nconst IsUnmounted = 1 << 6;\n\n/**\n * A flag which indicates that the component is a sync generator component.\n */\nconst IsSyncGen = 1 << 7;\n\n/**\n * A flag which indicates that the component is an async generator component.\n */\nconst IsAsyncGen = 1 << 8;\n\n/**\n * A flag which is set while schedule callbacks are called.\n */\nconst IsScheduling = 1 << 9;\n\n/**\n * A flag which is set when a schedule callback calls refresh.\n */\nconst IsSchedulingRefresh = 1 << 10;\n\nexport interface Context extends Crank.Context {}\n\n/**\n * An interface which can be extended to provide strongly typed provisions.\n * See Context.prototype.consume and Context.prototype.provide.\n */\nexport interface ProvisionMap extends Crank.ProvisionMap {}\n\nconst provisionMaps = new WeakMap<ContextImpl, Map<unknown, unknown>>();\n\nconst scheduleMap = new WeakMap<ContextImpl, Set<Function>>();\n\nconst cleanupMap = new WeakMap<ContextImpl, Set<Function>>();\n\n// keys are roots\nconst flushMaps = new WeakMap<object, Map<ContextImpl, Set<Function>>>();\n\n/**\n * @internal\n * The internal class which holds all context data.\n */\nclass ContextImpl<\n\tTNode = unknown,\n\tTScope = unknown,\n\tTRoot extends TNode = TNode,\n\tTResult = unknown,\n> {\n\t/**\n\t * flags - A bitmask. See CONTEXT FLAGS above.\n\t */\n\tdeclare f: number;\n\n\t/**\n\t * ctx - The actual object passed as this to components.\n\t */\n\tdeclare ctx: Context<unknown, TResult>;\n\n\t/**\n\t * renderer - The renderer which created this context.\n\t */\n\tdeclare renderer: RendererImpl<TNode, TScope, TRoot, TResult>;\n\n\t/**\n\t * root - The root node as set by the nearest ancestor portal.\n\t */\n\tdeclare root: TRoot | undefined;\n\n\t/**\n\t * host - The nearest host or portal retainer.\n\t *\n\t * When refresh is called, the host element will be arranged as the last step\n\t * of the commit, to make sure the parent’s children properly reflects the\n\t * components’s children.\n\t */\n\tdeclare host: Retainer<TNode>;\n\n\t/**\n\t * parent - The parent context.\n\t */\n\tdeclare parent: ContextImpl<TNode, TScope, TRoot, TResult> | undefined;\n\n\t/**\n\t * scope - The value of the scope at the point of element’s creation.\n\t */\n\tdeclare scope: TScope | undefined;\n\n\t/**\n\t * retainer - The internal node associated with this context.\n\t */\n\tdeclare ret: Retainer<TNode>;\n\n\t/**\n\t * iterator - The iterator returned by the component function.\n\t */\n\tdeclare iterator:\n\t\t| Iterator<Children, Children | void, unknown>\n\t\t| AsyncIterator<Children, Children | void, unknown>\n\t\t| undefined;\n\n\t/*** async properties ***/\n\t// See the runComponent/stepComponent/advanceComponent functions for more\n\t// notes on the inflight/enqueued block/value properties.\n\t/**\n\t * inflightBlock\n\t */\n\tdeclare inflightBlock: Promise<unknown> | undefined;\n\n\t// TODO: Can we combine this with retainer.inflight somehow please.\n\t/**\n\t * inflightValue\n\t */\n\tdeclare inflightValue: Promise<ElementValue<TNode>> | undefined;\n\n\t/**\n\t * enqueuedBlock\n\t */\n\tdeclare enqueuedBlock: Promise<unknown> | undefined;\n\n\t/**\n\t * enqueuedValue\n\t */\n\tdeclare enqueuedValue: Promise<ElementValue<TNode>> | undefined;\n\n\t/**\n\t * onavailable - A callback used in conjunction with the IsAvailable flag to\n\t * implement the props async iterator. See the Symbol.asyncIterator method\n\t * and the resumeCtxIterator function.\n\t */\n\tdeclare onAvailable: Function | undefined;\n\n\tconstructor(\n\t\trenderer: RendererImpl<TNode, TScope, TRoot, TResult>,\n\t\troot: TRoot | undefined,\n\t\thost: Retainer<TNode>,\n\t\tparent: ContextImpl<TNode, TScope, TRoot, TResult> | undefined,\n\t\tscope: TScope | undefined,\n\t\tret: Retainer<TNode>,\n\t) {\n\t\tthis.f = 0;\n\t\tthis.ctx = new Context(this);\n\t\tthis.renderer = renderer;\n\t\tthis.root = root;\n\t\tthis.host = host;\n\t\tthis.parent = parent;\n\t\tthis.scope = scope;\n\t\tthis.ret = ret;\n\t\tthis.iterator = undefined;\n\t\tthis.inflightBlock = undefined;\n\t\tthis.inflightValue = undefined;\n\t\tthis.enqueuedBlock = undefined;\n\t\tthis.enqueuedValue = undefined;\n\t\tthis.onAvailable = undefined;\n\t}\n}\n\nconst $ContextImpl = Symbol.for(\"crank.ContextImpl\");\n\n/**\n * A class which is instantiated and passed to every component as its this\n * value. Contexts form a tree just like elements and all components in the\n * element tree are connected via contexts. Components can use this tree to\n * communicate data upwards via events and downwards via provisions.\n *\n * @template [TProps=*] - The expected shape of the props passed to the\n * component. Used to strongly type the Context iterator methods.\n * @template [TResult=*] - The readable element value type. It is used in\n * places such as the return value of refresh and the argument passed to\n * schedule and cleanup callbacks.\n */\nexport class Context<TProps = any, TResult = any> implements EventTarget {\n\t/**\n\t * @internal\n\t */\n\tdeclare [$ContextImpl]: ContextImpl<unknown, unknown, unknown, TResult>;\n\n\tconstructor(impl: ContextImpl<unknown, unknown, unknown, TResult>) {\n\t\tthis[$ContextImpl] = impl;\n\t}\n\n\t/**\n\t * The current props of the associated element.\n\t *\n\t * Typically, you should read props either via the first parameter of the\n\t * component or via the context iterator methods. This property is mainly for\n\t * plugins or utilities which wrap contexts.\n\t */\n\tget props(): TProps {\n\t\treturn this[$ContextImpl].ret.el.props;\n\t}\n\n\t// TODO: Should we rename this???\n\t/**\n\t * The current value of the associated element.\n\t *\n\t * Typically, you should read values via refs, generator yield expressions,\n\t * or the refresh, schedule, cleanup, or flush methods. This property is\n\t * mainly for plugins or utilities which wrap contexts.\n\t */\n\tget value(): TResult {\n\t\treturn this[$ContextImpl].renderer.read(getValue(this[$ContextImpl].ret));\n\t}\n\n\t*[Symbol.iterator](): Generator<TProps> {\n\t\tconst impl = this[$ContextImpl];\n\t\twhile (!(impl.f & IsDone)) {\n\t\t\tif (impl.f & IsIterating) {\n\t\t\t\tthrow new Error(\"Context iterated twice without a yield\");\n\t\t\t} else if (impl.f & IsAsyncGen) {\n\t\t\t\tthrow new Error(\"Use for await…of in async generator components\");\n\t\t\t}\n\n\t\t\timpl.f |= IsIterating;\n\t\t\tyield impl.ret.el.props!;\n\t\t}\n\t}\n\n\tasync *[Symbol.asyncIterator](): AsyncGenerator<TProps> {\n\t\t// We use a do while loop rather than a while loop to handle an edge case\n\t\t// where an async generator component is unmounted synchronously and\n\t\t// therefore “done” before it starts iterating over the context.\n\t\tconst impl = this[$ContextImpl];\n\t\tdo {\n\t\t\tif (impl.f & IsIterating) {\n\t\t\t\tthrow new Error(\"Context iterated twice without a yield\");\n\t\t\t} else if (impl.f & IsSyncGen) {\n\t\t\t\tthrow new Error(\"Use for…of in sync generator components\");\n\t\t\t}\n\n\t\t\timpl.f |= IsIterating;\n\t\t\tif (impl.f & IsAvailable) {\n\t\t\t\timpl.f &= ~IsAvailable;\n\t\t\t} else {\n\t\t\t\tawait new Promise((resolve) => (impl.onAvailable = resolve));\n\t\t\t\tif (impl.f & IsDone) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tyield impl.ret.el.props;\n\t\t} while (!(impl.f & IsDone));\n\t}\n\n\t/**\n\t * Re-executes a component.\n\t *\n\t * @returns The rendered value of the component or a promise thereof if the\n\t * component or its children execute asynchronously.\n\t *\n\t * The refresh method works a little differently for async generator\n\t * components, in that it will resume the Context’s props async iterator\n\t * rather than resuming execution. This is because async generator components\n\t * are perpetually resumed independent of updates, and rely on the props\n\t * async iterator to suspend.\n\t */\n\trefresh(): Promise<TResult> | TResult {\n\t\tconst impl = this[$ContextImpl];\n\t\tif (impl.f & IsUnmounted) {\n\t\t\tconsole.error(\"Component is unmounted\");\n\t\t\treturn impl.renderer.read(undefined);\n\t\t} else if (impl.f & IsExecuting) {\n\t\t\tconsole.error(\"Component is already executing\");\n\t\t\treturn this.value;\n\t\t}\n\n\t\tresumeCtxIterator(impl);\n\t\tconst value = runComponent(impl);\n\t\tif (isPromiseLike(value)) {\n\t\t\treturn (value as Promise<any>).then((value) => impl.renderer.read(value));\n\t\t}\n\n\t\treturn impl.renderer.read(value);\n\t}\n\n\t/**\n\t * Registers a callback which fires when the component commits. Will only\n\t * fire once per callback and update.\n\t */\n\tschedule(callback: (value: TResult) => unknown): void {\n\t\tconst impl = this[$ContextImpl];\n\t\tlet callbacks = scheduleMap.get(impl);\n\t\tif (!callbacks) {\n\t\t\tcallbacks = new Set<Function>();\n\t\t\tscheduleMap.set(impl, callbacks);\n\t\t}\n\n\t\tcallbacks.add(callback);\n\t}\n\n\t/**\n\t * Registers a callback which fires when the component’s children are\n\t * rendered into the root. Will only fire once per callback and render.\n\t */\n\tflush(callback: (value: TResult) => unknown): void {\n\t\tconst impl = this[$ContextImpl];\n\t\tif (typeof impl.root !== \"object\" || impl.root === null) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet flushMap = flushMaps.get(impl.root);\n\t\tif (!flushMap) {\n\t\t\tflushMap = new Map<ContextImpl, Set<Function>>();\n\t\t\tflushMaps.set(impl.root, flushMap);\n\t\t}\n\n\t\tlet callbacks = flushMap.get(impl);\n\t\tif (!callbacks) {\n\t\t\tcallbacks = new Set<Function>();\n\t\t\tflushMap.set(impl, callbacks);\n\t\t}\n\n\t\tcallbacks.add(callback);\n\t}\n\n\t/**\n\t * Registers a callback which fires when the component unmounts. Will only\n\t * fire once per callback.\n\t */\n\tcleanup(callback: (value: TResult) => unknown): void {\n\t\tconst impl = this[$ContextImpl];\n\t\tlet callbacks = cleanupMap.get(impl);\n\t\tif (!callbacks) {\n\t\t\tcallbacks = new Set<Function>();\n\t\t\tcleanupMap.set(impl, callbacks);\n\t\t}\n\n\t\tcallbacks.add(callback);\n\t}\n\n\tconsume<TKey extends keyof ProvisionMap>(key: TKey): ProvisionMap[TKey];\n\tconsume(key: unknown): any;\n\tconsume(key: unknown): any {\n\t\tfor (\n\t\t\tlet parent = this[$ContextImpl].parent;\n\t\t\tparent !== undefined;\n\t\t\tparent = parent.parent\n\t\t) {\n\t\t\tconst provisions = provisionMaps.get(parent);\n\t\t\tif (provisions && provisions.has(key)) {\n\t\t\t\treturn provisions.get(key)!;\n\t\t\t}\n\t\t}\n\t}\n\n\tprovide<TKey extends keyof ProvisionMap>(\n\t\tkey: TKey,\n\t\tvalue: ProvisionMap[TKey],\n\t): void;\n\tprovide(key: unknown, value: any): void;\n\tprovide(key: unknown, value: any): void {\n\t\tconst impl = this[$ContextImpl];\n\t\tlet provisions = provisionMaps.get(impl);\n\t\tif (!provisions) {\n\t\t\tprovisions = new Map();\n\t\t\tprovisionMaps.set(impl, provisions);\n\t\t}\n\n\t\tprovisions.set(key, value);\n\t}\n\n\taddEventListener<T extends string>(\n\t\ttype: T,\n\t\tlistener: MappedEventListenerOrEventListenerObject<T> | null,\n\t\toptions?: boolean | AddEventListenerOptions,\n\t): void {\n\t\tconst impl = this[$ContextImpl];\n\t\tlet listeners: Array<EventListenerRecord>;\n\t\tif (!isListenerOrListenerObject(listener)) {\n\t\t\treturn;\n\t\t} else {\n\t\t\tconst listeners1 = listenersMap.get(impl);\n\t\t\tif (listeners1) {\n\t\t\t\tlisteners = listeners1;\n\t\t\t} else {\n\t\t\t\tlisteners = [];\n\t\t\t\tlistenersMap.set(impl, listeners);\n\t\t\t}\n\t\t}\n\n\t\toptions = normalizeListenerOptions(options);\n\t\tlet callback: MappedEventListener<T>;\n\t\tif (typeof listener === \"object\") {\n\t\t\tcallback = () => listener.handleEvent.apply(listener, arguments as any);\n\t\t} else {\n\t\t\tcallback = listener;\n\t\t}\n\n\t\tconst record: EventListenerRecord = {type, callback, listener, options};\n\t\tif (options.once) {\n\t\t\trecord.callback = function (this: any) {\n\t\t\t\tconst i = listeners.indexOf(record);\n\t\t\t\tif (i !== -1) {\n\t\t\t\t\tlisteners.splice(i, 1);\n\t\t\t\t}\n\n\t\t\t\treturn callback.apply(this, arguments as any);\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tlisteners.some(\n\t\t\t\t(record1) =>\n\t\t\t\t\trecord.type === record1.type &&\n\t\t\t\t\trecord.listener === record1.listener &&\n\t\t\t\t\t!record.options.capture === !record1.options.capture,\n\t\t\t)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tlisteners.push(record);\n\n\t\t// TODO: is it possible to separate out the EventTarget delegation logic\n\t\tfor (const value of getChildValues(impl.ret)) {\n\t\t\tif (isEventTarget(value)) {\n\t\t\t\tvalue.addEventListener(record.type, record.callback, record.options);\n\t\t\t}\n\t\t}\n\t}\n\n\tremoveEventListener<T extends string>(\n\t\ttype: T,\n\t\tlistener: MappedEventListenerOrEventListenerObject<T> | null,\n\t\toptions?: EventListenerOptions | boolean,\n\t): void {\n\t\tconst impl = this[$ContextImpl];\n\t\tconst listeners = listenersMap.get(impl);\n\t\tif (listeners == null || !isListenerOrListenerObject(listener)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst options1 = normalizeListenerOptions(options);\n\t\tconst i = listeners.findIndex(\n\t\t\t(record) =>\n\t\t\t\trecord.type === type &&\n\t\t\t\trecord.listener === listener &&\n\t\t\t\t!record.options.capture === !options1.capture,\n\t\t);\n\n\t\tif (i === -1) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst record = listeners[i];\n\t\tlisteners.splice(i, 1);\n\n\t\t// TODO: is it possible to separate out the EventTarget delegation logic\n\t\tfor (const value of getChildValues(impl.ret)) {\n\t\t\tif (isEventTarget(value)) {\n\t\t\t\tvalue.removeEventListener(record.type, record.callback, record.options);\n\t\t\t}\n\t\t}\n\t}\n\n\tdispatchEvent(ev: Event): boolean {\n\t\tconst impl = this[$ContextImpl];\n\t\tconst path: Array<ContextImpl> = [];\n\t\tfor (\n\t\t\tlet parent = impl.parent;\n\t\t\tparent !== undefined;\n\t\t\tparent = parent.parent\n\t\t) {\n\t\t\tpath.push(parent);\n\t\t}\n\n\t\t// We patch the stopImmediatePropagation method because ev.cancelBubble\n\t\t// only informs us if stopPropagation was called and there are no\n\t\t// properties which inform us if stopImmediatePropagation was called.\n\t\tlet immediateCancelBubble = false;\n\t\tconst stopImmediatePropagation = ev.stopImmediatePropagation;\n\t\tsetEventProperty(ev, \"stopImmediatePropagation\", () => {\n\t\t\timmediateCancelBubble = true;\n\t\t\treturn stopImmediatePropagation.call(ev);\n\t\t});\n\t\tsetEventProperty(ev, \"target\", impl.ctx);\n\n\t\t// The only possible errors in this block are errors thrown by callbacks,\n\t\t// and dispatchEvent will only log these errors rather than throwing\n\t\t// them. Therefore, we place all code in a try block, log errors in the\n\t\t// catch block, and use an unsafe return statement in the finally block.\n\t\t//\n\t\t// Each early return within the try block returns true because while the\n\t\t// return value is overridden in the finally block, TypeScript\n\t\t// (justifiably) does not recognize the unsafe return statement.\n\t\t//\n\t\t// TODO: Run all callbacks even if one of them errors\n\t\ttry {\n\t\t\tsetEventProperty(ev, \"eventPhase\", CAPTURING_PHASE);\n\t\t\tfor (let i = path.length - 1; i >= 0; i--) {\n\t\t\t\tconst target = path[i];\n\t\t\t\tconst listeners = listenersMap.get(target);\n\t\t\t\tif (listeners) {\n\t\t\t\t\tsetEventProperty(ev, \"currentTarget\", target.ctx);\n\t\t\t\t\tfor (const record of listeners) {\n\t\t\t\t\t\tif (record.type === ev.type && record.options.capture) {\n\t\t\t\t\t\t\trecord.callback.call(target.ctx, ev);\n\t\t\t\t\t\t\tif (immediateCancelBubble) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (ev.cancelBubble) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t{\n\t\t\t\tconst listeners = listenersMap.get(impl);\n\t\t\t\tif (listeners) {\n\t\t\t\t\tsetEventProperty(ev, \"eventPhase\", AT_TARGET);\n\t\t\t\t\tsetEventProperty(ev, \"currentTarget\", impl.ctx);\n\t\t\t\t\tfor (const record of listeners) {\n\t\t\t\t\t\tif (record.type === ev.type) {\n\t\t\t\t\t\t\trecord.callback.call(impl.ctx, ev);\n\t\t\t\t\t\t\tif (immediateCancelBubble) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (ev.cancelBubble) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (ev.bubbles) {\n\t\t\t\tsetEventProperty(ev, \"eventPhase\", BUBBLING_PHASE);\n\t\t\t\tfor (let i = 0; i < path.length; i++) {\n\t\t\t\t\tconst target = path[i];\n\t\t\t\t\tconst listeners = listenersMap.get(target);\n\t\t\t\t\tif (listeners) {\n\t\t\t\t\t\tsetEventProperty(ev, \"currentTarget\", target.ctx);\n\t\t\t\t\t\tfor (const record of listeners) {\n\t\t\t\t\t\t\tif (record.type === ev.type && !record.options.capture) {\n\t\t\t\t\t\t\t\trecord.callback.call(target.ctx, ev);\n\t\t\t\t\t\t\t\tif (immediateCancelBubble) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (ev.cancelBubble) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (err) {\n\t\t\t// TODO: Use setTimeout to rethrow the error.\n\t\t\tconsole.error(err);\n\t\t} finally {\n\t\t\tsetEventProperty(ev, \"eventPhase\", NONE);\n\t\t\tsetEventProperty(ev, \"currentTarget\", null);\n\t\t\t// eslint-disable-next-line no-unsafe-finally\n\t\t\treturn !ev.defaultPrevented;\n\t\t}\n\t}\n}\n\n/*** PRIVATE CONTEXT FUNCTIONS ***/\nfunction ctxContains(parent: ContextImpl, child: ContextImpl): boolean {\n\tfor (\n\t\tlet current: ContextImpl | undefined = child;\n\t\tcurrent !== undefined;\n\t\tcurrent = current.parent\n\t) {\n\t\tif (current === parent) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\nfunction updateComponent<TNode, TScope, TRoot extends TNode, TResult>(\n\trenderer: RendererImpl<TNode, TScope, TRoot, TResult>,\n\troot: TRoot | undefined,\n\thost: Retainer<TNode>,\n\tparent: ContextImpl<TNode, TScope, TRoot, TResult> | undefined,\n\tscope: TScope | undefined,\n\tret: Retainer<TNode>,\n\toldProps: Record<string, any> | undefined,\n): Promise<ElementValue<TNode>> | ElementValue<TNode> {\n\tlet ctx: ContextImpl<TNode, TScope, TRoot, TResult>;\n\tif (oldProps) {\n\t\tctx = ret.ctx as ContextImpl<TNode, TScope, TRoot, TResult>;\n\t\tif (ctx.f & IsExecuting) {\n\t\t\tconsole.error(\"Component is already executing\");\n\t\t\treturn ret.cached;\n\t\t}\n\t} else {\n\t\tctx = ret.ctx = new ContextImpl(renderer, root, host, parent, scope, ret);\n\t}\n\n\tctx.f |= IsUpdating;\n\tresumeCtxIterator(ctx);\n\treturn runComponent(ctx);\n}\n\nfunction updateComponentChildren<TNode, TResult>(\n\tctx: ContextImpl<TNode, unknown, TNode, TResult>,\n\tchildren: Children,\n): Promise<ElementValue<TNode>> | ElementValue<TNode> {\n\tif (ctx.f & IsUnmounted || ctx.f & IsErrored) {\n\t\treturn;\n\t} else if (children === undefined) {\n\t\tconsole.error(\n\t\t\t\"A component has returned or yielded undefined. If this was intentional, return or yield null instead.\",\n\t\t);\n\t}\n\n\tlet childValues: Promise<Array<string | TNode>> | Array<string | TNode>;\n\t// We set the isExecuting flag in case a child component dispatches an event\n\t// which bubbles to this component and causes a synchronous refresh().\n\tctx.f |= IsExecuting;\n\ttry {\n\t\tchildValues = diffChildren(\n\t\t\tctx.renderer,\n\t\t\tctx.root,\n\t\t\tctx.host,\n\t\t\tctx,\n\t\t\tctx.scope,\n\t\t\tctx.ret,\n\t\t\tnarrow(children),\n\t\t);\n\t} finally {\n\t\tctx.f &= ~IsExecuting;\n\t}\n\n\tif (isPromiseLike(childValues)) {\n\t\tctx.ret.inflight = childValues.then((childValues) =>\n\t\t\tcommitComponent(ctx, childValues),\n\t\t);\n\n\t\treturn ctx.ret.inflight;\n\t}\n\n\treturn commitComponent(ctx, childValues);\n}\n\nfunction commitComponent<TNode>(\n\tctx: ContextImpl<TNode, unknown, TNode>,\n\tvalues: Array<TNode | string>,\n): ElementValue<TNode> {\n\tif (ctx.f & IsUnmounted) {\n\t\treturn;\n\t}\n\n\tconst listeners = listenersMap.get(ctx);\n\tif (listeners && listeners.length) {\n\t\tfor (let i = 0; i < values.length; i++) {\n\t\t\tconst value = values[i];\n\t\t\tif (isEventTarget(value)) {\n\t\t\t\tfor (let j = 0; j < listeners.length; j++) {\n\t\t\t\t\tconst record = listeners[j];\n\t\t\t\t\tvalue.addEventListener(record.type, record.callback, record.options);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tconst oldValues = wrap(ctx.ret.cached);\n\tlet value = (ctx.ret.cached = unwrap(values));\n\tif (ctx.f & IsScheduling) {\n\t\tctx.f |= IsSchedulingRefresh;\n\t} else if (!(ctx.f & IsUpdating)) {\n\t\t// If we’re not updating the component, which happens when components are\n\t\t// refreshed, or when async generator components iterate, we have to do a\n\t\t// little bit housekeeping when a component’s child values have changed.\n\t\tif (!valuesEqual(oldValues, values)) {\n\t\t\tconst records = getListenerRecords(ctx.parent, ctx.host);\n\t\t\tif (records.length) {\n\t\t\t\tfor (let i = 0; i < values.length; i++) {\n\t\t\t\t\tconst value = values[i];\n\t\t\t\t\tif (isEventTarget(value)) {\n\t\t\t\t\t\tfor (let j = 0; j < records.length; j++) {\n\t\t\t\t\t\t\tconst record = records[j];\n\t\t\t\t\t\t\tvalue.addEventListener(\n\t\t\t\t\t\t\t\trecord.type,\n\t\t\t\t\t\t\t\trecord.callback,\n\t\t\t\t\t\t\t\trecord.options,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// rearranging the nearest ancestor host element\n\t\t\tconst host = ctx.host;\n\t\t\tconst oldHostValues = wrap(host.cached);\n\t\t\tinvalidate(ctx, host);\n\t\t\tconst hostValues = getChildValues(host);\n\t\t\tctx.renderer.arrange(\n\t\t\t\thost.el.tag as string | symbol,\n\t\t\t\thost.value as TNode,\n\t\t\t\thost.el.props,\n\t\t\t\thostValues,\n\t\t\t\t// props and oldProps are the same because the host isn’t updated.\n\t\t\t\thost.el.props,\n\t\t\t\toldHostValues,\n\t\t\t);\n\t\t}\n\n\t\tflush(ctx.renderer, ctx.root, ctx);\n\t}\n\n\tconst callbacks = scheduleMap.get(ctx);\n\tif (callbacks) {\n\t\tscheduleMap.delete(ctx);\n\t\tctx.f |= IsScheduling;\n\t\tconst value1 = ctx.renderer.read(value);\n\t\tfor (const callback of callbacks) {\n\t\t\tcallback(value1);\n\t\t}\n\n\t\tctx.f &= ~IsScheduling;\n\t\t// Handles an edge case where refresh() is called during a schedule().\n\t\tif (ctx.f & IsSchedulingRefresh) {\n\t\t\tctx.f &= ~IsSchedulingRefresh;\n\t\t\tvalue = getValue(ctx.ret);\n\t\t}\n\t}\n\n\tctx.f &= ~IsUpdating;\n\treturn value;\n}\n\nfunction invalidate(ctx: ContextImpl, host: Retainer<unknown>): void {\n\tfor (\n\t\tlet parent = ctx.parent;\n\t\tparent !== undefined && parent.host === host;\n\t\tparent = parent.parent\n\t) {\n\t\tparent.ret.cached = undefined;\n\t}\n\n\thost.cached = undefined;\n}\n\nfunction valuesEqual<TValue>(\n\tvalues1: Array<TValue>,\n\tvalues2: Array<TValue>,\n): boolean {\n\tif (values1.length !== values2.length) {\n\t\treturn false;\n\t}\n\n\tfor (let i = 0; i < values1.length; i++) {\n\t\tconst value1 = values1[i];\n\t\tconst value2 = values2[i];\n\t\tif (value1 !== value2) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\n/**\n * Enqueues and executes the component associated with the context.\n *\n * The functions stepComponent and runComponent work together\n * to implement the async queueing behavior of components. The runComponent\n * function calls the stepComponent function, which returns two results in a\n * tuple. The first result, called the “block,” is a possible promise which\n * represents the duration for which the component is blocked from accepting\n * new updates. The second result, called the “value,” is the actual result of\n * the update. The runComponent function caches block/value from the\n * stepComponent function on the context, according to whether the component\n * blocks. The “inflight” block/value properties are the currently executing\n * update, and the “enqueued” block/value properties represent an enqueued next\n * stepComponent. Enqueued steps are dequeued every time the current block\n * promise settles.\n */\nfunction runComponent<TNode, TResult>(\n\tctx: ContextImpl<TNode, unknown, TNode, TResult>,\n): Promise<ElementValue<TNode>> | ElementValue<TNode> {\n\tif (!ctx.inflightBlock) {\n\t\ttry {\n\t\t\tconst [block, value] = stepComponent<TNode, TResult>(ctx);\n\t\t\tif (block) {\n\t\t\t\tctx.inflightBlock = block\n\t\t\t\t\t.catch((err) => {\n\t\t\t\t\t\tif (!(ctx.f & IsUpdating)) {\n\t\t\t\t\t\t\treturn propagateError<TNode>(ctx.parent, err);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.finally(() => advanceComponent(ctx));\n\t\t\t\t// stepComponent will only return a block if the value is asynchronous\n\t\t\t\tctx.inflightValue = value as Promise<ElementValue<TNode>>;\n\t\t\t}\n\n\t\t\treturn value;\n\t\t} catch (err) {\n\t\t\tif (!(ctx.f & IsUpdating)) {\n\t\t\t\treturn propagateError<TNode>(ctx.parent, err);\n\t\t\t}\n\n\t\t\tthrow err;\n\t\t}\n\t} else if (ctx.f & IsAsyncGen) {\n\t\treturn ctx.inflightValue;\n\t} else if (!ctx.enqueuedBlock) {\n\t\tlet resolve: Function;\n\t\tctx.enqueuedBlock = ctx.inflightBlock\n\t\t\t.then(() => {\n\t\t\t\ttry {\n\t\t\t\t\tconst [block, value] = stepComponent<TNode, TResult>(ctx);\n\t\t\t\t\tresolve(value);\n\t\t\t\t\tif (block) {\n\t\t\t\t\t\treturn block.catch((err) => {\n\t\t\t\t\t\t\tif (!(ctx.f & IsUpdating)) {\n\t\t\t\t\t\t\t\treturn propagateError<TNode>(ctx.parent, err);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (!(ctx.f & IsUpdating)) {\n\t\t\t\t\t\treturn propagateError<TNode>(ctx.parent, err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t\t.finally(() => advanceComponent(ctx));\n\t\tctx.enqueuedValue = new Promise((resolve1) => (resolve = resolve1));\n\t}\n\n\treturn ctx.enqueuedValue;\n}\n\n/**\n * This function is responsible for executing the component and handling all\n * the different component types.\n *\n * @returns {[block, value]} A tuple where\n * block - A possible promise which represents the duration during which the\n * component is blocked from updating.\n * value - A possible promise resolving to the rendered value of children.\n *\n * Each component type will block according to the type of the component.\n * - Sync function components never block and will transparently pass updates\n * to children.\n * - Async function components and async generator components block while\n * executing itself, but will not block for async children.\n * - Sync generator components block while any children are executing, because\n * they are expected to only resume when they’ve actually rendered.\n */\nfunction stepComponent<TNode, TResult>(\n\tctx: ContextImpl<TNode, unknown, TNode, TResult>,\n): [\n\tPromise<unknown> | undefined,\n\tPromise<ElementValue<TNode>> | ElementValue<TNode>,\n] {\n\tconst ret = ctx.ret;\n\tif (ctx.f & IsDone) {\n\t\treturn [undefined, getValue(ret)];\n\t}\n\n\tconst initial = !ctx.iterator;\n\tif (initial) {\n\t\tctx.f |= IsExecuting;\n\t\tclearEventListeners(ctx);\n\t\tlet result: ReturnType<Component>;\n\t\ttry {\n\t\t\tresult = (ret.el.tag as Component).call(ctx.ctx, ret.el.props);\n\t\t} catch (err) {\n\t\t\tctx.f |= IsErrored;\n\t\t\tthrow err;\n\t\t} finally {\n\t\t\tctx.f &= ~IsExecuting;\n\t\t}\n\n\t\tif (isIteratorLike(result)) {\n\t\t\tctx.iterator = result;\n\t\t} else if (isPromiseLike(result)) {\n\t\t\t// async function component\n\t\t\tconst result1 =\n\t\t\t\tresult instanceof Promise ? result : Promise.resolve(result);\n\t\t\tconst value = result1.then(\n\t\t\t\t(result) => updateComponentChildren<TNode, TResult>(ctx, result),\n\t\t\t\t(err) => {\n\t\t\t\t\tctx.f |= IsErrored;\n\t\t\t\t\tthrow err;\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn [result1, value];\n\t\t} else {\n\t\t\t// sync function component\n\t\t\treturn [undefined, updateComponentChildren<TNode, TResult>(ctx, result)];\n\t\t}\n\t}\n\n\tlet oldValue: Promise<TResult> | TResult;\n\tif (initial) {\n\t\t// The argument passed to the first call to next is ignored.\n\t\toldValue = undefined as any;\n\t} else if (ctx.ret.inflight) {\n\t\t// The value passed back into the generator as the argument to the next\n\t\t// method is a promise if an async generator component has async children.\n\t\t// Sync generator components only resume when their children have fulfilled\n\t\t// so the element’s inflight child values will never be defined.\n\t\toldValue = ctx.ret.inflight.then(\n\t\t\t(value) => ctx.renderer.read(value),\n\t\t\t() => ctx.renderer.read(undefined),\n\t\t);\n\t} else {\n\t\toldValue = ctx.renderer.read(getValue(ret));\n\t}\n\n\tlet iteration: ChildrenIteration;\n\tctx.f |= IsExecuting;\n\ttry {\n\t\titeration = ctx.iterator!.next(oldValue);\n\t} catch (err) {\n\t\tctx.f |= IsDone | IsErrored;\n\t\tthrow err;\n\t} finally {\n\t\tctx.f &= ~IsExecuting;\n\t}\n\n\tif (isPromiseLike(iteration)) {\n\t\t// async generator component\n\t\tif (initial) {\n\t\t\tctx.f |= IsAsyncGen;\n\t\t}\n\n\t\tconst value: Promise<ElementValue<TNode>> = iteration.then(\n\t\t\t(iteration) => {\n\t\t\t\tif (!(ctx.f & IsIterating)) {\n\t\t\t\t\tctx.f &= ~IsAvailable;\n\t\t\t\t}\n\n\t\t\t\tctx.f &= ~IsIterating;\n\t\t\t\tif (iteration.done) {\n\t\t\t\t\tctx.f |= IsDone;\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst value = updateComponentChildren<TNode, TResult>(\n\t\t\t\t\t\tctx,\n\t\t\t\t\t\titeration.value as Children,\n\t\t\t\t\t);\n\n\t\t\t\t\tif (isPromiseLike(value)) {\n\t\t\t\t\t\treturn value.catch((err) => handleChildError(ctx, err));\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value;\n\t\t\t\t} catch (err) {\n\t\t\t\t\treturn handleChildError(ctx, err);\n\t\t\t\t}\n\t\t\t},\n\t\t\t(err) => {\n\t\t\t\tctx.f |= IsDone | IsErrored;\n\t\t\t\tthrow err;\n\t\t\t},\n\t\t);\n\n\t\treturn [iteration, value];\n\t}\n\n\t// sync generator component\n\tif (initial) {\n\t\tctx.f |= IsSyncGen;\n\t}\n\n\tctx.f &= ~IsIterating;\n\tif (iteration.done) {\n\t\tctx.f |= IsDone;\n\t}\n\n\tlet value: Promise<ElementValue<TNode>> | ElementValue<TNode>;\n\ttry {\n\t\tvalue = updateComponentChildren<TNode, TResult>(\n\t\t\tctx,\n\t\t\titeration.value as Children,\n\t\t);\n\t\tif (isPromiseLike(value)) {\n\t\t\tvalue = value.catch((err) => handleChildError(ctx, err));\n\t\t}\n\t} catch (err) {\n\t\tvalue = handleChildError(ctx, err);\n\t}\n\n\tif (isPromiseLike(value)) {\n\t\treturn [value.catch(NOOP), value];\n\t}\n\n\treturn [undefined, value];\n}\n\n/**\n * Called when the inflight block promise settles.\n */\nfunction advanceComponent(ctx: ContextImpl): void {\n\tctx.inflightBlock = ctx.enqueuedBlock;\n\tctx.inflightValue = ctx.enqueuedValue;\n\tctx.enqueuedBlock = undefined;\n\tctx.enqueuedValue = undefined;\n\tif (ctx.f & IsAsyncGen && !(ctx.f & IsDone) && !(ctx.f & IsUnmounted)) {\n\t\trunComponent(ctx);\n\t}\n}\n\n/**\n * Called to make props available to the props async iterator for async\n * generator components.\n */\nfunction resumeCtxIterator(ctx: ContextImpl): void {\n\tif (ctx.onAvailable) {\n\t\tctx.onAvailable();\n\t\tctx.onAvailable = undefined;\n\t} else {\n\t\tctx.f |= IsAvailable;\n\t}\n}\n\n// TODO: async unmounting\nfunction unmountComponent(ctx: ContextImpl): void {\n\tctx.f |= IsUnmounted;\n\tclearEventListeners(ctx);\n\tconst callbacks = cleanupMap.get(ctx);\n\tif (callbacks) {\n\t\tcleanupMap.delete(ctx);\n\t\tconst value = ctx.renderer.read(getValue(ctx.ret));\n\t\tfor (const callback of callbacks) {\n\t\t\tcallback(value);\n\t\t}\n\t}\n\n\tif (!(ctx.f & IsDone)) {\n\t\tctx.f |= IsDone;\n\t\tresumeCtxIterator(ctx);\n\t\tif (ctx.iterator && typeof ctx.iterator.return === \"function\") {\n\t\t\tctx.f |= IsExecuting;\n\t\t\ttry {\n\t\t\t\tconst iteration = ctx.iterator.return();\n\t\t\t\tif (isPromiseLike(iteration)) {\n\t\t\t\t\titeration.catch((err) => propagateError<unknown>(ctx.parent, err));\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tctx.f &= ~IsExecuting;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/*** EVENT TARGET UTILITIES ***/\n// EVENT PHASE CONSTANTS\n// https://developer.mozilla.org/en-US/docs/Web/API/Event/eventPhase\nconst NONE = 0;\nconst CAPTURING_PHASE = 1;\nconst AT_TARGET = 2;\nconst BUBBLING_PHASE = 3;\n\nconst listenersMap = new WeakMap<ContextImpl, Array<EventListenerRecord>>();\n/**\n * A map of event type strings to Event subclasses. Can be extended via\n * TypeScript module augmentation to have strongly typed event listeners.\n */\nexport interface EventMap extends Crank.EventMap {\n\t[type: string]: Event;\n}\n\ntype MappedEventListener<T extends string> = (ev: EventMap[T]) => unknown;\n\ntype MappedEventListenerOrEventListenerObject<T extends string> =\n\t| MappedEventListener<T>\n\t| {handleEvent: MappedEventListener<T>};\n\nfunction isListenerOrListenerObject(\n\tvalue: unknown,\n): value is MappedEventListenerOrEventListenerObject<string> {\n\treturn (\n\t\ttypeof value === \"function\" ||\n\t\t(value !== null &&\n\t\t\ttypeof value === \"object\" &&\n\t\t\ttypeof (value as any).handleEvent === \"function\")\n\t);\n}\n\ninterface EventListenerRecord {\n\ttype: string;\n\tcallback: MappedEventListener<any>;\n\tlistener: MappedEventListenerOrEventListenerObject<any>;\n\toptions: AddEventListenerOptions;\n}\n\nfunction normalizeListenerOptions(\n\toptions: AddEventListenerOptions | boolean | null | undefined,\n): AddEventListenerOptions {\n\tif (typeof options === \"boolean\") {\n\t\treturn {capture: options};\n\t} else if (options == null) {\n\t\treturn {};\n\t}\n\n\treturn options;\n}\n\nfunction isEventTarget(value: any): value is EventTarget {\n\treturn (\n\t\tvalue != null &&\n\t\ttypeof value.addEventListener === \"function\" &&\n\t\ttypeof value.removeEventListener === \"function\" &&\n\t\ttypeof value.dispatchEvent === \"function\"\n\t);\n}\n\nfunction setEventProperty<T extends keyof Event>(\n\tev: Event,\n\tkey: T,\n\tvalue: Event[T],\n): void {\n\tObject.defineProperty(ev, key, {value, writable: false, configurable: true});\n}\n\n// TODO: Maybe we can pass in the current context directly, rather than\n// starting from the parent?\n/**\n * A function to reconstruct an array of every listener given a context and a\n * host element.\n *\n * This function exploits the fact that contexts retain their nearest ancestor\n * host element. We can determine all the contexts which are directly listening\n * to an element by traversing up the context tree and checking that the host\n * element passed in matches the parent context’s host element.\n */\nfunction getListenerRecords(\n\tctx: ContextImpl | undefined,\n\tret: Retainer<unknown>,\n): Array<EventListenerRecord> {\n\tlet listeners: Array<EventListenerRecord> = [];\n\twhile (ctx !== undefined && ctx.host === ret) {\n\t\tconst listeners1 = listenersMap.get(ctx);\n\t\tif (listeners1) {\n\t\t\tlisteners = listeners.concat(listeners1);\n\t\t}\n\n\t\tctx = ctx.parent;\n\t}\n\n\treturn listeners;\n}\n\nfunction clearEventListeners(ctx: ContextImpl): void {\n\tconst listeners = listenersMap.get(ctx);\n\tif (listeners && listeners.length) {\n\t\tfor (const value of getChildValues(ctx.ret)) {\n\t\t\tif (isEventTarget(value)) {\n\t\t\t\tfor (const record of listeners) {\n\t\t\t\t\tvalue.removeEventListener(\n\t\t\t\t\t\trecord.type,\n\t\t\t\t\t\trecord.callback,\n\t\t\t\t\t\trecord.options,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlisteners.length = 0;\n\t}\n}\n\n/*** ERROR HANDLING UTILITIES ***/\n// TODO: generator components which throw errors should be recoverable\nfunction handleChildError<TNode>(\n\tctx: ContextImpl<TNode, unknown, TNode>,\n\terr: unknown,\n): Promise<ElementValue<TNode>> | ElementValue<TNode> {\n\tif (\n\t\tctx.f & IsDone ||\n\t\t!ctx.iterator ||\n\t\ttypeof ctx.iterator.throw !== \"function\"\n\t) {\n\t\tthrow err;\n\t}\n\n\tresumeCtxIterator(ctx);\n\tlet iteration: ChildrenIteration;\n\ttry {\n\t\tctx.f |= IsExecuting;\n\t\titeration = ctx.iterator.throw(err);\n\t} catch (err) {\n\t\tctx.f |= IsDone | IsErrored;\n\t\tthrow err;\n\t} finally {\n\t\tctx.f &= ~IsExecuting;\n\t}\n\n\tif (isPromiseLike(iteration)) {\n\t\treturn iteration.then(\n\t\t\t(iteration) => {\n\t\t\t\tif (iteration.done) {\n\t\t\t\t\tctx.f |= IsDone;\n\t\t\t\t}\n\n\t\t\t\treturn updateComponentChildren(ctx, iteration.value as Children);\n\t\t\t},\n\t\t\t(err) => {\n\t\t\t\tctx.f |= IsDone | IsErrored;\n\t\t\t\tthrow err;\n\t\t\t},\n\t\t);\n\t}\n\n\tif (iteration.done) {\n\t\tctx.f |= IsDone;\n\t}\n\n\treturn updateComponentChildren(ctx, iteration.value as Children);\n}\n\nfunction propagateError<TNode>(\n\tctx: ContextImpl<TNode, unknown, TNode> | undefined,\n\terr: unknown,\n): Promise<ElementValue<TNode>> | ElementValue<TNode> {\n\tif (ctx === undefined) {\n\t\tthrow err;\n\t}\n\n\tlet result: Promise<ElementValue<TNode>> | ElementValue<TNode>;\n\ttry {\n\t\tresult = handleChildError(ctx, err);\n\t} catch (err) {\n\t\treturn propagateError<TNode>(ctx.parent, err);\n\t}\n\n\tif (isPromiseLike(result)) {\n\t\treturn result.catch((err) => propagateError<TNode>(ctx.parent, err));\n\t}\n\n\treturn result;\n}\n\n// TODO: uncomment and use in the Element interface below\n// type CrankElement = Element;\ndeclare global {\n\tnamespace Crank {\n\t\texport interface EventMap {}\n\n\t\texport interface ProvisionMap {}\n\n\t\texport interface Context {}\n\t}\n\n\tnamespace JSX {\n\t\t// TODO: JSX Element type (the result of JSX expressions) don’t work\n\t\t// because TypeScript demands that all Components return JSX elements for\n\t\t// some reason.\n\t\t// interface Element extends CrankElement {}\n\n\t\texport interface IntrinsicElements {\n\t\t\t[tag: string]: any;\n\t\t}\n\n\t\texport interface ElementChildrenAttribute {\n\t\t\tchildren: {};\n\t\t}\n\t}\n}\n\n// Some JSX transpilation tools expect these functions to be defined on the\n// default export. Prefer named exports when importing directly.\nexport default {createElement, Fragment};\n"],"names":[],"mappings":"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"}