@timo9378/flow2code 0.1.5 → 0.1.6

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/CHANGELOG.md CHANGED
@@ -5,6 +5,18 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/).
7
7
 
8
+ ## [0.1.6] — 2026-03-05
9
+
10
+ ### Fixed (Critical)
11
+ - **Compiler uses migratedIR** — `compile()` now uses validator's auto-migrated IR instead of the stale original, preventing silent data corruption on older IR versions
12
+ - **`generateConcurrentNodes` flowState overwrite** — Removed `flowState[nodeId] = rN` overwrite that replaced correct values with `undefined` (task functions already populate flowState internally)
13
+ - **`handleCompile` path traversal** — Added separator suffix to `startsWith()` check, preventing directory-prefix attacks (e.g. `/home/user` → `/home/user2/`)
14
+ - **Undo/Redo snapshot deep clone** — `createSnapshot()` now uses `structuredClone(n.data)` instead of shallow spread, preventing nested mutation from corrupting all snapshots sharing a reference
15
+
16
+ ### Tests
17
+ - Added path traversal regression test, IR migration integration test
18
+ - Test count: 407 tests / 33 test files
19
+
8
20
  ## [0.1.5] — 2026-03-05
9
21
 
10
22
  ### Security
package/dist/cli.js CHANGED
@@ -1822,21 +1822,22 @@ function compile(ir, options) {
1822
1822
  errors: validation.errors.map((e) => `[${e.code}] ${e.message}`)
1823
1823
  };
1824
1824
  }
1825
+ const workingIR = validation.migrated && validation.migratedIR ? validation.migratedIR : ir;
1825
1826
  let plan;
1826
1827
  try {
1827
- plan = topologicalSort(ir);
1828
+ plan = topologicalSort(workingIR);
1828
1829
  } catch (err) {
1829
1830
  return {
1830
1831
  success: false,
1831
1832
  errors: [err instanceof Error ? err.message : String(err)]
1832
1833
  };
1833
1834
  }
1834
- const nodeMap = new Map(ir.nodes.map((n) => [n.id, n]));
1835
+ const nodeMap = new Map(workingIR.nodes.map((n) => [n.id, n]));
1835
1836
  const platformName = options?.platform ?? "nextjs";
1836
1837
  const platform = getPlatform(platformName);
1837
- const symbolTable = buildSymbolTable(ir);
1838
+ const symbolTable = buildSymbolTable(workingIR);
1838
1839
  const context = {
1839
- ir,
1840
+ ir: workingIR,
1840
1841
  plan,
1841
1842
  nodeMap,
1842
1843
  envVars: /* @__PURE__ */ new Set(),
@@ -1853,8 +1854,8 @@ function compile(ir, options) {
1853
1854
  generatedBlockNodeIds: /* @__PURE__ */ new Set(),
1854
1855
  pluginRegistry
1855
1856
  };
1856
- const trigger = ir.nodes.find((n) => n.category === "trigger" /* TRIGGER */);
1857
- const preComputedBlockNodes = computeControlFlowDescendants(ir, trigger.id);
1857
+ const trigger = workingIR.nodes.find((n) => n.category === "trigger" /* TRIGGER */);
1858
+ const preComputedBlockNodes = computeControlFlowDescendants(workingIR, trigger.id);
1858
1859
  for (const nodeId of preComputedBlockNodes) {
1859
1860
  context.childBlockNodeIds.add(nodeId);
1860
1861
  context.symbolTableExclusions.add(nodeId);
@@ -1864,7 +1865,7 @@ function compile(ir, options) {
1864
1865
  );
1865
1866
  if (hasConcurrency) {
1866
1867
  context.dagMode = true;
1867
- for (const node of ir.nodes) {
1868
+ for (const node of workingIR.nodes) {
1868
1869
  if (node.category !== "trigger" /* TRIGGER */) {
1869
1870
  context.symbolTableExclusions.add(node.id);
1870
1871
  }
@@ -1879,8 +1880,8 @@ function compile(ir, options) {
1879
1880
  });
1880
1881
  const code = sourceFile.getFullText();
1881
1882
  const filePath = platform.getOutputFilePath(trigger);
1882
- collectRequiredPackages(ir, context);
1883
- const sourceMap = buildSourceMap(code, ir, filePath);
1883
+ collectRequiredPackages(workingIR, context);
1884
+ const sourceMap = buildSourceMap(code, workingIR, filePath);
1884
1885
  const dependencies = {
1885
1886
  all: [...context.requiredPackages].sort(),
1886
1887
  missing: [...context.requiredPackages].sort(),
@@ -2129,11 +2130,8 @@ function generateConcurrentNodes(writer, nodeIds, context) {
2129
2130
  writer.writeLine(";");
2130
2131
  }
2131
2132
  writer.writeLine(
2132
- `const [${taskNames.map((_, i) => `r${i}`).join(", ")}] = await Promise.all([${taskNames.map((t) => `${t}()`).join(", ")}]);`
2133
+ `await Promise.all([${taskNames.map((t) => `${t}()`).join(", ")}]);`
2133
2134
  );
2134
- activeNodeIds.forEach((nodeId, i) => {
2135
- writer.writeLine(`flowState['${nodeId}'] = r${i};`);
2136
- });
2137
2135
  activeNodeIds.forEach((nodeId) => {
2138
2136
  const varName = context.symbolTable.getVarName(nodeId);
2139
2137
  writer.writeLine(`const ${varName} = flowState['${nodeId}'];`);
@@ -3707,7 +3705,9 @@ function handleCompile(body, projectRoot) {
3707
3705
  let writtenPath = null;
3708
3706
  if (shouldWrite && result.filePath && result.code) {
3709
3707
  const fullPath = resolve(join2(projectRoot, result.filePath));
3710
- if (!fullPath.startsWith(resolve(projectRoot))) {
3708
+ const resolvedRoot = resolve(projectRoot);
3709
+ const sep = resolvedRoot.endsWith("/") || resolvedRoot.endsWith("\\") ? "" : process.platform === "win32" ? "\\" : "/";
3710
+ if (!fullPath.startsWith(resolvedRoot + sep)) {
3711
3711
  return {
3712
3712
  status: 400,
3713
3713
  body: { success: false, error: "Output path escapes project root" }
package/dist/compiler.cjs CHANGED
@@ -1831,21 +1831,22 @@ function compile(ir, options) {
1831
1831
  errors: validation.errors.map((e) => `[${e.code}] ${e.message}`)
1832
1832
  };
1833
1833
  }
1834
+ const workingIR = validation.migrated && validation.migratedIR ? validation.migratedIR : ir;
1834
1835
  let plan;
1835
1836
  try {
1836
- plan = topologicalSort(ir);
1837
+ plan = topologicalSort(workingIR);
1837
1838
  } catch (err) {
1838
1839
  return {
1839
1840
  success: false,
1840
1841
  errors: [err instanceof Error ? err.message : String(err)]
1841
1842
  };
1842
1843
  }
1843
- const nodeMap = new Map(ir.nodes.map((n) => [n.id, n]));
1844
+ const nodeMap = new Map(workingIR.nodes.map((n) => [n.id, n]));
1844
1845
  const platformName = options?.platform ?? "nextjs";
1845
1846
  const platform = getPlatform(platformName);
1846
- const symbolTable = buildSymbolTable(ir);
1847
+ const symbolTable = buildSymbolTable(workingIR);
1847
1848
  const context = {
1848
- ir,
1849
+ ir: workingIR,
1849
1850
  plan,
1850
1851
  nodeMap,
1851
1852
  envVars: /* @__PURE__ */ new Set(),
@@ -1862,8 +1863,8 @@ function compile(ir, options) {
1862
1863
  generatedBlockNodeIds: /* @__PURE__ */ new Set(),
1863
1864
  pluginRegistry
1864
1865
  };
1865
- const trigger = ir.nodes.find((n) => n.category === "trigger" /* TRIGGER */);
1866
- const preComputedBlockNodes = computeControlFlowDescendants(ir, trigger.id);
1866
+ const trigger = workingIR.nodes.find((n) => n.category === "trigger" /* TRIGGER */);
1867
+ const preComputedBlockNodes = computeControlFlowDescendants(workingIR, trigger.id);
1867
1868
  for (const nodeId of preComputedBlockNodes) {
1868
1869
  context.childBlockNodeIds.add(nodeId);
1869
1870
  context.symbolTableExclusions.add(nodeId);
@@ -1873,7 +1874,7 @@ function compile(ir, options) {
1873
1874
  );
1874
1875
  if (hasConcurrency) {
1875
1876
  context.dagMode = true;
1876
- for (const node of ir.nodes) {
1877
+ for (const node of workingIR.nodes) {
1877
1878
  if (node.category !== "trigger" /* TRIGGER */) {
1878
1879
  context.symbolTableExclusions.add(node.id);
1879
1880
  }
@@ -1888,8 +1889,8 @@ function compile(ir, options) {
1888
1889
  });
1889
1890
  const code = sourceFile.getFullText();
1890
1891
  const filePath = platform.getOutputFilePath(trigger);
1891
- collectRequiredPackages(ir, context);
1892
- const sourceMap = buildSourceMap(code, ir, filePath);
1892
+ collectRequiredPackages(workingIR, context);
1893
+ const sourceMap = buildSourceMap(code, workingIR, filePath);
1893
1894
  const dependencies = {
1894
1895
  all: [...context.requiredPackages].sort(),
1895
1896
  missing: [...context.requiredPackages].sort(),
@@ -2143,11 +2144,8 @@ function generateConcurrentNodes(writer, nodeIds, context) {
2143
2144
  writer.writeLine(";");
2144
2145
  }
2145
2146
  writer.writeLine(
2146
- `const [${taskNames.map((_, i) => `r${i}`).join(", ")}] = await Promise.all([${taskNames.map((t) => `${t}()`).join(", ")}]);`
2147
+ `await Promise.all([${taskNames.map((t) => `${t}()`).join(", ")}]);`
2147
2148
  );
2148
- activeNodeIds.forEach((nodeId, i) => {
2149
- writer.writeLine(`flowState['${nodeId}'] = r${i};`);
2150
- });
2151
2149
  activeNodeIds.forEach((nodeId) => {
2152
2150
  const varName = context.symbolTable.getVarName(nodeId);
2153
2151
  writer.writeLine(`const ${varName} = flowState['${nodeId}'];`);
package/dist/compiler.js CHANGED
@@ -1764,21 +1764,22 @@ function compile(ir, options) {
1764
1764
  errors: validation.errors.map((e) => `[${e.code}] ${e.message}`)
1765
1765
  };
1766
1766
  }
1767
+ const workingIR = validation.migrated && validation.migratedIR ? validation.migratedIR : ir;
1767
1768
  let plan;
1768
1769
  try {
1769
- plan = topologicalSort(ir);
1770
+ plan = topologicalSort(workingIR);
1770
1771
  } catch (err) {
1771
1772
  return {
1772
1773
  success: false,
1773
1774
  errors: [err instanceof Error ? err.message : String(err)]
1774
1775
  };
1775
1776
  }
1776
- const nodeMap = new Map(ir.nodes.map((n) => [n.id, n]));
1777
+ const nodeMap = new Map(workingIR.nodes.map((n) => [n.id, n]));
1777
1778
  const platformName = options?.platform ?? "nextjs";
1778
1779
  const platform = getPlatform(platformName);
1779
- const symbolTable = buildSymbolTable(ir);
1780
+ const symbolTable = buildSymbolTable(workingIR);
1780
1781
  const context = {
1781
- ir,
1782
+ ir: workingIR,
1782
1783
  plan,
1783
1784
  nodeMap,
1784
1785
  envVars: /* @__PURE__ */ new Set(),
@@ -1795,8 +1796,8 @@ function compile(ir, options) {
1795
1796
  generatedBlockNodeIds: /* @__PURE__ */ new Set(),
1796
1797
  pluginRegistry
1797
1798
  };
1798
- const trigger = ir.nodes.find((n) => n.category === "trigger" /* TRIGGER */);
1799
- const preComputedBlockNodes = computeControlFlowDescendants(ir, trigger.id);
1799
+ const trigger = workingIR.nodes.find((n) => n.category === "trigger" /* TRIGGER */);
1800
+ const preComputedBlockNodes = computeControlFlowDescendants(workingIR, trigger.id);
1800
1801
  for (const nodeId of preComputedBlockNodes) {
1801
1802
  context.childBlockNodeIds.add(nodeId);
1802
1803
  context.symbolTableExclusions.add(nodeId);
@@ -1806,7 +1807,7 @@ function compile(ir, options) {
1806
1807
  );
1807
1808
  if (hasConcurrency) {
1808
1809
  context.dagMode = true;
1809
- for (const node of ir.nodes) {
1810
+ for (const node of workingIR.nodes) {
1810
1811
  if (node.category !== "trigger" /* TRIGGER */) {
1811
1812
  context.symbolTableExclusions.add(node.id);
1812
1813
  }
@@ -1821,8 +1822,8 @@ function compile(ir, options) {
1821
1822
  });
1822
1823
  const code = sourceFile.getFullText();
1823
1824
  const filePath = platform.getOutputFilePath(trigger);
1824
- collectRequiredPackages(ir, context);
1825
- const sourceMap = buildSourceMap(code, ir, filePath);
1825
+ collectRequiredPackages(workingIR, context);
1826
+ const sourceMap = buildSourceMap(code, workingIR, filePath);
1826
1827
  const dependencies = {
1827
1828
  all: [...context.requiredPackages].sort(),
1828
1829
  missing: [...context.requiredPackages].sort(),
@@ -2076,11 +2077,8 @@ function generateConcurrentNodes(writer, nodeIds, context) {
2076
2077
  writer.writeLine(";");
2077
2078
  }
2078
2079
  writer.writeLine(
2079
- `const [${taskNames.map((_, i) => `r${i}`).join(", ")}] = await Promise.all([${taskNames.map((t) => `${t}()`).join(", ")}]);`
2080
+ `await Promise.all([${taskNames.map((t) => `${t}()`).join(", ")}]);`
2080
2081
  );
2081
- activeNodeIds.forEach((nodeId, i) => {
2082
- writer.writeLine(`flowState['${nodeId}'] = r${i};`);
2083
- });
2084
2082
  activeNodeIds.forEach((nodeId) => {
2085
2083
  const varName = context.symbolTable.getVarName(nodeId);
2086
2084
  writer.writeLine(`const ${varName} = flowState['${nodeId}'];`);
package/dist/server.js CHANGED
@@ -1717,21 +1717,22 @@ function compile(ir, options) {
1717
1717
  errors: validation.errors.map((e) => `[${e.code}] ${e.message}`)
1718
1718
  };
1719
1719
  }
1720
+ const workingIR = validation.migrated && validation.migratedIR ? validation.migratedIR : ir;
1720
1721
  let plan;
1721
1722
  try {
1722
- plan = topologicalSort(ir);
1723
+ plan = topologicalSort(workingIR);
1723
1724
  } catch (err) {
1724
1725
  return {
1725
1726
  success: false,
1726
1727
  errors: [err instanceof Error ? err.message : String(err)]
1727
1728
  };
1728
1729
  }
1729
- const nodeMap = new Map(ir.nodes.map((n) => [n.id, n]));
1730
+ const nodeMap = new Map(workingIR.nodes.map((n) => [n.id, n]));
1730
1731
  const platformName = options?.platform ?? "nextjs";
1731
1732
  const platform = getPlatform(platformName);
1732
- const symbolTable = buildSymbolTable(ir);
1733
+ const symbolTable = buildSymbolTable(workingIR);
1733
1734
  const context = {
1734
- ir,
1735
+ ir: workingIR,
1735
1736
  plan,
1736
1737
  nodeMap,
1737
1738
  envVars: /* @__PURE__ */ new Set(),
@@ -1748,8 +1749,8 @@ function compile(ir, options) {
1748
1749
  generatedBlockNodeIds: /* @__PURE__ */ new Set(),
1749
1750
  pluginRegistry
1750
1751
  };
1751
- const trigger = ir.nodes.find((n) => n.category === "trigger" /* TRIGGER */);
1752
- const preComputedBlockNodes = computeControlFlowDescendants(ir, trigger.id);
1752
+ const trigger = workingIR.nodes.find((n) => n.category === "trigger" /* TRIGGER */);
1753
+ const preComputedBlockNodes = computeControlFlowDescendants(workingIR, trigger.id);
1753
1754
  for (const nodeId of preComputedBlockNodes) {
1754
1755
  context.childBlockNodeIds.add(nodeId);
1755
1756
  context.symbolTableExclusions.add(nodeId);
@@ -1759,7 +1760,7 @@ function compile(ir, options) {
1759
1760
  );
1760
1761
  if (hasConcurrency) {
1761
1762
  context.dagMode = true;
1762
- for (const node of ir.nodes) {
1763
+ for (const node of workingIR.nodes) {
1763
1764
  if (node.category !== "trigger" /* TRIGGER */) {
1764
1765
  context.symbolTableExclusions.add(node.id);
1765
1766
  }
@@ -1774,8 +1775,8 @@ function compile(ir, options) {
1774
1775
  });
1775
1776
  const code = sourceFile.getFullText();
1776
1777
  const filePath = platform.getOutputFilePath(trigger);
1777
- collectRequiredPackages(ir, context);
1778
- const sourceMap = buildSourceMap(code, ir, filePath);
1778
+ collectRequiredPackages(workingIR, context);
1779
+ const sourceMap = buildSourceMap(code, workingIR, filePath);
1779
1780
  const dependencies = {
1780
1781
  all: [...context.requiredPackages].sort(),
1781
1782
  missing: [...context.requiredPackages].sort(),
@@ -2029,11 +2030,8 @@ function generateConcurrentNodes(writer, nodeIds, context) {
2029
2030
  writer.writeLine(";");
2030
2031
  }
2031
2032
  writer.writeLine(
2032
- `const [${taskNames.map((_, i) => `r${i}`).join(", ")}] = await Promise.all([${taskNames.map((t) => `${t}()`).join(", ")}]);`
2033
+ `await Promise.all([${taskNames.map((t) => `${t}()`).join(", ")}]);`
2033
2034
  );
2034
- activeNodeIds.forEach((nodeId, i) => {
2035
- writer.writeLine(`flowState['${nodeId}'] = r${i};`);
2036
- });
2037
2035
  activeNodeIds.forEach((nodeId) => {
2038
2036
  const varName = context.symbolTable.getVarName(nodeId);
2039
2037
  writer.writeLine(`const ${varName} = flowState['${nodeId}'];`);
@@ -3485,7 +3483,9 @@ function handleCompile(body, projectRoot) {
3485
3483
  let writtenPath = null;
3486
3484
  if (shouldWrite && result.filePath && result.code) {
3487
3485
  const fullPath = resolve(join(projectRoot, result.filePath));
3488
- if (!fullPath.startsWith(resolve(projectRoot))) {
3486
+ const resolvedRoot = resolve(projectRoot);
3487
+ const sep = resolvedRoot.endsWith("/") || resolvedRoot.endsWith("\\") ? "" : process.platform === "win32" ? "\\" : "/";
3488
+ if (!fullPath.startsWith(resolvedRoot + sep)) {
3489
3489
  return {
3490
3490
  status: 400,
3491
3491
  body: { success: false, error: "Output path escapes project root" }
package/out/404.html CHANGED
@@ -1 +1 @@
1
- <!DOCTYPE html><!--qqgjMH_XFks_bLx9gn_yB--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/83ab8820627f8bfe.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/b6e8711267bccbbd.js"/><script src="/_next/static/chunks/fbca595129527827.js" async=""></script><script src="/_next/static/chunks/ab8888d4b78b94be.js" async=""></script><script src="/_next/static/chunks/turbopack-576234c945ffdc44.js" async=""></script><script src="/_next/static/chunks/acf223168ac429f7.js" async=""></script><script src="/_next/static/chunks/b163b5d7cccbcf42.js" async=""></script><script src="/_next/static/chunks/6b84376656bd9887.js" async=""></script><script src="/_next/static/chunks/b112c2f519e4b429.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>Flow2Code | Visual AST Compiler</title><meta name="description" content="Visual backend logic generator: compile canvas nodes directly into native TypeScript code"/><link rel="manifest" href="/site.webmanifest"/><link rel="icon" href="/favicon.ico" sizes="any"/><link rel="icon" href="/favicon-16x16.png" sizes="16x16" type="image/png"/><link rel="icon" href="/favicon-32x32.png" sizes="32x32" type="image/png"/><link rel="apple-touch-icon" href="/apple-touch-icon.png"/><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body class="antialiased overflow-hidden"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/b6e8711267bccbbd.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[46798,[\"/_next/static/chunks/acf223168ac429f7.js\"],\"TooltipProvider\"]\n3:I[95731,[\"/_next/static/chunks/b163b5d7cccbcf42.js\",\"/_next/static/chunks/6b84376656bd9887.js\"],\"default\"]\n4:I[58298,[\"/_next/static/chunks/acf223168ac429f7.js\",\"/_next/static/chunks/b112c2f519e4b429.js\"],\"default\"]\n5:I[32294,[\"/_next/static/chunks/b163b5d7cccbcf42.js\",\"/_next/static/chunks/6b84376656bd9887.js\"],\"default\"]\n6:I[5806,[\"/_next/static/chunks/b163b5d7cccbcf42.js\",\"/_next/static/chunks/6b84376656bd9887.js\"],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\n9:I[5806,[\"/_next/static/chunks/b163b5d7cccbcf42.js\",\"/_next/static/chunks/6b84376656bd9887.js\"],\"ViewportBoundary\"]\nb:I[5806,[\"/_next/static/chunks/b163b5d7cccbcf42.js\",\"/_next/static/chunks/6b84376656bd9887.js\"],\"MetadataBoundary\"]\nd:I[63491,[\"/_next/static/chunks/b163b5d7cccbcf42.js\",\"/_next/static/chunks/6b84376656bd9887.js\"],\"default\"]\n:HL[\"/_next/static/chunks/83ab8820627f8bfe.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"qqgjMH_XFks-bLx9gn_yB\",\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/83ab8820627f8bfe.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/acf223168ac429f7.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"className\":\"antialiased overflow-hidden\",\"children\":[\"$\",\"$L2\",null,{\"delayDuration\":200,\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$4\",\"errorStyles\":[],\"errorScripts\":[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/b112c2f519e4b429.js\",\"async\":true}]],\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L9\",null,{\"children\":\"$La\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lc\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$d\",[]],\"S\":true}\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"e:I[22192,[\"/_next/static/chunks/b163b5d7cccbcf42.js\",\"/_next/static/chunks/6b84376656bd9887.js\"],\"IconMark\"]\n8:null\nc:[[\"$\",\"title\",\"0\",{\"children\":\"Flow2Code | Visual AST Compiler\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Visual backend logic generator: compile canvas nodes directly into native TypeScript code\"}],[\"$\",\"link\",\"2\",{\"rel\":\"manifest\",\"href\":\"/site.webmanifest\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\",\"sizes\":\"any\"}],[\"$\",\"link\",\"4\",{\"rel\":\"icon\",\"href\":\"/favicon-16x16.png\",\"sizes\":\"16x16\",\"type\":\"image/png\"}],[\"$\",\"link\",\"5\",{\"rel\":\"icon\",\"href\":\"/favicon-32x32.png\",\"sizes\":\"32x32\",\"type\":\"image/png\"}],[\"$\",\"link\",\"6\",{\"rel\":\"apple-touch-icon\",\"href\":\"/apple-touch-icon.png\"}],[\"$\",\"$Le\",\"7\",{}]]\n"])</script></body></html>
1
+ <!DOCTYPE html><!--wFX9tOZWtEdER7XrtbgHQ--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/83ab8820627f8bfe.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/b6e8711267bccbbd.js"/><script src="/_next/static/chunks/fbca595129527827.js" async=""></script><script src="/_next/static/chunks/ab8888d4b78b94be.js" async=""></script><script src="/_next/static/chunks/turbopack-576234c945ffdc44.js" async=""></script><script src="/_next/static/chunks/acf223168ac429f7.js" async=""></script><script src="/_next/static/chunks/b163b5d7cccbcf42.js" async=""></script><script src="/_next/static/chunks/6b84376656bd9887.js" async=""></script><script src="/_next/static/chunks/b112c2f519e4b429.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>Flow2Code | Visual AST Compiler</title><meta name="description" content="Visual backend logic generator: compile canvas nodes directly into native TypeScript code"/><link rel="manifest" href="/site.webmanifest"/><link rel="icon" href="/favicon.ico" sizes="any"/><link rel="icon" href="/favicon-16x16.png" sizes="16x16" type="image/png"/><link rel="icon" href="/favicon-32x32.png" sizes="32x32" type="image/png"/><link rel="apple-touch-icon" href="/apple-touch-icon.png"/><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body class="antialiased overflow-hidden"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/b6e8711267bccbbd.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[46798,[\"/_next/static/chunks/acf223168ac429f7.js\"],\"TooltipProvider\"]\n3:I[95731,[\"/_next/static/chunks/b163b5d7cccbcf42.js\",\"/_next/static/chunks/6b84376656bd9887.js\"],\"default\"]\n4:I[58298,[\"/_next/static/chunks/acf223168ac429f7.js\",\"/_next/static/chunks/b112c2f519e4b429.js\"],\"default\"]\n5:I[32294,[\"/_next/static/chunks/b163b5d7cccbcf42.js\",\"/_next/static/chunks/6b84376656bd9887.js\"],\"default\"]\n6:I[5806,[\"/_next/static/chunks/b163b5d7cccbcf42.js\",\"/_next/static/chunks/6b84376656bd9887.js\"],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\n9:I[5806,[\"/_next/static/chunks/b163b5d7cccbcf42.js\",\"/_next/static/chunks/6b84376656bd9887.js\"],\"ViewportBoundary\"]\nb:I[5806,[\"/_next/static/chunks/b163b5d7cccbcf42.js\",\"/_next/static/chunks/6b84376656bd9887.js\"],\"MetadataBoundary\"]\nd:I[63491,[\"/_next/static/chunks/b163b5d7cccbcf42.js\",\"/_next/static/chunks/6b84376656bd9887.js\"],\"default\"]\n:HL[\"/_next/static/chunks/83ab8820627f8bfe.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"wFX9tOZWtEdER7XrtbgHQ\",\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/83ab8820627f8bfe.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/acf223168ac429f7.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"className\":\"antialiased overflow-hidden\",\"children\":[\"$\",\"$L2\",null,{\"delayDuration\":200,\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$4\",\"errorStyles\":[],\"errorScripts\":[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/b112c2f519e4b429.js\",\"async\":true}]],\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L9\",null,{\"children\":\"$La\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lc\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$d\",[]],\"S\":true}\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"e:I[22192,[\"/_next/static/chunks/b163b5d7cccbcf42.js\",\"/_next/static/chunks/6b84376656bd9887.js\"],\"IconMark\"]\n8:null\nc:[[\"$\",\"title\",\"0\",{\"children\":\"Flow2Code | Visual AST Compiler\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Visual backend logic generator: compile canvas nodes directly into native TypeScript code\"}],[\"$\",\"link\",\"2\",{\"rel\":\"manifest\",\"href\":\"/site.webmanifest\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\",\"sizes\":\"any\"}],[\"$\",\"link\",\"4\",{\"rel\":\"icon\",\"href\":\"/favicon-16x16.png\",\"sizes\":\"16x16\",\"type\":\"image/png\"}],[\"$\",\"link\",\"5\",{\"rel\":\"icon\",\"href\":\"/favicon-32x32.png\",\"sizes\":\"32x32\",\"type\":\"image/png\"}],[\"$\",\"link\",\"6\",{\"rel\":\"apple-touch-icon\",\"href\":\"/apple-touch-icon.png\"}],[\"$\",\"$Le\",\"7\",{}]]\n"])</script></body></html>
@@ -1,10 +1,10 @@
1
1
  1:"$Sreact.fragment"
2
2
  2:I[55026,["/_next/static/chunks/b163b5d7cccbcf42.js","/_next/static/chunks/6b84376656bd9887.js"],"ClientPageRoot"]
3
- 3:I[52683,["/_next/static/chunks/acf223168ac429f7.js","/_next/static/chunks/5f1a9fec0e69c483.js","/_next/static/chunks/2be31674b47c1089.js"],"default"]
3
+ 3:I[52683,["/_next/static/chunks/acf223168ac429f7.js","/_next/static/chunks/5f1a9fec0e69c483.js","/_next/static/chunks/bfa275b7488d8b70.js"],"default"]
4
4
  6:I[5806,["/_next/static/chunks/b163b5d7cccbcf42.js","/_next/static/chunks/6b84376656bd9887.js"],"OutletBoundary"]
5
5
  7:"$Sreact.suspense"
6
6
  :HL["/_next/static/chunks/8a5bd6fe3abc8091.css","style"]
7
- 0:{"buildId":"qqgjMH_XFks-bLx9gn_yB","rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/8a5bd6fe3abc8091.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/5f1a9fec0e69c483.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/2be31674b47c1089.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"loading":null,"isPartial":false}
7
+ 0:{"buildId":"wFX9tOZWtEdER7XrtbgHQ","rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/8a5bd6fe3abc8091.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/5f1a9fec0e69c483.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/bfa275b7488d8b70.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"loading":null,"isPartial":false}
8
8
  4:{}
9
9
  5:"$0:rsc:props:children:0:props:serverProvidedParams:params"
10
10
  8:null
@@ -4,7 +4,7 @@
4
4
  4:I[58298,["/_next/static/chunks/acf223168ac429f7.js","/_next/static/chunks/b112c2f519e4b429.js"],"default"]
5
5
  5:I[32294,["/_next/static/chunks/b163b5d7cccbcf42.js","/_next/static/chunks/6b84376656bd9887.js"],"default"]
6
6
  6:I[55026,["/_next/static/chunks/b163b5d7cccbcf42.js","/_next/static/chunks/6b84376656bd9887.js"],"ClientPageRoot"]
7
- 7:I[52683,["/_next/static/chunks/acf223168ac429f7.js","/_next/static/chunks/5f1a9fec0e69c483.js","/_next/static/chunks/2be31674b47c1089.js"],"default"]
7
+ 7:I[52683,["/_next/static/chunks/acf223168ac429f7.js","/_next/static/chunks/5f1a9fec0e69c483.js","/_next/static/chunks/bfa275b7488d8b70.js"],"default"]
8
8
  a:I[5806,["/_next/static/chunks/b163b5d7cccbcf42.js","/_next/static/chunks/6b84376656bd9887.js"],"OutletBoundary"]
9
9
  b:"$Sreact.suspense"
10
10
  d:I[5806,["/_next/static/chunks/b163b5d7cccbcf42.js","/_next/static/chunks/6b84376656bd9887.js"],"ViewportBoundary"]
@@ -12,7 +12,7 @@ f:I[5806,["/_next/static/chunks/b163b5d7cccbcf42.js","/_next/static/chunks/6b843
12
12
  11:I[63491,["/_next/static/chunks/b163b5d7cccbcf42.js","/_next/static/chunks/6b84376656bd9887.js"],"default"]
13
13
  :HL["/_next/static/chunks/83ab8820627f8bfe.css","style"]
14
14
  :HL["/_next/static/chunks/8a5bd6fe3abc8091.css","style"]
15
- 0:{"P":null,"b":"qqgjMH_XFks-bLx9gn_yB","c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/83ab8820627f8bfe.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/acf223168ac429f7.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"antialiased overflow-hidden","children":["$","$L2",null,{"delayDuration":200,"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$4","errorStyles":[],"errorScripts":[["$","script","script-0",{"src":"/_next/static/chunks/b112c2f519e4b429.js","async":true}]],"template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":[["$","$1","c",{"children":[["$","$L6",null,{"Component":"$7","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@8","$@9"]}}],[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/8a5bd6fe3abc8091.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/5f1a9fec0e69c483.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/2be31674b47c1089.js","async":true,"nonce":"$undefined"}]],["$","$La",null,{"children":["$","$b",null,{"name":"Next.MetadataOutlet","children":"$@c"}]}]]}],{},null,false,false]},null,false,false],["$","$1","h",{"children":[null,["$","$Ld",null,{"children":"$Le"}],["$","div",null,{"hidden":true,"children":["$","$Lf",null,{"children":["$","$b",null,{"name":"Next.Metadata","children":"$L10"}]}]}],null]}],false]],"m":"$undefined","G":["$11",[]],"S":true}
15
+ 0:{"P":null,"b":"wFX9tOZWtEdER7XrtbgHQ","c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/83ab8820627f8bfe.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/acf223168ac429f7.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"antialiased overflow-hidden","children":["$","$L2",null,{"delayDuration":200,"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$4","errorStyles":[],"errorScripts":[["$","script","script-0",{"src":"/_next/static/chunks/b112c2f519e4b429.js","async":true}]],"template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":[["$","$1","c",{"children":[["$","$L6",null,{"Component":"$7","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@8","$@9"]}}],[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/8a5bd6fe3abc8091.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/5f1a9fec0e69c483.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/bfa275b7488d8b70.js","async":true,"nonce":"$undefined"}]],["$","$La",null,{"children":["$","$b",null,{"name":"Next.MetadataOutlet","children":"$@c"}]}]]}],{},null,false,false]},null,false,false],["$","$1","h",{"children":[null,["$","$Ld",null,{"children":"$Le"}],["$","div",null,{"hidden":true,"children":["$","$Lf",null,{"children":["$","$b",null,{"name":"Next.Metadata","children":"$L10"}]}]}],null]}],false]],"m":"$undefined","G":["$11",[]],"S":true}
16
16
  8:{}
17
17
  9:"$0:f:0:1:1:children:0:props:children:0:props:serverProvidedParams:params"
18
18
  e:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
@@ -3,4 +3,4 @@
3
3
  3:I[5806,["/_next/static/chunks/b163b5d7cccbcf42.js","/_next/static/chunks/6b84376656bd9887.js"],"MetadataBoundary"]
4
4
  4:"$Sreact.suspense"
5
5
  5:I[22192,["/_next/static/chunks/b163b5d7cccbcf42.js","/_next/static/chunks/6b84376656bd9887.js"],"IconMark"]
6
- 0:{"buildId":"qqgjMH_XFks-bLx9gn_yB","rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Flow2Code | Visual AST Compiler"}],["$","meta","1",{"name":"description","content":"Visual backend logic generator: compile canvas nodes directly into native TypeScript code"}],["$","link","2",{"rel":"manifest","href":"/site.webmanifest"}],["$","link","3",{"rel":"icon","href":"/favicon.ico","sizes":"any"}],["$","link","4",{"rel":"icon","href":"/favicon-16x16.png","sizes":"16x16","type":"image/png"}],["$","link","5",{"rel":"icon","href":"/favicon-32x32.png","sizes":"32x32","type":"image/png"}],["$","link","6",{"rel":"apple-touch-icon","href":"/apple-touch-icon.png"}],["$","$L5","7",{}]]}]}]}],null]}],"loading":null,"isPartial":false}
6
+ 0:{"buildId":"wFX9tOZWtEdER7XrtbgHQ","rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Flow2Code | Visual AST Compiler"}],["$","meta","1",{"name":"description","content":"Visual backend logic generator: compile canvas nodes directly into native TypeScript code"}],["$","link","2",{"rel":"manifest","href":"/site.webmanifest"}],["$","link","3",{"rel":"icon","href":"/favicon.ico","sizes":"any"}],["$","link","4",{"rel":"icon","href":"/favicon-16x16.png","sizes":"16x16","type":"image/png"}],["$","link","5",{"rel":"icon","href":"/favicon-32x32.png","sizes":"32x32","type":"image/png"}],["$","link","6",{"rel":"apple-touch-icon","href":"/apple-touch-icon.png"}],["$","$L5","7",{}]]}]}]}],null]}],"loading":null,"isPartial":false}
@@ -4,4 +4,4 @@
4
4
  4:I[58298,["/_next/static/chunks/acf223168ac429f7.js","/_next/static/chunks/b112c2f519e4b429.js"],"default"]
5
5
  5:I[32294,["/_next/static/chunks/b163b5d7cccbcf42.js","/_next/static/chunks/6b84376656bd9887.js"],"default"]
6
6
  :HL["/_next/static/chunks/83ab8820627f8bfe.css","style"]
7
- 0:{"buildId":"qqgjMH_XFks-bLx9gn_yB","rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/83ab8820627f8bfe.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/acf223168ac429f7.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"antialiased overflow-hidden","children":["$","$L2",null,{"delayDuration":200,"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$4","errorStyles":[],"errorScripts":[["$","script","script-0",{"src":"/_next/static/chunks/b112c2f519e4b429.js","async":true}]],"template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]]}],"loading":null,"isPartial":false}
7
+ 0:{"buildId":"wFX9tOZWtEdER7XrtbgHQ","rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/83ab8820627f8bfe.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/acf223168ac429f7.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"antialiased overflow-hidden","children":["$","$L2",null,{"delayDuration":200,"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$4","errorStyles":[],"errorScripts":[["$","script","script-0",{"src":"/_next/static/chunks/b112c2f519e4b429.js","async":true}]],"template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]]}],"loading":null,"isPartial":false}
@@ -1,3 +1,3 @@
1
1
  :HL["/_next/static/chunks/83ab8820627f8bfe.css","style"]
2
2
  :HL["/_next/static/chunks/8a5bd6fe3abc8091.css","style"]
3
- 0:{"buildId":"qqgjMH_XFks-bLx9gn_yB","tree":{"name":"","paramType":null,"paramKey":"","hasRuntimePrefetch":false,"slots":{"children":{"name":"__PAGE__","paramType":null,"paramKey":"__PAGE__","hasRuntimePrefetch":false,"slots":null,"isRootLayout":false}},"isRootLayout":true},"staleTime":300}
3
+ 0:{"buildId":"wFX9tOZWtEdER7XrtbgHQ","tree":{"name":"","paramType":null,"paramKey":"","hasRuntimePrefetch":false,"slots":{"children":{"name":"__PAGE__","paramType":null,"paramKey":"__PAGE__","hasRuntimePrefetch":false,"slots":null,"isRootLayout":false}},"isRootLayout":true},"staleTime":300}