@timo9378/flow2code 0.1.4 → 0.1.5

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/dist/compiler.cjs CHANGED
@@ -2093,7 +2093,7 @@ function generateNodeChainDAG(writer, triggerId, context) {
2093
2093
  generateNodeBody(writer, node, context);
2094
2094
  });
2095
2095
  writer.writeLine(`)();`);
2096
- writer.writeLine(`${promiseVar}.catch(() => {});`);
2096
+ writer.writeLine(`${promiseVar}.catch((err) => { console.error("[Flow2Code DAG Error]", err); });`);
2097
2097
  writer.blankLine();
2098
2098
  }
2099
2099
  if (dagNodeIds.length > 0) {
@@ -2166,7 +2166,18 @@ function generateNodeBody(writer, node, context) {
2166
2166
  const plugin = context.pluginRegistry.get(node.nodeType);
2167
2167
  if (plugin) {
2168
2168
  const pluginCtx = createPluginContext(context);
2169
- plugin.generate(node, writer, pluginCtx);
2169
+ try {
2170
+ plugin.generate(node, writer, pluginCtx);
2171
+ } catch (err) {
2172
+ const errMsg = err instanceof Error ? err.message : String(err);
2173
+ const stack = err instanceof Error ? err.stack : void 0;
2174
+ throw new Error(
2175
+ `[flow2code] Plugin "${node.nodeType}" threw an error while generating node "${node.label}" (${node.id}):
2176
+ ${errMsg}` + (stack ? `
2177
+ Stack: ${stack}` : ""),
2178
+ { cause: err }
2179
+ );
2180
+ }
2170
2181
  } else {
2171
2182
  throw new Error(
2172
2183
  `[flow2code] Unsupported node type: "${node.nodeType}". Register a plugin via pluginRegistry.register() or use a built-in node type.`
@@ -2174,6 +2185,13 @@ function generateNodeBody(writer, node, context) {
2174
2185
  }
2175
2186
  }
2176
2187
  function createPluginContext(context) {
2188
+ const pendingChildBlockIds = [];
2189
+ const applyChildBlockRegistration = (nodeId) => {
2190
+ pendingChildBlockIds.push(nodeId);
2191
+ context.childBlockNodeIds.add(nodeId);
2192
+ context.symbolTableExclusions.add(nodeId);
2193
+ context.generatedBlockNodeIds.add(nodeId);
2194
+ };
2177
2195
  return {
2178
2196
  ir: context.ir,
2179
2197
  nodeMap: context.nodeMap,
@@ -2199,9 +2217,7 @@ function createPluginContext(context) {
2199
2217
  return resolveEnvVars(url, context);
2200
2218
  },
2201
2219
  generateChildNode(writer, node) {
2202
- context.childBlockNodeIds.add(node.id);
2203
- context.symbolTableExclusions.add(node.id);
2204
- context.generatedBlockNodeIds.add(node.id);
2220
+ applyChildBlockRegistration(node.id);
2205
2221
  writer.writeLine(`// --- ${node.label} (${node.nodeType}) [${node.id}] ---`);
2206
2222
  generateNodeBody(writer, node, context);
2207
2223
  generateBlockContinuation(writer, node.id, context);
@@ -2245,27 +2261,27 @@ function collectRequiredPackages(ir, context) {
2245
2261
  function buildSourceMap(code, ir, filePath) {
2246
2262
  const lines = code.split("\n");
2247
2263
  const mappings = {};
2248
- const nodeMarkerRegex = /^[\s]*\/\/ --- .+? \(.+?\) \[(.+?)\] ---$/;
2264
+ const validNodeIds = new Set(ir.nodes.map((n) => n.id));
2249
2265
  let currentNodeId = null;
2250
2266
  let currentStartLine = 0;
2251
2267
  for (let i = 0; i < lines.length; i++) {
2252
2268
  const lineNum = i + 1;
2253
- const match = lines[i].match(nodeMarkerRegex);
2254
- if (match) {
2255
- if (currentNodeId) {
2256
- mappings[currentNodeId] = {
2257
- startLine: currentStartLine,
2258
- endLine: lineNum - 1
2259
- };
2260
- }
2261
- const [, nodeId] = match;
2262
- if (ir.nodes.some((n) => n.id === nodeId)) {
2263
- currentNodeId = nodeId;
2264
- currentStartLine = lineNum;
2265
- } else {
2266
- currentNodeId = null;
2267
- }
2269
+ const line = lines[i];
2270
+ const bracketOpen = line.indexOf("[");
2271
+ const bracketClose = line.indexOf("] ---", bracketOpen);
2272
+ if (bracketOpen === -1 || bracketClose === -1) continue;
2273
+ const trimmed = line.trimStart();
2274
+ if (!trimmed.startsWith("//")) continue;
2275
+ const candidateId = line.slice(bracketOpen + 1, bracketClose);
2276
+ if (!validNodeIds.has(candidateId)) continue;
2277
+ if (currentNodeId) {
2278
+ mappings[currentNodeId] = {
2279
+ startLine: currentStartLine,
2280
+ endLine: lineNum - 1
2281
+ };
2268
2282
  }
2283
+ currentNodeId = candidateId;
2284
+ currentStartLine = lineNum;
2269
2285
  }
2270
2286
  if (currentNodeId) {
2271
2287
  mappings[currentNodeId] = {
package/dist/compiler.js CHANGED
@@ -2026,7 +2026,7 @@ function generateNodeChainDAG(writer, triggerId, context) {
2026
2026
  generateNodeBody(writer, node, context);
2027
2027
  });
2028
2028
  writer.writeLine(`)();`);
2029
- writer.writeLine(`${promiseVar}.catch(() => {});`);
2029
+ writer.writeLine(`${promiseVar}.catch((err) => { console.error("[Flow2Code DAG Error]", err); });`);
2030
2030
  writer.blankLine();
2031
2031
  }
2032
2032
  if (dagNodeIds.length > 0) {
@@ -2099,7 +2099,18 @@ function generateNodeBody(writer, node, context) {
2099
2099
  const plugin = context.pluginRegistry.get(node.nodeType);
2100
2100
  if (plugin) {
2101
2101
  const pluginCtx = createPluginContext(context);
2102
- plugin.generate(node, writer, pluginCtx);
2102
+ try {
2103
+ plugin.generate(node, writer, pluginCtx);
2104
+ } catch (err) {
2105
+ const errMsg = err instanceof Error ? err.message : String(err);
2106
+ const stack = err instanceof Error ? err.stack : void 0;
2107
+ throw new Error(
2108
+ `[flow2code] Plugin "${node.nodeType}" threw an error while generating node "${node.label}" (${node.id}):
2109
+ ${errMsg}` + (stack ? `
2110
+ Stack: ${stack}` : ""),
2111
+ { cause: err }
2112
+ );
2113
+ }
2103
2114
  } else {
2104
2115
  throw new Error(
2105
2116
  `[flow2code] Unsupported node type: "${node.nodeType}". Register a plugin via pluginRegistry.register() or use a built-in node type.`
@@ -2107,6 +2118,13 @@ function generateNodeBody(writer, node, context) {
2107
2118
  }
2108
2119
  }
2109
2120
  function createPluginContext(context) {
2121
+ const pendingChildBlockIds = [];
2122
+ const applyChildBlockRegistration = (nodeId) => {
2123
+ pendingChildBlockIds.push(nodeId);
2124
+ context.childBlockNodeIds.add(nodeId);
2125
+ context.symbolTableExclusions.add(nodeId);
2126
+ context.generatedBlockNodeIds.add(nodeId);
2127
+ };
2110
2128
  return {
2111
2129
  ir: context.ir,
2112
2130
  nodeMap: context.nodeMap,
@@ -2132,9 +2150,7 @@ function createPluginContext(context) {
2132
2150
  return resolveEnvVars(url, context);
2133
2151
  },
2134
2152
  generateChildNode(writer, node) {
2135
- context.childBlockNodeIds.add(node.id);
2136
- context.symbolTableExclusions.add(node.id);
2137
- context.generatedBlockNodeIds.add(node.id);
2153
+ applyChildBlockRegistration(node.id);
2138
2154
  writer.writeLine(`// --- ${node.label} (${node.nodeType}) [${node.id}] ---`);
2139
2155
  generateNodeBody(writer, node, context);
2140
2156
  generateBlockContinuation(writer, node.id, context);
@@ -2178,27 +2194,27 @@ function collectRequiredPackages(ir, context) {
2178
2194
  function buildSourceMap(code, ir, filePath) {
2179
2195
  const lines = code.split("\n");
2180
2196
  const mappings = {};
2181
- const nodeMarkerRegex = /^[\s]*\/\/ --- .+? \(.+?\) \[(.+?)\] ---$/;
2197
+ const validNodeIds = new Set(ir.nodes.map((n) => n.id));
2182
2198
  let currentNodeId = null;
2183
2199
  let currentStartLine = 0;
2184
2200
  for (let i = 0; i < lines.length; i++) {
2185
2201
  const lineNum = i + 1;
2186
- const match = lines[i].match(nodeMarkerRegex);
2187
- if (match) {
2188
- if (currentNodeId) {
2189
- mappings[currentNodeId] = {
2190
- startLine: currentStartLine,
2191
- endLine: lineNum - 1
2192
- };
2193
- }
2194
- const [, nodeId] = match;
2195
- if (ir.nodes.some((n) => n.id === nodeId)) {
2196
- currentNodeId = nodeId;
2197
- currentStartLine = lineNum;
2198
- } else {
2199
- currentNodeId = null;
2200
- }
2202
+ const line = lines[i];
2203
+ const bracketOpen = line.indexOf("[");
2204
+ const bracketClose = line.indexOf("] ---", bracketOpen);
2205
+ if (bracketOpen === -1 || bracketClose === -1) continue;
2206
+ const trimmed = line.trimStart();
2207
+ if (!trimmed.startsWith("//")) continue;
2208
+ const candidateId = line.slice(bracketOpen + 1, bracketClose);
2209
+ if (!validNodeIds.has(candidateId)) continue;
2210
+ if (currentNodeId) {
2211
+ mappings[currentNodeId] = {
2212
+ startLine: currentStartLine,
2213
+ endLine: lineNum - 1
2214
+ };
2201
2215
  }
2216
+ currentNodeId = candidateId;
2217
+ currentStartLine = lineNum;
2202
2218
  }
2203
2219
  if (currentNodeId) {
2204
2220
  mappings[currentNodeId] = {
package/dist/server.js CHANGED
@@ -3,7 +3,7 @@
3
3
  // src/server/index.ts
4
4
  import { createServer } from "http";
5
5
  import { readFile, stat } from "fs/promises";
6
- import { join as join2, extname, dirname as dirname2 } from "path";
6
+ import { join as join2, extname, dirname as dirname2, resolve as resolve2 } from "path";
7
7
  import { fileURLToPath } from "url";
8
8
  import { existsSync as existsSync2 } from "fs";
9
9
 
@@ -1979,7 +1979,7 @@ function generateNodeChainDAG(writer, triggerId, context) {
1979
1979
  generateNodeBody(writer, node, context);
1980
1980
  });
1981
1981
  writer.writeLine(`)();`);
1982
- writer.writeLine(`${promiseVar}.catch(() => {});`);
1982
+ writer.writeLine(`${promiseVar}.catch((err) => { console.error("[Flow2Code DAG Error]", err); });`);
1983
1983
  writer.blankLine();
1984
1984
  }
1985
1985
  if (dagNodeIds.length > 0) {
@@ -2052,7 +2052,18 @@ function generateNodeBody(writer, node, context) {
2052
2052
  const plugin = context.pluginRegistry.get(node.nodeType);
2053
2053
  if (plugin) {
2054
2054
  const pluginCtx = createPluginContext(context);
2055
- plugin.generate(node, writer, pluginCtx);
2055
+ try {
2056
+ plugin.generate(node, writer, pluginCtx);
2057
+ } catch (err) {
2058
+ const errMsg = err instanceof Error ? err.message : String(err);
2059
+ const stack = err instanceof Error ? err.stack : void 0;
2060
+ throw new Error(
2061
+ `[flow2code] Plugin "${node.nodeType}" threw an error while generating node "${node.label}" (${node.id}):
2062
+ ${errMsg}` + (stack ? `
2063
+ Stack: ${stack}` : ""),
2064
+ { cause: err }
2065
+ );
2066
+ }
2056
2067
  } else {
2057
2068
  throw new Error(
2058
2069
  `[flow2code] Unsupported node type: "${node.nodeType}". Register a plugin via pluginRegistry.register() or use a built-in node type.`
@@ -2060,6 +2071,13 @@ function generateNodeBody(writer, node, context) {
2060
2071
  }
2061
2072
  }
2062
2073
  function createPluginContext(context) {
2074
+ const pendingChildBlockIds = [];
2075
+ const applyChildBlockRegistration = (nodeId) => {
2076
+ pendingChildBlockIds.push(nodeId);
2077
+ context.childBlockNodeIds.add(nodeId);
2078
+ context.symbolTableExclusions.add(nodeId);
2079
+ context.generatedBlockNodeIds.add(nodeId);
2080
+ };
2063
2081
  return {
2064
2082
  ir: context.ir,
2065
2083
  nodeMap: context.nodeMap,
@@ -2085,9 +2103,7 @@ function createPluginContext(context) {
2085
2103
  return resolveEnvVars(url, context);
2086
2104
  },
2087
2105
  generateChildNode(writer, node) {
2088
- context.childBlockNodeIds.add(node.id);
2089
- context.symbolTableExclusions.add(node.id);
2090
- context.generatedBlockNodeIds.add(node.id);
2106
+ applyChildBlockRegistration(node.id);
2091
2107
  writer.writeLine(`// --- ${node.label} (${node.nodeType}) [${node.id}] ---`);
2092
2108
  generateNodeBody(writer, node, context);
2093
2109
  generateBlockContinuation(writer, node.id, context);
@@ -2131,27 +2147,27 @@ function collectRequiredPackages(ir, context) {
2131
2147
  function buildSourceMap(code, ir, filePath) {
2132
2148
  const lines = code.split("\n");
2133
2149
  const mappings = {};
2134
- const nodeMarkerRegex = /^[\s]*\/\/ --- .+? \(.+?\) \[(.+?)\] ---$/;
2150
+ const validNodeIds = new Set(ir.nodes.map((n) => n.id));
2135
2151
  let currentNodeId = null;
2136
2152
  let currentStartLine = 0;
2137
2153
  for (let i = 0; i < lines.length; i++) {
2138
2154
  const lineNum = i + 1;
2139
- const match = lines[i].match(nodeMarkerRegex);
2140
- if (match) {
2141
- if (currentNodeId) {
2142
- mappings[currentNodeId] = {
2143
- startLine: currentStartLine,
2144
- endLine: lineNum - 1
2145
- };
2146
- }
2147
- const [, nodeId] = match;
2148
- if (ir.nodes.some((n) => n.id === nodeId)) {
2149
- currentNodeId = nodeId;
2150
- currentStartLine = lineNum;
2151
- } else {
2152
- currentNodeId = null;
2153
- }
2155
+ const line = lines[i];
2156
+ const bracketOpen = line.indexOf("[");
2157
+ const bracketClose = line.indexOf("] ---", bracketOpen);
2158
+ if (bracketOpen === -1 || bracketClose === -1) continue;
2159
+ const trimmed = line.trimStart();
2160
+ if (!trimmed.startsWith("//")) continue;
2161
+ const candidateId = line.slice(bracketOpen + 1, bracketClose);
2162
+ if (!validNodeIds.has(candidateId)) continue;
2163
+ if (currentNodeId) {
2164
+ mappings[currentNodeId] = {
2165
+ startLine: currentStartLine,
2166
+ endLine: lineNum - 1
2167
+ };
2154
2168
  }
2169
+ currentNodeId = candidateId;
2170
+ currentStartLine = lineNum;
2155
2171
  }
2156
2172
  if (currentNodeId) {
2157
2173
  mappings[currentNodeId] = {
@@ -3687,6 +3703,66 @@ function handleDecompile(body) {
3687
3703
  }
3688
3704
  }
3689
3705
 
3706
+ // src/lib/logger.ts
3707
+ import pc from "picocolors";
3708
+ var LEVEL_ORDER = {
3709
+ debug: 0,
3710
+ info: 1,
3711
+ warn: 2,
3712
+ error: 3,
3713
+ silent: 4
3714
+ };
3715
+ var Logger = class {
3716
+ /** Minimum log level (default: "info"). Set to "silent" to suppress all output. */
3717
+ level = "info";
3718
+ /** Prefix for all log lines (default: "[flow2code]") */
3719
+ prefix = "[flow2code]";
3720
+ shouldLog(level) {
3721
+ return LEVEL_ORDER[level] >= LEVEL_ORDER[this.level];
3722
+ }
3723
+ debug(...args) {
3724
+ if (!this.shouldLog("debug")) return;
3725
+ console.log(pc.gray(`${this.prefix} ${pc.dim("DEBUG")}`), ...args);
3726
+ }
3727
+ info(...args) {
3728
+ if (!this.shouldLog("info")) return;
3729
+ console.log(pc.blue(`${this.prefix}`), ...args);
3730
+ }
3731
+ success(...args) {
3732
+ if (!this.shouldLog("info")) return;
3733
+ console.log(pc.green(`${this.prefix} \u2705`), ...args);
3734
+ }
3735
+ warn(...args) {
3736
+ if (!this.shouldLog("warn")) return;
3737
+ console.warn(pc.yellow(`${this.prefix} \u26A0\uFE0F`), ...args);
3738
+ }
3739
+ error(...args) {
3740
+ if (!this.shouldLog("error")) return;
3741
+ console.error(pc.red(`${this.prefix} \u274C`), ...args);
3742
+ }
3743
+ /** Print a blank line (respects silent mode) */
3744
+ blank() {
3745
+ if (!this.shouldLog("info")) return;
3746
+ console.log();
3747
+ }
3748
+ /** Print raw text without prefix (respects silent mode) */
3749
+ raw(...args) {
3750
+ if (!this.shouldLog("info")) return;
3751
+ console.log(...args);
3752
+ }
3753
+ /** Formatted key-value line for startup banners */
3754
+ kv(key, value) {
3755
+ if (!this.shouldLog("info")) return;
3756
+ console.log(` ${pc.dim("\u251C\u2500")} ${pc.bold(key)} ${value}`);
3757
+ }
3758
+ /** Last key-value line (uses └─) */
3759
+ kvLast(key, value) {
3760
+ if (!this.shouldLog("info")) return;
3761
+ console.log(` ${pc.dim("\u2514\u2500")} ${pc.bold(key)} ${value}`);
3762
+ }
3763
+ };
3764
+ var logger = new Logger();
3765
+
3690
3766
  // src/server/index.ts
3691
3767
  var __filename = fileURLToPath(import.meta.url);
3692
3768
  var __dirname = dirname2(__filename);
@@ -3768,7 +3844,7 @@ function sendJson(res, status, body) {
3768
3844
  }
3769
3845
  var MAX_BODY_SIZE = 2 * 1024 * 1024;
3770
3846
  async function readBody(req) {
3771
- return new Promise((resolve2, reject) => {
3847
+ return new Promise((resolve3, reject) => {
3772
3848
  const chunks = [];
3773
3849
  let totalSize = 0;
3774
3850
  req.on("data", (chunk) => {
@@ -3780,7 +3856,7 @@ async function readBody(req) {
3780
3856
  }
3781
3857
  chunks.push(chunk);
3782
3858
  });
3783
- req.on("end", () => resolve2(Buffer.concat(chunks).toString("utf-8")));
3859
+ req.on("end", () => resolve3(Buffer.concat(chunks).toString("utf-8")));
3784
3860
  req.on("error", reject);
3785
3861
  });
3786
3862
  }
@@ -3789,7 +3865,13 @@ async function parseJsonBody(req) {
3789
3865
  return JSON.parse(raw);
3790
3866
  }
3791
3867
  async function serveStatic(staticDir, pathname, res) {
3792
- let filePath = join2(staticDir, pathname === "/" ? "index.html" : pathname);
3868
+ const decodedPath = decodeURIComponent(pathname);
3869
+ let filePath = join2(staticDir, decodedPath === "/" ? "index.html" : decodedPath);
3870
+ const resolvedPath = resolve2(filePath);
3871
+ const resolvedStaticDir = resolve2(staticDir);
3872
+ if (!resolvedPath.startsWith(resolvedStaticDir + (resolvedStaticDir.endsWith("/") || resolvedStaticDir.endsWith("\\") ? "" : process.platform === "win32" ? "\\" : "/"))) {
3873
+ return false;
3874
+ }
3793
3875
  if (!extname(filePath)) {
3794
3876
  filePath += ".html";
3795
3877
  }
@@ -3877,7 +3959,7 @@ function startServer(options = {}) {
3877
3959
  const projectRoot = options.projectRoot ?? process.cwd();
3878
3960
  const server = createServer((req, res) => {
3879
3961
  handleRequest(req, res, staticDir, projectRoot).catch((err) => {
3880
- console.error("[flow2code] Internal error:", err);
3962
+ logger.error("Internal error:", err);
3881
3963
  res.writeHead(500, { "Content-Type": "text/plain" });
3882
3964
  res.end("Internal Server Error");
3883
3965
  });
@@ -3888,20 +3970,20 @@ function startServer(options = {}) {
3888
3970
  if (options.onReady) {
3889
3971
  options.onReady(url);
3890
3972
  } else {
3891
- console.log(`
3892
- \u{1F680} Flow2Code Dev Server`);
3893
- console.log(` \u251C\u2500 Local: ${url}`);
3894
- console.log(` \u251C\u2500 API: ${url}/api/compile`);
3895
- console.log(` \u251C\u2500 Static: ${staticDir}`);
3896
- console.log(` \u2514\u2500 Project: ${projectRoot}`);
3973
+ logger.blank();
3974
+ logger.info("Flow2Code Dev Server");
3975
+ logger.kv("Local:", url);
3976
+ logger.kv("API:", `${url}/api/compile`);
3977
+ logger.kv("Static:", staticDir);
3978
+ logger.kvLast("Project:", projectRoot);
3897
3979
  if (!hasUI) {
3898
- console.log();
3899
- console.log(` \u26A0\uFE0F UI files not found (out/index.html missing).`);
3900
- console.log(` The API endpoints still work, but the visual editor won't load.`);
3901
- console.log(` To fix: run "pnpm build:ui" in the flow2code source directory,`);
3902
- console.log(` or reinstall from npm: npm i @timo9378/flow2code@latest`);
3980
+ logger.blank();
3981
+ logger.warn("UI files not found (out/index.html missing).");
3982
+ logger.raw(" The API endpoints still work, but the visual editor won't load.");
3983
+ logger.raw(' To fix: run "pnpm build:ui" in the flow2code source directory,');
3984
+ logger.raw(" or reinstall from npm: npm i @timo9378/flow2code@latest");
3903
3985
  }
3904
- console.log();
3986
+ logger.blank();
3905
3987
  }
3906
3988
  });
3907
3989
  return server;
package/out/404.html CHANGED
@@ -1 +1 @@
1
- <!DOCTYPE html><!--OIo5LFjdea8u6u4evHHQo--><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\":\"OIo5LFjdea8u6u4evHHQo\",\"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><!--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>
@@ -4,7 +4,7 @@
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":"OIo5LFjdea8u6u4evHHQo","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":"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}
8
8
  4:{}
9
9
  5:"$0:rsc:props:children:0:props:serverProvidedParams:params"
10
10
  8:null
@@ -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":"OIo5LFjdea8u6u4evHHQo","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":"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}
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":"OIo5LFjdea8u6u4evHHQo","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":"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}
@@ -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":"OIo5LFjdea8u6u4evHHQo","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":"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}
@@ -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":"OIo5LFjdea8u6u4evHHQo","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":"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}