{
  "version": 3,
  "sources": ["../../src/document/generated-tree-library/src/benchmarks.ts", "../../src/utils/ModulesRuntimeContext.ts"],
  "sourcesContent": ["import { treeLibrary } from \"document/models/CanvasTree/FastTreeLibrary.ts\"\nimport type { CanvasNode, CanvasTree, NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { nodeFromValue, resetFastClone, setupFastClone, valueFromNode } from \"./tree-library.ts\"\n\n// Create a slightly nicer output for tinybench.\nfunction rewriteTable(baseline: number, table: (Record<string, any> | null)[]) {\n\treturn table.map((row: Record<string, any> | null) => {\n\t\tif (!row) return null\n\t\tconst nanos = row[\"Average Time (ns)\"]\n\t\tif (!nanos) return row\n\n\t\tif (row[\"Task Name\"] === \"baseline\") {\n\t\t\trow[\"Faster\"] = \"-\"\n\t\t} else {\n\t\t\tconst millis = nanos / 1000_000\n\t\t\trow[\"Faster\"] = (baseline / millis).toFixed(2)\n\t\t}\n\n\t\tdelete row[\"Margin\"]\n\t\tdelete row[\"Average Time (ns)\"]\n\t\trow[\"Average Time (s)\"] = (nanos / 1000_000_000).toFixed(3)\n\t\treturn row\n\t})\n}\n\nexport async function benchmarkValueFromNode(node: CanvasNode) {\n\tconst { default: Bench } = await import(\"tinybench\")\n\n\tconst bench = new Bench()\n\n\tbench.add(\"baseline\", () => treeLibrary.generics.valueFromNode(node))\n\tbench.add(\"new\", () => valueFromNode(node))\n\n\tawait bench.warmup()\n\tawait bench.run()\n\n\tconst table = rewriteTable(bench.results[0]?.mean ?? 0, bench.table())\n\tconst treeSize = [...node.walk()].length\n\tconsole.log(`Results for serializing ${node.__class} with ${treeSize} nodes`)\n\tconsole.table(table)\n}\n\nexport async function benchmarkNodeFromValue(tree: CanvasTree) {\n\tconst { default: Bench } = await import(\"tinybench\")\n\n\tconst rootValueNode = tree.root.toJS()\n\tlet clonedRootValueNode = rootValueNode\n\tfunction prepare() {\n\t\tclonedRootValueNode = JSON.parse(JSON.stringify(rootValueNode))\n\t}\n\n\tconst bench = new Bench()\n\tbench.add(\"baseline\", () => treeLibrary.generics.nodeFromValue(clonedRootValueNode), { beforeEach: prepare })\n\tbench.add(\"new\", () => nodeFromValue(clonedRootValueNode), { beforeEach: prepare })\n\n\tawait bench.warmup()\n\tawait bench.run()\n\n\tconst table = rewriteTable(bench.results[0]?.mean ?? 0, bench.table())\n\tconst treeSize = tree.size()\n\tconsole.log(`Results for parsing ${treeSize} nodes`)\n\tconsole.table(table)\n}\n\nexport async function benchmarkFastClone(node: CanvasNode) {\n\tconst { default: Bench } = await import(\"tinybench\")\n\n\tconst bench = new Bench({\n\t\titerations: 5,\n\t})\n\tbench.add(\"baseline\", () => node.clone(), { beforeAll: () => resetFastClone() })\n\tbench.add(\"new\", () => node.clone(), { beforeAll: () => setupFastClone() })\n\n\tawait bench.warmup()\n\tawait bench.run()\n\n\tconst table = rewriteTable(bench.results[0]?.mean ?? 0, bench.table())\n\tconst treeSize = [...node.walk()].length\n\tconsole.log(`Results for cloning ${treeSize} nodes`)\n\tconsole.table(table)\n}\n\nexport async function benchmarkTreeAssembling(tree: CanvasTree, scopeIds: NodeID[]) {\n\tconst { loadPartialDocument, loadOneRootChild, TreeAssembler } = await import(\"document/partialDocument.ts\")\n\tconst { VekterEngine } = await import(\"document/VekterEngine.ts\")\n\tconst { DocumentParser, serializeDocument } = await import(\"@framerjs/document-snapshotter\")\n\tconst { default: Bench } = await import(\"tinybench\")\n\n\tconst data = serializeDocument(tree.toJS())\n\tconst parser = new DocumentParser(data)\n\n\tconst assemblePages = () => {\n\t\tconst engine = new VekterEngine()\n\t\tconst partialTree = loadPartialDocument(parser, engine.componentLoader, scopeIds)\n\t\tconst loadedPages = new Map<string, CanvasNode>()\n\t\twhile (!loadOneRootChild(parser, loadedPages)) {\n\t\t\t// nothing\n\t\t}\n\t\tconst assembler = new TreeAssembler(engine, partialTree, loadedPages)\n\t\twhile (!assembler.assembleOnePage()) {\n\t\t\t// nothing\n\t\t}\n\t\tassembler.buildCompleteTree()\n\t}\n\n\tif (!sessionStorage.getItem(\"bench\")) {\n\t\tconsole.log(\"Running once, call with sessionStorage.bench = 1 to use benchmark.\")\n\t\tconsole.time(\"assemblePages\")\n\t\tassemblePages()\n\t\tconsole.timeEnd(\"assemblePages\")\n\t\treturn\n\t}\n\tconst bench = new Bench({})\n\n\tbench.add(\"baseline\", assemblePages)\n\n\tconsole.log(\"warmup\")\n\tawait bench.warmup()\n\tconsole.log(\"run\")\n\tawait bench.run()\n\n\tconst table = rewriteTable(bench.results[0]?.mean ?? 0, bench.table())\n\tconsole.table(table)\n}\n", "import { assert } from \"@framerjs/shared\"\nimport type { ModulesRuntime } from \"modulesRuntime/ModulesRuntime.ts\"\nimport { createContext, useContext } from \"react\"\n\nexport const ModulesRuntimeContext = createContext<ModulesRuntime | undefined>(undefined)\n\nexport function useModulesRuntime(): ModulesRuntime {\n\tconst modulesRuntime = useContext(ModulesRuntimeContext)\n\tassert(\n\t\tmodulesRuntime,\n\t\t\"modulesRuntime is not found in the context, make sure ModulesRuntimeContext.Provider is present in the tree.\",\n\t)\n\n\treturn modulesRuntime\n}\n"],
  "mappings": "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",
  "names": []
}
