@fnet/cli 0.112.1 → 0.113.0
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/fbin/index.js +1 -1
- package/dist/fnet/index.BraqWHnP.js +1 -0
- package/dist/fnet/index.CuMyez3E.js +1 -0
- package/dist/fnet/index.DWpw12No.js +1 -0
- package/dist/fnet/index.PNP2oTpU.js +1 -0
- package/dist/fnet/index.js +1 -1
- package/dist/fnode/index.6_yfJqit.js +1 -0
- package/dist/fnode/index.BwO0ciN2.js +1 -0
- package/dist/fnode/index.C13sJvOd.js +1 -0
- package/dist/fnode/index.CuMyez3E.js +1 -0
- package/dist/fnode/index.DWpw12No.js +1 -0
- package/dist/fnode/{index.D5QuQuJX.js → index.DfFj3RoG.js} +1 -1
- package/dist/fnode/{index.B_EoIJV1.js → index.HuSUGVCc.js} +1 -1
- package/dist/fnode/index.js +1 -1
- package/dist/fnode/index.xPP3GBoc.js +1 -0
- package/dist/frun/index.js +1 -125
- package/package.json +1 -1
- package/dist/fnet/index.B3bzhxbL.js +0 -1
- package/dist/fnode/index.axpuK8O5.js +0 -1
- package/dist/fnode/index.teSOwugt.js +0 -1
- package/dist/fnode/index.uvOH1EJS.js +0 -1
package/dist/fbin/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import e from"node:path";import{fileURLToPath as o}from"node:url";import s from"chalk";import t from"yargs";import{hideBin as n}from"yargs/helpers";import r from"node:fs";import l from"node:os";import i from"@fnet/prompt";import{promisify as a}from"node:util";import c from"tree-kill";function d(){return e.join(l.homedir(),".fnet","bin")}function h(){return e.join(l.homedir(),".fnet","metadata")}function m(){return e.join(h(),"binaries.json")}function p(){try{if("win32"===process.platform)return process.env.PSModulePath&&process.env.PSModulePath.includes("PowerShell")?"powershell-core":process.env.PSModulePath?"powershell":"cmd";const o=process.env.SHELL||"";return o.includes("bash")?"bash":o.includes("zsh")?"zsh":o.includes("fish")?"fish":o.includes("ksh")?"ksh":o.includes("csh")||o.includes("tcsh")?"csh":r.existsSync(e.join(l.homedir(),".bashrc"))?"bash":r.existsSync(e.join(l.homedir(),".zshrc"))?"zsh":r.existsSync(e.join(l.homedir(),".config","fish","config.fish"))?"fish":"unknown"}catch(e){return"unknown"}}function f(o){const s=l.homedir(),t=[];switch(o){case"bash":t.push({name:".bashrc",path:e.join(s,".bashrc")}),t.push({name:".bash_profile",path:e.join(s,".bash_profile")}),t.push({name:".profile",path:e.join(s,".profile")});break;case"zsh":t.push({name:".zshrc",path:e.join(s,".zshrc")}),t.push({name:".zprofile",path:e.join(s,".zprofile")});break;case"fish":t.push({name:"config.fish",path:e.join(s,".config","fish","config.fish")});break;case"ksh":t.push({name:".kshrc",path:e.join(s,".kshrc")}),t.push({name:".profile",path:e.join(s,".profile")});break;case"csh":t.push({name:".cshrc",path:e.join(s,".cshrc")}),t.push({name:".tcshrc",path:e.join(s,".tcshrc")});break;case"powershell":t.push({name:"Microsoft.PowerShell_profile.ps1",path:e.join(s,"Documents","WindowsPowerShell","Microsoft.PowerShell_profile.ps1")}),t.push({name:"profile.ps1",path:e.join(s,"Documents","WindowsPowerShell","profile.ps1")});break;case"powershell-core":t.push({name:"Microsoft.PowerShell_profile.ps1",path:e.join(s,"Documents","PowerShell","Microsoft.PowerShell_profile.ps1")}),t.push({name:"profile.ps1",path:e.join(s,"Documents","PowerShell","profile.ps1")});break;case"cmd":t.push({name:"fnet-path.bat",path:e.join(s,"fnet-path.bat")})}return t}function u(e,o){switch(e){case"bash":case"zsh":case"ksh":default:return`export PATH="${o}:$PATH"`;case"fish":return`set -gx PATH ${o} $PATH`;case"csh":return`setenv PATH ${o}:$PATH`;case"powershell":case"powershell-core":return`$env:PATH = "${o};" + $env:PATH`;case"cmd":return`@echo off\nSETX PATH "%PATH%;${o}"\necho Path updated successfully`}}var y={getBinDirectory:d,getMetadataDirectory:h,getMetadataFilePath:m,checkIfInPath:function(o){return(process.env.PATH||"").split(e.delimiter).includes(o)},detectUserShell:p,getShellConfigPath:function(){const e=f(p());for(const o of e)if(r.existsSync(o.path))return o.path;return e.length>0?e[0].path:null},getAllShellConfigPaths:f,createBinDirectoryStructure:async function(){const e=d(),o=h(),s=m();r.existsSync(e)||r.mkdirSync(e,{recursive:!0}),r.existsSync(o)||r.mkdirSync(o,{recursive:!0}),r.existsSync(s)||r.writeFileSync(s,JSON.stringify({binaries:{},lastUpdated:(new Date).toISOString()},null,2))},getExportPathCommand:u,addBinToPath:async function(o,t,n){try{const l=u(o,n);if("cmd"===o)return r.writeFileSync(t,l),console.log(s.yellow(`Created batch file at ${t}`)),console.log(s.yellow("Run this file to add the bin directory to your PATH")),!0;if("powershell"!==o&&"powershell-core"!==o||r.existsSync(e.dirname(t))||r.mkdirSync(e.dirname(t),{recursive:!0}),!r.existsSync(t)){const e="fish"===o?"# Fish shell configuration\n\n":"powershell"===o||"powershell-core"===o?"# PowerShell profile\n\n":"# Shell configuration\n\n";r.writeFileSync(t,e),console.log(s.green(`Created config file at ${t}`))}const i=r.readFileSync(t,"utf8");if(i.includes(n))return!0;const a=`${i.trim()}\n\n# Added by @fnet/cli\n${l}\n`;return r.writeFileSync(t,a),"powershell"!==o&&"powershell-core"!==o||(console.log(s.yellow("You may need to set the PowerShell execution policy to run scripts:")),console.log(s.green("Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned"))),!0}catch(e){return console.error(s.red(`Failed to add bin directory to PATH: ${e.message}`)),!1}}};var g={command:"setup",describe:"Initialize the bin system",builder:{},handler:async o=>{try{console.log(s.blue("Setting up the bin system...")),await y.createBinDirectoryStructure();const o=y.getBinDirectory();console.log(s.green(`Bin directory: ${o}`));if(y.checkIfInPath(o))console.log(s.green("Bin directory is already in PATH."));else{console.log(s.yellow("Bin directory is not in PATH."));const{confirmAddToPath:t}=await i({type:"confirm",name:"confirmAddToPath",message:`Would you like to add ${o} to your PATH?`,initial:!0});if(t){let t=y.detectUserShell();if("unknown"===t){const{selectedShell:e}=await i({type:"select",name:"selectedShell",message:"Select your shell:",choices:[{name:"bash",message:"Bash"},{name:"zsh",message:"Zsh"},{name:"fish",message:"Fish"},{name:"powershell",message:"PowerShell"},{name:"powershell-core",message:"PowerShell Core"},{name:"cmd",message:"Windows Command Prompt"},{name:"ksh",message:"Korn Shell (ksh)"},{name:"csh",message:"C Shell (csh/tcsh)"}]});t=e}else{const{confirmShell:e}=await i({type:"confirm",name:"confirmShell",message:`Detected shell: ${t}. Is this correct?`,initial:!0});if(!e){const{selectedShell:e}=await i({type:"select",name:"selectedShell",message:"Select your shell:",choices:[{name:"bash",message:"Bash"},{name:"zsh",message:"Zsh"},{name:"fish",message:"Fish"},{name:"powershell",message:"PowerShell"},{name:"powershell-core",message:"PowerShell Core"},{name:"cmd",message:"Windows Command Prompt"},{name:"ksh",message:"Korn Shell (ksh)"},{name:"csh",message:"C Shell (csh/tcsh)"}]});t=e}}const n=y.getAllShellConfigPaths(t);let a;if(n.length>1){const e=n.filter((e=>r.existsSync(e.path)));if(e.length>0){const{selectedConfigPath:o}=await i({type:"select",name:"selectedConfigPath",message:"Select the configuration file to modify:",choices:e.map((e=>({name:e.path,message:`${e.name} (${e.path})`})))});a=o}else{const{selectedConfigPath:e}=await i({type:"select",name:"selectedConfigPath",message:"Select the configuration file to create:",choices:n.map((e=>({name:e.path,message:`${e.name} (${e.path})`})))});a=e}}else if(1===n.length)a=n[0].path;else{const{enteredConfigPath:o}=await i({type:"input",name:"enteredConfigPath",message:"Enter the path to your shell configuration file:",initial:e.join(l.homedir(),".bashrc")});a=o}await y.addBinToPath(t,a,o)?(console.log(s.green(`Added bin directory to PATH in ${a}`)),console.log(s.yellow("Please restart your terminal or run the following command:")),console.log(s.green(`source ${a}`))):(console.log(s.red(`Failed to add bin directory to PATH in ${a}`)),console.log(s.yellow("You can add it manually by adding the following line to your shell configuration:")),console.log(s.green(y.getExportPathCommand(t,o))))}else console.log(s.yellow("You can add it manually by adding the following line to your shell configuration:")),console.log(s.green(`export PATH="${o}:$PATH"`)),console.log(s.yellow("Or run:")),console.log(s.green("fbin path"))}console.log(s.green("Bin system setup completed successfully."))}catch(e){console.error(s.red(`Failed to set up bin system: ${e.message}`)),process.exit(1)}}};var w={command:"path",describe:"Add bin directory to PATH",builder:{yes:{describe:"Automatically answer yes to all prompts",type:"boolean",default:!1,alias:"y"}},handler:async o=>{try{const t=y.getBinDirectory();console.log(s.blue(`Adding ${t} to PATH...`)),y.createBinDirectoryStructure()||(console.log(s.yellow("Creating bin directory structure...")),await y.createBinDirectoryStructure());if(y.checkIfInPath(t))return void console.log(s.green("Bin directory is already in PATH."));let n=y.detectUserShell();if("unknown"===n)if(o.yes)n="win32"===process.platform?"powershell":"bash",console.log(s.yellow(`Auto-selecting ${n} shell due to --yes flag`));else{const{selectedShell:e}=await i({type:"select",name:"selectedShell",message:"Select your shell:",choices:[{name:"bash",message:"Bash"},{name:"zsh",message:"Zsh"},{name:"fish",message:"Fish"},{name:"powershell",message:"PowerShell"},{name:"powershell-core",message:"PowerShell Core"},{name:"cmd",message:"Windows Command Prompt"},{name:"ksh",message:"Korn Shell (ksh)"},{name:"csh",message:"C Shell (csh/tcsh)"}]});n=e}else if(o.yes)console.log(s.yellow(`Auto-confirming detected shell: ${n} due to --yes flag`));else{const{confirmShell:e}=await i({type:"confirm",name:"confirmShell",message:`Detected shell: ${n}. Is this correct?`,initial:!0});if(!e){const{selectedShell:e}=await i({type:"select",name:"selectedShell",message:"Select your shell:",choices:[{name:"bash",message:"Bash"},{name:"zsh",message:"Zsh"},{name:"fish",message:"Fish"},{name:"powershell",message:"PowerShell"},{name:"powershell-core",message:"PowerShell Core"},{name:"cmd",message:"Windows Command Prompt"},{name:"ksh",message:"Korn Shell (ksh)"},{name:"csh",message:"C Shell (csh/tcsh)"}]});n=e}}const a=y.getAllShellConfigPaths(n);let c;if(a.length>1){const e=a.filter((e=>r.existsSync(e.path)));if(e.length>0)if(o.yes)c=e[0].path,console.log(s.yellow(`Auto-selecting config file: ${c} due to --yes flag`));else{const{selectedConfigPath:o}=await i({type:"select",name:"selectedConfigPath",message:"Select the configuration file to modify:",choices:e.map((e=>({name:e.path,message:`${e.name} (${e.path})`})))});c=o}else if(o.yes)c=a[0].path,console.log(s.yellow(`Auto-selecting config file to create: ${c} due to --yes flag`));else{const{selectedConfigPath:e}=await i({type:"select",name:"selectedConfigPath",message:"Select the configuration file to create:",choices:a.map((e=>({name:e.path,message:`${e.name} (${e.path})`})))});c=e}}else if(1===a.length)c=a[0].path;else if(o.yes)c=e.join(l.homedir(),"win32"===process.platform?"_profile":".bashrc"),console.log(s.yellow(`Auto-selecting default config file: ${c} due to --yes flag`));else{const{enteredConfigPath:o}=await i({type:"input",name:"enteredConfigPath",message:"Enter the path to your shell configuration file:",initial:e.join(l.homedir(),".bashrc")});c=o}await y.addBinToPath(n,c,t)?(console.log(s.green(`Added bin directory to PATH in ${c}`)),console.log(s.yellow("Please restart your terminal or run the following command:")),console.log(s.green(`source ${c}`))):(console.log(s.red(`Failed to add bin directory to PATH in ${c}`)),console.log(s.yellow("You can add it manually by adding the following line to your shell configuration:")),console.log(s.green(y.getExportPathCommand(n,t))))}catch(e){console.error(s.red(`Failed to add bin directory to PATH: ${e.message}`)),process.exit(1)}}};var b={command:"compile [source] [options]",describe:"Compile a CLI project to a binary",builder:{source:{describe:"Source file to compile",type:"string",default:"./dist/cli/esm/index.js"},output:{describe:"Output file name",type:"string",alias:"o"},name:{describe:"Binary name",type:"string",alias:"n"},force:{describe:"Force overwrite if binary already exists",type:"boolean",default:!1,alias:"f"},target:{describe:"Target platform (auto, linux, macos, windows)",type:"string",choices:["auto","linux","macos","windows"],default:"auto"},minify:{describe:"Minify the output binary",type:"boolean",default:!0},external:{describe:"External packages to exclude from the bundle (comma-separated)",type:"string"}},handler:async o=>{try{const t=process.cwd(),n=e.basename(t),l=o.name||n;let a;if(o.output)a=o.output;else{const o=e.join(t,".bin");r.existsSync(o)||r.mkdirSync(o,{recursive:!0}),a=e.join(o,l)}const c=e.resolve(process.cwd(),o.source);if(r.existsSync(c)||(console.error(s.red(`Source file not found: ${c}`)),console.error(s.yellow("Make sure to build your project first.")),process.exit(1)),r.existsSync(a)&&!o.force){const{confirmOverwrite:e}=await i({type:"confirm",name:"confirmOverwrite",message:`Binary already exists at ${a}. Overwrite?`,initial:!1});if(!e)return void console.log(s.yellow("Compilation cancelled."))}const d=process.platform;console.log(s.blue(`Detected platform: ${d}`)),"win32"!==d||a.endsWith(".exe")||(a=`${a}.exe`,console.log(s.blue(`Adjusted output path for Windows: ${a}`))),console.log(s.blue(`Compiling ${c} to ${a}...`));const{spawn:h}=await import("child_process");try{const e=h("bun",["--version"],{stdio:"pipe"});await new Promise(((o,s)=>{e.on("close",(e=>{0===e?o():s(new Error("Bun is not available. Please install Bun first."))})),e.on("error",(e=>{s(new Error(`Bun is not available: ${e.message}`))}))}))}catch(e){console.error(s.red(`Bun is not available: ${e.message}`)),console.error(s.yellow("Please install Bun first: https://bun.sh/")),process.exit(1)}const m=["build",c,"--compile",`--outfile=${a}`];if(o.target&&"auto"!==o.target&&m.push(`--target=${o.target}`),!1===o.minify&&m.push("--no-minify"),o.external){o.external.split(",").map((e=>e.trim())).forEach((e=>{m.push(`--external:${e}`)}))}console.log(s.blue(`Running: bun ${m.join(" ")}`));const p=h("bun",m,{stdio:"inherit"});await new Promise(((e,o)=>{p.on("close",(s=>{0===s?e():o(new Error(`Compilation failed with code ${s}`))})),p.on("error",(e=>{o(e)}))})),"win32"!==d&&r.chmodSync(a,493),console.log(s.green(`Binary compiled successfully: ${a}`)),"win32"===d?console.log(s.yellow("Note: On Windows, you may need to run the binary from a command prompt or PowerShell.")):"darwin"===d&&console.log(s.yellow("Note: On macOS, you may need to allow the binary to run in System Preferences > Security & Privacy."))}catch(e){console.error(s.red(`Failed to compile binary: ${e.message}`)),process.exit(1)}}};var S={command:"install [source] [options]",describe:"Install a binary to the bin directory",builder:{source:{describe:"Source binary to install",type:"string",demandOption:!0},name:{describe:"Name to use for the installed binary",type:"string",alias:"n"},version:{describe:"Version of the binary",type:"string",alias:"v"},force:{describe:"Force overwrite if binary already exists",type:"boolean",default:!1,alias:"f"},yes:{describe:"Automatically answer yes to all prompts",type:"boolean",default:!1,alias:"y"}},handler:async o=>{try{const t=e.resolve(process.cwd(),o.source);r.existsSync(t)||(console.error(s.red(`Source file not found: ${t}`)),process.exit(1)),await y.createBinDirectoryStructure();const n=y.getBinDirectory();let l;l=o.name?o.name:e.basename(t),"win32"!==process.platform||l.endsWith(".exe")||(l=`${l}.exe`);const a=e.join(n,l);if(r.existsSync(a)&&!o.force&&!o.yes){const{confirmOverwrite:e}=await i({type:"confirm",name:"confirmOverwrite",message:`Binary already exists at ${a}. Overwrite?`,initial:!1});if(!e)return void console.log(s.yellow("Installation cancelled."))}console.log(s.blue(`Installing ${t} to ${a}...`)),r.copyFileSync(t,a),"win32"!==process.platform&&r.chmodSync(a,493);const c=y.getMetadataFilePath();let d={binaries:{},lastUpdated:(new Date).toISOString()};if(r.existsSync(c))try{d=JSON.parse(r.readFileSync(c,"utf8"))}catch(e){console.warn(s.yellow(`Failed to parse metadata file: ${e.message}`)),console.warn(s.yellow("Creating new metadata file."))}d.binaries[l]={path:a,source:t,created:(new Date).toISOString(),platform:process.platform,version:o.version||"0.0.0",project:e.basename(process.cwd())},d.lastUpdated=(new Date).toISOString(),r.writeFileSync(c,JSON.stringify(d,null,2)),console.log(s.green(`Binary installed successfully: ${a}`));y.checkIfInPath(n)?console.log(s.green(`You can now run '${l}' from anywhere.`)):console.log(s.yellow("Bin directory is not in PATH. Run 'fbin path' to add it."))}catch(e){console.error(s.red(`Failed to install binary: ${e.message}`)),process.exit(1)}}};var P={command:"uninstall [name] [options]",describe:"Uninstall a binary from the bin directory",builder:{name:{describe:"Name of the binary to uninstall",type:"string",demandOption:!0},force:{describe:"Skip confirmation prompt",type:"boolean",default:!1,alias:"f"},yes:{describe:"Automatically answer yes to all prompts",type:"boolean",default:!1,alias:"y"}},handler:async e=>{try{const o=y.getBinDirectory(),t=y.getMetadataFilePath();let n;r.existsSync(o)||(console.error(s.red(`Bin directory not found: ${o}`)),console.error(s.yellow("Run fbin setup first.")),process.exit(1)),r.existsSync(t)||(console.error(s.red(`Metadata file not found: ${t}`)),console.error(s.yellow("Run fbin setup first.")),process.exit(1));try{n=JSON.parse(r.readFileSync(t,"utf8"))}catch(e){console.error(s.red(`Failed to parse metadata file: ${e.message}`)),process.exit(1)}const l=e.name;n.binaries[l]||(console.error(s.red(`Binary not found in metadata: ${l}`)),console.log(s.yellow("Use fbin list to see installed binaries.")),process.exit(1));const a=n.binaries[l].path;if(r.existsSync(a)||(console.warn(s.yellow(`Binary file not found: ${a}`)),console.warn(s.yellow("Metadata will be updated anyway."))),!e.force&&!e.yes){const{confirmUninstall:e}=await i({type:"confirm",name:"confirmUninstall",message:`Are you sure you want to uninstall ${l}?`,initial:!1});if(!e)return void console.log(s.yellow("Uninstallation cancelled."))}if(r.existsSync(a))try{r.unlinkSync(a),console.log(s.green(`Binary file removed: ${a}`))}catch(e){console.error(s.red(`Failed to remove binary file: ${e.message}`))}delete n.binaries[l],n.lastUpdated=(new Date).toISOString(),r.writeFileSync(t,JSON.stringify(n,null,2)),console.log(s.green(`Binary uninstalled successfully: ${l}`))}catch(e){console.error(s.red(`Failed to uninstall binary: ${e.message}`)),process.exit(1)}}};var $={command:"list [options]",describe:"List installed binaries",builder:{json:{describe:"Output in JSON format",type:"boolean",default:!1,alias:"j"},filter:{describe:"Filter binaries by name",type:"string",alias:"f"}},handler:async e=>{try{const o=y.getBinDirectory(),t=y.getMetadataFilePath();let n;r.existsSync(o)||(console.error(s.red(`Bin directory not found: ${o}`)),console.error(s.yellow("Run fbin setup first.")),process.exit(1)),r.existsSync(t)||(console.error(s.red(`Metadata file not found: ${t}`)),console.error(s.yellow("Run fbin setup first.")),process.exit(1));try{n=JSON.parse(r.readFileSync(t,"utf8"))}catch(e){console.error(s.red(`Failed to parse metadata file: ${e.message}`)),process.exit(1)}let l=n.binaries;if(e.filter){const o=e.filter.toLowerCase();l=Object.entries(l).filter((([e])=>e.toLowerCase().includes(o))).reduce(((e,[o,s])=>(e[o]=s,e)),{})}if(e.json)return void console.log(JSON.stringify(l,null,2));const i=Object.keys(l).length;if(0===i)return void console.log(s.yellow("No binaries installed."));console.log(s.blue(`Found ${i} installed binaries:`)),console.log();const a=Math.max(...Object.keys(l).map((e=>e.length)),4),c=Math.max(...Object.values(l).map((e=>(e.version||"N/A").length)),7),d=Math.max(...Object.values(l).map((e=>(e.platform||"N/A").length)),8);console.log(s.green("NAME".padEnd(a+2))+s.green("VERSION".padEnd(c+2))+s.green("PLATFORM".padEnd(d+2))+s.green("CREATED")),console.log("─".repeat(a+2)+"─".repeat(c+2)+"─".repeat(d+2)+"─".repeat(20)),Object.entries(l).forEach((([e,o])=>{const t=new Date(o.created).toLocaleString();console.log(s.white(e.padEnd(a+2))+s.yellow((o.version||"N/A").padEnd(c+2))+s.cyan((o.platform||"N/A").padEnd(d+2))+s.gray(t))})),console.log(),console.log(s.blue(`Bin directory: ${o}`));y.checkIfInPath(o)||console.log(s.yellow("Bin directory is not in PATH. Run 'fbin path' to add it."))}catch(e){console.error(s.red(`Failed to list binaries: ${e.message}`)),process.exit(1)}}};a(c);let x=!1;e.dirname(o(import.meta.url)),process.cwd(),process.on("uncaughtException",(e=>{x||(x=!0,setTimeout((()=>process.exit(1)),500))})),process.on("unhandledRejection",(e=>{x||(x=!0,setTimeout((()=>process.exit(1)),500))})),async function(){try{t(n(process.argv)).usage("Usage: $0 <command> [options]").command(g).command(w).command(b).command(S).command(P).command($).demandCommand(1,"You need to specify a command").help().version().argv}catch(e){console.error(s.red(`Fatal error: ${e.message}`)),process.exit(1)}}().catch((e=>{console.error(s.red(`Fatal error: ${e.message}`)),process.exit(1)}));
|
|
2
|
+
import e from"node:path";import{fileURLToPath as o}from"node:url";import n from"chalk";import t from"yargs";import{hideBin as s}from"yargs/helpers";import r from"node:fs";import i from"node:os";import a from"@fnet/prompt";import{promisify as l}from"node:util";import c from"tree-kill";function d(){return e.join(i.homedir(),".fnet","bin")}function h(){return e.join(i.homedir(),".fnet","metadata")}function m(){return e.join(h(),"binaries.json")}function p(){try{if("win32"===process.platform)return process.env.PSModulePath&&process.env.PSModulePath.includes("PowerShell")?"powershell-core":process.env.PSModulePath?"powershell":"cmd";const o=process.env.SHELL||"";return o.includes("bash")?"bash":o.includes("zsh")?"zsh":o.includes("fish")?"fish":o.includes("ksh")?"ksh":o.includes("csh")||o.includes("tcsh")?"csh":r.existsSync(e.join(i.homedir(),".bashrc"))?"bash":r.existsSync(e.join(i.homedir(),".zshrc"))?"zsh":r.existsSync(e.join(i.homedir(),".config","fish","config.fish"))?"fish":"unknown"}catch(e){return"unknown"}}function u(o){const n=i.homedir(),t=[];switch(o){case"bash":t.push({name:".bashrc",path:e.join(n,".bashrc")}),t.push({name:".bash_profile",path:e.join(n,".bash_profile")}),t.push({name:".profile",path:e.join(n,".profile")});break;case"zsh":t.push({name:".zshrc",path:e.join(n,".zshrc")}),t.push({name:".zprofile",path:e.join(n,".zprofile")});break;case"fish":t.push({name:"config.fish",path:e.join(n,".config","fish","config.fish")});break;case"ksh":t.push({name:".kshrc",path:e.join(n,".kshrc")}),t.push({name:".profile",path:e.join(n,".profile")});break;case"csh":t.push({name:".cshrc",path:e.join(n,".cshrc")}),t.push({name:".tcshrc",path:e.join(n,".tcshrc")});break;case"powershell":t.push({name:"Microsoft.PowerShell_profile.ps1",path:e.join(n,"Documents","WindowsPowerShell","Microsoft.PowerShell_profile.ps1")}),t.push({name:"profile.ps1",path:e.join(n,"Documents","WindowsPowerShell","profile.ps1")});break;case"powershell-core":t.push({name:"Microsoft.PowerShell_profile.ps1",path:e.join(n,"Documents","PowerShell","Microsoft.PowerShell_profile.ps1")}),t.push({name:"profile.ps1",path:e.join(n,"Documents","PowerShell","profile.ps1")});break;case"cmd":t.push({name:"fnet-path.bat",path:e.join(n,"fnet-path.bat")})}return t}function f(e,o){switch(e){case"bash":case"zsh":case"ksh":default:return`export PATH="${o}:$PATH"`;case"fish":return`set -gx PATH ${o} $PATH`;case"csh":return`setenv PATH ${o}:$PATH`;case"powershell":case"powershell-core":return`$env:PATH = "${o};" + $env:PATH`;case"cmd":return`@echo off\nSETX PATH "%PATH%;${o}"\necho Path updated successfully`}}var y={getBinDirectory:d,getMetadataDirectory:h,getMetadataFilePath:m,checkIfInPath:function(o){return(process.env.PATH||"").split(e.delimiter).includes(o)},detectUserShell:p,getShellConfigPath:function(){const e=u(p());for(const o of e)if(r.existsSync(o.path))return o.path;return e.length>0?e[0].path:null},getAllShellConfigPaths:u,createBinDirectoryStructure:async function(){const e=d(),o=h(),n=m();r.existsSync(e)||r.mkdirSync(e,{recursive:!0}),r.existsSync(o)||r.mkdirSync(o,{recursive:!0}),r.existsSync(n)||r.writeFileSync(n,JSON.stringify({binaries:{},lastUpdated:(new Date).toISOString()},null,2))},getExportPathCommand:f,addBinToPath:async function(o,t,s){try{const i=f(o,s);if("cmd"===o)return r.writeFileSync(t,i),console.log(n.yellow(`Created batch file at ${t}`)),console.log(n.yellow("Run this file to add the bin directory to your PATH")),!0;if("powershell"!==o&&"powershell-core"!==o||r.existsSync(e.dirname(t))||r.mkdirSync(e.dirname(t),{recursive:!0}),!r.existsSync(t)){const e="fish"===o?"# Fish shell configuration\n\n":"powershell"===o||"powershell-core"===o?"# PowerShell profile\n\n":"# Shell configuration\n\n";r.writeFileSync(t,e),console.log(n.green(`Created config file at ${t}`))}const a=r.readFileSync(t,"utf8");if(a.includes(s))return!0;const l=`${a.trim()}\n\n# Added by @fnet/cli\n${i}\n`;return r.writeFileSync(t,l),"powershell"!==o&&"powershell-core"!==o||(console.log(n.yellow("You may need to set the PowerShell execution policy to run scripts:")),console.log(n.green("Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned"))),!0}catch(e){return console.error(n.red(`Failed to add bin directory to PATH: ${e.message}`)),!1}}};async function g(o){const n=function(){const o=i.homedir(),n=e.join(o,".fnet","bin");return r.existsSync(n)||r.mkdirSync(n,{recursive:!0}),n}(),t=function(){const o=i.homedir(),n=e.join(o,".fnet");return r.existsSync(n)||r.mkdirSync(n,{recursive:!0}),e.join(n,"bin-registry.json")}();let s={};if(r.existsSync(t))try{const e=r.readFileSync(t,"utf8");s=JSON.parse(e)}catch(e){console.warn(`Warning: Could not parse bin registry: ${e.message}`)}return{binDir:n,registryPath:t,registry:s,args:o}}e.dirname(o(import.meta.url));var w={command:"setup",describe:"Initialize the bin system",builder:{},handler:async o=>{try{await g(o);console.log(n.blue("Setting up the bin system...")),await y.createBinDirectoryStructure();const t=y.getBinDirectory();console.log(n.green(`Bin directory: ${t}`));if(y.checkIfInPath(t))console.log(n.green("Bin directory is already in PATH."));else{console.log(n.yellow("Bin directory is not in PATH."));const{confirmAddToPath:o}=await a({type:"confirm",name:"confirmAddToPath",message:`Would you like to add ${t} to your PATH?`,initial:!0});if(o){let o=y.detectUserShell();if("unknown"===o){const{selectedShell:e}=await a({type:"select",name:"selectedShell",message:"Select your shell:",choices:[{name:"bash",message:"Bash"},{name:"zsh",message:"Zsh"},{name:"fish",message:"Fish"},{name:"powershell",message:"PowerShell"},{name:"powershell-core",message:"PowerShell Core"},{name:"cmd",message:"Windows Command Prompt"},{name:"ksh",message:"Korn Shell (ksh)"},{name:"csh",message:"C Shell (csh/tcsh)"}]});o=e}else{const{confirmShell:e}=await a({type:"confirm",name:"confirmShell",message:`Detected shell: ${o}. Is this correct?`,initial:!0});if(!e){const{selectedShell:e}=await a({type:"select",name:"selectedShell",message:"Select your shell:",choices:[{name:"bash",message:"Bash"},{name:"zsh",message:"Zsh"},{name:"fish",message:"Fish"},{name:"powershell",message:"PowerShell"},{name:"powershell-core",message:"PowerShell Core"},{name:"cmd",message:"Windows Command Prompt"},{name:"ksh",message:"Korn Shell (ksh)"},{name:"csh",message:"C Shell (csh/tcsh)"}]});o=e}}const s=y.getAllShellConfigPaths(o);let l;if(s.length>1){const e=s.filter((e=>r.existsSync(e.path)));if(e.length>0){const{selectedConfigPath:o}=await a({type:"select",name:"selectedConfigPath",message:"Select the configuration file to modify:",choices:e.map((e=>({name:e.path,message:`${e.name} (${e.path})`})))});l=o}else{const{selectedConfigPath:e}=await a({type:"select",name:"selectedConfigPath",message:"Select the configuration file to create:",choices:s.map((e=>({name:e.path,message:`${e.name} (${e.path})`})))});l=e}}else if(1===s.length)l=s[0].path;else{const{enteredConfigPath:o}=await a({type:"input",name:"enteredConfigPath",message:"Enter the path to your shell configuration file:",initial:e.join(i.homedir(),".bashrc")});l=o}await y.addBinToPath(o,l,t)?(console.log(n.green(`Added bin directory to PATH in ${l}`)),console.log(n.yellow("Please restart your terminal or run the following command:")),console.log(n.green(`source ${l}`))):(console.log(n.red(`Failed to add bin directory to PATH in ${l}`)),console.log(n.yellow("You can add it manually by adding the following line to your shell configuration:")),console.log(n.green(y.getExportPathCommand(o,t))))}else console.log(n.yellow("You can add it manually by adding the following line to your shell configuration:")),console.log(n.green(`export PATH="${t}:$PATH"`)),console.log(n.yellow("Or run:")),console.log(n.green("fbin path"))}console.log(n.green("Bin system setup completed successfully."))}catch(e){console.error(n.red(`Failed to set up bin system: ${e.message}`)),process.exit(1)}}};var b={command:"path",describe:"Add bin directory to PATH",builder:{yes:{describe:"Automatically answer yes to all prompts",type:"boolean",default:!1,alias:"y"}},handler:async o=>{try{await g(o);const t=y.getBinDirectory();console.log(n.blue(`Adding ${t} to PATH...`)),y.createBinDirectoryStructure()||(console.log(n.yellow("Creating bin directory structure...")),await y.createBinDirectoryStructure());if(y.checkIfInPath(t))return void console.log(n.green("Bin directory is already in PATH."));let s=y.detectUserShell();if("unknown"===s)if(o.yes)s="win32"===process.platform?"powershell":"bash",console.log(n.yellow(`Auto-selecting ${s} shell due to --yes flag`));else{const{selectedShell:e}=await a({type:"select",name:"selectedShell",message:"Select your shell:",choices:[{name:"bash",message:"Bash"},{name:"zsh",message:"Zsh"},{name:"fish",message:"Fish"},{name:"powershell",message:"PowerShell"},{name:"powershell-core",message:"PowerShell Core"},{name:"cmd",message:"Windows Command Prompt"},{name:"ksh",message:"Korn Shell (ksh)"},{name:"csh",message:"C Shell (csh/tcsh)"}]});s=e}else if(o.yes)console.log(n.yellow(`Auto-confirming detected shell: ${s} due to --yes flag`));else{const{confirmShell:e}=await a({type:"confirm",name:"confirmShell",message:`Detected shell: ${s}. Is this correct?`,initial:!0});if(!e){const{selectedShell:e}=await a({type:"select",name:"selectedShell",message:"Select your shell:",choices:[{name:"bash",message:"Bash"},{name:"zsh",message:"Zsh"},{name:"fish",message:"Fish"},{name:"powershell",message:"PowerShell"},{name:"powershell-core",message:"PowerShell Core"},{name:"cmd",message:"Windows Command Prompt"},{name:"ksh",message:"Korn Shell (ksh)"},{name:"csh",message:"C Shell (csh/tcsh)"}]});s=e}}const l=y.getAllShellConfigPaths(s);let c;if(l.length>1){const e=l.filter((e=>r.existsSync(e.path)));if(e.length>0)if(o.yes)c=e[0].path,console.log(n.yellow(`Auto-selecting config file: ${c} due to --yes flag`));else{const{selectedConfigPath:o}=await a({type:"select",name:"selectedConfigPath",message:"Select the configuration file to modify:",choices:e.map((e=>({name:e.path,message:`${e.name} (${e.path})`})))});c=o}else if(o.yes)c=l[0].path,console.log(n.yellow(`Auto-selecting config file to create: ${c} due to --yes flag`));else{const{selectedConfigPath:e}=await a({type:"select",name:"selectedConfigPath",message:"Select the configuration file to create:",choices:l.map((e=>({name:e.path,message:`${e.name} (${e.path})`})))});c=e}}else if(1===l.length)c=l[0].path;else if(o.yes)c=e.join(i.homedir(),"win32"===process.platform?"_profile":".bashrc"),console.log(n.yellow(`Auto-selecting default config file: ${c} due to --yes flag`));else{const{enteredConfigPath:o}=await a({type:"input",name:"enteredConfigPath",message:"Enter the path to your shell configuration file:",initial:e.join(i.homedir(),".bashrc")});c=o}await y.addBinToPath(s,c,t)?(console.log(n.green(`Added bin directory to PATH in ${c}`)),console.log(n.yellow("Please restart your terminal or run the following command:")),console.log(n.green(`source ${c}`))):(console.log(n.red(`Failed to add bin directory to PATH in ${c}`)),console.log(n.yellow("You can add it manually by adding the following line to your shell configuration:")),console.log(n.green(y.getExportPathCommand(s,t))))}catch(e){console.error(n.red(`Failed to add bin directory to PATH: ${e.message}`)),process.exit(1)}}};var S={command:"compile [source] [options]",describe:"Compile a CLI project to a binary",builder:{source:{describe:"Source file to compile",type:"string",default:"./dist/cli/esm/index.js"},output:{describe:"Output file name",type:"string",alias:"o"},name:{describe:"Binary name",type:"string",alias:"n"},force:{describe:"Force overwrite if binary already exists",type:"boolean",default:!1,alias:"f"},target:{describe:"Target platform (auto, linux, macos, windows)",type:"string",choices:["auto","linux","macos","windows"],default:"auto"},minify:{describe:"Minify the output binary",type:"boolean",default:!0},external:{describe:"External packages to exclude from the bundle (comma-separated)",type:"string"}},handler:async o=>{try{await g(o);const t=process.cwd(),s=e.basename(t),i=o.name||s;let l;if(o.output)l=o.output;else{const o=e.join(t,".bin");r.existsSync(o)||r.mkdirSync(o,{recursive:!0}),l=e.join(o,i)}const c=e.resolve(process.cwd(),o.source);if(r.existsSync(c)||(console.error(n.red(`Source file not found: ${c}`)),console.error(n.yellow("Make sure to build your project first.")),process.exit(1)),r.existsSync(l)&&!o.force){const{confirmOverwrite:e}=await a({type:"confirm",name:"confirmOverwrite",message:`Binary already exists at ${l}. Overwrite?`,initial:!1});if(!e)return void console.log(n.yellow("Compilation cancelled."))}const d=process.platform;console.log(n.blue(`Detected platform: ${d}`)),"win32"!==d||l.endsWith(".exe")||(l=`${l}.exe`,console.log(n.blue(`Adjusted output path for Windows: ${l}`))),console.log(n.blue(`Compiling ${c} to ${l}...`));const{spawn:h}=await import("child_process");try{const e=h("bun",["--version"],{stdio:"pipe"});await new Promise(((o,n)=>{e.on("close",(e=>{0===e?o():n(new Error("Bun is not available. Please install Bun first."))})),e.on("error",(e=>{n(new Error(`Bun is not available: ${e.message}`))}))}))}catch(e){console.error(n.red(`Bun is not available: ${e.message}`)),console.error(n.yellow("Please install Bun first: https://bun.sh/")),process.exit(1)}const m=["build",c,"--compile",`--outfile=${l}`];if(o.target&&"auto"!==o.target&&m.push(`--target=${o.target}`),!1===o.minify&&m.push("--no-minify"),o.external){o.external.split(",").map((e=>e.trim())).forEach((e=>{m.push(`--external:${e}`)}))}console.log(n.blue(`Running: bun ${m.join(" ")}`));const p=h("bun",m,{stdio:"inherit"});await new Promise(((e,o)=>{p.on("close",(n=>{0===n?e():o(new Error(`Compilation failed with code ${n}`))})),p.on("error",(e=>{o(e)}))})),"win32"!==d&&r.chmodSync(l,493),console.log(n.green(`Binary compiled successfully: ${l}`)),"win32"===d?console.log(n.yellow("Note: On Windows, you may need to run the binary from a command prompt or PowerShell.")):"darwin"===d&&console.log(n.yellow("Note: On macOS, you may need to allow the binary to run in System Preferences > Security & Privacy."))}catch(e){console.error(n.red(`Failed to compile binary: ${e.message}`)),process.exit(1)}}};var P={command:"install [source] [options]",describe:"Install a binary to the bin directory",builder:{source:{describe:"Source binary to install",type:"string",demandOption:!0},name:{describe:"Name to use for the installed binary",type:"string",alias:"n"},version:{describe:"Version of the binary",type:"string",alias:"v"},force:{describe:"Force overwrite if binary already exists",type:"boolean",default:!1,alias:"f"},yes:{describe:"Automatically answer yes to all prompts",type:"boolean",default:!1,alias:"y"}},handler:async o=>{try{await g(o);const t=e.resolve(process.cwd(),o.source);r.existsSync(t)||(console.error(n.red(`Source file not found: ${t}`)),process.exit(1)),await y.createBinDirectoryStructure();const s=y.getBinDirectory();let i;i=o.name?o.name:e.basename(t),"win32"!==process.platform||i.endsWith(".exe")||(i=`${i}.exe`);const l=e.join(s,i);if(r.existsSync(l)&&!o.force&&!o.yes){const{confirmOverwrite:e}=await a({type:"confirm",name:"confirmOverwrite",message:`Binary already exists at ${l}. Overwrite?`,initial:!1});if(!e)return void console.log(n.yellow("Installation cancelled."))}console.log(n.blue(`Installing ${t} to ${l}...`)),r.copyFileSync(t,l),"win32"!==process.platform&&r.chmodSync(l,493);const c=y.getMetadataFilePath();let d={binaries:{},lastUpdated:(new Date).toISOString()};if(r.existsSync(c))try{d=JSON.parse(r.readFileSync(c,"utf8"))}catch(e){console.warn(n.yellow(`Failed to parse metadata file: ${e.message}`)),console.warn(n.yellow("Creating new metadata file."))}d.binaries[i]={path:l,source:t,created:(new Date).toISOString(),platform:process.platform,version:o.version||"0.0.0",project:e.basename(process.cwd())},d.lastUpdated=(new Date).toISOString(),r.writeFileSync(c,JSON.stringify(d,null,2)),console.log(n.green(`Binary installed successfully: ${l}`));y.checkIfInPath(s)?console.log(n.green(`You can now run '${i}' from anywhere.`)):console.log(n.yellow("Bin directory is not in PATH. Run 'fbin path' to add it."))}catch(e){console.error(n.red(`Failed to install binary: ${e.message}`)),process.exit(1)}}};var $={command:"uninstall [name] [options]",describe:"Uninstall a binary from the bin directory",builder:{name:{describe:"Name of the binary to uninstall",type:"string",demandOption:!0},force:{describe:"Skip confirmation prompt",type:"boolean",default:!1,alias:"f"},yes:{describe:"Automatically answer yes to all prompts",type:"boolean",default:!1,alias:"y"}},handler:async e=>{try{await g(e);const o=y.getBinDirectory(),t=y.getMetadataFilePath();let s;r.existsSync(o)||(console.error(n.red(`Bin directory not found: ${o}`)),console.error(n.yellow("Run fbin setup first.")),process.exit(1)),r.existsSync(t)||(console.error(n.red(`Metadata file not found: ${t}`)),console.error(n.yellow("Run fbin setup first.")),process.exit(1));try{s=JSON.parse(r.readFileSync(t,"utf8"))}catch(e){console.error(n.red(`Failed to parse metadata file: ${e.message}`)),process.exit(1)}const i=e.name;s.binaries[i]||(console.error(n.red(`Binary not found in metadata: ${i}`)),console.log(n.yellow("Use fbin list to see installed binaries.")),process.exit(1));const l=s.binaries[i].path;if(r.existsSync(l)||(console.warn(n.yellow(`Binary file not found: ${l}`)),console.warn(n.yellow("Metadata will be updated anyway."))),!e.force&&!e.yes){const{confirmUninstall:e}=await a({type:"confirm",name:"confirmUninstall",message:`Are you sure you want to uninstall ${i}?`,initial:!1});if(!e)return void console.log(n.yellow("Uninstallation cancelled."))}if(r.existsSync(l))try{r.unlinkSync(l),console.log(n.green(`Binary file removed: ${l}`))}catch(e){console.error(n.red(`Failed to remove binary file: ${e.message}`))}delete s.binaries[i],s.lastUpdated=(new Date).toISOString(),r.writeFileSync(t,JSON.stringify(s,null,2)),console.log(n.green(`Binary uninstalled successfully: ${i}`))}catch(e){console.error(n.red(`Failed to uninstall binary: ${e.message}`)),process.exit(1)}}};var x={command:"list [options]",describe:"List installed binaries",builder:{json:{describe:"Output in JSON format",type:"boolean",default:!1,alias:"j"},filter:{describe:"Filter binaries by name",type:"string",alias:"f"}},handler:async e=>{try{await g(e);const o=y.getBinDirectory(),t=y.getMetadataFilePath();let s;r.existsSync(o)||(console.error(n.red(`Bin directory not found: ${o}`)),console.error(n.yellow("Run fbin setup first.")),process.exit(1)),r.existsSync(t)||(console.error(n.red(`Metadata file not found: ${t}`)),console.error(n.yellow("Run fbin setup first.")),process.exit(1));try{s=JSON.parse(r.readFileSync(t,"utf8"))}catch(e){console.error(n.red(`Failed to parse metadata file: ${e.message}`)),process.exit(1)}let i=s.binaries;if(e.filter){const o=e.filter.toLowerCase();i=Object.entries(i).filter((([e])=>e.toLowerCase().includes(o))).reduce(((e,[o,n])=>(e[o]=n,e)),{})}if(e.json)return void console.log(JSON.stringify(i,null,2));const a=Object.keys(i).length;if(0===a)return void console.log(n.yellow("No binaries installed."));console.log(n.blue(`Found ${a} installed binaries:`)),console.log();const l=Math.max(...Object.keys(i).map((e=>e.length)),4),c=Math.max(...Object.values(i).map((e=>(e.version||"N/A").length)),7),d=Math.max(...Object.values(i).map((e=>(e.platform||"N/A").length)),8);console.log(n.green("NAME".padEnd(l+2))+n.green("VERSION".padEnd(c+2))+n.green("PLATFORM".padEnd(d+2))+n.green("CREATED")),console.log("─".repeat(l+2)+"─".repeat(c+2)+"─".repeat(d+2)+"─".repeat(20)),Object.entries(i).forEach((([e,o])=>{const t=new Date(o.created).toLocaleString();console.log(n.white(e.padEnd(l+2))+n.yellow((o.version||"N/A").padEnd(c+2))+n.cyan((o.platform||"N/A").padEnd(d+2))+n.gray(t))})),console.log(),console.log(n.blue(`Bin directory: ${o}`));y.checkIfInPath(o)||console.log(n.yellow("Bin directory is not in PATH. Run 'fbin path' to add it."))}catch(e){console.error(n.red(`Failed to list binaries: ${e.message}`)),process.exit(1)}}};l(c);let v=!1;process.on("uncaughtException",(e=>{v||(v=!0,setTimeout((()=>process.exit(1)),500))})),process.on("unhandledRejection",(e=>{v||(v=!0,setTimeout((()=>process.exit(1)),500))})),async function(){try{t(s(process.argv)).usage("Usage: $0 <command> [options]").command(w).command(b).command(S).command(P).command($).command(x).demandCommand(1,"You need to specify a command").help().version().argv}catch(e){console.error(n.red(`Fatal error: ${e.message}`)),process.exit(1)}}().catch((e=>{console.error(n.red(`Fatal error: ${e.message}`)),process.exit(1)}));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import e from"node:fs";import t from"node:path";import r from"semver";import o from"@fnet/shelljs";import i from"@fnet/config";import s from"@fnet/object-from-schema";import n from"yaml";import{r as p,w as m}from"./index.js";import{fileURLToPath as a}from"node:url";import"yargs";import"chalk";import"node:util";import"tree-kill";import"node:child_process";import"node:os";import"@flownet/lib-render-templates-dir";import"@fnet/yaml";import"nunjucks";import"lodash.clonedeep";import"isobject";import"redis";import"@flownet/lib-is-redis-online";import"node:crypto";import"@flownet/lib-atom-api-js";import"lodash.merge";import"@flownet/lib-parse-imports-js";import"@fnet/npm-list-versions";import"@fnet/npm-pick-versions";import"object-hash";import"ajv/dist/2020.js";import"ajv/dist/standalone/index.js";import"ajv-formats";import"@flownet/lib-parse-node-url";import"bpmn-moddle";import"dagre";import"@fnet/expression";import"@fnet/list-files";import"@fnet/key-value-transformer";import"lodash.pick";import"lodash.omit";import"@fnet/prompt";import"fs";import"path";import"@fnet/shell-flow";async function l({atom:a,setProgress:l,context:c,deploymentProject:d,deploymentProjectTarget:f,yamlTarget:y}){await l({message:"Deploying it as npm package."});const h=c.projectDir,w=t.resolve(h,"package.json"),b=e.readFileSync(w),j=JSON.parse(b);j.name=f.params.name,j.version=r.inc(f.version,"patch");const u=f.params.bin?.name||f.params.bin;!1!==f.params.bin?.enabled&&u&&"string"==typeof u&&(j.bin={[u]:"dist/cli/esm/index.js"}),delete j.scripts,delete j.devDependencies,j.scripts={serve:"npx serve ."},e.writeFileSync(w,JSON.stringify(j,null,"\t"));const g=f.config||"npm";let v=(await i({name:g,dir:c.projectDir,tags:c.tags,optional:!0}))?.data;if(!v){const r=p("./template/schemas/to-npm.yaml"),o=await s({schema:r,tags:c.tags}),i=c.project.projectDir,m=t.resolve(i,".fnet");e.existsSync(m)||e.mkdirSync(m),e.writeFileSync(t.resolve(m,`${g}.fnet`),n.stringify(o)),v=o}if(e.writeFileSync(t.resolve(h,".npmrc"),`//registry.npmjs.org/:_authToken=${v.env.NPM_TOKEN}`),!0!==f.dryRun){if(m("bun")){if(0!==(await o("bun publish --access public",{cwd:h})).code)throw new Error("Couldnt publish to npm")}else{if(0!==(await o("npm publish --access public",{cwd:h})).code)throw new Error("Couldnt publish to npm")}e.writeFileSync(w,b),d.isDirty=!0,f.version=j.version,y.set("version",j.version)}}t.dirname(a(import.meta.url)),process.cwd();export{l as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
async function r(r){return{projectDir:process.cwd(),tags:r.ftag}}export{r as createContext};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import r from"node:path";import{fileURLToPath as n}from"node:url";import e from"node:os";import i from"node:fs";async function t(n){const t=function(){const n=e.homedir(),t=r.join(n,".fnet","bin");return i.existsSync(t)||i.mkdirSync(t,{recursive:!0}),t}(),o=function(){const n=e.homedir(),t=r.join(n,".fnet");return i.existsSync(t)||i.mkdirSync(t,{recursive:!0}),r.join(t,"bin-registry.json")}();let s={};if(i.existsSync(o))try{const r=i.readFileSync(o,"utf8");s=JSON.parse(r)}catch(r){console.warn(`Warning: Could not parse bin registry: ${r.message}`)}return{binDir:t,registryPath:o,registry:s,args:n}}r.dirname(n(import.meta.url));export{t as createContext};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import e from"node:path";import t from"node:fs";import o from"@fnet/yaml";import r from"yaml";import{r as i}from"./index.js";import"node:url";import"yargs";import"chalk";import"node:util";import"tree-kill";import"node:child_process";import"@fnet/config";import"node:os";import"@flownet/lib-render-templates-dir";import"@fnet/shelljs";import"nunjucks";import"lodash.clonedeep";import"isobject";import"redis";import"@flownet/lib-is-redis-online";import"node:crypto";import"@flownet/lib-atom-api-js";import"lodash.merge";import"@flownet/lib-parse-imports-js";import"@fnet/npm-list-versions";import"@fnet/npm-pick-versions";import"object-hash";import"ajv/dist/2020.js";import"ajv/dist/standalone/index.js";import"ajv-formats";import"@flownet/lib-parse-node-url";import"bpmn-moddle";import"dagre";import"@fnet/expression";import"@fnet/list-files";import"@fnet/key-value-transformer";import"lodash.pick";import"lodash.omit";import"@fnet/prompt";import"fs";import"path";import"@fnet/shell-flow";async function n(n){if(n.id)return{id:n.id,buildId:n.buildId,mode:n.mode,protocol:n.protocol||"ac:",templateDir:i("./template/fnode/node"),projectDir:e.resolve(process.cwd(),`./.output/${n.id}`),tags:n.ftag};try{const s=await async function({tags:i}){let n=function(o){const r=e.resolve(o,"node.yaml"),i=e.resolve(o,"fnode.yaml");if(t.existsSync(i))return i;if(t.existsSync(r))try{const e=t.readFileSync(r,"utf8");return t.writeFileSync(i,e,"utf8"),t.unlinkSync(r),console.log(`Migrated node.yaml to fnode.yaml in ${o}`),i}catch(e){return console.error(`Error migrating node.yaml to fnode.yaml: ${e.message}`),r}return i}(process.cwd());if(!t.existsSync(n))throw new Error("fnode.yaml file not found in current directory.");const{raw:s,parsed:m}=await o({file:n,tags:i}),p=e.dirname(n);m.features=m.features||{};const l=m.features;l.runtime=l.runtime||{},l.runtime.type=l.runtime.type||"node","python"===l.runtime.type?l.runtime.template=l.runtime.template||"python":"bun"===l.runtime.type?l.runtime.template=l.runtime.template||"bun":l.runtime.template=l.runtime.template||"node";const a={libraryAtom:{doc:{...m},fileName:"index"},projectDir:p,projectFilePath:n,projectFileContent:s,projectFileParsed:m,runtime:l.runtime};let c=e.resolve(p,"fnet/targets.yaml");if(!t.existsSync(c)&&(c=e.resolve(p,"node.devops.yaml"),t.existsSync(c))){const o=e.resolve(p,"fnet");t.existsSync(o)||t.mkdirSync(o),t.copyFileSync(c,e.resolve(p,"fnet/targets.yaml")),t.unlinkSync(c)}if(t.existsSync(c)){const{raw:e,parsed:n}=await o({file:c,tags:i}),s=r.parseDocument(e);a.devops={filePath:c,fileContent:e,yamlDocument:s,doc:{...n},type:"library.deploy",save:async()=>{t.writeFileSync(a.devops.filePath,s.toString())}}}const d=e.resolve(p,"readme.md");if(t.existsSync(d)){const e=t.readFileSync(d,"utf8");a.readme={filePath:d,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return a}({tags:n.ftag});return{buildId:n.buildId,mode:n.mode,protocol:n.protocol||"local:",templateDir:i(`./template/fnode/${s.runtime.template}`),projectDir:e.resolve(s.projectDir,"./.workspace"),projectSrcDir:e.resolve(s.projectDir,"./src"),project:s,tags:n.ftag}}catch(e){return console.warn(`Warning: Could not load project: ${e.message}`),{projectDir:process.cwd(),tags:n.ftag}}}export{n as createContext};
|
package/dist/fnet/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import e,{delimiter as t,join as n}from"node:path";import{fileURLToPath as o}from"node:url";import{spawn as i}from"node:child_process";import s from"node:os";import a,{existsSync as r}from"node:fs";import c from"tree-kill";import p from"yaml";import l from"yargs";import d from"chalk";import f from"@fnet/prompt";import m from"@fnet/shelljs";import u from"@fnet/yaml";import h from"@fnet/config";import"@fnet/shell-flow";import y from"@flownet/lib-render-templates-dir";import{promisify as w}from"node:util";import g from"nunjucks";import b from"lodash.clonedeep";import x from"isobject";import k from"redis";import v from"@flownet/lib-is-redis-online";import{randomUUID as j}from"node:crypto";import{Api as _,Atom as D}from"@flownet/lib-atom-api-js";import E from"lodash.merge";import S from"@flownet/lib-parse-imports-js";import P from"@fnet/npm-list-versions";import $ from"@fnet/npm-pick-versions";import T from"object-hash";import N from"ajv/dist/2020.js";import C from"ajv/dist/standalone/index.js";import F from"ajv-formats";import A from"@flownet/lib-parse-node-url";import O from"bpmn-moddle";import I from"dagre";import B from"@fnet/expression";import K from"@fnet/list-files";import R from"@fnet/key-value-transformer";import M from"lodash.pick";import J from"lodash.omit";const L=e.dirname(o(import.meta.url));var z=e=>{const o=process.env.PATH||"",i="win32"===process.platform?(process.env.PATHEXT||".EXE;.CMD;.BAT;.COM").split(";"):[""],s=o.split(t);for(const t of s)for(const o of i){const i=n(t,"win32"===process.platform?e+o:e);if(r(i))return i}return null};const G=w(c);let q=!1;async function W(e,t){if(q)return;if(q=!0,!e.killed&&e.pid)try{await G(e.pid,"SIGTERM").catch((()=>{})),await new Promise((e=>setTimeout(e,500))),e.killed||await G(e.pid,"SIGKILL").catch((()=>{}))}catch(e){}await new Promise((e=>setTimeout(e,100)));const n="SIGINT"===t?130:"SIGTERM"===t?143:1;process.exit(n)}function X(e){["SIGINT","SIGTERM","SIGQUIT"].forEach((t=>{process.once(t,(async()=>{await W(e,t)}))})),process.on("uncaughtException",(async t=>{await W(e)})),process.on("unhandledRejection",(async t=>{await W(e)})),e.on("close",(e=>{q||process.exit(e)}))}const U=e.dirname(o(import.meta.url)),V=process.cwd();function H(t){const n=e.resolve(V,t);if(a.existsSync(n))return n;const o=e.resolve(U,"../..",t);if(a.existsSync(o))return o;throw new Error(`Template path not found: ${t}`)}class Y{init({config:e,accessToken:t}){return new Promise(((n,o)=>{if(_.set_api_url(e.data.url),t)return _.set_req_token(t),void n(t);fetch(`${e.data.issuer}/protocol/openid-connect/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(e.data.grant.params)}).then((async e=>{if(!e.ok)throw new Error(await e.text());return e.json()})).then((e=>{_.set_req_token(e.access_token),n(e.access_token)})).catch((e=>{_.set_req_token(),o(e)}))}))}}function Q({feature:e,features:t,packageDevDependencies:n}){const{name:o,packages:i,options:s,extraCheck:a,explicit:r}=e,c=`${o}_enabled`,p=t.rollup_output||{},l=Object.keys(p);let d=s||{};const f=t[o]?.options;f&&(d=E(d,f));const m=!t[o]||!1===t[o]?.enabled;l.forEach((e=>{const n=t.rollup_output[e];if(n){if(Reflect.has(n,o)){if(m||!n[o]||!1===n[o]?.enabled)return void delete n[o];!0===n[o]&&(n[o]={enabled:!0,options:d})}else{if(m||r||!1===t[c])return;n[o]={enabled:!0}}n[o]=n[o]||{},n[o].options={...d,...n[o].options}}}));let u=l.some((e=>!0===t.rollup_output[e][o]?.enabled));a&&(u=a()&&u),t[c]=u,u&&i.forEach((e=>n.push({package:e[0],version:e[1]})))}function Z({dir:t,name:n="index"}){let o=e.resolve(t,`./${n}.tsx`);if(a.existsSync(o)||(o=e.resolve(t,`./${n}.ts`)),a.existsSync(o)||(o=e.resolve(t,`./${n}.jsx`)),a.existsSync(o)||(o=e.resolve(t,`./${n}.js`)),!a.existsSync(o))return{};const i=o,s=e.extname(o);return{file:i,ext:s,ts:".ts"===s||".tsx"===s,name:n}}async function ee(t){const{atom:n,context:o,setProgress:i}=t;i("Initializing features..."),n.doc.features=n.doc.features||{};const s=n.doc.features;s.project=s.project||{},s.project.format=s.project.format||s.project_format||"esm",s.project_format=s.project.format,s.dts_enabled=!0===s.dts||void 0!==s.dts&&!1!==s.dts;const a=e.resolve(o.project.projectDir),r=Z({dir:e.resolve(a,"./app")});if(r.file){i("Parsing app entry imports...");let e=await S({file:r.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.app_uses_jsx=t,s.app_has_entry=!0,e=await S({file:r.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.app_entry_uses_jsx=t,s.app_entry_is_ts=r.ts,s.app_entry_ext=r.ext}const c=Z({dir:e.resolve(a,"./cli")});if(c.file){i("Parsing cli entry imports...");let e=await S({file:c.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.cli_uses_jsx=t,s.cli_has_entry=!0,e=await S({file:c.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.cli_entry_uses_jsx=t,s.cli_entry_is_ts=c.ts,s.cli_entry_ext=c.ext}if("workflow.lib"===n.type){const t=Z({dir:e.resolve(a,"./src")});if(t.file){i("Parsing src entry imports...");let e=await S({file:t.file,recursive:!0}),n=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.src_uses_jsx=n,s.src_has_entry=!0,e=await S({file:t.file}),n=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.src_entry_uses_jsx=n,s.src_entry_is_ts=t.ts,s.src_entry_ext=t.ext}}const p=Reflect.has(s,"app_entry_uses_jsx")?!0===s.app_entry_uses_jsx:!0===s.src_entry_uses_jsx,l=Reflect.has(s,"cli_entry_uses_jsx")?!0===s.cli_entry_uses_jsx:!0===s.src_entry_uses_jsx;s.form_enabled=p||l||!0===s.form||!0===s.form?.enabled,s.multiple_enabled=s.multiple_enabled||!0===s.multiple||!0===s.multiple?.enabled,!1===s.app?s.app={enabled:!1}:!0===s.app?s.app={enabled:!0,extend:!0===s.app_has_entry,export:!0,react:p}:s.app={enabled:!0,extend:!0===s.app_has_entry,export:!0,react:p,...s.app||{}},s.app.enabled=!0===s.app.enabled&&(!0===n.doc.features.form_enabled||!0===s.app.extend||!0===s.app.enabled),s.app.format=s.app.format||"esm",s.app.folder=s.app.folder||s.app.format||"default",!1===s.cli?s.cli={enabled:!1}:!0===s.cli?s.cli={enabled:!0,extend:!0===s.cli_has_entry,export:!0,react:l}:s.cli={enabled:!0,extend:!0===s.cli_has_entry,export:!0,react:l,...s.cli||{}},s.cli.enabled=!0===s.cli.enabled&&(!1===n.doc.features.form_enabled||!0===s.cli.extend||!0===s.cli.enabled),s.cli.format=s.cli.format||"esm",s.cli.folder=s.cli.folder||s.cli.folder||"esm",s.cli.node_options=s.cli.node?.options||s.cli.node_options||"",s.cli.bin=s.cli.bin||n.doc.name,s.cli.installable=!0===s.cli.installable,s.cli.enabled&&(n.doc["npm::bin"]=s.cli.bin,console.log(`Setting npm::bin to ${s.cli.bin} from features.cli.bin`)),s.json=s.cli.enabled||s.json;const d={cjs:{format:"cjs",context:s.form_enabled?"window":"global",babel:!0===s.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!1!==s.cjs,copy:!1},esm:{format:"esm",context:s.form_enabled?"window":"global",babel:!0===s.src_uses_jsx||!1,browser:!1,replace:!0,terser:!1,enabled:!1!==s.esm,copy:!0},iife:{format:"iife",context:s.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0===s.iife,terser:!0,copy:!1}};!0===s.webos&&(d.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,input:"./src/app/index.js",output_dir:"./dist/app/webos",copy:!1,babel_options:{targets:{chrome:"79"}}}),!0===s.electron&&(d.electron={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/electron"}),!0===s.nextjs&&(d.nextjs={format:"esm",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/nextjs"}),!0===s.ios&&(d.ios={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/ios"}),!0===s.macos&&(d.macos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/macos"}),!0===s.app.enabled&&(s.app.dir=`./dist/app/${s.app.folder}`,d.app={format:s.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:s.app.dir,terser:!0,output_exports:!1===s.app.export?"none":"auto",browsersync:!0}),!0===s.cli.enabled&&(s.cli.dir=`./dist/cli/${s.cli.folder}`,d.cli={format:s.cli.format,context:"global",babel:!0===s.src_uses_jsx||!0===s.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:s.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===s.cli.export?"none":"auto"});const f={server:".",startPath:`${e.normalize(s.app.dir||".")}`,files:[e.normalize("./dist/**/*")],cors:!0,open:!1};s.babel_options=E({targets:{browsers:"last 9 versions, not dead",node:"18"}},s.babel_options||s.babel?.options),s.browsersync_options=E(f,s.browsersync_options||s.browsersync?.options||{}),s.replace_options=E({},s.replace_options||s.replace?.options||{}),Reflect.has(s.browsersync_options,"proxy")&&delete s.browsersync_options.server,s.rollup=s.rollup||{},s.rollup_output=E(d,s.rollup_output||s.rollup?.output||{}),s.preact_enabled=!0===s.preact||s.preact&&!1!==s.preact?.enabled;let m=Object.keys(d);for(const e of m){const t=d[e];t&&(!1!==s.rollup[e]?(t.babel_options=t.babel_options||s.babel_options,t.browsersync_options=E(s.browsersync_options,t.browsersync_options),t.replace_options=E(s.replace_options,t.replace_options),s.preact_enabled&&(t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{},t.alias.entries.react="preact/compat",t.alias.entries["react-dom"]="preact/compat"),(s.form_enabled||s.babel)&&(t.babel=!0)):delete s.rollup_output[e])}m=Object.keys(s.rollup_output),s.babel_enabled=m.some((e=>!0===s.rollup_output[e].babel)),s.browser_enabled=m.some((e=>!0===s.rollup_output[e].babel)),s.browsersync_enabled=!1!==s.browsersync&&m.some((e=>!0===s.rollup_output[e].browsersync)),s.browsersync_enabled=s.browsersync_enabled&&s.app.enabled,s.dependency_auto_enabled=!1!==s.dependency_auto&&!1!==s.dependency_auto?.enabled,s.npm_install_flags=s.npm_install_flags||"",s.react_version=s.react_version||s.react?.version||18,function(e){const{atom:t,packageDevDependencies:n}=e,o=t.doc.features,i=o.css&&!1!==o.css.enabled;let s=[];i&&(s.push(["rollup-plugin-postcss","^4"]),s.push(["sass","^1.66"]),(o.css?.options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":s.push(["postcss-import","^15"]);break;case"postcss-url":s.push(["postcss-url","^10"]);break;case"postcss-preset-env":s.push(["postcss-preset-env","^9"]);break;case"autoprefixer":s.push(["autoprefixer","^10"]);break;case"cssnano":s.push(["cssnano","^6"])}})));Q({feature:{name:"css",packages:s},features:o,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e,o=t.doc.features,i={};!0===o.app?.enabled&&(i.targets=i.targets||[],i.targets.push({src:"./src/app/index.html",dest:o.app.dir}),Reflect.has(o.app,"copy")||Reflect.has(o,"copy")||(o.copy=!0)),Q({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:i},features:o,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;Q({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;Q({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;Q({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;Q({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;Q({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;Q({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;Q({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;Q({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;Q({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.8"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;Q({feature:{name:"workbox",packages:[["rollup-plugin-workbox","^8"]],options:{generate:{swDest:"dist/app/esm/sw.js",globDirectory:"dist/app/esm",globPatterns:["**/*.{html,js,css,png,jpg}"],skipWaiting:!0,clientsClaim:!0}},explicit:!0},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;Q({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:t.doc.features,packageDevDependencies:n})}(t)}async function te({projectDir:t,name:n,setProgress:o,count:i=1}){let s;const r=T(["npm-pick-versions",n,i]),c=e.join(t,".cache"),p=e.join(c,r+".json");return a.existsSync(p)?(o&&o(`Picking npm version of ${n} from cache ...`),s=JSON.parse(a.readFileSync(p,"utf8"))):(o&&o(`Picking npm version of ${n} ...`),s=await $({name:n,count:i}),a.mkdirSync(c,{recursive:!0}),a.writeFileSync(p,JSON.stringify(s),"utf8")),s}var ne=async e=>{const{atom:t,packageDependencies:n,context:o,deploymentProjectTarget:i,setProgress:s,deploymentProject:a,yamlTarget:r}=e;if(!0!==i.enabled)return;const c=i.type;try{if("lib"===c)await(await import("./index.DG8TqL-1.js")).default({...e});else if("red"===c)await(await import("./index.CmMM-Ek9.js")).default({...e});else if("npm"===c)await(await import("./index.B3bzhxbL.js")).default({...e});else if("gcs"===c)await(await import("./index.UOds5XLl.js")).default({...e});else if("gitlab"===c)await(await import("./index.DI3yyTtl.js")).default({...e});else if("fnet-package"===c)await(await import("./index.Bfg4lyu-.js")).default({...e});else if("fnet-form"===c)await(await import("./index.Q-CYRcna.js")).default({...e});else if("fnet-node"===c)await(await import("./index.C2S9JYhS.js")).default({...e});else if("fnet-flow"===c)await(await import("./index.BuYxdKtK.js")).default({...e});else if("nextjs"===c)await(await import("./index.CDct_kkF.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),a.isDirty=!0;else if("webos"===c)await(await import("./index.CMC8mlye.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),a.isDirty=!0;else if("electron"===c)await(await import("./index.xd8c7XMr.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),a.isDirty=!0;else if("docker"===c)await(await import("./index.D2N9YZmA.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),a.isDirty=!0;else if("ios"===c)await(await import("./index.B5XE4ChJ.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),a.isDirty=!0;else if("macos"===c)await(await import("./index.W6RYgypK.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),a.isDirty=!0;else if("rust"===c)await(await import("./index.CzAV0S36.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),a.isDirty=!0;else{if("pypi"!==c)return void console.warn(`No deployer found for type: ${c}`);await(await import("./index.C7saWH6d.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),a.isDirty=!0}}catch(e){throw console.error(`Error during deployment for type "${c}":`,e),e}},oe={name:"ATOM",uri:"http://atom.org/bpmn",prefix:"atom",types:[{name:"AtomExtension",extends:["bpmn:BaseElement"],properties:[{name:"atom",type:"atom:Atom",isMany:!1}]},{name:"Atom",properties:[{name:"type",type:"String",isAttr:!0}]}]};function ie(e,t){return e.filter(((e,n,o)=>o.map((e=>e[t])).indexOf(e[t])===n))}function se(e){const{nodes:t,nodeIndex:n,root:o}=e,i=e.targetNodes||o.childs;i.forEach((t=>{const n="workflow"===t.type||"subworkflow"===t.type,o=!n&&t.childs.filter((e=>!e.virtual)).length>0;if(o&&(t.bpmn.type="bpmn:SubProcess"),n||o){const n=t.childs.filter((e=>!0!==e.module))[0];t.childs.filter((e=>!0===e.module)).forEach((n=>{const o=ae({...e,parent:t,bpmnType:"bpmn:IntermediateCatchEvent",type:"inter",definitions:[{type:"bpmn:SignalEventDefinition"}]});o.bpmn.edges=[{from:o.indexKey,to:n.indexKey,type:"bpmn:SequenceFlow"}]}));const o=t.childs.find((e=>"try"===e.name&&"tryexcept"===t.type)),s=t.childs.filter((e=>"except"===e.name&&"tryexcept"===t.type));o&&s.length&&s.forEach((n=>{const i=ae({location:t.childs.indexOf(n),...e,parent:t,bpmnType:"bpmn:BoundaryEvent",type:"boundary",attrs:{attachedToRef:o},definitions:[{type:"bpmn:ErrorEventDefinition"}]});i.bpmn.edges=[{from:i.indexKey,to:n.indexKey,type:"bpmn:SequenceFlow"}]}));const a=t.childs.find((e=>"raise"===e.type));if(a){const n=ae({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:"ERROR",definitions:[{type:"bpmn:ErrorEventDefinition"}]});a.bpmn.edges=[{from:a.indexKey,to:n.indexKey,type:"bpmn:SequenceFlow"}]}if(n)if(t.bpmn.starts.length>1){const n=ae({...e,parent:t,bpmnType:"bpmn:StartEvent",type:"start"}),o=ae({...e,parent:t,bpmnType:"bpmn:ExclusiveGateway",type:"switch"});n.bpmn.edges=[{from:n.indexKey,to:o.indexKey,type:"bpmn:SequenceFlow"}],o.bpmn.edges=t.bpmn.starts.map((e=>({...e,from:o.indexKey})));const i=o.bpmn.edges.find((e=>!0===e.next));if(i){const n=ae({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:i.to});i.to=n.indexKey}}else{const o=ae({...e,parent:t,bpmnType:"bpmn:StartEvent",type:"start"});o.bpmn.edges.push({from:o.indexKey,to:n.indexKey,type:"bpmn:SequenceFlow"})}t.childs.filter((e=>!0!==e.virtual&&e.bpmn.outside.length&&"bpmn:EndEvent"!==e.bpmn.type)).forEach((n=>{n.bpmn.outside.forEach((o=>{const s=i.indexOf(t),a=ae({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:o.to,location:s+1});n.bpmn.edges.push({from:n.indexKey,to:a.indexKey,type:"bpmn:SequenceFlow"})}))}));t.childs.filter((e=>!0!==e.virtual&&e.bpmn.edges.length>1)).forEach((n=>{const o=i.indexOf(n),s=ae({...e,parent:t,bpmnType:"bpmn:ExclusiveGateway",type:"switch",location:o+1});s.bpmn.edges=n.bpmn.edges.map((e=>({...e,from:s.indexKey}))),n.bpmn.edges=[{from:n.indexKey,to:s.indexKey,type:"bpmn:SequenceFlow"}],n.bpmn.outside=[]}))}se({...e,targetNodes:t.childs})}))}function ae(e){const{parent:t,nodes:n,nodeIndex:o,bpmnType:i,type:s,name:a,outside:r,location:c,definitions:p,attrs:l}=e,d=t.childs.filter((e=>e.type===`v${s}`)).length,f={indexKey:`${t.indexKey}/_${s}${d}`,pathKey:`${t.pathKey}._${s}${d}`,type:`v${s}`,name:a,bpmn:{edges:[],outside:[],type:i,width:36,height:36,fill:"#c8e6c9",stroke:"#205022",definitions:p,attrs:l},virtual:!0,childs:[]};return t.childs.splice(c||0,0,f),n.push(f),o[f.indexKey]=f,f}function re(e){const{targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:o,moddle:i,elementIndex:s,nodeIndex:a,diagrams:r,nodes:c}=e;!function(e){const{targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:o,moddle:i,elementIndex:s,nodeIndex:a,nodes:r}=e,c=n.get("flowElements");n.$nodes=n.$nodes||[],t.childs.forEach((e=>{const t=i.create(e.bpmn.type,{id:`node.${e.pathKey}`,name:e.definition?.title||e.name});if(s[t.id]=t,t.$isNode=!0,t.$node=e,e.$flow=t,n.$nodes.push(t),c.push(t),e.bpmn.attrs){Object.keys(e.bpmn.attrs).forEach((n=>{"attachedToRef"===n&&t.set(n,e.bpmn.attrs[n].$flow)}))}if(e.bpmn.definitions){const n=e.bpmn.definitions.map((e=>{const t=i.create(e.type);return Object.keys(e.attrs||{}).forEach((n=>{t.set(n,e.attrs[n])})),t}));t.eventDefinitions=n}}))}(e),function(e){const{targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:o,moddle:i,elementIndex:s,nodeIndex:a}=e,r=n.get("flowElements");n.$edges=n.$edges||[],t.childs.forEach((e=>{e.bpmn.edges.forEach((t=>{const o=e,c=a[t.to],p=`edge.${o.pathKey}_${c.pathKey}`;if(s[p])return;const l=s[`node.${o.pathKey}`],d=s[`node.${c.pathKey}`],f=i.create(t.type,{id:p,sourceRef:l,targetRef:d});s[f.id]=f,f.$is_edge=!0,l.get("outgoing").push(f),d.get("incoming").push(f),n.$edges.push({from:l,to:d,flow:f}),r.push(f)}))}))}(e),function(e){const{targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:o,moddle:i,elementIndex:s,nodeIndex:a}=e,r=120,c=80,p=160,l=160,d=new I.graphlib.Graph;d.setDefaultEdgeLabel((()=>({}))),d.setGraph({rankdir:"TB",nodesep:r,ranksep:c,xranker:"longest-path"}),n.$nodes.forEach((e=>{d.setNode(e.id,{width:e.$node?.bpmn.width||r,height:e.$node?.bpmn.height||c,label:e.id})})),n.$edges.forEach((e=>{d.setEdge(e.from.id,e.to.id)})),I.layout(d),n.$nodes.forEach((e=>{const t=d.node(e.id);let n=t.width,s=t.height;const a=i.create("bpmndi:BPMNShape",{id:`shape.${e.id}`,bpmnElement:e,bounds:i.create("dc:Bounds",{x:p+t.x-t.width/2,y:l+t.y-t.height/2,width:n,height:s}),label:i.create("bpmndi:BPMNLabel")});e.$node.bpmn.fill&&a.set("bioc:fill",e.$node.bpmn.fill),e.$node.bpmn.stroke&&a.set("bioc:stroke",e.$node.bpmn.stroke);o.get("planeElement").push(a)})),n.$edges.forEach((e=>{const t=d.edge(e.from.id,e.to.id),n=i.create("bpmndi:BPMNEdge",{id:`edge.${e.from.id}_${e.to.id}`,bpmnElement:e.flow,label:i.create("bpmndi:BPMNLabel")});t.points.forEach((e=>{const t=i.create("dc:Point",{x:p+e.x,y:l+e.y});n.get("waypoint").push(t)}));o.get("planeElement").push(n)}))}(e),function(e){const{targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:o,moddle:i,elementIndex:s,nodeIndex:a,diagrams:r}=e,c=t.childs.filter((e=>"bpmn:SubProcess"===e.bpmn.type));c.forEach((t=>{const n=s[`node.${t.pathKey}`],o=i.create("bpmndi:BPMNDiagram",{id:`diagram_${t.pathKey}`});s[o.id]=o,r.push(o);const a=i.create("bpmndi:BPMNPlane",{id:`plane_${t.pathKey}`});s[a.id]=a,o.plane=a,a.bpmnElement=n,re({...e,targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:a})}))}(e)}async function ce(e){const t=e.root,n=t.context.index,o=Object.keys(n).map((e=>n[e]));!function(e){const{nodes:t}=e;t.forEach((e=>{const t=[],n=[],o=i=>{i.context.next&&(t.push({from:i,to:i.context.next,type:"bpmn:SequenceFlow"}),i===e&&n.push({to:i.context.next,type:"bpmn:SequenceFlow",next:!0})),i.childs.forEach((t=>{i===e&&"switch"===e.type&&n.push({to:t,type:"bpmn:SequenceFlow"}),o(t)}))};o(e);const i=t.filter((t=>t.to.parent.indexKey===e.parent.indexKey)).map((t=>({...t,from:e.indexKey,to:t.to.indexKey}))),s=t.filter((t=>t.to.parent.indexKey!==e.parent.indexKey&&!t.to.indexKey.startsWith(e.indexKey+"/"))).map((t=>({...t,from:e.indexKey,to:t.to.indexKey}))),a=n.map((e=>({...e,to:e.to.indexKey})));e.bpmn=e.bpmn||{},e.bpmn.edges=ie(i,"to"),e.bpmn.outside=ie(s,"to"),e.bpmn.starts=ie(a,"to"),e.bpmn.type=function(e){return"call"===e.type?"bpmn:ServiceTask":"form"===e.type?"bpmn:UserTask":"return"===e.type?"bpmn:EndEvent":"bpmn:Task"}(e),e.bpmn.width=120,e.bpmn.height=80,"return"===e.type&&(e.bpmn.width=36,e.bpmn.height=36)}))}({nodes:o}),se({nodes:o,nodeIndex:n,root:t});const i=new O({atom:oe}),s={},a=i.create("bpmn:Definitions",{id:"definitions_0"});s[a.id]=a;for await(const e of t.childs){const r=a.get("rootElements"),c=a.get("diagrams"),p=i.create("bpmn:Process",{id:`process_${e.pathKey}`,documentation:[i.create("bpmn:Documentation",{text:`Atom Workflow - ${t.context.atom.name}`})]});s[p.id]=p,p.isExecutable=!0,r.push(p);const l=i.create("bpmndi:BPMNDiagram",{id:`diagram_${e.pathKey}`});s[l.id]=l,c.push(l);const d=i.create("bpmndi:BPMNPlane",{id:`plane_${e.pathKey}`});s[d.id]=d,l.plane=d,d.bpmnElement=p;re({targetNode:e,targetFlowElementsContainer:p,targetPlaneElement:d,moddle:i,elementIndex:s,nodeIndex:n,nodes:o,diagrams:c})}return{diagramXML:(await i.toXML(a,{format:!0})).xml}}async function pe(e={}){return await ce(b(e))}async function le({node:e,initNode:t}){if(Reflect.has(e.definition,"modules")&&!Array.isArray(e.definition.modules)){const t=e.definition.modules;e.definition.modules=[],Object.keys(t).forEach((n=>{const o={...t[n]};"modules"===e.type&&(o.export=o.export||n),e.definition.modules.push({[n]:o})}))}const n=[],o=await R({data:e.definition,callback:(e,t,o)=>{const i=B({expression:e});if("m"===i?.processor){const e=o.slice(0,-1);e.push(i.statement);const s=e.join("_");return n.push({[s]:t}),[i.statement,`m::${s}`]}return[e,t]}});n.length>0&&(e.definition=o,e.definition.modules=e.definition.modules||[],e.definition.modules=e.definition.modules.concat(n)),e.hasModules=e.definition.modules?.length>0;for(let n=0;n<e.definition.modules?.length;n++){const o=e.definition.modules[n],i=Object.keys(o)[0],s={name:i,childs:[],parent:e,definition:o[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}}async function de({node:e,transformExpression:t}){const n=e.context.transform;Reflect.has(n,"export")&&(n.export=await t(n.export)),Reflect.has(n,"return")&&(e.hasReturn=!0,n.return=await t(n.return)),n.hasOwnProperty("nextArgs")&&(e.hasNextArgs=!0,n.nextArgs=await t(n.nextArgs))}async function fe({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||b(e.definition),e.context.transform;for(const t of e.childs)t.context.transform=t.context.transform||b(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await o(t.definition.condition));await de({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var me={hits:async function({node:e}){return!!e.definition.hasOwnProperty("switch")},init:async function({node:e,initNode:t}){e.type="switch";const n=e.definition.switch||[];if(!n.every((e=>e.hasOwnProperty("condition")||e.hasOwnProperty("default"))))throw new Error("Switch must have condition or default");if(0===n.filter((e=>e.hasOwnProperty("condition"))).length)throw new Error("Switch must have at least one condition");const o=n.filter((e=>e.hasOwnProperty("default")));if(o.length>1)throw new Error("Switch must have only one default");if(1===o.length&&!n[n.length-1].hasOwnProperty("default"))throw new Error("Switch default must be the last child");e.hasDefaultCondition=1===o.length,await le({node:e,initNode:t}),e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0;for(let n=0;n<e.definition.switch.length;n++){let o=e.definition.switch[n],i=`${n}`;o.hasOwnProperty("default")&&(i="default",o=o.default);const s={name:o.condition||i,childs:[],parent:e,definition:o,index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=fe},resolve:fe};var ue={hits:async function({node:e}){return 1===Object.keys(e.definition).map((e=>B({expression:e}))).filter((e=>"if"===e?.processor)).length},init:async function(e){const{node:t}=e,n=Object.keys(t.definition).map((e=>B({expression:e}))),o=[],i=n.find((e=>"if"===e?.processor)),s=t.definition[i.expression];o.push({name:`${t.name}_if`,definition:s,processor:i}),delete t.definition[i.expression];const a=n.filter((e=>"elseif"===e?.processor));let r=0;for(const e of a){const n=t.definition[e.expression];o.push({name:`${t.name}_elseif_${r++}`,definition:n,processor:e}),delete t.definition[e.expression]}t.definition.switch=[];for(const e of o)t.definition.switch.push({condition:e.processor.statement,...e.definition});if(t.definition?.else){const e=t.definition.else;t.definition.switch.push({default:e}),delete t.definition.else}await me.init(e)}};async function he({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){if(e.context.transform=e.context.transform||b(e.definition),e.context.transform,e.context.try=e.childs.find((e=>"try"===e.name)),e.context.except=e.childs.find((e=>"except"===e.name)),e.context.except){const t=e.context.except;t.context.transform=t.context.transform||b(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await de({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var ye={hits:async function({node:e}){return e.definition.hasOwnProperty("try")&&e.definition.hasOwnProperty("except")},init:async function({node:e,initNode:t}){if(e.type="tryexcept",await le({node:e,initNode:t}),e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0,e.definition.try){const n="try",o={name:n,childs:[],parent:e,definition:e.definition[n],index:e.childs.length,context:{}};e.childs.push(o),await t({node:o})}if(e.definition.except){const n="except",o={name:n,childs:[],parent:e,definition:e.definition[n],index:e.childs.length,context:{}};e.childs.push(o),await t({node:o})}e.resolve=he},resolve:he};async function we({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||b(e.definition);const i=e.context.transform;for(let e=0;e<i.assign?.length;e++){let t=i.assign[e],n=Object.keys(t)[0],s=t[n],a={key:await o(n),value:await o(s)};i.assign[e]=a}await de({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var ge={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",await le({node:e,initNode:t}),e.resolve=we},resolve:we};async function be({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||b(e.definition);e.context.transform.for.in=await o(e.definition.for.in),await de({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var xe={hits:async function({node:e}){return e.definition.hasOwnProperty("for")},init:async function({node:e,initNode:t}){if(e.type="for",await le({node:e,initNode:t}),e.blockAutoJumpToParent=!0,e.blockAutoJumpToSibling=!1,!e.definition.for.hasOwnProperty("steps")){const t=["value","in"],[n,o]=[M(e.definition.for,t),J(e.definition.for,t)];e.definition.for=n,e.definition.for.steps=[{[`${e.name}_step`]:o}]}Array.isArray(e.definition.for.steps)||(e.definition.for.steps=[{[`${e.name}_step`]:e.definition.for.steps}]);for(let n=0;n<e.definition.for.steps.length;n++){const o=e.definition.for.steps[n],i=Object.keys(o)[0],s={name:i,childs:[],parent:e,definition:o[i],index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=be},resolve:be};var ke={hits:async function({node:e}){return!1},init:async function({node:e,initNode:t}){},resolve:async function({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o,transformValue:i}){}};async function ve({node:e,resolveTypeCommon:t,transformExpression:n}){e.context.transform=e.context.transform||b(e.definition);const o=e.context.transform;o.raise=await n(o.raise),await t({node:e})}var je={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=ve},resolve:ve};async function _e({node:e,resolveTypeCommon:t,transformExpression:n}){e.context.transform=e.context.transform||b(e.definition);const o=e.context.transform;e.hasReturn=!0,o.return=await n(o.return),await t({node:e})}var De={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=_e},resolve:_e};async function Ee({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||b(e.definition);const i=e.context.transform;if("function"===e.target?.atom?.doc?.type&&(i.call=await o(e.target.atom.name)),i.args&&(i.args=await o(i.args)),i.result){"string"==typeof i.result&&(i.result=[{[i.result]:"e::result"}]);for(let e=0;e<i.result?.length;e++){let t=i.result[e],n=Object.keys(t)[0],s=t[n],a={key:await o(n),value:await o(s)};i.result[e]=a}}const s=e.workflow.parent;i.import?e.context.lib=s.context.libs.find((e=>e.name===i.import)):e.context.lib=s.context.libs.find((e=>e.name===i.call)),await de({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var Se={hits:async function({node:e}){return e.definition.hasOwnProperty("call")},init:async function({node:e,initNode:t}){e.type="call",await le({node:e,initNode:t}),e.resolve=Ee},resolve:Ee};async function Pe({node:e,transformExpression:t}){e.context.next=e.childs[0],e.context.transform=e.context.transform||b(e.definition),await de({node:e,transformExpression:t})}var $e={hits:async function({node:e}){return e.definition.hasOwnProperty("steps")},init:async function({node:e,initNode:t}){e.type||(e.type="steps");const n=e.definition.steps||[];for await(const o of n){const n=Object.keys(o)[0],i={name:n,childs:[],parent:e,definition:o[n],index:e.childs.length,context:{}};e.childs.push(i),await t({node:i})}e.resolve=Pe},resolve:Pe};async function Te({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||b(e.definition);const i=e.context.transform;i.props&&(i.props=await o(i.props));const s=e.workflow.parent;e.context.lib=s.context.libs.find((e=>e.name===i.form)),await de({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var Ne={hits:async function({node:e}){return e.definition.hasOwnProperty("form")},init:async function({node:e,initNode:t}){e.type="form",await le({node:e,initNode:t}),e.resolve=Te},resolve:Te};async function Ce({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o,transformValue:i}){e.context.transform=e.context.transform||b(e.definition),await t({node:e})}var Fe={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=Ce},resolve:Ce};async function Ae({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||b(e.definition);const i=e.context.transform;i.next=await o(i.next),await de({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var Oe={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=Ae},resolve:Ae};async function Ie({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||b(e.definition),e.context.transform,await de({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var Be={hits:async function({node:e}){return e.definition.hasOwnProperty("modules")},init:async function({node:e,initNode:t}){e.type="modules",await le({node:e,initNode:t}),e.resolve=Ie},resolve:Ie};function Ke({node:e}){const t=e.definition;if(!e.hasReturn)if("end"===t.next);else if("stop"===t.next);else if("none"===t.next);else if(t.next){let n=e.parent;for(;n.parent;){const o=n.childs.find((e=>e.name===t.next));if(o){e.context.next=o;break}n=n.parent}}else{if(!0===e.module)return;let t=e.parent,n=e.index+1;for(;t.parent&&(!t.blockAutoJumpToParent||!t.blockAutoJumpToSibling);)if(Reflect.has(t,"blockAutoJumpToParent")||Reflect.has(t,"blockAutoJumpToSibling")){if(t.blockAutoJumpToParent){const o=t.childs.find((e=>e.index===n));o&&(e.context.next=o);break}t.blockAutoJumpToParent||(n=t.index+1,t=t.parent)}else{const o=t.childs.find((e=>e.index===n));if(o){e.context.next=o;break}n=t.index+1,t=t.parent}}}class Re{#e;#t;#n;#o;constructor({key:e,npm:t,master:n,extras:o}){this.#e=e,this.#t=t,this.#n=n,this.#o=o}hits({node:e}){return e.definition.hasOwnProperty(this.#e)}async init(e){const{node:t}=e,n=this.#e,o=t.definition,i=typeof o[n];if(o.call=`npm:${this.#t}`,o.args="object"!==i?{...o.args,[`${this.#n}`]:o[n]}:o[n],delete o[n],this.#o)for(const e in this.#o)o[e]=this.#o[e];console.log(`[npm-block] ${this.#e} --\x3e ${this.#t}`),await Se.init(e)}}function Me(e){return new Re(e)}class Je{#i;#s;#a;#r;#c;#p;#l;#d;#f;#m;#u;#h;#y;#w;#g;#b;#x;#k;#v;#j;#_;#D=[];constructor(e){this.#i=new Y,this.#s=e,this.#p=[],this.#l=[],this.#d={},this._expire_ttl=3600,this._expire_ttl_short=300,this.#D.push(Me({key:"config",npm:"@fnet/config",master:"name"})),this.#D.push(Me({key:"yaml",npm:"@fnet/yaml",master:"file"})),this.#D.push(Me({key:"prompt",npm:"@fnet/prompt",master:"message"})),this.#D.push(Me({key:"html-link",npm:"@flownet/lib-load-browser-link-url",master:"src"})),this.#D.push(Me({key:"html-script",npm:"@flownet/lib-load-browser-script-url",master:"src"})),this.#D.push(Me({key:"http-server",npm:"@fnet/node-express",master:"server_port"})),this.#D.push(Me({key:"shell",npm:"@fnet/shell-flow",master:"commands"})),this.#D.push(Me({key:"list-files",npm:"@fnet/list-files",master:"pattern"})),this.#D.push(Me({key:"up-list-files",npm:"@fnet/up-list-files",master:"pattern"})),this.#D.push(Me({key:"auto-conda-env",npm:"@fnet/auto-conda-env",master:"envDir"})),this.#D.push(Me({key:"ollama-chat",npm:"@fnet/ollama-chat",master:"model"})),this.#D.push(Me({key:"ai",npm:"@fnet/ai",master:"prompt",extras:{subtype:"flow"}})),this.#D.push(Me({key:"invoke",npm:"@fnet/invoke",master:"method",extras:{}})),this.#D.push(Me({key:"fetch",npm:"@fnet/fetch",master:"url",extras:{}})),this.#D.push(Me({key:"filemap",npm:"@fnet/filemap",master:"target",extras:{}})),this.#j={packageDependencies:this.#p,packageDevDependencies:this.#l,setProgress:this.setProgress.bind(this),context:this.#s,Atom:D,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#_={initNode:this.initNode.bind(this),cloneDeep:b,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:Ke,transformExpression:this.transformExpression.bind(this),transformValue:this.transformValue.bind(this)}}async _cache_set(e,t,n){this._redis_client&&await this._redis_client.SETEX(e,n||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await async function(){if(!await v({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=k.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e}(),this.#u=this.#s.buildId||j(),this.#j.buildId=this.#u,this.#g=this.#s.mode,this.#b=["all","deploy","build","file"].includes(this.#g),this.#x=["all","deploy","build"].includes(this.#g),this.#k=["all","deploy"].includes(this.#g),this.#v=["all","deploy","build","file","bpmn"].includes(this.#g),this.#y=this.#s.protocol,this.#h="BUILD:"+this.#u,this.#w=(await h({optional:!0,name:"atom",dir:this.#s.projectDir,tags:this.#s.tags}))?.data;try{await this.setProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),this.transformWorkflow({workflow:this.#r});const e=await this.initNodeTree({workflow:this.#r});await this.initNodeTreeIndex({root:e}),await this.initNodeCalls({root:e}),await this.initNodeCallLibs({root:e}),await this.initNodeForms({root:e}),await this.initNodeFormLibs({root:e}),await this.initEntryFiles({root:e,features:this.#a.doc.features}),await this.initFeaturesFromNodes({childs:e.childs,features:this.#a.doc.features}),await ee(this.#j),await async function({atom:e,packageDependencies:t,packageDevDependencies:n,setProgress:o}){o("Initializing dependencies");const i=e.doc.dependencies||[];if(i.filter((e=>!e.dev)).forEach((e=>t.push(e))),i.filter((e=>e.dev)).forEach((e=>n.push(e))),"workflow"===e.type&&(t.push({package:"get-value",version:"^3"}),t.push({package:"set-value",version:"^4"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let n="^18.2";o("Fetching React versions"),n=`^${(await P({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:n}),t.push({package:"react-dom",version:n}),"workflow"===e.type&&(t.push({package:"@fnet/react-app",version:"^0.1"}),t.push({package:"@fnet/react-app-state",version:"^0.1"}))}e.doc.features.preact_enabled&&t.push({package:"preact",version:"^10"}),!0===e.doc.features.cli.enabled&&(t.push({package:"@fnet/args",version:"^0.1"}),n.push({package:"ajv",version:"^8"}),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled&&t.push({package:"@fnet/config",version:"0.2.21"})),e.doc.features.render&&!1!==e.doc.features.render.enabled&&n.push({package:"@flownet/lib-render-templates-dir",version:"0.1.19"}),n.push({package:"@babel/core",version:"^7"}),n.push({package:"@rollup/plugin-commonjs",version:"^28"}),n.push({package:"@rollup/plugin-node-resolve",version:"^16"}),n.push({package:"@rollup/plugin-replace",version:"^6"}),n.push({package:"rollup",version:"^4"}),e.doc.features.dts_enabled&&n.push({package:"rollup-plugin-dts",version:"^6"}),n.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),n.push({package:"@rollup/plugin-alias",version:"^5"}),n.push({package:"fs-extra",version:"^11"}),e.doc.features.babel_enabled&&(n.push({package:"@rollup/plugin-babel",version:"^6"}),n.push({package:"@babel/preset-env",version:"^7"}),n.push({package:"@babel/preset-react",version:"^7"}),e.doc.features.babel?.options?.plugins?.forEach((e=>{switch(e[0]){case"@babel/plugin-proposal-decorators":n.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":n.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":n.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":n.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":n.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"})}}))),n.push({package:"@fnet/rollup-plugin-delete",version:"0.1.10"}),e.doc.features.browsersync_enabled&&n.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.11"})}(this.#j),await this.initAtomLibsAndDeps({libs:e.context.libs,packageDependencies:this.#p}),await this.resolveNodeTree({root:e}),this.#m=e}catch(e){throw await this._cache_set(this.#h,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#s.id&&(this.#f=await this.#i.init({config:this.#w}),this.#j.atomAccessToken=this.#f)}async initWorkflow(){const e=this.#s.id;this.#a=this.#s.project?.workflowAtom||await D.get({id:e}),this.#r="string"==typeof this.#a.doc.content?(await u({content:this.#a.doc.content,tags:this.#s.tags})).parsed:this.#a.doc.content;let t=this.#a.doc.bundleName;t=t||(this.#a.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#a.doc.bundleName=t,this.#a.type=this.#a.type||"workflow",this.#j.atom=this.#a,this.#a.doc.features=this.#a.doc.features||{}}#E(t){console.log("filePath",t),a.statSync(t).isDirectory()?(a.readdirSync(t).forEach((n=>{const o=e.join(t,n);this.#E(o)})),a.rmSync(t)):a.unlinkSync(t)}#S(t,n){const o=a.existsSync(t),i=o&&a.statSync(t);o&&i.isDirectory()?(a.mkdirSync(n,{recursive:!0}),a.readdirSync(t).forEach((o=>{this.#S(e.join(t,o),e.join(n,o))}))):a.copyFileSync(t,n)}async initWorkflowDir(){this.setProgress({message:"Initializing library directory."});const t=this.#s.projectDir,n=this.#s.coreDir;this.setProgress({message:"Cleaning project directory."});const o=K({dir:t,ignore:[".cache","node_modules",".conda"],absolute:!0});for(const e of o)a.rmSync(e,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."}),a.existsSync(t)||a.mkdirSync(t,{recursive:!0});const i=e.join(t,"src");a.existsSync(i)||a.mkdirSync(i,{recursive:!0});const s=e.join(i,"core");this.#S(n,s);const r=e.join(i,"default","blocks");a.existsSync(r)||a.mkdirSync(r,{recursive:!0})}async initNunjucks(){this.setProgress({message:"Initializing nunjucks."});const e=this.#s.templateDir;this.#c=g.configure(e,{watch:!1,dev:!0}),this.#j.njEnv=this.#c}transformWorkflow({workflow:e}){for(const t of Object.values(e))t.steps=t.steps||[],t.steps=t.steps.filter((e=>Object.keys(e).length>0)),t.steps=t.steps.map((e=>this.transformStep({step:e})))}transformStep({step:e}){if(Array.isArray(e))throw new Error("Step must be an object.");const[t,n]=Object.entries(e)[0];if(n.hasOwnProperty("onerror")){const{onerror:o,...i}=n;e[t]={try:i,except:o}}if(e[t].hasOwnProperty("steps")){const n=e[t].steps;if(!Array.isArray(n))throw new Error("Steps must be an array.");e[t].steps=n.map((e=>this.transformStep({step:e})))}return e}async initNodeTree({workflow:e}){const t=Object.keys(e),n={definition:e,name:void 0,type:"root",parent:void 0,childs:[],blockAutoJumpToParent:!0,blockAutoJumpToSibling:!0,index:0,depth:0,context:{libs:[],atom:this.#a}};t.forEach((t=>{const o={name:t,type:"main"===t?"workflow":"subworkflow",childs:[],parent:n,definition:e[t],index:n.childs.length,depth:n.depth+1,context:{},blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1};n.childs.push(o)}));for await(const e of n.childs)await this.initNode({node:e});return n}async initNode({node:e}){const t={...this.#_,node:e};if(e.workflow=e.parent.workflow||e,e.depth=e.parent.depth+1,await ye.hits(t))await ye.init(t);else if(await xe.hits(t))await xe.init(t);else if(await me.hits(t))await me.init(t);else if(await ue.hits(t))await ue.init(t);else if(await ke.hits(t))await ke.init(t);else if(await ge.hits(t))await ge.init(t);else if(await je.hits(t))await je.init(t);else if(await Se.hits(t))await Se.init(t);else if(this.#D.find((e=>e.hits(t))))await this.#D.find((e=>e.hits(t))).init(t);else if(await Ne.hits(t))await Ne.init(t);else if(await Fe.hits(t))await Fe.init(t);else if(await $e.hits(t))await $e.init(t);else if(await Oe.hits(t))await Oe.init(t);else if(await Be.hits(t))await Be.init(t);else{if(!await De.hits(t))throw new Error("Undefined step type.");await De.init(t)}}async initNodeTreeIndex({root:e}){const t={};e.indexKey="/";for await(const n of e.childs)await this.initNodeIndex({node:n,index:t});return e.context.index=t,t}async initNodeIndex({node:t,index:n}){const o=e.join(t.parent.indexKey,t.name);t.indexKey=o,n[o]=t;const i=[];let s=t;for(;s?.parent;)i.push(s.index),s=s.parent;i.reverse(),t.codeKey=`B_${i.join("_")}_${t.type}`,t.pathKey=`${i.join(".")}`,t.typeId=j();for await(const e of t.childs)await this.initNodeIndex({node:e,index:n})}async initNodeCalls({root:e}){const t=e.context.index,n=[];for await(const e of Object.keys(t)){const o=t[e];"call"===o.type&&n.push(o)}return e.context.calls=n,n}async initNodeCallLibs({root:e}){const t=[],n=e.context.calls;for await(const e of n){const n=e.definition.import||e.definition.call,o=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:n,type:"atom",definition:e.definition},i=t.find((e=>e.name===o.name&&e.type===o.type));i||t.push(o),e.target=i||o}return e.context.callLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeCallTarget({refNode:e,curNode:t}){if(!t)return;const n=e.definition.call,o=t.childs.find((e=>e.name===n&&"subworkflow"===e.type));return o||await this.findNodeCallTarget({refNode:e,curNode:t.parent})}async initNodeForms({root:e}){const t=e.context.index,n=[];for await(const e of Object.keys(t)){const o=t[e];"form"===o.type&&n.push(o)}return e.context.forms=n,n}async initNodeFormLibs({root:e}){const t=[],n=e.context.forms;for await(const e of n){const n=e.definition.import||e.definition.form,o=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:n,type:"atom"},i=t.find((e=>e.name===o.name&&e.type===o.type));i||t.push(o),e.target=i||o}return e.context.formLibs=t,e.context.libs=[...e.context.libs,...t],t}async initFeaturesFromNodes({childs:e,features:t}){for await(const n of e)"form"!==n.type||Reflect.has(t,"form")||(t.form=!0),await this.initFeaturesFromNodes({childs:n.childs,features:t})}async initEntryFiles({root:e,features:t}){for await(const n of e.childs){let e;if("main"===n.name)e="index.js";else if("cli"===n.name)e="cli.js";else if("app"===n.name)e="app.js";else{if("api"!==n.name)continue;e="api.js"}t[`${n.name}_default_entry_file`]=e,n.entryFile=e}}async findNodeFormTarget({refNode:e,curNode:t}){if(!t)return;const n=e.definition.form,o=t.childs.find((e=>e.name===n&&"subworkflow"===e.type));return o||await this.findNodeFormTarget({refNode:e,curNode:t.parent})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const n=e.filter((e=>"atom"===e.type));for(let e=0;e<n.length;e++){const o=n[e],i=await this.findAtomLibrary({url:o.name,libRef:o});o.atom=i;const s=i.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));s?.forEach((e=>{const n=t.find((t=>t.package===e.package));n?"string"==typeof e.path?(n.path||[]).some((t=>t===e.path))||(n.path=n.path||[],n.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(n.path||[]).some((t=>t===e))||(n.path=n.path||[],n.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:t,libRef:n}){const o=A({url:t});if(!o)throw new Error(`Invalid package name: ${t}`);if(o.protocol||(o.protocol=this.#y),"ac:"===o.protocol){const e=o.pathname.split("/");if(1===e.length)return await D.first({where:{name:t,parent_id:this.#w.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===e.length){const t=await D.first({where:{name:e[0],parent_id:this.#w.env.ATOM_LIBRARIES_ID,type:"folder"}});return await D.first({where:{name:e[1],parent_id:t.id,type:"workflow.lib"}})}}else{if("local:"===o.protocol){const t=e.resolve(this.#s.projectSrcDir,`${o.pathname}.js`),n=[],i=(await S({file:t,recursive:!0})).all;for await(const e of i){if("npm"!==e.type)continue;if(n.find((t=>t.package===e.package)))continue;const t=await te({name:e.package,projectDir:this.#s.projectDir,setProgress:this.#j.setProgress});n.push({package:e.package,subpath:e.subpath,version:t.minorRange,type:"npm"})}return{name:o.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:n},protocol:o.protocol}}if("npm:"===o.protocol){const e=await te({name:o.pathname,projectDir:this.#s.projectDir,setProgress:this.#j.setProgress});return{name:o.pathname,doc:{type:"workflow.lib",subtype:"flow"===n?.definition?.subtype?"workflow":null,"content-type":"javascript",language:"js",dependencies:[{package:o.pathname,version:e.minorRange,type:"npm"}]},protocol:o.protocol}}if("use:"===o.protocol){return{name:o.pathname,doc:{type:"function",dependencies:[]},protocol:o.protocol}}}}async resolveNodeTree({root:e}){for await(const t of e.childs)await this.resolveTypeWorkflow({node:t})}async resolveTypeWorkflow({node:e}){e.context.transform=e.context.transform||b(e.definition);const t=e.context.transform;for(let e=0;e<t.params?.length;e++){const n=t.params[e];if("string"==typeof n)t.params[e]={key:n,hasDefault:!1};else{const o=Object.keys(n)[0];t.params[e]={key:o,hasDefault:!0,default:n[o],type:typeof n[o]}}}e.context.next=e.childs[0];for await(const t of e.childs)await this.resolveType({node:t})}async resolveType({node:e}){const t={...this.#_,node:e};"function"==typeof e.resolve&&await e.resolve(t);for await(const t of e.childs)await this.resolveType({node:t})}async resolveTypeCommon({node:e}){const t=e.context.transform;t.hasOwnProperty("operation")&&(t.operation=await this.transformExpression(t.operation)),t.hasOwnProperty("page")&&(t.page=await this.transformExpression(t.page)),t.hasOwnProperty("print")&&(t.print=await this.transformExpression(t.print)),t.hasOwnProperty("sleep")&&(t.sleep=await this.transformExpression(t.sleep)),t.hasOwnProperty("assert")&&(t.assert=await this.transformExpression(t.assert))}async createAtomLibFiles({root:t}){await this.setProgress({message:"Creating external lib files."}),this.#a.typesDir="./types";const n=t.context.libs.filter((e=>"atom"===e.type));for(let t=0;t<n.length;t++){const o=n[t].atom,i=this.#s.projectDir;if("local:"===o.protocol){const t=e.resolve(this.#s.projectSrcDir,`${o.fileName||o.name}.js`),n=e.relative(`${this.#s.projectDir}/src/default/blocks`,t);if(!a.existsSync(t)){a.mkdirSync(e.dirname(t),{recursive:!0});let n="export default async (args)=>{\n";n+="}",a.writeFileSync(t,n,"utf8")}o.relativePath=n.split(e.sep).join("/"),this.#a.typesDir=`./types/${e.basename(i)}/src`}else if("npm:"===o.protocol)o.relativePath=o.name;else if("use:"===o.protocol);else{const t=`${i}/src/libs/${o.id}.js`,n=o.doc.contents?.find((e=>"esm"===e.format))||o.doc;a.writeFileSync(e.normalize(t),n.content,"utf8")}}}async createEngine({root:t}){await this.setProgress({message:"Creating engine file."});const n=this.#s.templateDir,o=g.compile(a.readFileSync(e.resolve(n,"src/default/engine.js.njk"),"utf8"),this.#c);for(let n=0;n<t.childs.length;n++){const i=t.childs[n];if(!i.entryFile)continue;const s=o.render({flow:i,ui:{package:"@fnet/react-app"}}),r=this.#s.projectDir,c=e.resolve(r,`src/default/${i.entryFile}`);a.writeFileSync(c,s,"utf8")}}async createNodeTree({root:e}){await this.setProgress({message:"Creating block files."});for await(const t of e.childs)await this.createTypeWorkflow({node:t})}async createTypeWorkflow({node:t}){const n=this.#s.templateDir,o=g.compile(a.readFileSync(e.resolve(n,"src/default/workflow.js.njk"),"utf8"),this.#c).render(t),i=this.#s.projectDir,s=e.resolve(i,`src/default/${t.codeKey}.js`);a.writeFileSync(s,o,"utf8");for await(const e of t.childs)await this.createType({node:e})}async createType({node:e}){switch(e.type){case"assign":case"steps":case"return":case"call":case"form":case"raise":case"switch":case"jump":case"tryexcept":case"for":case"operation":case"modules":this.createBlockFromTemplate({node:e})}for await(const t of e.childs)await this.createType({node:t})}createBlockFromTemplate({node:e}){const t=this.getBlockTemplate({node:e});e.context.render=t.render(e),this.createStepFile({node:e})}getBlockTemplate({node:t}){let n=this.#d[t.type];if(n)return n;const o=this.#s.templateDir;return n=g.compile(a.readFileSync(e.resolve(o,`src/default/blocks/${t.type}.js.njk`),"utf8"),this.#c),this.#d[t.type]=n,n}createStepFile({node:t}){const n=this.#s.projectDir,o=`${t.codeKey}.js`,i=e.resolve(n,`src/default/blocks/${o}`);a.writeFileSync(i,t.context.render,"utf8"),t.context.fileName=o,t.context.filePath=i}async transformExpression(e){let t=await this.transformValue(e);return t=JSON.stringify(t),t=this.replaceSpecialPattern(t),t}async transformValue(e){if(Array.isArray(e))for(let t=0;t<e.length;t++)e[t]=await this.transformValue(e[t]);else if(x(e)){const t=Object.keys(e);for(let n=0;n<t.length;n++){const o=t[n],i=B({expression:o});if(i)if("e"===i.processor){const t=e[o].replace(/(\r\n|\n|\r)/g,"");e[i.statement]=`$::${t}::`,delete e[o]}else e[o]=await this.transformValue(e[o]);else e[o]=await this.transformValue(e[o])}}else if("string"==typeof e){const t=B({expression:e});if(t){const{processor:n,statement:o}=t;switch(n){case"v":e=`$::v.${o}::`;break;case"e":e=`$::${o}::`;break;case"m":e=`$::c.module['${o}']::`;break;case"fm":e=`$::flow.getModule('${o}')::`;break;case"f":e=`$::c.form.${o}::`;break;case"for":e=`$::caller.for.${o}::`}}}return e}replaceSpecialPattern(e){return e.replace(/"\$::(.*?)::"/g,"$1")}replaceExpressionLegacy(e){return e.replaceAll(/(?<outer>"\${(?<inner>[^{]*)}")/g,"$2")}async createProjectYaml(){const t="fnet.yaml",n=`Creating ${t}`;await this.setProgress({message:n});const{content:o,...i}=this.#a.doc,s={content:p.stringify(i)},r=this.#s.templateDir,c=g.compile(a.readFileSync(e.resolve(r,`${t}.njk`),"utf8"),this.#c).render(s),l=this.#s.projectDir,d=e.resolve(l,`${t}`);a.writeFileSync(d,c,"utf8")}async createProjectMainYaml(){const t="flow.main.yaml",n=`Creating ${t}`;await this.setProgress({message:n});const o={content:p.stringify(this.#r)},i=this.#s.templateDir,s=g.compile(a.readFileSync(e.resolve(i,`${t}.njk`),"utf8"),this.#c).render(o),r=this.#s.projectDir,c=e.resolve(r,`${t}`);a.writeFileSync(c,s,"utf8")}async runPrettifier(){const t=this.#s.projectDir;if(z("bun")){const n=await m("prettier --write .",{cwd:e.resolve(t,"src")});if(0!==n.code)throw new Error(n.stderr)}else{const n=await m("prettier --write .",{cwd:e.resolve(t,"src")});if(0!==n.code)throw new Error(n.stderr)}}async deploy(){if(await this.setProgress({message:"Deploying."}),this.#s.project?.devops){const e=[this.#s.project?.devops];for(let t=0;t<e.length;t++){let n=e[t];await this.deployProject({deploymentProject:n}),!0===n.isDirty&&await n.save()}}else if(this.#a.id){const e=await D.list({type:"workflow.deploy",parent_id:this.#a.id});for(let t=0;t<e.length;t++){let n=e[t];await this.deployProject({deploymentProject:n}),!0===n.isDirty&&(n=await D.update(n,{id:n.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:n}=t;if(t.doc.targets&&Array.isArray(t.doc.targets))throw new Error("Deployment project targets are deprecated. Please update targets in the yaml file.");const o=Object.keys(t.doc||{}),i=n||{};for(let e=0;e<o.length;e++){const n=t.doc[o[e]];n.name=o[e];const s=i.get(o[e]);await ne({...this.#j,deploymentProject:t,deploymentProjectTarget:n,yamlTarget:s})}}async registerToPackageManager(e){const{target:t,packageJSON:n}=e;if(!this.#s.id)return;let o=await D.first({name:t.params.name,parent_id:this.#w.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:n.version}),await D.update(o,{id:o.id})):o=await D.create({parent_id:this.#w.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:n.version}]}})}async setProgress(e){const t="string"==typeof e?e:e?.message;console.log(d.blue(t)),await this._cache_set(this.#h,{status:"IN_PROGRESS",message:t})}async build(){if(this.#v&&!this.#b)return await this.createNetwork();try{const t=this.#v?await pe({root:this.#m}):void 0;if(this.#b){if(await this.initWorkflowDir(),await this.initNunjucks(),this.#v){let n=this.#s.project?.projectDir||this.#s.projectDir;n=e.resolve(n,"fnet"),a.existsSync(n)&&a.writeFileSync(e.resolve(n,"flow.bpmn"),t.diagramXML,"utf8")}await this.createAtomLibFiles({root:this.#m}),await this.createEngine({root:this.#m}),await this.createNodeTree({root:this.#m}),await this.createProjectYaml(),await async function({atom:t,context:n,setProgress:o,Atom:i}){const s="readme.md",r=`Creating ${s}`;if(await o({message:r}),n.project?.readme){const t=n.projectDir,o={content:n.project.readme.doc.content},i=e.resolve(n.project.projectDir,"fnet/how-to.md");if(a.existsSync(i)){const e=a.readFileSync(i,"utf8");o.howto=e}const r=e.resolve(n.project.projectDir,"fnet/input.yaml");if(a.existsSync(r)){const e=await u({file:r,tags:n.tags});o.input=e.content}const c=e.resolve(n.project.projectDir,"fnet/output.yaml");if(a.existsSync(c)){const e=await u({file:c,tags:n.tags});o.output=e.content}const p=n.templateDir,l=g.compile(a.readFileSync(e.resolve(p,`${s}.njk`),"utf8"),g.configure(p)).render(o),d=e.resolve(t,`${s}`);a.writeFileSync(d,l,"utf8")}else if(t.id){const o=await i.first({type:"wiki",parent_id:t.id});if(!o||"markdown"!==o.doc?.["content-type"])return;const{content:r,...c}=o.doc,p={content:r},l=n.templateDir,d=g.compile(a.readFileSync(e.resolve(l,`${s}.njk`),"utf8"),g.configure(l)).render(p),f=n.projectDir,m=e.resolve(f,`${s}`);a.writeFileSync(m,d,"utf8")}}(this.#j),await async function({atom:t,setProgress:n,context:o,packageDependencies:i}){await n({message:"Creating tsconfig.json."});const s={atom:t,packageDependencies:i},r=o.templateDir,c=g.compile(a.readFileSync(e.resolve(r,"tsconfig.json.njk"),"utf8"),g.configure(r)).render(s),p=o.projectDir,l=e.resolve(p,"tsconfig.json");a.writeFileSync(l,c,"utf8")}(this.#j),await async function({atom:t,setProgress:n,context:o,packageDependencies:i}){await n({message:"Creating .gitignore"});const s={atom:t,packageDependencies:i},r=o.templateDir,c=g.compile(a.readFileSync(e.resolve(r,".gitignore.njk"),"utf8"),g.configure(r)).render(s),p=o.projectDir,l=e.resolve(p,".gitignore");a.writeFileSync(l,c,"utf8")}(this.#j),await async function({atom:t,setProgress:n,context:o,njEnv:i}){if(!0!==t.doc.features.cli.enabled)return;await n({message:"Creating yargs."});let s={};if(s=t.doc.input?t.doc.input:{type:"object",properties:{},required:[]},t.doc.features.cli.fargs&&!1!==t.doc.features.cli.fargs?.enabled){const e=t.doc.features.cli.fargs,n={type:"string",description:"Config name to load args",hidden:!1},o={type:"array",description:"Tags to filter the config",hidden:!1};Reflect.has(e,"default")&&(n.default=e.default),s.properties&&(s.properties.fargs=n,s.properties.ftag=o)}const r={options:s,imports:[],atom:t},c=o.templateDir,p=g.compile(a.readFileSync(e.resolve(c,"src/default/to.args.js.njk"),"utf8"),i).render(r),l=o.projectDir,d=e.resolve(l,"src/default/to.args.js");a.writeFileSync(d,p,"utf8");const f=new N({allErrors:!0,useDefaults:!0,formats:{},strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}});F(f);const m=f.compile(s),u=C(f,m);a.writeFileSync(e.resolve(l,"src/default/validate_input.js"),u,"utf8")}(this.#j),await async function({atom:t,setProgress:n,context:o,packageDependencies:i}){if(!0!==t.doc.features.cli.enabled)return;await n({message:"Creating cli."});const s={atom:t,packageDependencies:i},r=o.templateDir,c=e.resolve(o.projectDir,"src/cli");a.existsSync(c)||a.mkdirSync(c,{recursive:!0}),await y({pattern:["index.js.njk"],dir:e.resolve(r,"src/cli"),outDir:c,context:s})}(this.#j),await async function({atom:t,setProgress:n,context:o,packageDependencies:i}){if(!0!==t.doc.features.app.enabled)return;await n({message:"Creating app folder"});const s={atom:t,packageDependencies:i,ts:Date.now()},r=o.templateDir,c=e.resolve(o.projectDir,"src/app");a.existsSync(c)||a.mkdirSync(c,{recursive:!0});let p=["index.js.njk"];!1!==t.doc.features.app.html&&p.push("index.html.njk"),await y({pattern:p,dir:e.resolve(r,"src/app"),outDir:c,context:s})}(this.#j),await async function({atom:t,setProgress:n,context:o,packageDependencies:i}){await n({message:"Creating rollup file."});const s={atom:t,packageDependencies:i},r=e.resolve(o.projectDir,"src","default/index.js");if(!a.existsSync(r))throw new Error(`Entry file not found: ${r}`);const c=(await S({file:r,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),p=t.doc.features.rollup_output,l=Object.keys(p);for(let e=0;e<l.length;e++){const t=p[l[e]];if(!0===t.browser&&c.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(c.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<c.length;e++){const n=c[e];t.alias.entries[n]=`node:${n}`,t.alias.entries[`node:${n}`]=n}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(c)}}const d=o.templateDir;let f=g.compile(a.readFileSync(e.resolve(d,"rollup.config.mjs.njk"),"utf8"),g.configure(d)).render(s);const m=o.projectDir;let u=e.resolve(m,"rollup.config.mjs");a.writeFileSync(u,f,"utf8")}(this.#j),await async function({atom:t,context:n,packageDependencies:o,packageDevDependencies:i,setProgress:s}){await s({message:"Creating package.json."}),o.filter((e=>!0===e.dev)).forEach((e=>{i.find((t=>t.package===e.package))||i.push(e);const t=o.findIndex((t=>t.package===e.package));o.splice(t,1)}));const r=o.find((e=>"react"===e.package)),c=o.find((e=>"react-dom"===e.package));r&&!c?o.push({package:"react-dom",version:r.version}):r&&c&&(c.version=r.version),r&&t.doc.features.react_version>=17&&(o.find((e=>"@emotion/react"===e.package))||o.push({package:"@emotion/react",version:"^11"}),o.find((e=>"@emotion/styled"===e.package))||o.push({package:"@emotion/styled",version:"^11"}));const p=[];!0===t.doc.features.app.enabled&&p.push({file:e.resolve(n.projectDir,"src/app/index.js"),dev:!1!==t.doc.features.app.dev}),!0===t.doc.features.cli.enabled&&p.push({file:e.resolve(n.projectDir,"src/cli/index.js"),dev:!1!==t.doc.features.cli.dev});for await(const e of p){const t=e.file;if(!a.existsSync(t))throw new Error(`App file not found: ${t}`);const r=(await S({file:t,recursive:!0})).all;for await(const t of r){if("npm"!==t.type)continue;if(o.find((e=>e.package===t.package)))continue;if(i.find((e=>e.package===t.package)))continue;const a=await te({name:t.package,projectDir:n.projectDir,setProgress:s});(!0===e.dev?i:o).push({package:t.package,subpath:t.subpath,version:a.minorRange,type:"npm"})}}const l={atom:t,packageDependencies:o,packageDevDependencies:i},d=n.templateDir,f=g.compile(a.readFileSync(e.resolve(d,"package.json.njk"),"utf8"),g.configure(d)).render(l),m=n.projectDir,u=e.resolve(m,"package.json");a.writeFileSync(u,f,"utf8");const h=e.resolve(n.project.projectDir,"fnet");if(a.existsSync(h)){const t=e.resolve(n.projectDir,"fnet");a.existsSync(t)||a.mkdirSync(t);const o=a.readdirSync(h);for(const n of o){const o=e.resolve(h,n);if(!a.lstatSync(o).isFile())continue;const i=e.resolve(t,n);a.copyFileSync(o,i)}}}(this.#j),await async function({setProgress:t,context:n}){const o=n.projectDir;await t({message:"Prettifiying source files."});let i=e.join("src","**","*");if(z("bun")){const e=await m(`prettier --write ${i} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:o});if(0!==e.code)throw new Error(e.stderr)}else{const e=await m(`prettier --write ${i} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:o});if(0!==e.code)throw new Error(e.stderr)}}(this.#j),await async function({atom:e,setProgress:t,context:n}){if(!e.doc.features.dts_enabled)return;const o=n.projectDir;if(await t({message:"Creating .d.ts"}),0!==(await m("tsc",{cwd:o})).code)throw new Error("Couldnt create .d.ts files.")}(this.#j),this.#x&&(await async function({setProgress:e,atom:t,context:n}){const o=n.projectDir;if(await e({message:"Installing npm packages."}),z("bun")){if(0!==(await m(`bun install ${t.doc.features.npm_install_flags}`,{cwd:o})).code)throw new Error("Couldnt install npm packages.")}else if(0!==(await m(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o})).code)throw new Error("Couldnt install npm packages.")}(this.#j),await async function({setProgress:e,context:t}){const n=t.projectDir;if(await e({message:"Building main project."}),0!==(await m("npm run build",{cwd:n})).code)throw new Error("Couldnt build project.")}(this.#j),this.#k&&await this.deploy())}await this._cache_set(this.#h,{status:"COMPLETED",data:{network:t}})}catch(e){throw await this._cache_set(this.#h,{status:"FAILED",message:e.message||e}),e}}async createNetwork(){try{const e=await pe({root:this.#m});await this._cache_set(this.#h,{status:"COMPLETED",data:{...e}})}catch(e){throw await this._cache_set(this.#h,{status:"FAILED",message:e.message||e}),e}}}const Le=e.dirname(o(import.meta.url)),ze=process.cwd();process.on("uncaughtException",(e=>{q||(q=!0,setTimeout((()=>process.exit(1)),500))})),process.on("unhandledRejection",(e=>{q||(q=!0,setTimeout((()=>process.exit(1)),500))})),h({name:["redis"],dir:ze,optional:!0});const Ge=function({baseDir:t}){let n=t=t||L;for(;n!==e.parse(n).root;){const t=e.join(n,"node_modules");if(a.existsSync(t))return t;n=e.dirname(n)}return null}({baseDir:Le}),qe="win32"===process.platform?";":":";Ge&&(process.env.PATH=`${e.join(Ge,"/.bin")}${qe}${process.env.PATH}`);let We=l(process.argv.slice(2)).command("create","Initialize flow node project",(e=>e.option("name",{type:"string"}).option("vscode",{type:"boolean",default:!0,alias:"vs"}).option("runtime",{type:"string",default:"node",choices:["node"]})),(async t=>{try{const n=H("./template/fnet/project"),o=e.resolve(ze,t.name);a.existsSync(o)||a.mkdirSync(o),await y({dir:n,outDir:o,context:t,copyUnmatchedAlso:!0,platform:s.platform()});let i=await m("fnet build",{cwd:o});if(0!==i.code)throw new Error("Failed to build project.");if(z("git")&&(i=await m("git init --initial-branch=main",{cwd:o}),0!==i.code))throw new Error("Failed to initialize git.");if(z("code")&&t.vscode&&(i=await m(`cd ${o} && code .`),0!==i.code))throw new Error("Failed to open vscode.");console.log("Creating project succeeded!"),process.exit(0)}catch(e){console.error("Initialization failed!",e.message),process.exit(1)}})).command("project","Flow node project",(e=>e.option("update",{type:"boolean",default:!1,alias:"-u"})),(async e=>{try{const t=H("./template/fnet/project"),n=process.cwd(),o=await Ue(e);if(e.update){if(await y({dir:t,outDir:n,context:{name:o.project.projectFileParsed.name,runtime:"node"},copyUnmatchedAlso:!0,platform:s.platform()}),0!==(await m("fnet build",{cwd:n})).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(e){console.error("Project failed.",e.message),process.exit(1)}})).command("build","Build flownet project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("mode",{type:"string",default:"build",choices:["all","file","build","deploy","bpmn"]}).option("ftag",{type:"array"})),(async e=>{try{const t=await Ue(e),n=new Je(t);await n.init(),await n.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("deploy","Build and deploy flownet project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await Ue({...e,mode:"all"}),n=new Je(t);await n.init(),await n.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("file","Just create files",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await Ue({...e,mode:"file"}),n=new Je(t);await n.init(),await n.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}}));function Xe(e,{name:t,bin:n,preArgs:o=[]}){return"function"==typeof n&&(n=n()),e.command(`${t||n} [commands..]`,`${n} ${o.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Ue(e),{projectDir:s}=t,a=e=>e.includes(" ")?"win32"===process.platform?`"${e.replace(/(["^])/g,"^$1")}"`:`"${e.replace(/(["\\$`])/g,"\\$1")}"`:e,r=process.argv.slice(3).map(a);X(i(n,[...o,...r],{cwd:s,stdio:"inherit",shell:!0,detached:!0}))}catch(e){console.error(e.message),process.exit(1)}}))}async function Ue(t){if(t.id){return{id:t.id,buildId:t.buildId,mode:t.mode,protocol:t.protocol||"ac:",projectDir:e.resolve(ze,`./.output/${t.id}`),templateDir:H("./template/fnet/node"),coreDir:H("./template/fnet/core"),tags:t.ftag}}{const n=await async function({tags:t}){const n=e.resolve(ze,"fnet.yaml");if(!a.existsSync(n))throw new Error("fnet.yaml file not found in current directory.");const{raw:o,parsed:i}=await u({file:n,tags:t}),s=e.dirname(n);let r;if("object"==typeof i.flows)r=i.flows;else{let n="flow.main.yaml";a.existsSync(e.join(s,"fnet","flows.yaml"))&&(n=e.join("fnet","flows.yaml"));const o=i.main||n;let c=e.resolve(s,o);if(a.existsSync(c)){const{parsed:e}=await u({file:c,tags:t});r=e}else r={main:{steps:[]}}}const c={workflowAtom:{doc:{...i,content:r}},projectDir:s,projectFilePath:n,projectFileContent:o,projectFileParsed:i};let l=e.resolve(s,"fnet/targets.yaml");if(!a.existsSync(l)&&(l=e.resolve(s,"flow.devops.yaml"),a.existsSync(l))){const t=e.resolve(s,"fnet");a.existsSync(t)||a.mkdirSync(t),a.copyFileSync(l,e.resolve(s,"fnet/targets.yaml")),a.unlinkSync(l)}if(a.existsSync(l)){const{raw:e,parsed:n}=await u({file:l,tags:t}),o=p.parseDocument(e);c.devops={filePath:l,fileContent:e,yamlDocument:o,doc:{...n},type:"workflow.deploy",save:async()=>{a.writeFileSync(c.devops.filePath,o.toString())}}}const d=e.resolve(s,"readme.md");if(a.existsSync(d)){const e=a.readFileSync(d,"utf8");c.readme={filePath:d,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return c}({tags:t.ftag});return{buildId:t.buildId,mode:t.mode,protocol:t.protocol||"local:",templateDir:H("./template/fnet/node"),coreDir:H("./template/fnet/core"),projectDir:e.resolve(n.projectDir,"./.workspace"),projectSrcDir:e.resolve(n.projectDir,"./src"),project:n,tags:t.ftag}}}We=We.command("input [name]","Create or modify an input config file",(e=>e.positional("name",{type:"string",demandOption:!1}).help(!1).version(!1)),(async t=>{try{const n=await Ue(t),{project:o}=n,{projectDir:i,projectFileParsed:s}=o,r=s.input;if(!r)throw new Error("Config schema not found in project file.");if(!Reflect.has(t,"name")){const{inputName:e}=await f({type:"input",name:"inputName",message:"Input name:",initial:"dev"});t.name=e}const c=e.resolve(i,".fnet");a.existsSync(c)||a.mkdirSync(c);const p=e.resolve(c,`${t.name}.fnet`),l=a.existsSync(p),d=(await import("@fnet/object-from-schema")).default,m=await d({schema:r,format:"yaml",ref:l?p:void 0});a.writeFileSync(p,m)}catch(e){console.error(e.message),process.exit(1)}})),We=Xe(We,{bin:"npm"}),We=Xe(We,{bin:"node"}),We=Xe(We,{bin:"bun"}),We=Xe(We,{name:"serve",bin:"bun",preArgs:["run","serve","--"]}),We=Xe(We,{name:"watch",bin:"bun",preArgs:["run","watch","--"]}),We=Xe(We,{name:"app",bin:"bun",preArgs:["run","app","--"]}),We=Xe(We,{name:"cli",bin:"bun",preArgs:["run","cli","--"]}),We=Xe(We,{name:"compile",bin:"bun",preArgs:["run","compile","--"]}),We=function(t,{name:n}){return t.command(`${n} [options]`,"Install the project as a binary",(e=>e.option("name",{alias:"n",describe:"Name to use for the installed binary",type:"string"}).option("force",{alias:"f",describe:"Force overwrite if binary already exists",type:"boolean",default:!1}).option("version",{alias:"v",describe:"Version of the binary",type:"string"}).option("yes",{alias:"y",describe:"Automatically answer yes to all prompts",type:"boolean",default:!1}).help(!1).version(!1)),(async t=>{try{const n=await Ue(t),{projectDir:o}=n;console.log(d.blue("Compiling project..."));const i=e.join(o,".bin");a.existsSync(i)||a.mkdirSync(i,{recursive:!0});const s=e.basename(e.dirname(o)),r=n.project?.projectFileParsed?.features?.cli?.bin,c=t.name||r||s;console.log(d.blue(`Using binary name: ${c}`));const p=e.join(i,c),{spawn:l}=await import("child_process"),f=l("bun",["build","./dist/cli/esm/index.js","--compile",`--outfile=${p}`],{cwd:o,stdio:"inherit",shell:!0});await new Promise(((e,t)=>{f.on("close",(n=>{0===n?e():t(new Error(`Compilation failed with code ${n}`))})),f.on("error",(e=>{t(e)}))})),"win32"!==process.platform&&a.chmodSync(p,493),console.log(d.green(`Binary compiled successfully: ${p}`)),console.log(d.blue("Installing binary..."));const m=["install",p];t.name&&m.push("--name",t.name),t.version&&m.push("--version",t.version),t.force&&m.push("--force"),t.yes&&m.push("--yes");const u=l("fbin",m,{stdio:"inherit",shell:!0});await new Promise(((e,t)=>{u.on("close",(n=>{0===n?e():t(new Error(`Installation failed with code ${n}`))})),u.on("error",(e=>{t(e)}))}))}catch(e){console.error(d.red(`Failed to install binary: ${e.message}`)),process.exit(1)}}))}(We,{name:"install"}),We=Xe(We,{bin:"npx"}),We=Xe(We,{bin:"cdk"}),We=Xe(We,{bin:"aws"}),We=function(e,{name:t,preArgs:n=[]}){return e.command(`${t} <config> <command> [options..]`,"Run a command with a config context",(e=>e.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Ue(e),{projectDir:o}=t,s=e.config,r=await h({name:s,dir:o,transferEnv:!1,optional:!0,tags:t.tags}),c=r?.data?.env||void 0,p=e.command,l=process.argv.slice(5);X(i(p,[...n,...l],{cwd:a.existsSync(o)?o:ze,stdio:"inherit",shell:!0,detached:!0,env:{...process.env,...c}}))}catch(e){console.error(e.message),process.exit(1)}}))}(We,{name:"with"}),We=function(e,{name:t}){return e.command(`${t} group [options..]`,"Run a command group.",(e=>e.positional("group",{type:"string"}).option("ftag",{type:"array"}).help(!1).version(!1)),(async e=>{try{const{runCommandGroup:t}=await import("./index.DrwlOzAe.js");await t({projectType:"fnet",group:e.group,tags:e.ftag,args:e,argv:process.argv})}catch(e){console.error(e.message),process.exit(1)}}))}(We,{name:"run"}),We.demandCommand(1,"You need at least one command before moving on").help().argv;export{H as r,z as w};
|
|
2
|
+
import e,{delimiter as t,join as n}from"node:path";import{fileURLToPath as o}from"node:url";import i from"yargs";import s from"chalk";import{promisify as r}from"node:util";import a from"tree-kill";import{spawn as c}from"node:child_process";import p,{existsSync as l}from"node:fs";import d from"@fnet/config";import f from"node:os";import m from"@flownet/lib-render-templates-dir";import u from"@fnet/shelljs";import h from"@fnet/yaml";import y from"yaml";import g from"nunjucks";import w from"lodash.clonedeep";import b from"isobject";import x from"redis";import k from"@flownet/lib-is-redis-online";import{randomUUID as v}from"node:crypto";import{Api as j,Atom as D}from"@flownet/lib-atom-api-js";import _ from"lodash.merge";import E from"@flownet/lib-parse-imports-js";import S from"@fnet/npm-list-versions";import P from"@fnet/npm-pick-versions";import $ from"object-hash";import T from"ajv/dist/2020.js";import C from"ajv/dist/standalone/index.js";import N from"ajv-formats";import F from"@flownet/lib-parse-node-url";import A from"bpmn-moddle";import I from"dagre";import O from"@fnet/expression";import B from"@fnet/list-files";import K from"@fnet/key-value-transformer";import R from"lodash.pick";import M from"lodash.omit";import L from"@fnet/prompt";import"fs";import"path";import"@fnet/shell-flow";const J=r(a);let z=!1;async function G(e,t){if(z)return;if(z=!0,!e.killed&&e.pid)try{await J(e.pid,"SIGTERM").catch((()=>{})),await new Promise((e=>setTimeout(e,500))),e.killed||await J(e.pid,"SIGKILL").catch((()=>{}))}catch(e){}await new Promise((e=>setTimeout(e,100)));const n="SIGINT"===t?130:"SIGTERM"===t?143:1;process.exit(n)}function W(e){["SIGINT","SIGTERM","SIGQUIT"].forEach((t=>{process.once(t,(async()=>{await G(e,t)}))})),process.on("uncaughtException",(async t=>{await G(e)})),process.on("unhandledRejection",(async t=>{await G(e)})),e.on("close",(e=>{z||process.exit(e)}))}function q(e,{name:t,bin:n,preArgs:o=[]}){return"function"==typeof n&&(n=n()),e.command(`${t||n} [commands..]`,`${n} ${o.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await U(e),{projectDir:i}=t,s=e=>e.includes(" ")?"win32"===process.platform?`"${e.replace(/(["^])/g,"^$1")}"`:`"${e.replace(/(["\\$`])/g,"\\$1")}"`:e,r=process.argv.slice(3).map(s);W(c(n,[...o,...r],{cwd:i,stdio:"inherit",shell:!0,detached:!0}))}catch(e){console.error(e.message),process.exit(1)}}))}async function U(e){try{const t=process.argv[1].split("/").pop().split(".")[0];if("fnode"===t){const{createContext:t}=await import("./index.PNP2oTpU.js");return t(e)}if("fnet"===t){const{createContext:t}=await Promise.resolve().then((function(){return ee}));return t(e)}if("frun"===t){const{createContext:t}=await import("./index.CuMyez3E.js");return t(e)}if("fbin"===t){const{createContext:t}=await import("./index.DWpw12No.js");return t(e)}}catch(e){console.warn(`Warning: Could not import context from CLI tool: ${e.message}`)}return{projectDir:process.cwd(),tags:e.ftag}}var X=e=>{const o=process.env.PATH||"",i="win32"===process.platform?(process.env.PATHEXT||".EXE;.CMD;.BAT;.COM").split(";"):[""],s=o.split(t);for(const t of s)for(const o of i){const i=n(t,"win32"===process.platform?e+o:e);if(l(i))return i}return null};const V=e.dirname(o(import.meta.url)),H=process.cwd();function Y(t){const n=e.resolve(H,t);if(p.existsSync(n))return n;const o=e.resolve(V,"../..",t);if(p.existsSync(o))return o;throw new Error(`Template path not found: ${t}`)}const Q={command:"create",describe:"Initialize a new fnet project",builder:e=>e.option("name",{type:"string",describe:"Project name"}).option("vscode",{type:"boolean",default:!0,alias:"vs",describe:"Open in VS Code after creation"}).option("runtime",{type:"string",default:"node",choices:["node"],describe:"Runtime environment"}),handler:async t=>{try{const n=process.cwd(),o=Y("./template/fnet/project"),i=e.resolve(n,t.name);p.existsSync(i)||p.mkdirSync(i),await m({dir:o,outDir:i,context:t,copyUnmatchedAlso:!0,platform:f.platform()});let s=await u("fnet build",{cwd:i});if(0!==s.code)throw new Error("Failed to build project.");if(X("git")&&(s=await u("git init --initial-branch=main",{cwd:i}),0!==s.code))throw new Error("Failed to initialize git.");if(X("code")&&t.vscode&&(s=await u(`cd ${i} && code .`),0!==s.code))throw new Error("Failed to open vscode.");console.log("Creating project succeeded!"),process.exit(0)}catch(e){console.error("Initialization failed!",e.message),process.exit(1)}}};async function Z(t){if(t.id)return{id:t.id,buildId:t.buildId,mode:t.mode,protocol:t.protocol||"ac:",templateDir:Y("./template/fnet/node"),coreDir:Y("./template/fnet/core"),projectDir:e.resolve(process.cwd(),`./.output/${t.id}`),tags:t.ftag};try{const n=await async function({tags:t}){let n=(o=process.cwd(),e.resolve(o,"fnet.yaml"));var o;if(!p.existsSync(n))throw new Error("fnet.yaml file not found in current directory.");const{raw:i,parsed:s}=await h({file:n,tags:t}),r=e.dirname(n);s.features=s.features||{};const a=s.features;let c;if(a.runtime=a.runtime||{},a.runtime.type=a.runtime.type||"node","object"==typeof s.flows)c=s.flows;else{let n="flow.main.yaml";p.existsSync(e.join(r,"fnet","flows.yaml"))&&(n=e.join("fnet","flows.yaml"));const o=s.main||n;let i=e.resolve(r,o);if(p.existsSync(i)){const{parsed:e}=await h({file:i,tags:t});c=e}else c={main:{steps:[]}}}const l={workflowAtom:{doc:{...s,content:c}},projectDir:r,projectFilePath:n,projectFileContent:i,projectFileParsed:s,runtime:a.runtime};let d=e.resolve(r,"fnet/targets.yaml");if(p.existsSync(d)){const{raw:e,parsed:n}=await h({file:d,tags:t}),o=y.parseDocument(e);l.devops={filePath:d,fileContent:e,yamlDocument:o,doc:{...n},type:"workflow.deploy",save:async()=>{p.writeFileSync(l.devops.filePath,o.toString())}}}const f=e.resolve(r,"readme.md");if(p.existsSync(f)){const e=p.readFileSync(f,"utf8");l.readme={filePath:f,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return l}({tags:t.ftag});return{buildId:t.buildId,mode:t.mode,protocol:t.protocol||"local:",templateDir:Y("./template/fnet/node"),coreDir:Y("./template/fnet/core"),projectDir:e.resolve(n.projectDir,"./.workspace"),projectSrcDir:e.resolve(n.projectDir,"./src"),project:n,tags:t.ftag}}catch(e){return console.warn(`Warning: Could not load project: ${e.message}`),{projectDir:process.cwd(),tags:t.ftag}}}var ee=Object.freeze({__proto__:null,createContext:Z});const te={command:"project",describe:"Manage fnet project",builder:e=>e.option("update",{type:"boolean",default:!1,alias:"-u",describe:"Update project files"}),handler:async e=>{try{const t=Y("./template/fnet/project"),n=process.cwd(),o=await Z(e);if(e.update){if(await m({dir:t,outDir:n,context:{name:o.project.projectFileParsed.name,runtime:"node"},copyUnmatchedAlso:!0,platform:f.platform()}),0!==(await u("fnet build",{cwd:n})).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(e){console.error("Project failed.",e.message),process.exit(1)}}};class ne{init({config:e,accessToken:t}){return new Promise(((n,o)=>{if(j.set_api_url(e.data.url),t)return j.set_req_token(t),void n(t);fetch(`${e.data.issuer}/protocol/openid-connect/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(e.data.grant.params)}).then((async e=>{if(!e.ok)throw new Error(await e.text());return e.json()})).then((e=>{j.set_req_token(e.access_token),n(e.access_token)})).catch((e=>{j.set_req_token(),o(e)}))}))}}function oe({feature:e,features:t,packageDevDependencies:n}){const{name:o,packages:i,options:s,extraCheck:r,explicit:a}=e,c=`${o}_enabled`,p=t.rollup_output||{},l=Object.keys(p);let d=s||{};const f=t[o]?.options;f&&(d=_(d,f));const m=!t[o]||!1===t[o]?.enabled;l.forEach((e=>{const n=t.rollup_output[e];if(n){if(Reflect.has(n,o)){if(m||!n[o]||!1===n[o]?.enabled)return void delete n[o];!0===n[o]&&(n[o]={enabled:!0,options:d})}else{if(m||a||!1===t[c])return;n[o]={enabled:!0}}n[o]=n[o]||{},n[o].options={...d,...n[o].options}}}));let u=l.some((e=>!0===t.rollup_output[e][o]?.enabled));r&&(u=r()&&u),t[c]=u,u&&i.forEach((e=>n.push({package:e[0],version:e[1]})))}function ie({dir:t,name:n="index"}){let o=e.resolve(t,`./${n}.tsx`);if(p.existsSync(o)||(o=e.resolve(t,`./${n}.ts`)),p.existsSync(o)||(o=e.resolve(t,`./${n}.jsx`)),p.existsSync(o)||(o=e.resolve(t,`./${n}.js`)),!p.existsSync(o))return{};const i=o,s=e.extname(o);return{file:i,ext:s,ts:".ts"===s||".tsx"===s,name:n}}async function se(t){const{atom:n,context:o,setProgress:i}=t;i("Initializing features..."),n.doc.features=n.doc.features||{};const s=n.doc.features;s.project=s.project||{},s.project.format=s.project.format||s.project_format||"esm",s.project_format=s.project.format,s.dts_enabled=!0===s.dts||void 0!==s.dts&&!1!==s.dts;const r=e.resolve(o.project.projectDir),a=ie({dir:e.resolve(r,"./app")});if(a.file){i("Parsing app entry imports...");let e=await E({file:a.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.app_uses_jsx=t,s.app_has_entry=!0,e=await E({file:a.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.app_entry_uses_jsx=t,s.app_entry_is_ts=a.ts,s.app_entry_ext=a.ext}const c=ie({dir:e.resolve(r,"./cli")});if(c.file){i("Parsing cli entry imports...");let e=await E({file:c.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.cli_uses_jsx=t,s.cli_has_entry=!0,e=await E({file:c.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.cli_entry_uses_jsx=t,s.cli_entry_is_ts=c.ts,s.cli_entry_ext=c.ext}if("workflow.lib"===n.type){const t=ie({dir:e.resolve(r,"./src")});if(t.file){i("Parsing src entry imports...");let e=await E({file:t.file,recursive:!0}),n=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.src_uses_jsx=n,s.src_has_entry=!0,e=await E({file:t.file}),n=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.src_entry_uses_jsx=n,s.src_entry_is_ts=t.ts,s.src_entry_ext=t.ext}}const p=Reflect.has(s,"app_entry_uses_jsx")?!0===s.app_entry_uses_jsx:!0===s.src_entry_uses_jsx,l=Reflect.has(s,"cli_entry_uses_jsx")?!0===s.cli_entry_uses_jsx:!0===s.src_entry_uses_jsx;s.form_enabled=p||l||!0===s.form||!0===s.form?.enabled,s.multiple_enabled=s.multiple_enabled||!0===s.multiple||!0===s.multiple?.enabled,!1===s.app?s.app={enabled:!1}:!0===s.app?s.app={enabled:!0,extend:!0===s.app_has_entry,export:!0,react:p}:s.app={enabled:!0,extend:!0===s.app_has_entry,export:!0,react:p,...s.app||{}},s.app.enabled=!0===s.app.enabled&&(!0===n.doc.features.form_enabled||!0===s.app.extend||!0===s.app.enabled),s.app.format=s.app.format||"esm",s.app.folder=s.app.folder||s.app.format||"default",!1===s.cli?s.cli={enabled:!1}:!0===s.cli?s.cli={enabled:!0,extend:!0===s.cli_has_entry,export:!0,react:l}:s.cli={enabled:!0,extend:!0===s.cli_has_entry,export:!0,react:l,...s.cli||{}},s.cli.enabled=!0===s.cli.enabled&&(!1===n.doc.features.form_enabled||!0===s.cli.extend||!0===s.cli.enabled),s.cli.format=s.cli.format||"esm",s.cli.folder=s.cli.folder||s.cli.folder||"esm",s.cli.node_options=s.cli.node?.options||s.cli.node_options||"",s.cli.bin=s.cli.bin||n.doc.name,s.cli.installable=!0===s.cli.installable,s.cli.enabled&&(n.doc["npm::bin"]=s.cli.bin,console.log(`Setting npm::bin to ${s.cli.bin} from features.cli.bin`)),s.json=s.cli.enabled||s.json;const d={cjs:{format:"cjs",context:s.form_enabled?"window":"global",babel:!0===s.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!1!==s.cjs,copy:!1},esm:{format:"esm",context:s.form_enabled?"window":"global",babel:!0===s.src_uses_jsx||!1,browser:!1,replace:!0,terser:!1,enabled:!1!==s.esm,copy:!0},iife:{format:"iife",context:s.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0===s.iife,terser:!0,copy:!1}};!0===s.webos&&(d.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,input:"./src/app/index.js",output_dir:"./dist/app/webos",copy:!1,babel_options:{targets:{chrome:"79"}}}),!0===s.electron&&(d.electron={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/electron"}),!0===s.nextjs&&(d.nextjs={format:"esm",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/nextjs"}),!0===s.ios&&(d.ios={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/ios"}),!0===s.macos&&(d.macos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/macos"}),!0===s.app.enabled&&(s.app.dir=`./dist/app/${s.app.folder}`,d.app={format:s.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:s.app.dir,terser:!0,output_exports:!1===s.app.export?"none":"auto",browsersync:!0}),!0===s.cli.enabled&&(s.cli.dir=`./dist/cli/${s.cli.folder}`,d.cli={format:s.cli.format,context:"global",babel:!0===s.src_uses_jsx||!0===s.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:s.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===s.cli.export?"none":"auto"});const f={server:".",startPath:`${e.normalize(s.app.dir||".")}`,files:[e.normalize("./dist/**/*")],cors:!0,open:!1};s.babel_options=_({targets:{browsers:"last 9 versions, not dead",node:"18"}},s.babel_options||s.babel?.options),s.browsersync_options=_(f,s.browsersync_options||s.browsersync?.options||{}),s.replace_options=_({},s.replace_options||s.replace?.options||{}),Reflect.has(s.browsersync_options,"proxy")&&delete s.browsersync_options.server,s.rollup=s.rollup||{},s.rollup_output=_(d,s.rollup_output||s.rollup?.output||{}),s.preact_enabled=!0===s.preact||s.preact&&!1!==s.preact?.enabled;let m=Object.keys(d);for(const e of m){const t=d[e];t&&(!1!==s.rollup[e]?(t.babel_options=t.babel_options||s.babel_options,t.browsersync_options=_(s.browsersync_options,t.browsersync_options),t.replace_options=_(s.replace_options,t.replace_options),s.preact_enabled&&(t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{},t.alias.entries.react="preact/compat",t.alias.entries["react-dom"]="preact/compat"),(s.form_enabled||s.babel)&&(t.babel=!0)):delete s.rollup_output[e])}m=Object.keys(s.rollup_output),s.babel_enabled=m.some((e=>!0===s.rollup_output[e].babel)),s.browser_enabled=m.some((e=>!0===s.rollup_output[e].babel)),s.browsersync_enabled=!1!==s.browsersync&&m.some((e=>!0===s.rollup_output[e].browsersync)),s.browsersync_enabled=s.browsersync_enabled&&s.app.enabled,s.dependency_auto_enabled=!1!==s.dependency_auto&&!1!==s.dependency_auto?.enabled,s.npm_install_flags=s.npm_install_flags||"",s.react_version=s.react_version||s.react?.version||18,function(e){const{atom:t,packageDevDependencies:n}=e,o=t.doc.features,i=o.css&&!1!==o.css.enabled;let s=[];i&&(s.push(["rollup-plugin-postcss","^4"]),s.push(["sass","^1.66"]),(o.css?.options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":s.push(["postcss-import","^15"]);break;case"postcss-url":s.push(["postcss-url","^10"]);break;case"postcss-preset-env":s.push(["postcss-preset-env","^9"]);break;case"autoprefixer":s.push(["autoprefixer","^10"]);break;case"cssnano":s.push(["cssnano","^6"])}})));oe({feature:{name:"css",packages:s},features:o,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e,o=t.doc.features,i={};!0===o.app?.enabled&&(i.targets=i.targets||[],i.targets.push({src:"./src/app/index.html",dest:o.app.dir}),Reflect.has(o.app,"copy")||Reflect.has(o,"copy")||(o.copy=!0)),oe({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:i},features:o,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;oe({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;oe({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;oe({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;oe({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;oe({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;oe({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;oe({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;oe({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;oe({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.8"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;oe({feature:{name:"workbox",packages:[["rollup-plugin-workbox","^8"]],options:{generate:{swDest:"dist/app/esm/sw.js",globDirectory:"dist/app/esm",globPatterns:["**/*.{html,js,css,png,jpg}"],skipWaiting:!0,clientsClaim:!0}},explicit:!0},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;oe({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:t.doc.features,packageDevDependencies:n})}(t)}async function re({projectDir:t,name:n,setProgress:o,count:i=1}){let s;const r=$(["npm-pick-versions",n,i]),a=e.join(t,".cache"),c=e.join(a,r+".json");return p.existsSync(c)?(o&&o(`Picking npm version of ${n} from cache ...`),s=JSON.parse(p.readFileSync(c,"utf8"))):(o&&o(`Picking npm version of ${n} ...`),s=await P({name:n,count:i}),p.mkdirSync(a,{recursive:!0}),p.writeFileSync(c,JSON.stringify(s),"utf8")),s}var ae=async e=>{const{atom:t,packageDependencies:n,context:o,deploymentProjectTarget:i,setProgress:s,deploymentProject:r,yamlTarget:a}=e;if(!0!==i.enabled)return;const c=i.type;try{if("lib"===c)await(await import("./index.DG8TqL-1.js")).default({...e});else if("red"===c)await(await import("./index.CmMM-Ek9.js")).default({...e});else if("npm"===c)await(await import("./index.BraqWHnP.js")).default({...e});else if("gcs"===c)await(await import("./index.UOds5XLl.js")).default({...e});else if("gitlab"===c)await(await import("./index.DI3yyTtl.js")).default({...e});else if("fnet-package"===c)await(await import("./index.Bfg4lyu-.js")).default({...e});else if("fnet-form"===c)await(await import("./index.Q-CYRcna.js")).default({...e});else if("fnet-node"===c)await(await import("./index.C2S9JYhS.js")).default({...e});else if("fnet-flow"===c)await(await import("./index.BuYxdKtK.js")).default({...e});else if("nextjs"===c)await(await import("./index.CDct_kkF.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:a}),r.isDirty=!0;else if("webos"===c)await(await import("./index.CMC8mlye.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:a}),r.isDirty=!0;else if("electron"===c)await(await import("./index.xd8c7XMr.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:a}),r.isDirty=!0;else if("docker"===c)await(await import("./index.D2N9YZmA.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:a}),r.isDirty=!0;else if("ios"===c)await(await import("./index.B5XE4ChJ.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:a}),r.isDirty=!0;else if("macos"===c)await(await import("./index.W6RYgypK.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:a}),r.isDirty=!0;else if("rust"===c)await(await import("./index.CzAV0S36.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:a}),r.isDirty=!0;else{if("pypi"!==c)return void console.warn(`No deployer found for type: ${c}`);await(await import("./index.C7saWH6d.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:a}),r.isDirty=!0}}catch(e){throw console.error(`Error during deployment for type "${c}":`,e),e}},ce={name:"ATOM",uri:"http://atom.org/bpmn",prefix:"atom",types:[{name:"AtomExtension",extends:["bpmn:BaseElement"],properties:[{name:"atom",type:"atom:Atom",isMany:!1}]},{name:"Atom",properties:[{name:"type",type:"String",isAttr:!0}]}]};function pe(e,t){return e.filter(((e,n,o)=>o.map((e=>e[t])).indexOf(e[t])===n))}function le(e){const{nodes:t,nodeIndex:n,root:o}=e,i=e.targetNodes||o.childs;i.forEach((t=>{const n="workflow"===t.type||"subworkflow"===t.type,o=!n&&t.childs.filter((e=>!e.virtual)).length>0;if(o&&(t.bpmn.type="bpmn:SubProcess"),n||o){const n=t.childs.filter((e=>!0!==e.module))[0];t.childs.filter((e=>!0===e.module)).forEach((n=>{const o=de({...e,parent:t,bpmnType:"bpmn:IntermediateCatchEvent",type:"inter",definitions:[{type:"bpmn:SignalEventDefinition"}]});o.bpmn.edges=[{from:o.indexKey,to:n.indexKey,type:"bpmn:SequenceFlow"}]}));const o=t.childs.find((e=>"try"===e.name&&"tryexcept"===t.type)),s=t.childs.filter((e=>"except"===e.name&&"tryexcept"===t.type));o&&s.length&&s.forEach((n=>{const i=de({location:t.childs.indexOf(n),...e,parent:t,bpmnType:"bpmn:BoundaryEvent",type:"boundary",attrs:{attachedToRef:o},definitions:[{type:"bpmn:ErrorEventDefinition"}]});i.bpmn.edges=[{from:i.indexKey,to:n.indexKey,type:"bpmn:SequenceFlow"}]}));const r=t.childs.find((e=>"raise"===e.type));if(r){const n=de({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:"ERROR",definitions:[{type:"bpmn:ErrorEventDefinition"}]});r.bpmn.edges=[{from:r.indexKey,to:n.indexKey,type:"bpmn:SequenceFlow"}]}if(n)if(t.bpmn.starts.length>1){const n=de({...e,parent:t,bpmnType:"bpmn:StartEvent",type:"start"}),o=de({...e,parent:t,bpmnType:"bpmn:ExclusiveGateway",type:"switch"});n.bpmn.edges=[{from:n.indexKey,to:o.indexKey,type:"bpmn:SequenceFlow"}],o.bpmn.edges=t.bpmn.starts.map((e=>({...e,from:o.indexKey})));const i=o.bpmn.edges.find((e=>!0===e.next));if(i){const n=de({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:i.to});i.to=n.indexKey}}else{const o=de({...e,parent:t,bpmnType:"bpmn:StartEvent",type:"start"});o.bpmn.edges.push({from:o.indexKey,to:n.indexKey,type:"bpmn:SequenceFlow"})}t.childs.filter((e=>!0!==e.virtual&&e.bpmn.outside.length&&"bpmn:EndEvent"!==e.bpmn.type)).forEach((n=>{n.bpmn.outside.forEach((o=>{const s=i.indexOf(t),r=de({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:o.to,location:s+1});n.bpmn.edges.push({from:n.indexKey,to:r.indexKey,type:"bpmn:SequenceFlow"})}))}));t.childs.filter((e=>!0!==e.virtual&&e.bpmn.edges.length>1)).forEach((n=>{const o=i.indexOf(n),s=de({...e,parent:t,bpmnType:"bpmn:ExclusiveGateway",type:"switch",location:o+1});s.bpmn.edges=n.bpmn.edges.map((e=>({...e,from:s.indexKey}))),n.bpmn.edges=[{from:n.indexKey,to:s.indexKey,type:"bpmn:SequenceFlow"}],n.bpmn.outside=[]}))}le({...e,targetNodes:t.childs})}))}function de(e){const{parent:t,nodes:n,nodeIndex:o,bpmnType:i,type:s,name:r,outside:a,location:c,definitions:p,attrs:l}=e,d=t.childs.filter((e=>e.type===`v${s}`)).length,f={indexKey:`${t.indexKey}/_${s}${d}`,pathKey:`${t.pathKey}._${s}${d}`,type:`v${s}`,name:r,bpmn:{edges:[],outside:[],type:i,width:36,height:36,fill:"#c8e6c9",stroke:"#205022",definitions:p,attrs:l},virtual:!0,childs:[]};return t.childs.splice(c||0,0,f),n.push(f),o[f.indexKey]=f,f}function fe(e){const{targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:o,moddle:i,elementIndex:s,nodeIndex:r,diagrams:a,nodes:c}=e;!function(e){const{targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:o,moddle:i,elementIndex:s,nodeIndex:r,nodes:a}=e,c=n.get("flowElements");n.$nodes=n.$nodes||[],t.childs.forEach((e=>{const t=i.create(e.bpmn.type,{id:`node.${e.pathKey}`,name:e.definition?.title||e.name});if(s[t.id]=t,t.$isNode=!0,t.$node=e,e.$flow=t,n.$nodes.push(t),c.push(t),e.bpmn.attrs){Object.keys(e.bpmn.attrs).forEach((n=>{"attachedToRef"===n&&t.set(n,e.bpmn.attrs[n].$flow)}))}if(e.bpmn.definitions){const n=e.bpmn.definitions.map((e=>{const t=i.create(e.type);return Object.keys(e.attrs||{}).forEach((n=>{t.set(n,e.attrs[n])})),t}));t.eventDefinitions=n}}))}(e),function(e){const{targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:o,moddle:i,elementIndex:s,nodeIndex:r}=e,a=n.get("flowElements");n.$edges=n.$edges||[],t.childs.forEach((e=>{e.bpmn.edges.forEach((t=>{const o=e,c=r[t.to],p=`edge.${o.pathKey}_${c.pathKey}`;if(s[p])return;const l=s[`node.${o.pathKey}`],d=s[`node.${c.pathKey}`],f=i.create(t.type,{id:p,sourceRef:l,targetRef:d});s[f.id]=f,f.$is_edge=!0,l.get("outgoing").push(f),d.get("incoming").push(f),n.$edges.push({from:l,to:d,flow:f}),a.push(f)}))}))}(e),function(e){const{targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:o,moddle:i,elementIndex:s,nodeIndex:r}=e,a=120,c=80,p=160,l=160,d=new I.graphlib.Graph;d.setDefaultEdgeLabel((()=>({}))),d.setGraph({rankdir:"TB",nodesep:a,ranksep:c,xranker:"longest-path"}),n.$nodes.forEach((e=>{d.setNode(e.id,{width:e.$node?.bpmn.width||a,height:e.$node?.bpmn.height||c,label:e.id})})),n.$edges.forEach((e=>{d.setEdge(e.from.id,e.to.id)})),I.layout(d),n.$nodes.forEach((e=>{const t=d.node(e.id);let n=t.width,s=t.height;const r=i.create("bpmndi:BPMNShape",{id:`shape.${e.id}`,bpmnElement:e,bounds:i.create("dc:Bounds",{x:p+t.x-t.width/2,y:l+t.y-t.height/2,width:n,height:s}),label:i.create("bpmndi:BPMNLabel")});e.$node.bpmn.fill&&r.set("bioc:fill",e.$node.bpmn.fill),e.$node.bpmn.stroke&&r.set("bioc:stroke",e.$node.bpmn.stroke);o.get("planeElement").push(r)})),n.$edges.forEach((e=>{const t=d.edge(e.from.id,e.to.id),n=i.create("bpmndi:BPMNEdge",{id:`edge.${e.from.id}_${e.to.id}`,bpmnElement:e.flow,label:i.create("bpmndi:BPMNLabel")});t.points.forEach((e=>{const t=i.create("dc:Point",{x:p+e.x,y:l+e.y});n.get("waypoint").push(t)}));o.get("planeElement").push(n)}))}(e),function(e){const{targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:o,moddle:i,elementIndex:s,nodeIndex:r,diagrams:a}=e,c=t.childs.filter((e=>"bpmn:SubProcess"===e.bpmn.type));c.forEach((t=>{const n=s[`node.${t.pathKey}`],o=i.create("bpmndi:BPMNDiagram",{id:`diagram_${t.pathKey}`});s[o.id]=o,a.push(o);const r=i.create("bpmndi:BPMNPlane",{id:`plane_${t.pathKey}`});s[r.id]=r,o.plane=r,r.bpmnElement=n,fe({...e,targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:r})}))}(e)}async function me(e){const t=e.root,n=t.context.index,o=Object.keys(n).map((e=>n[e]));!function(e){const{nodes:t}=e;t.forEach((e=>{const t=[],n=[],o=i=>{i.context.next&&(t.push({from:i,to:i.context.next,type:"bpmn:SequenceFlow"}),i===e&&n.push({to:i.context.next,type:"bpmn:SequenceFlow",next:!0})),i.childs.forEach((t=>{i===e&&"switch"===e.type&&n.push({to:t,type:"bpmn:SequenceFlow"}),o(t)}))};o(e);const i=t.filter((t=>t.to.parent.indexKey===e.parent.indexKey)).map((t=>({...t,from:e.indexKey,to:t.to.indexKey}))),s=t.filter((t=>t.to.parent.indexKey!==e.parent.indexKey&&!t.to.indexKey.startsWith(e.indexKey+"/"))).map((t=>({...t,from:e.indexKey,to:t.to.indexKey}))),r=n.map((e=>({...e,to:e.to.indexKey})));e.bpmn=e.bpmn||{},e.bpmn.edges=pe(i,"to"),e.bpmn.outside=pe(s,"to"),e.bpmn.starts=pe(r,"to"),e.bpmn.type=function(e){return"call"===e.type?"bpmn:ServiceTask":"form"===e.type?"bpmn:UserTask":"return"===e.type?"bpmn:EndEvent":"bpmn:Task"}(e),e.bpmn.width=120,e.bpmn.height=80,"return"===e.type&&(e.bpmn.width=36,e.bpmn.height=36)}))}({nodes:o}),le({nodes:o,nodeIndex:n,root:t});const i=new A({atom:ce}),s={},r=i.create("bpmn:Definitions",{id:"definitions_0"});s[r.id]=r;for await(const e of t.childs){const a=r.get("rootElements"),c=r.get("diagrams"),p=i.create("bpmn:Process",{id:`process_${e.pathKey}`,documentation:[i.create("bpmn:Documentation",{text:`Atom Workflow - ${t.context.atom.name}`})]});s[p.id]=p,p.isExecutable=!0,a.push(p);const l=i.create("bpmndi:BPMNDiagram",{id:`diagram_${e.pathKey}`});s[l.id]=l,c.push(l);const d=i.create("bpmndi:BPMNPlane",{id:`plane_${e.pathKey}`});s[d.id]=d,l.plane=d,d.bpmnElement=p;fe({targetNode:e,targetFlowElementsContainer:p,targetPlaneElement:d,moddle:i,elementIndex:s,nodeIndex:n,nodes:o,diagrams:c})}return{diagramXML:(await i.toXML(r,{format:!0})).xml}}async function ue(e={}){return await me(w(e))}async function he({node:e,initNode:t}){if(Reflect.has(e.definition,"modules")&&!Array.isArray(e.definition.modules)){const t=e.definition.modules;e.definition.modules=[],Object.keys(t).forEach((n=>{const o={...t[n]};"modules"===e.type&&(o.export=o.export||n),e.definition.modules.push({[n]:o})}))}const n=[],o=await K({data:e.definition,callback:(e,t,o)=>{const i=O({expression:e});if("m"===i?.processor){const e=o.slice(0,-1);e.push(i.statement);const s=e.join("_");return n.push({[s]:t}),[i.statement,`m::${s}`]}return[e,t]}});n.length>0&&(e.definition=o,e.definition.modules=e.definition.modules||[],e.definition.modules=e.definition.modules.concat(n)),e.hasModules=e.definition.modules?.length>0;for(let n=0;n<e.definition.modules?.length;n++){const o=e.definition.modules[n],i=Object.keys(o)[0],s={name:i,childs:[],parent:e,definition:o[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}}async function ye({node:e,transformExpression:t}){const n=e.context.transform;Reflect.has(n,"export")&&(n.export=await t(n.export)),Reflect.has(n,"return")&&(e.hasReturn=!0,n.return=await t(n.return)),n.hasOwnProperty("nextArgs")&&(e.hasNextArgs=!0,n.nextArgs=await t(n.nextArgs))}async function ge({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||w(e.definition),e.context.transform;for(const t of e.childs)t.context.transform=t.context.transform||w(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await o(t.definition.condition));await ye({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var we={hits:async function({node:e}){return!!e.definition.hasOwnProperty("switch")},init:async function({node:e,initNode:t}){e.type="switch";const n=e.definition.switch||[];if(!n.every((e=>e.hasOwnProperty("condition")||e.hasOwnProperty("default"))))throw new Error("Switch must have condition or default");if(0===n.filter((e=>e.hasOwnProperty("condition"))).length)throw new Error("Switch must have at least one condition");const o=n.filter((e=>e.hasOwnProperty("default")));if(o.length>1)throw new Error("Switch must have only one default");if(1===o.length&&!n[n.length-1].hasOwnProperty("default"))throw new Error("Switch default must be the last child");e.hasDefaultCondition=1===o.length,await he({node:e,initNode:t}),e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0;for(let n=0;n<e.definition.switch.length;n++){let o=e.definition.switch[n],i=`${n}`;o.hasOwnProperty("default")&&(i="default",o=o.default);const s={name:o.condition||i,childs:[],parent:e,definition:o,index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=ge},resolve:ge};var be={hits:async function({node:e}){return 1===Object.keys(e.definition).map((e=>O({expression:e}))).filter((e=>"if"===e?.processor)).length},init:async function(e){const{node:t}=e,n=Object.keys(t.definition).map((e=>O({expression:e}))),o=[],i=n.find((e=>"if"===e?.processor)),s=t.definition[i.expression];o.push({name:`${t.name}_if`,definition:s,processor:i}),delete t.definition[i.expression];const r=n.filter((e=>"elseif"===e?.processor));let a=0;for(const e of r){const n=t.definition[e.expression];o.push({name:`${t.name}_elseif_${a++}`,definition:n,processor:e}),delete t.definition[e.expression]}t.definition.switch=[];for(const e of o)t.definition.switch.push({condition:e.processor.statement,...e.definition});if(t.definition?.else){const e=t.definition.else;t.definition.switch.push({default:e}),delete t.definition.else}await we.init(e)}};async function xe({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){if(e.context.transform=e.context.transform||w(e.definition),e.context.transform,e.context.try=e.childs.find((e=>"try"===e.name)),e.context.except=e.childs.find((e=>"except"===e.name)),e.context.except){const t=e.context.except;t.context.transform=t.context.transform||w(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await ye({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var ke={hits:async function({node:e}){return e.definition.hasOwnProperty("try")&&e.definition.hasOwnProperty("except")},init:async function({node:e,initNode:t}){if(e.type="tryexcept",await he({node:e,initNode:t}),e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0,e.definition.try){const n="try",o={name:n,childs:[],parent:e,definition:e.definition[n],index:e.childs.length,context:{}};e.childs.push(o),await t({node:o})}if(e.definition.except){const n="except",o={name:n,childs:[],parent:e,definition:e.definition[n],index:e.childs.length,context:{}};e.childs.push(o),await t({node:o})}e.resolve=xe},resolve:xe};async function ve({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||w(e.definition);const i=e.context.transform;for(let e=0;e<i.assign?.length;e++){let t=i.assign[e],n=Object.keys(t)[0],s=t[n],r={key:await o(n),value:await o(s)};i.assign[e]=r}await ye({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var je={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",await he({node:e,initNode:t}),e.resolve=ve},resolve:ve};async function De({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||w(e.definition);e.context.transform.for.in=await o(e.definition.for.in),await ye({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var _e={hits:async function({node:e}){return e.definition.hasOwnProperty("for")},init:async function({node:e,initNode:t}){if(e.type="for",await he({node:e,initNode:t}),e.blockAutoJumpToParent=!0,e.blockAutoJumpToSibling=!1,!e.definition.for.hasOwnProperty("steps")){const t=["value","in"],[n,o]=[R(e.definition.for,t),M(e.definition.for,t)];e.definition.for=n,e.definition.for.steps=[{[`${e.name}_step`]:o}]}Array.isArray(e.definition.for.steps)||(e.definition.for.steps=[{[`${e.name}_step`]:e.definition.for.steps}]);for(let n=0;n<e.definition.for.steps.length;n++){const o=e.definition.for.steps[n],i=Object.keys(o)[0],s={name:i,childs:[],parent:e,definition:o[i],index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=De},resolve:De};var Ee={hits:async function({node:e}){return!1},init:async function({node:e,initNode:t}){},resolve:async function({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o,transformValue:i}){}};async function Se({node:e,resolveTypeCommon:t,transformExpression:n}){e.context.transform=e.context.transform||w(e.definition);const o=e.context.transform;o.raise=await n(o.raise),await t({node:e})}var Pe={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=Se},resolve:Se};async function $e({node:e,resolveTypeCommon:t,transformExpression:n}){e.context.transform=e.context.transform||w(e.definition);const o=e.context.transform;e.hasReturn=!0,o.return=await n(o.return),await t({node:e})}var Te={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=$e},resolve:$e};async function Ce({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||w(e.definition);const i=e.context.transform;if("function"===e.target?.atom?.doc?.type&&(i.call=await o(e.target.atom.name)),i.args&&(i.args=await o(i.args)),i.result){"string"==typeof i.result&&(i.result=[{[i.result]:"e::result"}]);for(let e=0;e<i.result?.length;e++){let t=i.result[e],n=Object.keys(t)[0],s=t[n],r={key:await o(n),value:await o(s)};i.result[e]=r}}const s=e.workflow.parent;i.import?e.context.lib=s.context.libs.find((e=>e.name===i.import)):e.context.lib=s.context.libs.find((e=>e.name===i.call)),await ye({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var Ne={hits:async function({node:e}){return e.definition.hasOwnProperty("call")},init:async function({node:e,initNode:t}){e.type="call",await he({node:e,initNode:t}),e.resolve=Ce},resolve:Ce};async function Fe({node:e,transformExpression:t}){e.context.next=e.childs[0],e.context.transform=e.context.transform||w(e.definition),await ye({node:e,transformExpression:t})}var Ae={hits:async function({node:e}){return e.definition.hasOwnProperty("steps")},init:async function({node:e,initNode:t}){e.type||(e.type="steps");const n=e.definition.steps||[];for await(const o of n){const n=Object.keys(o)[0],i={name:n,childs:[],parent:e,definition:o[n],index:e.childs.length,context:{}};e.childs.push(i),await t({node:i})}e.resolve=Fe},resolve:Fe};async function Ie({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||w(e.definition);const i=e.context.transform;i.props&&(i.props=await o(i.props));const s=e.workflow.parent;e.context.lib=s.context.libs.find((e=>e.name===i.form)),await ye({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var Oe={hits:async function({node:e}){return e.definition.hasOwnProperty("form")},init:async function({node:e,initNode:t}){e.type="form",await he({node:e,initNode:t}),e.resolve=Ie},resolve:Ie};async function Be({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o,transformValue:i}){e.context.transform=e.context.transform||w(e.definition),await t({node:e})}var Ke={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=Be},resolve:Be};async function Re({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||w(e.definition);const i=e.context.transform;i.next=await o(i.next),await ye({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var Me={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=Re},resolve:Re};async function Le({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||w(e.definition),e.context.transform,await ye({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var Je={hits:async function({node:e}){return e.definition.hasOwnProperty("modules")},init:async function({node:e,initNode:t}){e.type="modules",await he({node:e,initNode:t}),e.resolve=Le},resolve:Le};function ze({node:e}){const t=e.definition;if(!e.hasReturn)if("end"===t.next);else if("stop"===t.next);else if("none"===t.next);else if(t.next){let n=e.parent;for(;n.parent;){const o=n.childs.find((e=>e.name===t.next));if(o){e.context.next=o;break}n=n.parent}}else{if(!0===e.module)return;let t=e.parent,n=e.index+1;for(;t.parent&&(!t.blockAutoJumpToParent||!t.blockAutoJumpToSibling);)if(Reflect.has(t,"blockAutoJumpToParent")||Reflect.has(t,"blockAutoJumpToSibling")){if(t.blockAutoJumpToParent){const o=t.childs.find((e=>e.index===n));o&&(e.context.next=o);break}t.blockAutoJumpToParent||(n=t.index+1,t=t.parent)}else{const o=t.childs.find((e=>e.index===n));if(o){e.context.next=o;break}n=t.index+1,t=t.parent}}}class Ge{#e;#t;#n;#o;constructor({key:e,npm:t,master:n,extras:o}){this.#e=e,this.#t=t,this.#n=n,this.#o=o}hits({node:e}){return e.definition.hasOwnProperty(this.#e)}async init(e){const{node:t}=e,n=this.#e,o=t.definition,i=typeof o[n];if(o.call=`npm:${this.#t}`,o.args="object"!==i?{...o.args,[`${this.#n}`]:o[n]}:o[n],delete o[n],this.#o)for(const e in this.#o)o[e]=this.#o[e];console.log(`[npm-block] ${this.#e} --\x3e ${this.#t}`),await Ne.init(e)}}function We(e){return new Ge(e)}class qe{#i;#s;#r;#a;#c;#p;#l;#d;#f;#m;#u;#h;#y;#g;#w;#b;#x;#k;#v;#j;#D;#_=[];constructor(e){this.#i=new ne,this.#s=e,this.#p=[],this.#l=[],this.#d={},this._expire_ttl=3600,this._expire_ttl_short=300,this.#_.push(We({key:"config",npm:"@fnet/config",master:"name"})),this.#_.push(We({key:"yaml",npm:"@fnet/yaml",master:"file"})),this.#_.push(We({key:"prompt",npm:"@fnet/prompt",master:"message"})),this.#_.push(We({key:"html-link",npm:"@flownet/lib-load-browser-link-url",master:"src"})),this.#_.push(We({key:"html-script",npm:"@flownet/lib-load-browser-script-url",master:"src"})),this.#_.push(We({key:"http-server",npm:"@fnet/node-express",master:"server_port"})),this.#_.push(We({key:"shell",npm:"@fnet/shell-flow",master:"commands"})),this.#_.push(We({key:"list-files",npm:"@fnet/list-files",master:"pattern"})),this.#_.push(We({key:"up-list-files",npm:"@fnet/up-list-files",master:"pattern"})),this.#_.push(We({key:"auto-conda-env",npm:"@fnet/auto-conda-env",master:"envDir"})),this.#_.push(We({key:"ollama-chat",npm:"@fnet/ollama-chat",master:"model"})),this.#_.push(We({key:"ai",npm:"@fnet/ai",master:"prompt",extras:{subtype:"flow"}})),this.#_.push(We({key:"invoke",npm:"@fnet/invoke",master:"method",extras:{}})),this.#_.push(We({key:"fetch",npm:"@fnet/fetch",master:"url",extras:{}})),this.#_.push(We({key:"filemap",npm:"@fnet/filemap",master:"target",extras:{}})),this.#j={packageDependencies:this.#p,packageDevDependencies:this.#l,setProgress:this.setProgress.bind(this),context:this.#s,Atom:D,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#D={initNode:this.initNode.bind(this),cloneDeep:w,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:ze,transformExpression:this.transformExpression.bind(this),transformValue:this.transformValue.bind(this)}}async _cache_set(e,t,n){this._redis_client&&await this._redis_client.SETEX(e,n||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await async function(){if(!await k({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=x.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e}(),this.#u=this.#s.buildId||v(),this.#j.buildId=this.#u,this.#w=this.#s.mode,this.#b=["all","deploy","build","file"].includes(this.#w),this.#x=["all","deploy","build"].includes(this.#w),this.#k=["all","deploy"].includes(this.#w),this.#v=["all","deploy","build","file","bpmn"].includes(this.#w),this.#y=this.#s.protocol,this.#h="BUILD:"+this.#u,this.#g=(await d({optional:!0,name:"atom",dir:this.#s.projectDir,tags:this.#s.tags}))?.data;try{await this.setProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),this.transformWorkflow({workflow:this.#a});const e=await this.initNodeTree({workflow:this.#a});await this.initNodeTreeIndex({root:e}),await this.initNodeCalls({root:e}),await this.initNodeCallLibs({root:e}),await this.initNodeForms({root:e}),await this.initNodeFormLibs({root:e}),await this.initEntryFiles({root:e,features:this.#r.doc.features}),await this.initFeaturesFromNodes({childs:e.childs,features:this.#r.doc.features}),await se(this.#j),await async function({atom:e,packageDependencies:t,packageDevDependencies:n,setProgress:o}){o("Initializing dependencies");const i=e.doc.dependencies||[];if(i.filter((e=>!e.dev)).forEach((e=>t.push(e))),i.filter((e=>e.dev)).forEach((e=>n.push(e))),"workflow"===e.type&&(t.push({package:"get-value",version:"^3"}),t.push({package:"set-value",version:"^4"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let n="^18.2";o("Fetching React versions"),n=`^${(await S({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:n}),t.push({package:"react-dom",version:n}),"workflow"===e.type&&(t.push({package:"@fnet/react-app",version:"^0.1"}),t.push({package:"@fnet/react-app-state",version:"^0.1"}))}e.doc.features.preact_enabled&&t.push({package:"preact",version:"^10"}),!0===e.doc.features.cli.enabled&&(t.push({package:"@fnet/args",version:"^0.1"}),n.push({package:"ajv",version:"^8"}),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled&&t.push({package:"@fnet/config",version:"0.2.21"})),e.doc.features.render&&!1!==e.doc.features.render.enabled&&n.push({package:"@flownet/lib-render-templates-dir",version:"0.1.19"}),n.push({package:"@babel/core",version:"^7"}),n.push({package:"@rollup/plugin-commonjs",version:"^28"}),n.push({package:"@rollup/plugin-node-resolve",version:"^16"}),n.push({package:"@rollup/plugin-replace",version:"^6"}),n.push({package:"rollup",version:"^4"}),e.doc.features.dts_enabled&&n.push({package:"rollup-plugin-dts",version:"^6"}),n.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),n.push({package:"@rollup/plugin-alias",version:"^5"}),n.push({package:"fs-extra",version:"^11"}),e.doc.features.babel_enabled&&(n.push({package:"@rollup/plugin-babel",version:"^6"}),n.push({package:"@babel/preset-env",version:"^7"}),n.push({package:"@babel/preset-react",version:"^7"}),e.doc.features.babel?.options?.plugins?.forEach((e=>{switch(e[0]){case"@babel/plugin-proposal-decorators":n.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":n.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":n.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":n.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":n.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"})}}))),n.push({package:"@fnet/rollup-plugin-delete",version:"0.1.10"}),e.doc.features.browsersync_enabled&&n.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.11"})}(this.#j),await this.initAtomLibsAndDeps({libs:e.context.libs,packageDependencies:this.#p}),await this.resolveNodeTree({root:e}),this.#m=e}catch(e){throw await this._cache_set(this.#h,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#s.id&&(this.#f=await this.#i.init({config:this.#g}),this.#j.atomAccessToken=this.#f)}async initWorkflow(){const e=this.#s.id;this.#r=this.#s.project?.workflowAtom||await D.get({id:e}),this.#a="string"==typeof this.#r.doc.content?(await h({content:this.#r.doc.content,tags:this.#s.tags})).parsed:this.#r.doc.content;let t=this.#r.doc.bundleName;t=t||(this.#r.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#r.doc.bundleName=t,this.#r.type=this.#r.type||"workflow",this.#j.atom=this.#r,this.#r.doc.features=this.#r.doc.features||{}}#E(t){console.log("filePath",t),p.statSync(t).isDirectory()?(p.readdirSync(t).forEach((n=>{const o=e.join(t,n);this.#E(o)})),p.rmSync(t)):p.unlinkSync(t)}#S(t,n){const o=p.existsSync(t),i=o&&p.statSync(t);o&&i.isDirectory()?(p.mkdirSync(n,{recursive:!0}),p.readdirSync(t).forEach((o=>{this.#S(e.join(t,o),e.join(n,o))}))):p.copyFileSync(t,n)}async initWorkflowDir(){this.setProgress({message:"Initializing library directory."});const t=this.#s.projectDir,n=this.#s.coreDir;this.setProgress({message:"Cleaning project directory."});const o=B({dir:t,ignore:[".cache","node_modules",".conda"],absolute:!0});for(const e of o)p.rmSync(e,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."}),p.existsSync(t)||p.mkdirSync(t,{recursive:!0});const i=e.join(t,"src");p.existsSync(i)||p.mkdirSync(i,{recursive:!0});const s=e.join(i,"core");this.#S(n,s);const r=e.join(i,"default","blocks");p.existsSync(r)||p.mkdirSync(r,{recursive:!0})}async initNunjucks(){this.setProgress({message:"Initializing nunjucks."});const e=this.#s.templateDir;this.#c=g.configure(e,{watch:!1,dev:!0}),this.#j.njEnv=this.#c}transformWorkflow({workflow:e}){for(const t of Object.values(e))t.steps=t.steps||[],t.steps=t.steps.filter((e=>Object.keys(e).length>0)),t.steps=t.steps.map((e=>this.transformStep({step:e})))}transformStep({step:e}){if(Array.isArray(e))throw new Error("Step must be an object.");const[t,n]=Object.entries(e)[0];if(n.hasOwnProperty("onerror")){const{onerror:o,...i}=n;e[t]={try:i,except:o}}if(e[t].hasOwnProperty("steps")){const n=e[t].steps;if(!Array.isArray(n))throw new Error("Steps must be an array.");e[t].steps=n.map((e=>this.transformStep({step:e})))}return e}async initNodeTree({workflow:e}){const t=Object.keys(e),n={definition:e,name:void 0,type:"root",parent:void 0,childs:[],blockAutoJumpToParent:!0,blockAutoJumpToSibling:!0,index:0,depth:0,context:{libs:[],atom:this.#r}};t.forEach((t=>{const o={name:t,type:"main"===t?"workflow":"subworkflow",childs:[],parent:n,definition:e[t],index:n.childs.length,depth:n.depth+1,context:{},blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1};n.childs.push(o)}));for await(const e of n.childs)await this.initNode({node:e});return n}async initNode({node:e}){const t={...this.#D,node:e};if(e.workflow=e.parent.workflow||e,e.depth=e.parent.depth+1,await ke.hits(t))await ke.init(t);else if(await _e.hits(t))await _e.init(t);else if(await we.hits(t))await we.init(t);else if(await be.hits(t))await be.init(t);else if(await Ee.hits(t))await Ee.init(t);else if(await je.hits(t))await je.init(t);else if(await Pe.hits(t))await Pe.init(t);else if(await Ne.hits(t))await Ne.init(t);else if(this.#_.find((e=>e.hits(t))))await this.#_.find((e=>e.hits(t))).init(t);else if(await Oe.hits(t))await Oe.init(t);else if(await Ke.hits(t))await Ke.init(t);else if(await Ae.hits(t))await Ae.init(t);else if(await Me.hits(t))await Me.init(t);else if(await Je.hits(t))await Je.init(t);else{if(!await Te.hits(t))throw new Error("Undefined step type.");await Te.init(t)}}async initNodeTreeIndex({root:e}){const t={};e.indexKey="/";for await(const n of e.childs)await this.initNodeIndex({node:n,index:t});return e.context.index=t,t}async initNodeIndex({node:t,index:n}){const o=e.join(t.parent.indexKey,t.name);t.indexKey=o,n[o]=t;const i=[];let s=t;for(;s?.parent;)i.push(s.index),s=s.parent;i.reverse(),t.codeKey=`B_${i.join("_")}_${t.type}`,t.pathKey=`${i.join(".")}`,t.typeId=v();for await(const e of t.childs)await this.initNodeIndex({node:e,index:n})}async initNodeCalls({root:e}){const t=e.context.index,n=[];for await(const e of Object.keys(t)){const o=t[e];"call"===o.type&&n.push(o)}return e.context.calls=n,n}async initNodeCallLibs({root:e}){const t=[],n=e.context.calls;for await(const e of n){const n=e.definition.import||e.definition.call,o=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:n,type:"atom",definition:e.definition},i=t.find((e=>e.name===o.name&&e.type===o.type));i||t.push(o),e.target=i||o}return e.context.callLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeCallTarget({refNode:e,curNode:t}){if(!t)return;const n=e.definition.call,o=t.childs.find((e=>e.name===n&&"subworkflow"===e.type));return o||await this.findNodeCallTarget({refNode:e,curNode:t.parent})}async initNodeForms({root:e}){const t=e.context.index,n=[];for await(const e of Object.keys(t)){const o=t[e];"form"===o.type&&n.push(o)}return e.context.forms=n,n}async initNodeFormLibs({root:e}){const t=[],n=e.context.forms;for await(const e of n){const n=e.definition.import||e.definition.form,o=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:n,type:"atom"},i=t.find((e=>e.name===o.name&&e.type===o.type));i||t.push(o),e.target=i||o}return e.context.formLibs=t,e.context.libs=[...e.context.libs,...t],t}async initFeaturesFromNodes({childs:e,features:t}){for await(const n of e)"form"!==n.type||Reflect.has(t,"form")||(t.form=!0),await this.initFeaturesFromNodes({childs:n.childs,features:t})}async initEntryFiles({root:e,features:t}){for await(const n of e.childs){let e;if("main"===n.name)e="index.js";else if("cli"===n.name)e="cli.js";else if("app"===n.name)e="app.js";else{if("api"!==n.name)continue;e="api.js"}t[`${n.name}_default_entry_file`]=e,n.entryFile=e}}async findNodeFormTarget({refNode:e,curNode:t}){if(!t)return;const n=e.definition.form,o=t.childs.find((e=>e.name===n&&"subworkflow"===e.type));return o||await this.findNodeFormTarget({refNode:e,curNode:t.parent})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const n=e.filter((e=>"atom"===e.type));for(let e=0;e<n.length;e++){const o=n[e],i=await this.findAtomLibrary({url:o.name,libRef:o});o.atom=i;const s=i.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));s?.forEach((e=>{const n=t.find((t=>t.package===e.package));n?"string"==typeof e.path?(n.path||[]).some((t=>t===e.path))||(n.path=n.path||[],n.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(n.path||[]).some((t=>t===e))||(n.path=n.path||[],n.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:t,libRef:n}){const o=F({url:t});if(!o)throw new Error(`Invalid package name: ${t}`);if(o.protocol||(o.protocol=this.#y),"ac:"===o.protocol){const e=o.pathname.split("/");if(1===e.length)return await D.first({where:{name:t,parent_id:this.#g.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===e.length){const t=await D.first({where:{name:e[0],parent_id:this.#g.env.ATOM_LIBRARIES_ID,type:"folder"}});return await D.first({where:{name:e[1],parent_id:t.id,type:"workflow.lib"}})}}else{if("local:"===o.protocol){const t=e.resolve(this.#s.projectSrcDir,`${o.pathname}.js`),n=[],i=(await E({file:t,recursive:!0})).all;for await(const e of i){if("npm"!==e.type)continue;if(n.find((t=>t.package===e.package)))continue;const t=await re({name:e.package,projectDir:this.#s.projectDir,setProgress:this.#j.setProgress});n.push({package:e.package,subpath:e.subpath,version:t.minorRange,type:"npm"})}return{name:o.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:n},protocol:o.protocol}}if("npm:"===o.protocol){const e=await re({name:o.pathname,projectDir:this.#s.projectDir,setProgress:this.#j.setProgress});return{name:o.pathname,doc:{type:"workflow.lib",subtype:"flow"===n?.definition?.subtype?"workflow":null,"content-type":"javascript",language:"js",dependencies:[{package:o.pathname,version:e.minorRange,type:"npm"}]},protocol:o.protocol}}if("use:"===o.protocol){return{name:o.pathname,doc:{type:"function",dependencies:[]},protocol:o.protocol}}}}async resolveNodeTree({root:e}){for await(const t of e.childs)await this.resolveTypeWorkflow({node:t})}async resolveTypeWorkflow({node:e}){e.context.transform=e.context.transform||w(e.definition);const t=e.context.transform;for(let e=0;e<t.params?.length;e++){const n=t.params[e];if("string"==typeof n)t.params[e]={key:n,hasDefault:!1};else{const o=Object.keys(n)[0];t.params[e]={key:o,hasDefault:!0,default:n[o],type:typeof n[o]}}}e.context.next=e.childs[0];for await(const t of e.childs)await this.resolveType({node:t})}async resolveType({node:e}){const t={...this.#D,node:e};"function"==typeof e.resolve&&await e.resolve(t);for await(const t of e.childs)await this.resolveType({node:t})}async resolveTypeCommon({node:e}){const t=e.context.transform;t.hasOwnProperty("operation")&&(t.operation=await this.transformExpression(t.operation)),t.hasOwnProperty("page")&&(t.page=await this.transformExpression(t.page)),t.hasOwnProperty("print")&&(t.print=await this.transformExpression(t.print)),t.hasOwnProperty("sleep")&&(t.sleep=await this.transformExpression(t.sleep)),t.hasOwnProperty("assert")&&(t.assert=await this.transformExpression(t.assert))}async createAtomLibFiles({root:t}){await this.setProgress({message:"Creating external lib files."}),this.#r.typesDir="./types";const n=t.context.libs.filter((e=>"atom"===e.type));for(let t=0;t<n.length;t++){const o=n[t].atom,i=this.#s.projectDir;if("local:"===o.protocol){const t=e.resolve(this.#s.projectSrcDir,`${o.fileName||o.name}.js`),n=e.relative(`${this.#s.projectDir}/src/default/blocks`,t);if(!p.existsSync(t)){p.mkdirSync(e.dirname(t),{recursive:!0});let n="export default async (args)=>{\n";n+="}",p.writeFileSync(t,n,"utf8")}o.relativePath=n.split(e.sep).join("/"),this.#r.typesDir=`./types/${e.basename(i)}/src`}else if("npm:"===o.protocol)o.relativePath=o.name;else if("use:"===o.protocol);else{const t=`${i}/src/libs/${o.id}.js`,n=o.doc.contents?.find((e=>"esm"===e.format))||o.doc;p.writeFileSync(e.normalize(t),n.content,"utf8")}}}async createEngine({root:t}){await this.setProgress({message:"Creating engine file."});const n=this.#s.templateDir,o=g.compile(p.readFileSync(e.resolve(n,"src/default/engine.js.njk"),"utf8"),this.#c);for(let n=0;n<t.childs.length;n++){const i=t.childs[n];if(!i.entryFile)continue;const s=o.render({flow:i,ui:{package:"@fnet/react-app"}}),r=this.#s.projectDir,a=e.resolve(r,`src/default/${i.entryFile}`);p.writeFileSync(a,s,"utf8")}}async createNodeTree({root:e}){await this.setProgress({message:"Creating block files."});for await(const t of e.childs)await this.createTypeWorkflow({node:t})}async createTypeWorkflow({node:t}){const n=this.#s.templateDir,o=g.compile(p.readFileSync(e.resolve(n,"src/default/workflow.js.njk"),"utf8"),this.#c).render(t),i=this.#s.projectDir,s=e.resolve(i,`src/default/${t.codeKey}.js`);p.writeFileSync(s,o,"utf8");for await(const e of t.childs)await this.createType({node:e})}async createType({node:e}){switch(e.type){case"assign":case"steps":case"return":case"call":case"form":case"raise":case"switch":case"jump":case"tryexcept":case"for":case"operation":case"modules":this.createBlockFromTemplate({node:e})}for await(const t of e.childs)await this.createType({node:t})}createBlockFromTemplate({node:e}){const t=this.getBlockTemplate({node:e});e.context.render=t.render(e),this.createStepFile({node:e})}getBlockTemplate({node:t}){let n=this.#d[t.type];if(n)return n;const o=this.#s.templateDir;return n=g.compile(p.readFileSync(e.resolve(o,`src/default/blocks/${t.type}.js.njk`),"utf8"),this.#c),this.#d[t.type]=n,n}createStepFile({node:t}){const n=this.#s.projectDir,o=`${t.codeKey}.js`,i=e.resolve(n,`src/default/blocks/${o}`);p.writeFileSync(i,t.context.render,"utf8"),t.context.fileName=o,t.context.filePath=i}async transformExpression(e){let t=await this.transformValue(e);return t=JSON.stringify(t),t=this.replaceSpecialPattern(t),t}async transformValue(e){if(Array.isArray(e))for(let t=0;t<e.length;t++)e[t]=await this.transformValue(e[t]);else if(b(e)){const t=Object.keys(e);for(let n=0;n<t.length;n++){const o=t[n],i=O({expression:o});if(i)if("e"===i.processor){const t=e[o].replace(/(\r\n|\n|\r)/g,"");e[i.statement]=`$::${t}::`,delete e[o]}else e[o]=await this.transformValue(e[o]);else e[o]=await this.transformValue(e[o])}}else if("string"==typeof e){const t=O({expression:e});if(t){const{processor:n,statement:o}=t;switch(n){case"v":e=`$::v.${o}::`;break;case"e":e=`$::${o}::`;break;case"m":e=`$::c.module['${o}']::`;break;case"fm":e=`$::flow.getModule('${o}')::`;break;case"f":e=`$::c.form.${o}::`;break;case"for":e=`$::caller.for.${o}::`}}}return e}replaceSpecialPattern(e){return e.replace(/"\$::(.*?)::"/g,"$1")}replaceExpressionLegacy(e){return e.replaceAll(/(?<outer>"\${(?<inner>[^{]*)}")/g,"$2")}async createProjectYaml(){const t="fnet.yaml",n=`Creating ${t}`;await this.setProgress({message:n});const{content:o,...i}=this.#r.doc,s={content:y.stringify(i)},r=this.#s.templateDir,a=g.compile(p.readFileSync(e.resolve(r,`${t}.njk`),"utf8"),this.#c).render(s),c=this.#s.projectDir,l=e.resolve(c,`${t}`);p.writeFileSync(l,a,"utf8")}async createProjectMainYaml(){const t="flow.main.yaml",n=`Creating ${t}`;await this.setProgress({message:n});const o={content:y.stringify(this.#a)},i=this.#s.templateDir,s=g.compile(p.readFileSync(e.resolve(i,`${t}.njk`),"utf8"),this.#c).render(o),r=this.#s.projectDir,a=e.resolve(r,`${t}`);p.writeFileSync(a,s,"utf8")}async runPrettifier(){const t=this.#s.projectDir;if(X("bun")){const n=await u("prettier --write .",{cwd:e.resolve(t,"src")});if(0!==n.code)throw new Error(n.stderr)}else{const n=await u("prettier --write .",{cwd:e.resolve(t,"src")});if(0!==n.code)throw new Error(n.stderr)}}async deploy(){if(await this.setProgress({message:"Deploying."}),this.#s.project?.devops){const e=[this.#s.project?.devops];for(let t=0;t<e.length;t++){let n=e[t];await this.deployProject({deploymentProject:n}),!0===n.isDirty&&await n.save()}}else if(this.#r.id){const e=await D.list({type:"workflow.deploy",parent_id:this.#r.id});for(let t=0;t<e.length;t++){let n=e[t];await this.deployProject({deploymentProject:n}),!0===n.isDirty&&(n=await D.update(n,{id:n.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:n}=t;if(t.doc.targets&&Array.isArray(t.doc.targets))throw new Error("Deployment project targets are deprecated. Please update targets in the yaml file.");const o=Object.keys(t.doc||{}),i=n||{};for(let e=0;e<o.length;e++){const n=t.doc[o[e]];n.name=o[e];const s=i.get(o[e]);await ae({...this.#j,deploymentProject:t,deploymentProjectTarget:n,yamlTarget:s})}}async registerToPackageManager(e){const{target:t,packageJSON:n}=e;if(!this.#s.id)return;let o=await D.first({name:t.params.name,parent_id:this.#g.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:n.version}),await D.update(o,{id:o.id})):o=await D.create({parent_id:this.#g.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:n.version}]}})}async setProgress(e){const t="string"==typeof e?e:e?.message;console.log(s.blue(t)),await this._cache_set(this.#h,{status:"IN_PROGRESS",message:t})}async build(){if(this.#v&&!this.#b)return await this.createNetwork();try{const t=this.#v?await ue({root:this.#m}):void 0;if(this.#b){if(await this.initWorkflowDir(),await this.initNunjucks(),this.#v){let n=this.#s.project?.projectDir||this.#s.projectDir;n=e.resolve(n,"fnet"),p.existsSync(n)&&p.writeFileSync(e.resolve(n,"flow.bpmn"),t.diagramXML,"utf8")}await this.createAtomLibFiles({root:this.#m}),await this.createEngine({root:this.#m}),await this.createNodeTree({root:this.#m}),await this.createProjectYaml(),await async function({atom:t,context:n,setProgress:o,Atom:i}){const s="readme.md",r=`Creating ${s}`;if(await o({message:r}),n.project?.readme){const t=n.projectDir,o={content:n.project.readme.doc.content},i=e.resolve(n.project.projectDir,"fnet/how-to.md");if(p.existsSync(i)){const e=p.readFileSync(i,"utf8");o.howto=e}const r=e.resolve(n.project.projectDir,"fnet/input.yaml");if(p.existsSync(r)){const e=await h({file:r,tags:n.tags});o.input=e.content}const a=e.resolve(n.project.projectDir,"fnet/output.yaml");if(p.existsSync(a)){const e=await h({file:a,tags:n.tags});o.output=e.content}const c=n.templateDir,l=g.compile(p.readFileSync(e.resolve(c,`${s}.njk`),"utf8"),g.configure(c)).render(o),d=e.resolve(t,`${s}`);p.writeFileSync(d,l,"utf8")}else if(t.id){const o=await i.first({type:"wiki",parent_id:t.id});if(!o||"markdown"!==o.doc?.["content-type"])return;const{content:r,...a}=o.doc,c={content:r},l=n.templateDir,d=g.compile(p.readFileSync(e.resolve(l,`${s}.njk`),"utf8"),g.configure(l)).render(c),f=n.projectDir,m=e.resolve(f,`${s}`);p.writeFileSync(m,d,"utf8")}}(this.#j),await async function({atom:t,setProgress:n,context:o,packageDependencies:i}){await n({message:"Creating tsconfig.json."});const s={atom:t,packageDependencies:i},r=o.templateDir,a=g.compile(p.readFileSync(e.resolve(r,"tsconfig.json.njk"),"utf8"),g.configure(r)).render(s),c=o.projectDir,l=e.resolve(c,"tsconfig.json");p.writeFileSync(l,a,"utf8")}(this.#j),await async function({atom:t,setProgress:n,context:o,packageDependencies:i}){await n({message:"Creating .gitignore"});const s={atom:t,packageDependencies:i},r=o.templateDir,a=g.compile(p.readFileSync(e.resolve(r,".gitignore.njk"),"utf8"),g.configure(r)).render(s),c=o.projectDir,l=e.resolve(c,".gitignore");p.writeFileSync(l,a,"utf8")}(this.#j),await async function({atom:t,setProgress:n,context:o,njEnv:i}){if(!0!==t.doc.features.cli.enabled)return;await n({message:"Creating yargs."});let s={};if(s=t.doc.input?t.doc.input:{type:"object",properties:{},required:[]},t.doc.features.cli.fargs&&!1!==t.doc.features.cli.fargs?.enabled){const e=t.doc.features.cli.fargs,n={type:"string",description:"Config name to load args",hidden:!1},o={type:"array",description:"Tags to filter the config",hidden:!1};Reflect.has(e,"default")&&(n.default=e.default),s.properties&&(s.properties.fargs=n,s.properties.ftag=o)}const r={options:s,imports:[],atom:t},a=o.templateDir,c=g.compile(p.readFileSync(e.resolve(a,"src/default/to.args.js.njk"),"utf8"),i).render(r),l=o.projectDir,d=e.resolve(l,"src/default/to.args.js");p.writeFileSync(d,c,"utf8");const f=new T({allErrors:!0,useDefaults:!0,formats:{},strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}});N(f);const m=f.compile(s),u=C(f,m);p.writeFileSync(e.resolve(l,"src/default/validate_input.js"),u,"utf8")}(this.#j),await async function({atom:t,setProgress:n,context:o,packageDependencies:i}){if(!0!==t.doc.features.cli.enabled)return;await n({message:"Creating cli."});const s={atom:t,packageDependencies:i},r=o.templateDir,a=e.resolve(o.projectDir,"src/cli");p.existsSync(a)||p.mkdirSync(a,{recursive:!0}),await m({pattern:["index.js.njk"],dir:e.resolve(r,"src/cli"),outDir:a,context:s})}(this.#j),await async function({atom:t,setProgress:n,context:o,packageDependencies:i}){if(!0!==t.doc.features.app.enabled)return;await n({message:"Creating app folder"});const s={atom:t,packageDependencies:i,ts:Date.now()},r=o.templateDir,a=e.resolve(o.projectDir,"src/app");p.existsSync(a)||p.mkdirSync(a,{recursive:!0});let c=["index.js.njk"];!1!==t.doc.features.app.html&&c.push("index.html.njk"),await m({pattern:c,dir:e.resolve(r,"src/app"),outDir:a,context:s})}(this.#j),await async function({atom:t,setProgress:n,context:o,packageDependencies:i}){await n({message:"Creating rollup file."});const s={atom:t,packageDependencies:i},r=e.resolve(o.projectDir,"src","default/index.js");if(!p.existsSync(r))throw new Error(`Entry file not found: ${r}`);const a=(await E({file:r,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),c=t.doc.features.rollup_output,l=Object.keys(c);for(let e=0;e<l.length;e++){const t=c[l[e]];if(!0===t.browser&&a.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(a.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<a.length;e++){const n=a[e];t.alias.entries[n]=`node:${n}`,t.alias.entries[`node:${n}`]=n}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(a)}}const d=o.templateDir;let f=g.compile(p.readFileSync(e.resolve(d,"rollup.config.mjs.njk"),"utf8"),g.configure(d)).render(s);const m=o.projectDir;let u=e.resolve(m,"rollup.config.mjs");p.writeFileSync(u,f,"utf8")}(this.#j),await async function({atom:t,context:n,packageDependencies:o,packageDevDependencies:i,setProgress:s}){await s({message:"Creating package.json."}),o.filter((e=>!0===e.dev)).forEach((e=>{i.find((t=>t.package===e.package))||i.push(e);const t=o.findIndex((t=>t.package===e.package));o.splice(t,1)}));const r=o.find((e=>"react"===e.package)),a=o.find((e=>"react-dom"===e.package));r&&!a?o.push({package:"react-dom",version:r.version}):r&&a&&(a.version=r.version),r&&t.doc.features.react_version>=17&&(o.find((e=>"@emotion/react"===e.package))||o.push({package:"@emotion/react",version:"^11"}),o.find((e=>"@emotion/styled"===e.package))||o.push({package:"@emotion/styled",version:"^11"}));const c=[];!0===t.doc.features.app.enabled&&c.push({file:e.resolve(n.projectDir,"src/app/index.js"),dev:!1!==t.doc.features.app.dev}),!0===t.doc.features.cli.enabled&&c.push({file:e.resolve(n.projectDir,"src/cli/index.js"),dev:!1!==t.doc.features.cli.dev});for await(const e of c){const t=e.file;if(!p.existsSync(t))throw new Error(`App file not found: ${t}`);const r=(await E({file:t,recursive:!0})).all;for await(const t of r){if("npm"!==t.type)continue;if(o.find((e=>e.package===t.package)))continue;if(i.find((e=>e.package===t.package)))continue;const r=await re({name:t.package,projectDir:n.projectDir,setProgress:s});(!0===e.dev?i:o).push({package:t.package,subpath:t.subpath,version:r.minorRange,type:"npm"})}}const l={atom:t,packageDependencies:o,packageDevDependencies:i},d=n.templateDir,f=g.compile(p.readFileSync(e.resolve(d,"package.json.njk"),"utf8"),g.configure(d)).render(l),m=n.projectDir,u=e.resolve(m,"package.json");p.writeFileSync(u,f,"utf8");const h=e.resolve(n.project.projectDir,"fnet");if(p.existsSync(h)){const t=e.resolve(n.projectDir,"fnet");p.existsSync(t)||p.mkdirSync(t);const o=p.readdirSync(h);for(const n of o){const o=e.resolve(h,n);if(!p.lstatSync(o).isFile())continue;const i=e.resolve(t,n);p.copyFileSync(o,i)}}}(this.#j),await async function({setProgress:t,context:n}){const o=n.projectDir;await t({message:"Prettifiying source files."});let i=e.join("src","**","*");if(X("bun")){const e=await u(`prettier --write ${i} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:o});if(0!==e.code)throw new Error(e.stderr)}else{const e=await u(`prettier --write ${i} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:o});if(0!==e.code)throw new Error(e.stderr)}}(this.#j),await async function({atom:e,setProgress:t,context:n}){if(!e.doc.features.dts_enabled)return;const o=n.projectDir;if(await t({message:"Creating .d.ts"}),0!==(await u("tsc",{cwd:o})).code)throw new Error("Couldnt create .d.ts files.")}(this.#j),this.#x&&(await async function({setProgress:e,atom:t,context:n}){const o=n.projectDir;if(await e({message:"Installing npm packages."}),X("bun")){if(0!==(await u(`bun install ${t.doc.features.npm_install_flags}`,{cwd:o})).code)throw new Error("Couldnt install npm packages.")}else if(0!==(await u(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o})).code)throw new Error("Couldnt install npm packages.")}(this.#j),await async function({setProgress:e,context:t}){const n=t.projectDir;if(await e({message:"Building main project."}),0!==(await u("npm run build",{cwd:n})).code)throw new Error("Couldnt build project.")}(this.#j),this.#k&&await this.deploy())}await this._cache_set(this.#h,{status:"COMPLETED",data:{network:t}})}catch(e){throw await this._cache_set(this.#h,{status:"FAILED",message:e.message||e}),e}}async createNetwork(){try{const e=await ue({root:this.#m});await this._cache_set(this.#h,{status:"COMPLETED",data:{...e}})}catch(e){throw await this._cache_set(this.#h,{status:"FAILED",message:e.message||e}),e}}}const Ue={command:"build",describe:"Build flownet project",builder:e=>e.option("id",{type:"string",describe:"Project ID"}).option("buildId",{type:"string",alias:"bid",describe:"Build ID"}).option("mode",{type:"string",default:"build",choices:["all","file","build","deploy","bpmn"],describe:"Build mode"}).option("ftag",{type:"array",describe:"Tags for conditional configuration"}),handler:async e=>{try{const t=await Z(e),n=new qe(t);await n.init(),await n.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}}},Xe={command:"deploy",describe:"Build and deploy flownet project",builder:e=>e.option("id",{type:"string",describe:"Project ID"}).option("buildId",{type:"string",alias:"bid",describe:"Build ID"}).option("ftag",{type:"array",describe:"Tags for conditional configuration"}),handler:async e=>{try{const t=await Z({...e,mode:"all"}),n=new qe(t);await n.init(),await n.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}}},Ve={command:"file",describe:"Just create files",builder:e=>e.option("id",{type:"string",describe:"Project ID"}).option("buildId",{type:"string",alias:"bid",describe:"Build ID"}).option("ftag",{type:"array",describe:"Tags for conditional configuration"}),handler:async e=>{try{const t=await Z({...e,mode:"file"}),n=new qe(t);await n.init(),await n.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}}},He={command:"input [name]",describe:"Create or modify an input config file",builder:e=>e.positional("name",{type:"string",demandOption:!1,describe:"Input name"}),handler:async t=>{try{const n=await Z(t),{project:o}=n,{projectDir:i,projectFileParsed:s}=o,r=s.input;if(!r)throw new Error("Config schema not found in project file.");if(!Reflect.has(t,"name")){const{inputName:e}=await L({type:"input",name:"inputName",message:"Input name:",initial:"dev"});t.name=e}const a=e.resolve(i,".fnet");p.existsSync(a)||p.mkdirSync(a);const c=e.resolve(a,`${t.name}.fnet`),l=p.existsSync(c),d=(await import("@fnet/object-from-schema")).default,f=await d({schema:r,format:"yaml",ref:l?c:void 0});p.writeFileSync(c,f)}catch(e){console.error(e.message),process.exit(1)}}},Ye=e.dirname(o(import.meta.url));const Qe=e.dirname(o(import.meta.url)),Ze=process.cwd();process.on("uncaughtException",(e=>{z||(z=!0,setTimeout((()=>process.exit(1)),500))})),process.on("unhandledRejection",(e=>{z||(z=!0,setTimeout((()=>process.exit(1)),500))})),function(){d({name:["redis"],dir:Ze,optional:!0});const t=function({baseDir:t}){let n=t=t||Ye;for(;n!==e.parse(n).root;){const t=e.join(n,"node_modules");if(p.existsSync(t))return t;n=e.dirname(n)}return null}({baseDir:Qe}),n="win32"===process.platform?";":":";t&&(process.env.PATH=`${e.join(t,"/.bin")}${n}${process.env.PATH}`)}(),async function(){try{let t=i(process.argv.slice(2)).usage("Usage: $0 <command> [options]").command(Q).command(te).command(Ue).command(Xe).command(Ve).command(He);t=q(t,{bin:"npm"}),t=q(t,{bin:"node"}),t=q(t,{bin:"bun"}),t=q(t,{name:"serve",bin:"bun",preArgs:["run","serve","--"]}),t=q(t,{name:"watch",bin:"bun",preArgs:["run","watch","--"]}),t=q(t,{name:"app",bin:"bun",preArgs:["run","app","--"]}),t=q(t,{name:"cli",bin:"bun",preArgs:["run","cli","--"]}),t=q(t,{name:"compile",bin:"bun",preArgs:["run","compile","--"]}),t=function(t,{name:n}){return t.command(`${n} [options]`,"Install the project as a binary",(e=>e.option("name",{alias:"n",describe:"Name to use for the installed binary",type:"string"}).option("force",{alias:"f",describe:"Force overwrite if binary already exists",type:"boolean",default:!1}).option("version",{alias:"v",describe:"Version of the binary",type:"string"}).option("yes",{alias:"y",describe:"Automatically answer yes to all prompts",type:"boolean",default:!1}).help(!1).version(!1)),(async t=>{try{const n=await U(t),{projectDir:o}=n;console.log(s.blue("Compiling project..."));const i=e.join(o,".bin");p.existsSync(i)||p.mkdirSync(i,{recursive:!0});const r=e.basename(e.dirname(o)),a=n.project?.projectFileParsed?.features?.cli?.bin,c=t.name||a||r;console.log(s.blue(`Using binary name: ${c}`));const l=e.join(i,c),{spawn:d}=await import("child_process"),f=d("bun",["build","./dist/cli/esm/index.js","--compile",`--outfile=${l}`],{cwd:o,stdio:"inherit",shell:!0});await new Promise(((e,t)=>{f.on("close",(n=>{0===n?e():t(new Error(`Compilation failed with code ${n}`))})),f.on("error",(e=>{t(e)}))})),"win32"!==process.platform&&p.chmodSync(l,493),console.log(s.green(`Binary compiled successfully: ${l}`)),console.log(s.blue("Installing binary..."));const m=["install",l];t.name&&m.push("--name",t.name),t.version&&m.push("--version",t.version),t.force&&m.push("--force"),t.yes&&m.push("--yes");const u=d("fbin",m,{stdio:"inherit",shell:!0});await new Promise(((e,t)=>{u.on("close",(n=>{0===n?e():t(new Error(`Installation failed with code ${n}`))})),u.on("error",(e=>{t(e)}))}))}catch(e){console.error(s.red(`Failed to install binary: ${e.message}`)),process.exit(1)}}))}(t,{name:"install"}),t=q(t,{bin:"npx"}),t=q(t,{bin:"cdk"}),t=q(t,{bin:"aws"}),t=function(e,{name:t,preArgs:n=[]}){return e.command(`${t} <config> <command> [options..]`,"Run a command with a config context",(e=>e.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await U(e),{projectDir:o}=t,i=e.config,s=await d({name:i,dir:o,transferEnv:!1,optional:!0,tags:t.tags}),r=s?.data?.env||void 0,a=e.command,l=process.argv.slice(5);W(c(a,[...n,...l],{cwd:p.existsSync(o)?o:process.cwd(),stdio:"inherit",shell:!0,detached:!0,env:{...process.env,...r}}))}catch(e){console.error(e.message),process.exit(1)}}))}(t,{name:"with"}),t=function(e,{name:t,projectType:n="auto"}){return e.command(`${t} group [options..]`,"Run a command group.",(e=>e.positional("group",{type:"string"}).option("ftag",{type:"array"}).help(!1).version(!1)),(async e=>{try{const{runCommandGroup:t}=await import("./index.DrwlOzAe.js");await t({projectType:n,group:e.group,tags:e.ftag,args:e,argv:process.argv})}catch(e){console.error(e.message),process.exit(1)}}))}(t,{name:"run",projectType:"fnet"}),t.demandCommand(1,"You need at least one command before moving on").help().argv}catch(e){console.error(s.red(`Fatal error: ${e.message}`)),process.exit(1)}}().catch((e=>{console.error(s.red(`Fatal error: ${e.message}`)),process.exit(1)}));export{Y as r,X as w};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import e from"node:path";import t from"node:fs";import o from"@fnet/yaml";import r from"yaml";import{r as i}from"./index.js";import"node:url";import"yargs";import"chalk";import"@fnet/config";import"node:util";import"tree-kill";import"node:child_process";import"node:os";import"@flownet/lib-render-templates-dir";import"@fnet/shelljs";import"@fnet/prompt";import"fs";import"path";import"@fnet/shell-flow";async function n(n){if(n.id)return{id:n.id,buildId:n.buildId,mode:n.mode,protocol:n.protocol||"ac:",templateDir:i("./template/fnet/node"),coreDir:i("./template/fnet/core"),projectDir:e.resolve(process.cwd(),`./.output/${n.id}`),tags:n.ftag};try{const s=await async function({tags:i}){let n=(s=process.cwd(),e.resolve(s,"fnet.yaml"));var s;if(!t.existsSync(n))throw new Error("fnet.yaml file not found in current directory.");const{raw:l,parsed:a}=await o({file:n,tags:i}),c=e.dirname(n);a.features=a.features||{};const p=a.features;let m;if(p.runtime=p.runtime||{},p.runtime.type=p.runtime.type||"node","object"==typeof a.flows)m=a.flows;else{let r="flow.main.yaml";t.existsSync(e.join(c,"fnet","flows.yaml"))&&(r=e.join("fnet","flows.yaml"));const n=a.main||r;let s=e.resolve(c,n);if(t.existsSync(s)){const{parsed:e}=await o({file:s,tags:i});m=e}else m={main:{steps:[]}}}const f={workflowAtom:{doc:{...a,content:m}},projectDir:c,projectFilePath:n,projectFileContent:l,projectFileParsed:a,runtime:p.runtime};let d=e.resolve(c,"fnet/targets.yaml");if(t.existsSync(d)){const{raw:e,parsed:n}=await o({file:d,tags:i}),s=r.parseDocument(e);f.devops={filePath:d,fileContent:e,yamlDocument:s,doc:{...n},type:"workflow.deploy",save:async()=>{t.writeFileSync(f.devops.filePath,s.toString())}}}const u=e.resolve(c,"readme.md");if(t.existsSync(u)){const e=t.readFileSync(u,"utf8");f.readme={filePath:u,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return f}({tags:n.ftag});return{buildId:n.buildId,mode:n.mode,protocol:n.protocol||"local:",templateDir:i("./template/fnet/node"),coreDir:i("./template/fnet/core"),projectDir:e.resolve(s.projectDir,"./.workspace"),projectSrcDir:e.resolve(s.projectDir,"./src"),project:s,tags:n.ftag}}catch(e){return console.warn(`Warning: Could not load project: ${e.message}`),{projectDir:process.cwd(),tags:n.ftag}}}export{n as createContext};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import e from"node:fs";import t from"node:path";import a from"nunjucks";import i from"@flownet/lib-parse-imports-js";import s from"@flownet/lib-parse-node-url";import{B as r,c as o,a as n}from"./index.DfFj3RoG.js";import p from"lodash.merge";import{i as l,a as c,b as d,c as m,d as f,p as u,e as h,g as _,h as y,j as b,k as x,l as g,m as j,r as w}from"./index.CLPC6OJN.js";import v from"@fnet/npm-list-versions";import"node:crypto";import"yaml";import"chalk";import"@flownet/lib-atom-api-js";import"@fnet/config";import"@fnet/list-files";import"redis";import"@flownet/lib-is-redis-online";import"@fnet/yaml";import"@flownet/lib-render-templates-dir";import"@fnet/npm-pick-versions";import"object-hash";import"ajv/dist/2020.js";import"ajv/dist/standalone/index.js";import"ajv-formats";import"@fnet/shelljs";import"./index.js";import"node:url";import"yargs";import"node:util";import"tree-kill";import"node:child_process";import"node:os";import"@fnet/prompt";import"fs";import"path";import"@fnet/shell-flow";function k({dir:a,name:i="index"}){let s=t.resolve(a,`./${i}.tsx`);if(e.existsSync(s)||(s=t.resolve(a,`./${i}.ts`)),e.existsSync(s)||(s=t.resolve(a,`./${i}.jsx`)),e.existsSync(s)||(s=t.resolve(a,`./${i}.js`)),!e.existsSync(s))return{};const r=s,o=t.extname(s);return{file:r,ext:o,ts:".ts"===o||".tsx"===o,name:i}}class D extends r{async initRuntime(){await async function({atom:e,context:a,setProgress:s}){await s({message:"Initializing features..."}),e.doc.features=e.doc.features||{};const r=e.doc.features;r.project=r.project||{},r.project.format=r.project.format||r.project_format||"esm",r.project_format=r.project.format,r.dts_enabled=!0===r.dts||void 0!==r.dts&&!1!==r.dts;const o=t.resolve(a.project.projectDir),n=k({dir:t.resolve(o,"./app")});if(n.file){s("Parsing app entry imports...");let e=await i({file:n.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));r.app_uses_jsx=t,r.app_has_entry=!0,e=await i({file:n.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),r.app_entry_uses_jsx=t,r.app_entry_is_ts=n.ts,r.app_entry_ext=n.ext}const u=k({dir:t.resolve(o,"./cli")});if(u.file){s("Parsing cli entry imports...");let e=await i({file:u.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));r.cli_uses_jsx=t,r.cli_has_entry=!0,e=await i({file:u.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),r.cli_entry_uses_jsx=t,r.cli_entry_is_ts=u.ts,r.cli_entry_ext=u.ext}if("workflow.lib"===e.type){const e=k({dir:t.resolve(o,"./src")});if(e.file){s("Parsing src entry imports...");let t=await i({file:e.file,recursive:!0}),a=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));r.src_uses_jsx=a,r.src_has_entry=!0,t=await i({file:e.file}),a=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),r.src_entry_uses_jsx=a,r.src_entry_is_ts=e.ts,r.src_entry_ext=e.ext}}const h=Reflect.has(r,"app_entry_uses_jsx")?!0===r.app_entry_uses_jsx:!0===r.src_entry_uses_jsx,_=Reflect.has(r,"cli_entry_uses_jsx")?!0===r.cli_entry_uses_jsx:!0===r.src_entry_uses_jsx;r.form_enabled=h||_||!0===r.form||!0===r.form?.enabled,r.multiple_enabled=r.multiple_enabled||!0===r.multiple||!0===r.multiple?.enabled,!1===r.app?r.app={enabled:!1}:!0===r.app?r.app={enabled:!0,extend:!0===r.app_has_entry,export:!0,react:h}:r.app={enabled:!0,extend:!0===r.app_has_entry,export:!0,react:h,...r.app||{}},r.app.enabled=!0===r.app.enabled&&(!0===e.doc.features.form_enabled||!0===r.app.extend||!0===r.app.enabled),r.app.format=r.app.format||"esm",r.app.folder=r.app.folder||r.app.format||"esm",r.app.dir=`./dist/app/${r.app.folder}`,r.app.html=!1!==r.app.html,!1===r.cli?r.cli={enabled:!1}:!0===r.cli?r.cli={enabled:!0,extend:!0===r.cli_has_entry,export:!0,react:_}:r.cli={enabled:!0,extend:!0===r.cli_has_entry,export:!0,react:_,...r.cli||{}},r.cli.enabled=!0===r.cli.enabled&&(!1===e.doc.features.form_enabled||!0===r.cli.extend||!0===r.cli.enabled),r.cli.format=r.cli.format||"esm",r.cli.folder=r.cli.folder||r.cli.folder||"esm",r.cli.dir=`./dist/cli/${r.cli.folder}`,r.cli.node_options=r.cli.node?.options||r.cli.node_options||"",r.json=r.cli.enabled||r.json,r.bun=r.bun||{},r.bun.build=r.bun.build||{};const y={default:{format:"esm",target:"browser",minify:!1,sourcemap:"external",entrypoints:["./src/default/index.js"],outdir:"./dist/default/esm"},defaultCjs:{format:"cjs",target:"node",minify:!1,sourcemap:"external",entrypoints:["./src/default/index.js"],outdir:"./dist/default/cjs"}};r.cli.enabled&&(y.cli={format:"esm",target:"node",minify:!1,sourcemap:"external",entrypoints:["./src/cli/index.js"],outdir:r.cli.dir}),r.app.enabled&&(y.app={format:"esm",target:"browser",minify:!1,sourcemap:"external",entrypoints:["./src/app/index.js"],outdir:r.app.dir}),r.bun.build=p(y,r.bun.build||{}),r.preact_enabled=!0===r.preact||r.preact&&!1!==r.preact?.enabled,r.dependency_auto_enabled=!1!==r.dependency_auto&&!1!==r.dependency_auto?.enabled,r.npm_install_flags=r.npm_install_flags||"",r.react_version=r.react_version||r.react?.version||18,r.runtime=r.runtime||{},r.runtime.type="bun",r.runtime.template="bun",l({atom:e}),c({atom:e}),d({atom:e}),m({atom:e}),f({atom:e})}(this.apiContext),await async function({atom:e,packageDependencies:t,packageDevDependencies:a,setProgress:i}){i("Initializing dependencies for Bun");const s=e.doc.dependencies||[];if(s.filter((e=>!e.dev)).forEach((e=>t.push(e))),s.filter((e=>e.dev)).forEach((e=>a.push(e))),"workflow"===e.type&&(t.push({package:"get-value",version:"^3"}),t.push({package:"set-value",version:"^4"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let a="^18.2";i("Fetching React versions"),a=`^${(await v({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:a}),t.push({package:"react-dom",version:a}),"workflow"===e.type&&(t.push({package:"@fnet/react-app",version:"^0.1"}),t.push({package:"@fnet/react-app-state",version:"^0.1"}))}e.doc.features.preact_enabled&&t.push({package:"preact",version:"^10"}),!0===e.doc.features.cli.enabled&&(t.push({package:"@fnet/args",version:"^0.1"}),a.push({package:"ajv",version:"^8"}),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled&&t.push({package:"@fnet/config",version:"0.2.21"})),e.doc.features.render&&!1!==e.doc.features.render.enabled&&a.push({package:"@flownet/lib-render-templates-dir",version:"0.1.19"})}(this.apiContext),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}async initLibs(){this.setProgress({message:"Initializing external libs."});const e=[{name:this.atom.doc.name,type:"atom",parent_id:this.atom.parent_id}];this.libs=e,await this.initAtomLibsAndDeps({libs:e,packageDependencies:this.apiContext.packageDependencies})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const a=e.filter((e=>"atom"===e.type));for(let e=0;e<a.length;e++){const i=a[e],s=await this.findAtomLibrary({url:i.name});i.atom=s;const r=s.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));r?.forEach((e=>{const a=t.find((t=>t.package===e.package));a?"string"==typeof e.path?(a.path||[]).some((t=>t===e.path))||(a.path=a.path||[],a.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(a.path||[]).some((t=>t===e))||(a.path=a.path||[],a.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const a=s({url:e});if(!a)throw new Error(`Invalid package name: ${e}`);if(a.protocol||(a.protocol=this.context.protocol),"ac:"===a.protocol){const t=a.pathname.split("/");if(1===t.length)return await this.apiContext.Atom.first({where:{name:e,parent_id:this.atomConfig.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===t.length){const e=await this.apiContext.Atom.first({where:{name:t[0],parent_id:this.atomConfig.env.ATOM_LIBRARIES_ID,type:"folder"}});return await this.apiContext.Atom.first({where:{name:t[1],parent_id:e.id,type:"workflow.lib"}})}}else if("local:"===a.protocol){const e=this.atom;e.protocol="local:",e.doc.dependencies=e.doc.dependencies||[],e.name=e.doc.name;const a=t.resolve(this.context.projectSrcDir,"index.js"),s=await i({file:a,recursive:!0}),r=e.doc.dependencies,o=s.all;for await(const e of o){if("npm"!==e.type)continue;if(r.find((t=>t.package===e.package)))continue;const t=await u({name:e.package,projectDir:this.context.projectDir,setProgress:this.apiContext.setProgress});r.push({package:e.package,subpath:e.subpath,version:t.minorRange,type:"npm"})}return e}}async createAtomLibFiles({libs:a}){await this.setProgress({message:"Creating external lib files."}),this.atom.typesDir="./types";const i=a.filter((e=>"atom"===e.type));for(let a=0;a<i.length;a++){const s=i[a].atom,r=this.context.projectDir;if("local:"===s.protocol){const a=t.resolve(this.context.projectSrcDir,`${s.fileName||s.name}.js`),i=t.relative(t.join(this.context.projectDir,"src","default"),a);if(!e.existsSync(a)){e.mkdirSync(t.dirname(a),{recursive:!0});let i="export default async (args)=>{\n";i+="}",e.writeFileSync(a,i,"utf8")}s.relativePath=i.split(t.sep).join("/"),this.atom.typesDir=`./types/${t.basename(r)}/src`}else{const a=t.join(r,"src","libs",`${s.id}.js`),i=s.doc.contents?.find((e=>"esm"===e.format))||s.doc;e.writeFileSync(a,i.content,"utf8")}}}async createEngine(){await this.setProgress({message:"Creating engine file."});const i={libs:this.libs.filter((e=>"atom"===e.type)),libraryAtom:this.atom,atom:this.atom},s=this.context.templateDir,r=a.compile(e.readFileSync(t.resolve(s,t.join("src","default","engine.js.njk")),"utf8"),this.apiContext.njEnv).render(i),o=this.context.projectDir,n=t.resolve(o,t.join("src","default","index.js"));e.writeFileSync(n,r,"utf8")}async build(){try{this.fileMode&&(await this.createAtomLibFiles({libs:this.libs}),await this.createEngine(),await this.createProjectYaml(),await o(this.apiContext),await h(this.apiContext),await n(this.apiContext),await _(this.apiContext),await y(this.apiContext),await b(this.apiContext),await async function({atom:i,setProgress:s,context:r,packageDependencies:o}){await s({message:"Creating build.js file."});const n={atom:i,packageDependencies:o},p=r.templateDir,l=a.compile(e.readFileSync(t.resolve(p,"build.js.njk"),"utf8"),a.configure(p)).render(n),c=r.projectDir,d=t.resolve(c,"build.js");e.writeFileSync(d,l,"utf8"),e.chmodSync(d,"755")}(this.apiContext),await x(this.apiContext),await g(this.apiContext),this.buildMode&&(await j(this.apiContext),await w(this.apiContext),this.deployMode&&await this.deploy())),await this._cache_set(this.buildKey,{status:"COMPLETED"})}catch(e){throw await this._cache_set(this.buildKey,{status:"FAILED",message:e.message||e}),console.log(e),e}}}export{D as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import e from"node:fs";import t from"node:path";import a from"nunjucks";import s from"@flownet/lib-parse-imports-js";import o from"@flownet/lib-parse-node-url";import{B as i,c as r,a as n}from"./index.DfFj3RoG.js";import p from"lodash.merge";import{f as l,i as c,a as d,b as u,c as f,d as b,p as m,e as g,g as h,h as _,j as w,k as y,l as x,m as v,r as k}from"./index.CLPC6OJN.js";import j from"@fnet/npm-list-versions";import D from"@fnet/shelljs";import"node:crypto";import"yaml";import"chalk";import"@flownet/lib-atom-api-js";import"@fnet/config";import"@fnet/list-files";import"redis";import"@flownet/lib-is-redis-online";import"@fnet/yaml";import"@flownet/lib-render-templates-dir";import"@fnet/npm-pick-versions";import"object-hash";import"ajv/dist/2020.js";import"ajv/dist/standalone/index.js";import"ajv-formats";import"./index.js";import"node:url";import"yargs";import"node:util";import"tree-kill";import"node:child_process";import"node:os";import"@fnet/prompt";import"fs";import"path";import"@fnet/shell-flow";function C({dir:a,name:s="index"}){let o=t.resolve(a,`./${s}.tsx`);if(e.existsSync(o)||(o=t.resolve(a,`./${s}.ts`)),e.existsSync(o)||(o=t.resolve(a,`./${s}.jsx`)),e.existsSync(o)||(o=t.resolve(a,`./${s}.js`)),!e.existsSync(o))return{};const i=o,r=t.extname(o);return{file:i,ext:r,ts:".ts"===r||".tsx"===r,name:s}}async function S(e){const{atom:a,context:o,setProgress:i}=e;i("Initializing features..."),a.doc.features=a.doc.features||{};const r=a.doc.features;r.project=r.project||{},r.project.format=r.project.format||r.project_format||"esm",r.project_format=r.project.format,r.dts_enabled=!0===r.dts||void 0!==r.dts&&!1!==r.dts;const n=t.resolve(o.project.projectDir),m=C({dir:t.resolve(n,"./app")});if(m.file){i("Parsing app entry imports...");let e=await s({file:m.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));r.app_uses_jsx=t,r.app_has_entry=!0,e=await s({file:m.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),r.app_entry_uses_jsx=t,r.app_entry_is_ts=m.ts,r.app_entry_ext=m.ext}const g=C({dir:t.resolve(n,"./cli")});if(g.file){i("Parsing cli entry imports...");let e=await s({file:g.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));r.cli_uses_jsx=t,r.cli_has_entry=!0,e=await s({file:g.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),r.cli_entry_uses_jsx=t,r.cli_entry_is_ts=g.ts,r.cli_entry_ext=g.ext}if("workflow.lib"===a.type){const e=C({dir:t.resolve(n,"./src")});if(e.file){i("Parsing src entry imports...");let t=await s({file:e.file,recursive:!0}),a=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));r.src_uses_jsx=a,r.src_has_entry=!0,t=await s({file:e.file}),a=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),r.src_entry_uses_jsx=a,r.src_entry_is_ts=e.ts,r.src_entry_ext=e.ext}}const h=Reflect.has(r,"app_entry_uses_jsx")?!0===r.app_entry_uses_jsx:!0===r.src_entry_uses_jsx,_=Reflect.has(r,"cli_entry_uses_jsx")?!0===r.cli_entry_uses_jsx:!0===r.src_entry_uses_jsx;r.form_enabled=h||_||!0===r.form||!0===r.form?.enabled,r.multiple_enabled=r.multiple_enabled||!0===r.multiple||!0===r.multiple?.enabled,!1===r.app?r.app={enabled:!1}:!0===r.app?r.app={enabled:!0,extend:!0===r.app_has_entry,export:!0,react:h}:r.app={enabled:!0,extend:!0===r.app_has_entry,export:!0,react:h,...r.app||{}},r.app.enabled=!0===r.app.enabled&&(!0===a.doc.features.form_enabled||!0===r.app.extend||!0===r.app.enabled),r.app.format=r.app.format||"esm",r.app.folder=r.app.folder||r.app.format||"default",!1===r.cli?r.cli={enabled:!1}:!0===r.cli?r.cli={enabled:!0,extend:!0===r.cli_has_entry,export:!0,react:_}:r.cli={enabled:!0,extend:!0===r.cli_has_entry,export:!0,react:_,...r.cli||{}},r.cli.enabled=!0===r.cli.enabled&&(!1===a.doc.features.form_enabled||!0===r.cli.extend||!0===r.cli.enabled),r.cli.format=r.cli.format||"esm",r.cli.folder=r.cli.folder||r.cli.folder||"esm",r.cli.node_options=r.cli.node?.options||r.cli.node_options||"",r.cli.bin=r.cli.bin||a.doc.name,r.cli.installable=!0===r.cli.installable,r.cli.enabled&&(a.doc["npm::bin"]=r.cli.bin,console.log(`Setting npm::bin to ${r.cli.bin} from features.cli.bin`)),r.json=r.cli.enabled||r.json;const w={cjs:{format:"cjs",context:r.form_enabled?"window":"global",babel:!0===r.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!1!==r.cjs,copy:!1},esm:{format:"esm",context:r.form_enabled?"window":"global",babel:!0===r.src_uses_jsx||!1,browser:!1,replace:!0,terser:!1,enabled:!1!==r.esm,copy:!0},iife:{format:"iife",context:r.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0===r.iife,terser:!0,copy:!1}};!0===r.webos&&(w.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,input:"./src/app/index.js",output_dir:"./dist/app/webos",copy:!1,babel_options:{targets:{chrome:"79"}}}),!0===r.electron&&(w.electron={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/electron"}),!0===r.nextjs&&(w.nextjs={format:"esm",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/nextjs"}),!0===r.ios&&(w.ios={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/ios"}),!0===r.macos&&(w.macos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/macos"}),!0===r.app.enabled&&(r.app.dir=`./dist/app/${r.app.folder}`,w.app={format:r.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:r.app.dir,terser:!0,output_exports:!1===r.app.export?"none":"auto",browsersync:!0}),!0===r.cli.enabled&&(r.cli.dir=`./dist/cli/${r.cli.folder}`,w.cli={format:r.cli.format,context:"global",babel:!0===r.src_uses_jsx||!0===r.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:r.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===r.cli.export?"none":"auto"});const y={server:".",startPath:`${t.normalize(r.app.dir||".")}`,files:[t.normalize("./dist/**/*")],cors:!0,open:!1};r.babel_options=p({targets:{browsers:"last 9 versions, not dead",node:"18"}},r.babel_options||r.babel?.options),r.browsersync_options=p(y,r.browsersync_options||r.browsersync?.options||{}),r.replace_options=p({},r.replace_options||r.replace?.options||{}),Reflect.has(r.browsersync_options,"proxy")&&delete r.browsersync_options.server,r.rollup=r.rollup||{},r.rollup_output=p(w,r.rollup_output||r.rollup?.output||{}),r.preact_enabled=!0===r.preact||r.preact&&!1!==r.preact?.enabled;let x=Object.keys(w);for(const e of x){const t=w[e];t&&(!1!==r.rollup[e]?(t.babel_options=t.babel_options||r.babel_options,t.browsersync_options=p(r.browsersync_options,t.browsersync_options),t.replace_options=p(r.replace_options,t.replace_options),r.preact_enabled&&(t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{},t.alias.entries.react="preact/compat",t.alias.entries["react-dom"]="preact/compat"),(r.form_enabled||r.babel)&&(t.babel=!0)):delete r.rollup_output[e])}x=Object.keys(r.rollup_output),r.babel_enabled=x.some((e=>!0===r.rollup_output[e].babel)),r.browser_enabled=x.some((e=>!0===r.rollup_output[e].babel)),r.browsersync_enabled=!1!==r.browsersync&&x.some((e=>!0===r.rollup_output[e].browsersync)),r.browsersync_enabled=r.browsersync_enabled&&r.app.enabled,r.dependency_auto_enabled=!1!==r.dependency_auto&&!1!==r.dependency_auto?.enabled,r.npm_install_flags=r.npm_install_flags||"",r.react_version=r.react_version||r.react?.version||18,c(e),d(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:s,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:s,packageDevDependencies:a})}(e),u(e),f(e),b(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:s,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]]},features:s,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:s,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.8"]]},features:s,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"workbox",packages:[["rollup-plugin-workbox","^8"]],options:{generate:{swDest:"dist/app/esm/sw.js",globDirectory:"dist/app/esm",globPatterns:["**/*.{html,js,css,png,jpg}"],skipWaiting:!0,clientsClaim:!0}},explicit:!0},features:s,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:s,packageDevDependencies:a})}(e)}class A extends i{async initRuntime(){await S(this.apiContext),await async function({atom:e,packageDependencies:t,packageDevDependencies:a,setProgress:s}){s("Initializing dependencies");const o=e.doc.dependencies||[];if(o.filter((e=>!e.dev)).forEach((e=>t.push(e))),o.filter((e=>e.dev)).forEach((e=>a.push(e))),"workflow"===e.type&&(t.push({package:"get-value",version:"^3"}),t.push({package:"set-value",version:"^4"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let a="^18.2";s("Fetching React versions"),a=`^${(await j({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:a}),t.push({package:"react-dom",version:a}),"workflow"===e.type&&(t.push({package:"@fnet/react-app",version:"^0.1"}),t.push({package:"@fnet/react-app-state",version:"^0.1"}))}e.doc.features.preact_enabled&&t.push({package:"preact",version:"^10"}),!0===e.doc.features.cli.enabled&&(t.push({package:"@fnet/args",version:"^0.1"}),a.push({package:"ajv",version:"^8"}),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled&&t.push({package:"@fnet/config",version:"0.2.21"})),e.doc.features.render&&!1!==e.doc.features.render.enabled&&a.push({package:"@flownet/lib-render-templates-dir",version:"0.1.19"}),a.push({package:"@babel/core",version:"^7"}),a.push({package:"@rollup/plugin-commonjs",version:"^28"}),a.push({package:"@rollup/plugin-node-resolve",version:"^16"}),a.push({package:"@rollup/plugin-replace",version:"^6"}),a.push({package:"rollup",version:"^4"}),e.doc.features.dts_enabled&&a.push({package:"rollup-plugin-dts",version:"^6"}),a.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),a.push({package:"@rollup/plugin-alias",version:"^5"}),a.push({package:"fs-extra",version:"^11"}),e.doc.features.babel_enabled&&(a.push({package:"@rollup/plugin-babel",version:"^6"}),a.push({package:"@babel/preset-env",version:"^7"}),a.push({package:"@babel/preset-react",version:"^7"}),e.doc.features.babel?.options?.plugins?.forEach((e=>{switch(e[0]){case"@babel/plugin-proposal-decorators":a.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":a.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":a.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":a.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":a.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"})}}))),a.push({package:"@fnet/rollup-plugin-delete",version:"0.1.10"}),e.doc.features.browsersync_enabled&&a.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.11"})}(this.apiContext),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}async initLibs(){this.setProgress({message:"Initializing external libs."});const e=[{name:this.atom.doc.name,type:"atom",parent_id:this.atom.parent_id}];this.libs=e,await this.initAtomLibsAndDeps({libs:e,packageDependencies:this.apiContext.packageDependencies})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const a=e.filter((e=>"atom"===e.type));for(let e=0;e<a.length;e++){const s=a[e],o=await this.findAtomLibrary({url:s.name});s.atom=o;const i=o.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));i?.forEach((e=>{const a=t.find((t=>t.package===e.package));a?"string"==typeof e.path?(a.path||[]).some((t=>t===e.path))||(a.path=a.path||[],a.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(a.path||[]).some((t=>t===e))||(a.path=a.path||[],a.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const a=o({url:e});if(!a)throw new Error(`Invalid package name: ${e}`);if(a.protocol||(a.protocol=this.context.protocol),"ac:"===a.protocol){const t=a.pathname.split("/");if(1===t.length)return await this.apiContext.Atom.first({where:{name:e,parent_id:this.atomConfig.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===t.length){const e=await this.apiContext.Atom.first({where:{name:t[0],parent_id:this.atomConfig.env.ATOM_LIBRARIES_ID,type:"folder"}});return await this.apiContext.Atom.first({where:{name:t[1],parent_id:e.id,type:"workflow.lib"}})}}else if("local:"===a.protocol){const e=this.atom;e.protocol="local:",e.doc.dependencies=e.doc.dependencies||[],e.name=e.doc.name;const a=t.resolve(this.context.projectSrcDir,"index.js"),o=await s({file:a,recursive:!0}),i=e.doc.dependencies,r=o.all;for await(const e of r){if("npm"!==e.type)continue;if(i.find((t=>t.package===e.package)))continue;const t=await m({name:e.package,projectDir:this.context.projectDir,setProgress:this.apiContext.setProgress});i.push({package:e.package,subpath:e.subpath,version:t.minorRange,type:"npm"})}return e}}async createAtomLibFiles({libs:a}){await this.setProgress({message:"Creating external lib files."}),this.atom.typesDir="./types";const s=a.filter((e=>"atom"===e.type));for(let a=0;a<s.length;a++){const o=s[a].atom,i=this.context.projectDir;if("local:"===o.protocol){const a=t.resolve(this.context.projectSrcDir,`${o.fileName||o.name}.js`),s=t.relative(t.join(this.context.projectDir,"src","default"),a);if(!e.existsSync(a)){e.mkdirSync(t.dirname(a),{recursive:!0});let s="export default async (args)=>{\n";s+="}",e.writeFileSync(a,s,"utf8")}o.relativePath=s.split(t.sep).join("/"),this.atom.typesDir=`./types/${t.basename(i)}/src`}else{const a=t.join(i,"src","libs",`${o.id}.js`),s=o.doc.contents?.find((e=>"esm"===e.format))||o.doc;e.writeFileSync(a,s.content,"utf8")}}}async createEngine(){await this.setProgress({message:"Creating engine file."});const s={libs:this.libs.filter((e=>"atom"===e.type)),libraryAtom:this.atom,atom:this.atom},o=this.context.templateDir,i=a.compile(e.readFileSync(t.resolve(o,t.join("src","default","engine.js.njk")),"utf8"),this.apiContext.njEnv).render(s),r=this.context.projectDir,n=t.resolve(r,t.join("src","default","index.js"));e.writeFileSync(n,i,"utf8")}async build(){try{this.fileMode&&(await this.createAtomLibFiles({libs:this.libs}),await this.createEngine(),await this.createProjectYaml(),await r(this.apiContext),await g(this.apiContext),await n(this.apiContext),await h(this.apiContext),await _(this.apiContext),await w(this.apiContext),await async function({atom:o,setProgress:i,context:r,packageDependencies:n}){await i({message:"Creating rollup file."});const p={atom:o,packageDependencies:n},l=t.resolve(r.projectDir,"src","default/index.js");if(!e.existsSync(l))throw new Error(`Entry file not found: ${l}`);const c=(await s({file:l,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),d=o.doc.features.rollup_output,u=Object.keys(d);for(let e=0;e<u.length;e++){const t=d[u[e]];if(!0===t.browser&&c.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(c.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<c.length;e++){const a=c[e];t.alias.entries[a]=`node:${a}`,t.alias.entries[`node:${a}`]=a}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(c)}}const f=r.templateDir;let b=a.compile(e.readFileSync(t.resolve(f,"rollup.config.mjs.njk"),"utf8"),a.configure(f)).render(p);const m=r.projectDir;let g=t.resolve(m,"rollup.config.mjs");e.writeFileSync(g,b,"utf8")}(this.apiContext),await y(this.apiContext),await x(this.apiContext),await async function({atom:e,setProgress:t,context:a}){if(!e.doc.features.dts_enabled)return;const s=a.projectDir;if(await t({message:"Creating .d.ts"}),0!==(await D("tsc",{cwd:s})).code)throw new Error("Couldnt create .d.ts files.")}(this.apiContext),this.buildMode&&(await v(this.apiContext),await k(this.apiContext),this.deployMode&&await this.deploy())),await this._cache_set(this.buildKey,{status:"COMPLETED"})}catch(e){throw await this._cache_set(this.buildKey,{status:"FAILED",message:e.message||e}),console.log(e),e}}}export{A as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
async function r(r){return{projectDir:process.cwd(),tags:r.ftag}}export{r as createContext};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import r from"node:path";import{fileURLToPath as n}from"node:url";import e from"node:os";import i from"node:fs";async function t(n){const t=function(){const n=e.homedir(),t=r.join(n,".fnet","bin");return i.existsSync(t)||i.mkdirSync(t,{recursive:!0}),t}(),o=function(){const n=e.homedir(),t=r.join(n,".fnet");return i.existsSync(t)||i.mkdirSync(t,{recursive:!0}),r.join(t,"bin-registry.json")}();let s={};if(i.existsSync(o))try{const r=i.readFileSync(o,"utf8");s=JSON.parse(r)}catch(r){console.warn(`Warning: Could not parse bin registry: ${r.message}`)}return{binDir:t,registryPath:o,registry:s,args:n}}r.dirname(n(import.meta.url));export{t as createContext};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import e from"node:fs";import t from"node:path";import{randomUUID as i}from"node:crypto";import o from"yaml";import s from"nunjucks";import r from"chalk";import{Api as a,Atom as n}from"@flownet/lib-atom-api-js";import c from"@fnet/config";import d from"@fnet/list-files";import l from"redis";import p from"@flownet/lib-is-redis-online";import m from"@fnet/yaml";class g{init({config:e,accessToken:t}){return new Promise(((i,o)=>{if(a.set_api_url(e.data.url),t)return a.set_req_token(t),void i(t);fetch(`${e.data.issuer}/protocol/openid-connect/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(e.data.grant.params)}).then((async e=>{if(!e.ok)throw new Error(await e.text());return e.json()})).then((e=>{a.set_req_token(e.access_token),i(e.access_token)})).catch((e=>{a.set_req_token(),o(e)}))}))}}var h=async e=>{const{atom:t,packageDependencies:i,context:o,deploymentProjectTarget:s,setProgress:r,deploymentProject:a,yamlTarget:n}=e;if(!0!==s.enabled)return;const c=s.type;try{if("lib"===c)await(await import("./index.DG8TqL-1.js")).default({...e});else if("red"===c)await(await import("./index.CmMM-Ek9.js")).default({...e});else if("npm"===c)await(await import("./index.
|
|
1
|
+
import e from"node:fs";import t from"node:path";import{randomUUID as i}from"node:crypto";import o from"yaml";import s from"nunjucks";import r from"chalk";import{Api as a,Atom as n}from"@flownet/lib-atom-api-js";import c from"@fnet/config";import d from"@fnet/list-files";import l from"redis";import p from"@flownet/lib-is-redis-online";import m from"@fnet/yaml";class g{init({config:e,accessToken:t}){return new Promise(((i,o)=>{if(a.set_api_url(e.data.url),t)return a.set_req_token(t),void i(t);fetch(`${e.data.issuer}/protocol/openid-connect/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(e.data.grant.params)}).then((async e=>{if(!e.ok)throw new Error(await e.text());return e.json()})).then((e=>{a.set_req_token(e.access_token),i(e.access_token)})).catch((e=>{a.set_req_token(),o(e)}))}))}}var h=async e=>{const{atom:t,packageDependencies:i,context:o,deploymentProjectTarget:s,setProgress:r,deploymentProject:a,yamlTarget:n}=e;if(!0!==s.enabled)return;const c=s.type;try{if("lib"===c)await(await import("./index.DG8TqL-1.js")).default({...e});else if("red"===c)await(await import("./index.CmMM-Ek9.js")).default({...e});else if("npm"===c)await(await import("./index.xPP3GBoc.js")).default({...e});else if("gcs"===c)await(await import("./index.UOds5XLl.js")).default({...e});else if("gitlab"===c)await(await import("./index.DI3yyTtl.js")).default({...e});else if("fnet-package"===c)await(await import("./index.Bfg4lyu-.js")).default({...e});else if("fnet-form"===c)await(await import("./index.Q-CYRcna.js")).default({...e});else if("fnet-node"===c)await(await import("./index.C2S9JYhS.js")).default({...e});else if("fnet-flow"===c)await(await import("./index.BuYxdKtK.js")).default({...e});else if("nextjs"===c)await(await import("./index.CDct_kkF.js")).default({atom:t,target:s,onProgress:r,projectDir:o.projectDir,dependencies:i,context:o,yamlTarget:n}),a.isDirty=!0;else if("webos"===c)await(await import("./index.CMC8mlye.js")).default({atom:t,target:s,onProgress:r,projectDir:o.projectDir,dependencies:i,context:o,yamlTarget:n}),a.isDirty=!0;else if("electron"===c)await(await import("./index.xd8c7XMr.js")).default({atom:t,target:s,onProgress:r,projectDir:o.projectDir,dependencies:i,context:o,yamlTarget:n}),a.isDirty=!0;else if("docker"===c)await(await import("./index.D2N9YZmA.js")).default({atom:t,target:s,onProgress:r,projectDir:o.projectDir,dependencies:i,context:o,yamlTarget:n}),a.isDirty=!0;else if("ios"===c)await(await import("./index.B5XE4ChJ.js")).default({atom:t,target:s,onProgress:r,projectDir:o.projectDir,dependencies:i,context:o,yamlTarget:n}),a.isDirty=!0;else if("macos"===c)await(await import("./index.W6RYgypK.js")).default({atom:t,target:s,onProgress:r,projectDir:o.projectDir,dependencies:i,context:o,yamlTarget:n}),a.isDirty=!0;else if("rust"===c)await(await import("./index.CzAV0S36.js")).default({atom:t,target:s,onProgress:r,projectDir:o.projectDir,dependencies:i,context:o,yamlTarget:n}),a.isDirty=!0;else{if("pypi"!==c)return void console.warn(`No deployer found for type: ${c}`);await(await import("./index.C7saWH6d.js")).default({atom:t,target:s,onProgress:r,projectDir:o.projectDir,dependencies:i,context:o,yamlTarget:n}),a.isDirty=!0}}catch(e){throw console.error(`Error during deployment for type "${c}":`,e),e}};class f{#e;#t;#i;#o;#s;#r;#a;#n;#c;#d;#l;#p;#m;#g;#h;#f;#y;constructor(e){this.#e=new g,this.#t=e,this.#r=[],this.#a=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#y={packageDependencies:this.#r,packageDevDependencies:this.#a,setProgress:this.setProgress.bind(this),context:this.#t,Atom:n,registerToPackageManager:this.registerToPackageManager.bind(this)}}get apiContext(){return this.#y}get context(){return this.#t}get atom(){return this.#i}get libs(){return this.#s}set libs(e){this.#s=e}get fileMode(){return this.#g}get buildMode(){return this.#h}get deployMode(){return this.#f}async _cache_set(e,t,i){this._redis_client&&await this._redis_client.SETEX(e,i||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async initAuth(){this.#t.id&&(this.#n=await this.#e.init({config:this.#p}),this.#y.atomAccessToken=this.#n)}async initLibrary(){const e=this.#t.id;this.#i=this.#t.project?.libraryAtom||await n.get({id:e});let t=this.#i.doc.bundleName;t=t||(this.#i.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#i.doc.bundleName=t,this.#i.type=this.#i.type||"workflow.lib",this.#y.atom=this.#i}async initLibraryDir(){this.setProgress({message:"Initializing library directory."});const i=this.#t.projectDir;this.setProgress({message:"Cleaning project directory."});const o=d({dir:i,ignore:[".cache","node_modules",".conda"],absolute:!0});for(const t of o)e.rmSync(t,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."});let s=i;e.existsSync(s)||e.mkdirSync(s,{recursive:!0}),s=t.join(i,"src"),e.existsSync(s)||e.mkdirSync(s,{recursive:!0}),s=t.join(i,"src","default"),e.existsSync(s)||e.mkdirSync(s,{recursive:!0})}async initNunjucks(){this.setProgress({message:"Initializing nunjucks."});const e=this.#t.templateDir;this.#o=s.configure(e,{watch:!1,dev:!0}),this.#y.njEnv=this.#o}async createProjectYaml(){const i="fnode.yaml",r=`Creating ${i}`;await this.setProgress({message:r});const{content:a,...n}=this.#i.doc,c={content:o.stringify(n)},d=this.#t.templateDir,l=t.resolve(d,`${i}.njk`);if(!e.existsSync(l))throw new Error(`fnode.yaml.njk template not found in ${d}`);const p=s.compile(e.readFileSync(l,"utf8"),this.#o).render(c),m=this.#t.projectDir,g=t.resolve(m,`${i}`);e.writeFileSync(g,p,"utf8")}async deploy(){if(await this.setProgress({message:"Deploying."}),this.#t.project?.devops){const e=[this.#t.project?.devops];for(let t=0;t<e.length;t++){let i=e[t];await this.deployProject({deploymentProject:i}),!0===i.isDirty&&await i.save()}}else if(this.#i.id){const e=await n.list({type:"library.deploy",parent_id:this.#i.id});for(let t=0;t<e.length;t++){let i=e[t];await this.deployProject({deploymentProject:i}),!0===i.isDirty&&(i=await n.update(i,{id:i.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:i}=t;if(t.doc.targets&&Array.isArray(t.doc.targets))throw new Error("Deployment project targets are deprecated. Please update targets in the yaml file.");const o=Object.keys(t.doc||{}),s=i||{};for(let e=0;e<o.length;e++){const i=t.doc[o[e]];i.name=o[e];const r=s.get(o[e]);await h({...this.#y,deploymentProject:t,deploymentProjectTarget:i,yamlTarget:r})}}async registerToPackageManager(e){const{target:t,packageJSON:i}=e;if(!this.#t.id)return;let o=await n.first({name:t.params.name,parent_id:this.#p.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:i.version}),await n.update(o,{id:o.id})):o=await n.create({parent_id:this.#p.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:i.version}]}})}async setProgress(e){const t="string"==typeof e?e:e?.message;console.log(r.blue(t)),await this._cache_set(this.#d,{status:"IN_PROGRESS",message:t})}async init(){this._redis_client=await async function(){if(!await p({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=l.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e}(),this.#c=this.#t.buildId||i(),this.#y.buildId=this.#c,this.#m=this.#t.mode,this.#g=["all","deploy","build","file"].includes(this.#m),this.#h=["all","deploy","build"].includes(this.#m),this.#f=["all","deploy"].includes(this.#m),this.#l=this.#t.protocol,this.#d="BUILD:"+this.#c,this.#p=(await c({optional:!0,name:this.#t.atomConfig||"atom",dir:this.#t.projectDir,tags:this.#t.tags}))?.data;try{await this.setProgress({message:"Initialization started."}),await this.initAuth(),await this.initLibrary(),await this.initRuntime()}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e?.message||e}),e}}async initRuntime(){throw new Error("initRuntime method must be implemented by runtime-specific builder")}async build(){throw new Error("build method must be implemented by runtime-specific builder")}}async function y({atom:i,setProgress:o,context:r,packageDependencies:a}){await o({message:"Creating .gitignore"});const n={atom:i,packageDependencies:a},c=r.templateDir,d=s.compile(e.readFileSync(t.resolve(c,".gitignore.njk"),"utf8"),s.configure(c)).render(n),l=r.projectDir,p=t.resolve(l,".gitignore");e.writeFileSync(p,d,"utf8")}async function u({atom:i,context:o,setProgress:r,Atom:a}){const n="readme.md",c=`Creating ${n}`;if(await r({message:c}),o.project?.readme){const i=o.projectDir,r={content:o.project.readme.doc.content},a=t.resolve(o.project.projectDir,"fnet/how-to.md");if(e.existsSync(a)){const t=e.readFileSync(a,"utf8");r.howto=t}const c=t.resolve(o.project.projectDir,"fnet/input.yaml");if(e.existsSync(c)){const e=await m({file:c,tags:o.tags});r.input=e.content}const d=t.resolve(o.project.projectDir,"fnet/output.yaml");if(e.existsSync(d)){const e=await m({file:d,tags:o.tags});r.output=e.content}const l=o.templateDir,p=s.compile(e.readFileSync(t.resolve(l,`${n}.njk`),"utf8"),s.configure(l)).render(r),g=t.resolve(i,`${n}`);e.writeFileSync(g,p,"utf8")}else if(i.id){const r=await a.first({type:"wiki",parent_id:i.id});if(!r||"markdown"!==r.doc?.["content-type"])return;const{content:c,...d}=r.doc,l={content:c},p=o.templateDir,m=s.compile(e.readFileSync(t.resolve(p,`${n}.njk`),"utf8"),s.configure(p)).render(l),g=o.projectDir,h=t.resolve(g,`${n}`);e.writeFileSync(h,m,"utf8")}}export{f as B,y as a,u as c};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import e from"node:fs";import t from"node:path";import i from"node:os";import a from"@fnet/list-files";import{B as s,c as n,a as r}from"./index.
|
|
1
|
+
import e from"node:fs";import t from"node:path";import i from"node:os";import a from"@fnet/list-files";import{B as s,c as n,a as r}from"./index.DfFj3RoG.js";import o from"@flownet/lib-render-templates-dir";import c from"@fnet/auto-conda-env";import"node:crypto";import"yaml";import"nunjucks";import"chalk";import"@flownet/lib-atom-api-js";import"@fnet/config";import"redis";import"@flownet/lib-is-redis-online";import"@fnet/yaml";class p extends s{async initRuntime(){await async function(e){const{atom:t,context:i,setProgress:a}=e;a("Initializing features..."),t.doc.features=t.doc.features||{};const s=t.doc.features;!1===s.cli?s.cli={enabled:!1}:(s.cli,s.cli={enabled:!0}),s.cli.enabled=!0===s.cli.enabled&&(!1===t.doc.features.form_enabled||!0===s.cli.extend||!0===s.cli.enabled)}(this.apiContext),await async function({atom:e,packageDependencies:t,packageDevDependencies:i,setProgress:a}){a("Initializing dependencies")}(this.apiContext),await this.initLibraryDirPython(),await this.initNunjucks(),await this.initLibsPython()}async initLibraryDirPython(){this.setProgress({message:"Initializing library directory."});const s=this.context.projectDir;this.setProgress({message:"Cleaning project directory."});const n=a({dir:s,ignore:[".cache","node_modules",".conda"],absolute:!0});for(const t of n)e.rmSync(t,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."});let r=s;e.existsSync(r)||e.mkdirSync(r,{recursive:!0}),r=t.join(s,"src"),e.existsSync(r)||e.mkdirSync(r,{recursive:!0}),r=t.join(s,"src","default");const o=this.context.projectSrcDir;if(!e.existsSync(r))try{"win32"===i.platform()?e.symlinkSync(o,r,"junction"):e.symlinkSync(o,r,"dir")}catch(e){throw new Error(`Couldn't create symlink. Error: ${e.message}`)}}async initLibsPython(){this.setProgress({message:"Initializing external libs."});const e=this.atom;e.protocol="local:",e.doc.dependencies=e.doc.dependencies||[],e.name=e.doc.name;const t=[{name:this.atom.doc.name,type:"atom",parent_id:this.atom.parent_id,atom:e}];this.libs=t}async createAtomLibFilesPython({libs:i}){await this.setProgress({message:"Creating external lib files."});const a=i.filter((e=>"atom"===e.type));for(let i=0;i<a.length;i++){const s=a[i].atom;if("local:"===s.protocol){const i=t.resolve(this.context.projectSrcDir,`${s.fileName||s.name}.py`);if(!e.existsSync(i)){e.mkdirSync(t.dirname(i),{recursive:!0});let a="def default():\n";a+=' print("Hello world!")\n',e.writeFileSync(i,a,"utf8")}}}}async build(){try{this.fileMode&&(await this.createAtomLibFilesPython({libs:this.libs}),await this.createProjectYaml(),await n(this.apiContext),await r(this.apiContext),await async function({atom:i,setProgress:a,context:s,packageDependencies:n}){if(!0!==i.doc.features.cli.enabled)return;await a({message:"Creating cli."});const r={atom:i,packageDependencies:n},c=s.templateDir,p=t.join(s.projectDir,"src","cli");e.existsSync(p)||e.mkdirSync(p,{recursive:!0}),await o({pattern:["index.py.njk","__init__.py.njk"],dir:t.join(c,"src","cli"),outDir:p,context:r})}(this.apiContext),this.buildMode&&(await async function(e){const{setProgress:i,atom:a,context:s}=e;i({message:"Installing Python packages"});const n=s.projectDir,r=await c({pythonVersion:"3.12",packages:[{package:"fnet-import-parser",version:"0.1.9"}]}),{errors:p,result:l}=await r.runBin("fnet_import_parser",["--entry_file",t.join(n,"src","default","index.py")],{captureName:"result"});if(p)throw new Error(p.format());const d=JSON.parse(l.items[0].stdout),m=d.required["third-party"]?.map((e=>({package:e.metadata?.package||e.path,version:e.metadata?.version||void 0,channel:e.metadata?.channel||void 0})))||[],y=a.doc.dependencies||[];for(const e of m)y.some((t=>t.package===e.package))||y.push(e);const f=t.join(n,".conda"),h=await c({envDir:f,pythonVersion:a.doc.features.runtime.version||"3.12",packages:y});s.pythonEnv=h,e.packageDependencies=y;const u=a.doc.features.render?.dirs||[];for(const e of u)e.dir=t.resolve(n,e.dir),e.outDir=t.resolve(n,e.outDir),await o(e);let g={params:{}};g.params.package_name=a.doc.name,g.params.version="0.1.0",g.params.bin_name=a.doc.name,g.params.python_requires=a.doc.features.runtime.version||">=3.12",g.params.dependencies=y,g.params.scripts=JSON.stringify({cli:`PYTHONPATH='${t.join("src")}' '${t.relative(s.projectDir,h.pythonBin)}' '${t.join("src","cli","index.py")}'`}),await o({pattern:["setup.py.njk","package.json.njk","pyproject.toml.njk"],dir:s.templateDir,outDir:s.projectDir,context:g})}(this.apiContext),this.deployMode&&await this.deploy())),await this._cache_set(this.buildKey,{status:"COMPLETED"})}catch(e){throw await this._cache_set(this.buildKey,{status:"FAILED",message:e.message||e}),console.log(e),e}}}export{p as default};
|
package/dist/fnode/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import e,{delimiter as t,join as o}from"node:path";import{fileURLToPath as n}from"node:url";import{spawn as r}from"node:child_process";import i from"node:os";import a,{existsSync as s}from"node:fs";import c from"yaml";import l from"yargs";import p from"chalk";import d from"@fnet/prompt";import m from"@fnet/shelljs";import u from"@fnet/yaml";import f from"@fnet/config";import y from"@flownet/lib-render-templates-dir";import{promisify as w}from"node:util";import g from"tree-kill";const h=e.dirname(n(import.meta.url));var b=e=>{const n=process.env.PATH||"",r="win32"===process.platform?(process.env.PATHEXT||".EXE;.CMD;.BAT;.COM").split(";"):[""],i=n.split(t);for(const t of i)for(const n of r){const r=o(t,"win32"===process.platform?e+n:e);if(s(r))return r}return null};const j=w(g);let v=!1;async function x(e,t){if(v)return;if(v=!0,!e.killed&&e.pid)try{await j(e.pid,"SIGTERM").catch((()=>{})),await new Promise((e=>setTimeout(e,500))),e.killed||await j(e.pid,"SIGKILL").catch((()=>{}))}catch(e){}await new Promise((e=>setTimeout(e,100)));const o="SIGINT"===t?130:"SIGTERM"===t?143:1;process.exit(o)}function S(e){["SIGINT","SIGTERM","SIGQUIT"].forEach((t=>{process.once(t,(async()=>{await x(e,t)}))})),process.on("uncaughtException",(async t=>{await x(e)})),process.on("unhandledRejection",(async t=>{await x(e)})),e.on("close",(e=>{v||process.exit(e)}))}const $=e.dirname(n(import.meta.url)),I=process.cwd();function E(t){const o=e.resolve(I,t);if(a.existsSync(o))return o;const n=e.resolve($,"../..",t);if(a.existsSync(n))return n;throw new Error(`Template path not found: ${t}`)}class D{static async createBuilder(e){if(!e.project){console.warn("No project provided, defaulting to node runtime");return new(0,(await import("./index.axpuK8O5.js")).default)(e)}const t=e.project?.runtime?.type||"node";try{return new(await this.loadBuilderClass(t))(e)}catch(o){console.warn(`Warning: Could not load builder for runtime '${t}'. Falling back to node builder.`),console.warn(`Error: ${o.message}`);return new(0,(await import("./index.axpuK8O5.js")).default)(e)}}static async loadBuilderClass(e){switch(e.toLowerCase()){case"node":return(await import("./index.axpuK8O5.js")).default;case"python":return(await import("./index.B_EoIJV1.js")).default;case"bun":return(await import("./index.teSOwugt.js")).default;default:throw new Error(`Unsupported runtime type: ${e}`)}}}const F=e.dirname(n(import.meta.url)),P=process.cwd();process.on("uncaughtException",(e=>{v||(v=!0,setTimeout((()=>process.exit(1)),500))})),process.on("unhandledRejection",(e=>{v||(v=!0,setTimeout((()=>process.exit(1)),500))})),f({name:["redis"],dir:P,optional:!0});const T=function({baseDir:t}){let o=t=t||h;for(;o!==e.parse(o).root;){const t=e.join(o,"node_modules");if(a.existsSync(t))return t;o=e.dirname(o)}return null}({baseDir:F}),A="win32"===process.platform?";":":";T&&(process.env.PATH=`${e.join(T,"/.bin")}${A}${process.env.PATH}`);let C=l(process.argv.slice(2)).command("create","Create flow node project",(e=>e.option("name",{type:"Project name",demandOption:!0}).option("vscode",{type:"boolean",default:!0,alias:"vs"}).option("runtime",{type:"string",default:"node",choices:["node","python","bun"]})),(async t=>{try{const o=E("./template/fnode/project"),n=e.resolve(P,t.name);a.existsSync(n)||a.mkdirSync(n),await y({dir:o,outDir:n,context:{name:t.name,runtime:t.runtime,platform:i.platform()},copyUnmatchedAlso:!0});let r=await m("fnode build",{cwd:n});if(0!==r.code)throw new Error("Failed to build project.");if(b("git")&&(r=await m("git init --initial-branch=main",{cwd:n}),0!==r.code))throw new Error("Failed to initialize git.");if(b("code")&&t.vscode&&(r=await m(`cd ${n} && code .`),0!==r.code))throw new Error("Failed to open vscode.");console.log("Creating project succeeded!"),process.exit(0)}catch(e){console.error("Initialization failed!",e.message),process.exit(1)}})).command("project","Flow node project",(e=>e.option("update",{type:"boolean",default:!1,alias:"-u"})),(async e=>{try{const t=E("./template/fnode/project"),o=process.cwd(),n=await G(e);if(e.update){if(await y({dir:t,outDir:o,context:{name:n.project.projectFileParsed.name,runtime:n.project.runtime.type,platform:i.platform()},copyUnmatchedAlso:!0}),0!==(await m("fnode build",{cwd:o})).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(e){console.error("Project failed.",e.message),process.exit(1)}})).command("build","Build flow node project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("mode",{type:"string",default:"build",choices:["all","file","build","deploy","bpmn"]}).option("ftag",{type:"array"})),(async e=>{try{const t=await G(e),o=await D.createBuilder(t);await o.init(),await o.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("deploy","Build and deploy flow node project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await G({...e,mode:"all"}),o=await D.createBuilder(t);await o.init(),await o.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("file","Just create files",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await G({...e,mode:"file"}),o=await D.createBuilder(t);await o.init(),await o.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}}));function B(e,{name:t,bin:o,preArgs:n=[]}){return"function"==typeof o&&(o=o()),e.command(`${t||o} [commands..]`,`${o} ${n.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await G(e),{projectDir:i}=t,a=e=>e.includes(" ")?"win32"===process.platform?`"${e.replace(/(["^])/g,"^$1")}"`:`"${e.replace(/(["\\$`])/g,"\\$1")}"`:e,s=process.argv.slice(3).map(a);S(r(o,[...n,...s],{cwd:i,stdio:"inherit",shell:!0,detached:!0}))}catch(e){console.error(e.message),process.exit(1)}}))}function k(t,{name:o,bin:n,preArgs:i=[]}){return t.command(`${o||n} [commands..]`,`${n} ${i.join(" ")}`,(e=>e.help(!1).version(!1)),(async t=>{try{const a=await G(t),{projectDir:s}=a,c=e=>e.includes(" ")?"win32"===process.platform?`"${e.replace(/(["^])/g,"^$1")}"`:`"${e.replace(/(["\\$`])/g,"\\$1")}"`:e,l=process.argv.slice(3).map(c);n=e.join(s,".conda","bin",n||o);S(r(n,[...i,...l],{cwd:s,stdio:"inherit",shell:!0,detached:!0,env:{PYTHONPATH:s}}))}catch(e){console.error(e.message),process.exit(1)}}))}async function G(t){if(t.id)return{id:t.id,buildId:t.buildId,mode:t.mode,protocol:t.protocol||"ac:",templateDir:E("./template/fnode/node"),projectDir:e.resolve(P,`./.output/${t.id}`),tags:t.ftag};{const o=await async function({tags:t}){let o=function(t){const o=e.resolve(t,"node.yaml"),n=e.resolve(t,"fnode.yaml");if(a.existsSync(n))return n;if(a.existsSync(o))try{const e=a.readFileSync(o,"utf8");return a.writeFileSync(n,e,"utf8"),a.unlinkSync(o),console.log(`Migrated node.yaml to fnode.yaml in ${t}`),n}catch(e){return console.error(`Error migrating node.yaml to fnode.yaml: ${e.message}`),o}return n}(P);if(!a.existsSync(o))throw new Error("fnode.yaml file not found in current directory.");const{raw:n,parsed:r}=await u({file:o,tags:t}),i=e.dirname(o);r.features=r.features||{};const s=r.features;s.runtime=s.runtime||{},s.runtime.type=s.runtime.type||"node","python"===s.runtime.type?s.runtime.template=s.runtime.template||"python":"bun"===s.runtime.type?s.runtime.template=s.runtime.template||"bun":s.runtime.template=s.runtime.template||"node";const l={libraryAtom:{doc:{...r},fileName:"index"},projectDir:i,projectFilePath:o,projectFileContent:n,projectFileParsed:r,runtime:s.runtime};let p=e.resolve(i,"fnet/targets.yaml");if(!a.existsSync(p)&&(p=e.resolve(i,"node.devops.yaml"),a.existsSync(p))){const t=e.resolve(i,"fnet");a.existsSync(t)||a.mkdirSync(t),a.copyFileSync(p,e.resolve(i,"fnet/targets.yaml")),a.unlinkSync(p)}if(a.existsSync(p)){const{raw:e,parsed:o}=await u({file:p,tags:t}),n=c.parseDocument(e);l.devops={filePath:p,fileContent:e,yamlDocument:n,doc:{...o},type:"library.deploy",save:async()=>{a.writeFileSync(l.devops.filePath,n.toString())}}}const d=e.resolve(i,"readme.md");if(a.existsSync(d)){const e=a.readFileSync(d,"utf8");l.readme={filePath:d,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return l}({tags:t.ftag});return{buildId:t.buildId,mode:t.mode,protocol:t.protocol||"local:",templateDir:E(`./template/fnode/${o.runtime.template}`),projectDir:e.resolve(o.projectDir,"./.workspace"),projectSrcDir:e.resolve(o.projectDir,"./src"),project:o,tags:t.ftag}}}C=C.command("input [name]","Create or modify an input config file",(e=>e.positional("name",{type:"string",demandOption:!1}).help(!1).version(!1)),(async t=>{try{const o=await G(t),{project:n}=o,{projectDir:r,projectFileParsed:i}=n,s=i.input;if(!s)throw new Error("Config schema not found in project file.");if(!Reflect.has(t,"name")){const{inputName:e}=await d({type:"input",name:"inputName",message:"Input name:",initial:"dev"});t.name=e}const c=e.resolve(r,".fnet");a.existsSync(c)||a.mkdirSync(c);const l=e.resolve(c,`${t.name}.fnet`),p=a.existsSync(l),m=(await import("@fnet/object-from-schema")).default,u=await m({schema:s,format:"yaml",ref:p?l:void 0});a.writeFileSync(l,u)}catch(e){console.error(e.message),process.exit(1)}})),C=B(C,{bin:"npm"}),C=B(C,{bin:"node"}),C=B(C,{bin:"bun"}),C=B(C,{name:"serve",bin:"bun",preArgs:["run","serve","--"]}),C=B(C,{name:"watch",bin:"bun",preArgs:["run","watch","--"]}),C=B(C,{name:"app",bin:"bun",preArgs:["run","app","--"]}),C=B(C,{name:"cli",bin:"bun",preArgs:["run","cli","--"]}),C=B(C,{name:"compile",bin:"bun",preArgs:["run","compile","--"]}),C=function(t,{name:o}){return t.command(`${o} [options]`,"Install the project as a binary",(e=>e.option("name",{alias:"n",describe:"Name to use for the installed binary",type:"string"}).option("force",{alias:"f",describe:"Force overwrite if binary already exists",type:"boolean",default:!1}).option("version",{alias:"v",describe:"Version of the binary",type:"string"}).option("yes",{alias:"y",describe:"Automatically answer yes to all prompts",type:"boolean",default:!1}).help(!1).version(!1)),(async t=>{try{const o=await G(t),{projectDir:n}=o;console.log(p.blue("Compiling project..."));const r=e.join(n,".bin");a.existsSync(r)||a.mkdirSync(r,{recursive:!0});const i=e.basename(e.dirname(n)),s=o.project?.projectFileParsed?.features?.cli?.bin,c=t.name||s||i;console.log(p.blue(`Using binary name: ${c}`));const l=e.join(r,c),{spawn:d}=await import("child_process"),m=d("bun",["build","./dist/cli/esm/index.js","--compile",`--outfile=${l}`],{cwd:n,stdio:"inherit",shell:!0});await new Promise(((e,t)=>{m.on("close",(o=>{0===o?e():t(new Error(`Compilation failed with code ${o}`))})),m.on("error",(e=>{t(e)}))})),"win32"!==process.platform&&a.chmodSync(l,493),console.log(p.green(`Binary compiled successfully: ${l}`)),console.log(p.blue("Installing binary..."));const u=["install",l];t.name&&u.push("--name",t.name),t.version&&u.push("--version",t.version),t.force&&u.push("--force"),t.yes&&u.push("--yes");const f=d("fbin",u,{stdio:"inherit",shell:!0});await new Promise(((e,t)=>{f.on("close",(o=>{0===o?e():t(new Error(`Installation failed with code ${o}`))})),f.on("error",(e=>{t(e)}))}))}catch(e){console.error(p.red(`Failed to install binary: ${e.message}`)),process.exit(1)}}))}(C,{name:"install"}),C=B(C,{bin:"npx"}),C=B(C,{bin:"cdk"}),C=B(C,{bin:"aws"}),C=function(e,{name:t,preArgs:o=[]}){return e.command(`${t} <config> <command> [options..]`,"Run a command with a config context",(e=>e.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await G(e),{projectDir:n}=t,i=e.config,s=await f({name:i,dir:n,transferEnv:!1,optional:!0,tags:t.tags}),c=s?.data?.env||void 0,l=e.command,p=process.argv.slice(5);S(r(l,[...o,...p],{cwd:a.existsSync(n)?n:P,stdio:"inherit",shell:!0,detached:!0,env:{...process.env,...c}}))}catch(e){console.error(e.message),process.exit(1)}}))}(C,{name:"with"}),C=function(e,{name:t}){return e.command(`${t} group [options..]`,"Run a command group.",(e=>e.positional("group",{type:"string"}).option("ftag",{type:"array"}).help(!1).version(!1)),(async e=>{try{const{runCommandGroup:t}=await import("./index.DrwlOzAe.js");await t({projectType:"fnode",group:e.group,tags:e.ftag,args:e,argv:process.argv})}catch(e){console.error(e.message),process.exit(1)}}))}(C,{name:"run"}),C=k(C,{name:"python"}),C=k(C,{name:"python3"}),C=k(C,{name:"pip"}),C=k(C,{name:"pip3"}),C.demandCommand(1,"You need at least one command before moving on").help().argv;export{E as r,b as w};
|
|
2
|
+
import e,{delimiter as t,join as o}from"node:path";import{fileURLToPath as r}from"node:url";import n from"yargs";import i from"chalk";import a from"@fnet/config";import s,{existsSync as c}from"node:fs";import{promisify as l}from"node:util";import d from"tree-kill";import{spawn as p}from"node:child_process";import m from"node:os";import u from"@flownet/lib-render-templates-dir";import f from"@fnet/shelljs";import y from"@fnet/yaml";import g from"yaml";import w from"@fnet/prompt";import"fs";import"path";import"@fnet/shell-flow";const b=e.dirname(r(import.meta.url));const h=l(d);let j=!1;async function v(e,t){if(j)return;if(j=!0,!e.killed&&e.pid)try{await h(e.pid,"SIGTERM").catch((()=>{})),await new Promise((e=>setTimeout(e,500))),e.killed||await h(e.pid,"SIGKILL").catch((()=>{}))}catch(e){}await new Promise((e=>setTimeout(e,100)));const o="SIGINT"===t?130:"SIGTERM"===t?143:1;process.exit(o)}function x(e){["SIGINT","SIGTERM","SIGQUIT"].forEach((t=>{process.once(t,(async()=>{await v(e,t)}))})),process.on("uncaughtException",(async t=>{await v(e)})),process.on("unhandledRejection",(async t=>{await v(e)})),e.on("close",(e=>{j||process.exit(e)}))}function $(e,{name:t,bin:o,preArgs:r=[]}){return"function"==typeof o&&(o=o()),e.command(`${t||o} [commands..]`,`${o} ${r.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await I(e),{projectDir:n}=t,i=e=>e.includes(" ")?"win32"===process.platform?`"${e.replace(/(["^])/g,"^$1")}"`:`"${e.replace(/(["\\$`])/g,"\\$1")}"`:e,a=process.argv.slice(3).map(i);x(p(o,[...r,...a],{cwd:n,stdio:"inherit",shell:!0,detached:!0}))}catch(e){console.error(e.message),process.exit(1)}}))}function S(t,{name:o,bin:r,preArgs:n=[]}){return t.command(`${o||r} [commands..]`,`${r} ${n.join(" ")}`,(e=>e.help(!1).version(!1)),(async t=>{try{const i=await I(t),{projectDir:a}=i,s=e=>e.includes(" ")?"win32"===process.platform?`"${e.replace(/(["^])/g,"^$1")}"`:`"${e.replace(/(["\\$`])/g,"\\$1")}"`:e,c=process.argv.slice(3).map(s);r=e.join(a,".conda","bin",r||o);x(p(r,[...n,...c],{cwd:a,stdio:"inherit",shell:!0,detached:!0,env:{PYTHONPATH:a}}))}catch(e){console.error(e.message),process.exit(1)}}))}async function I(e){try{const t=process.argv[1].split("/").pop().split(".")[0];if("fnode"===t){const{createContext:t}=await Promise.resolve().then((function(){return B}));return t(e)}if("fnet"===t){const{createContext:t}=await import("./index.6_yfJqit.js");return t(e)}if("frun"===t){const{createContext:t}=await import("./index.CuMyez3E.js");return t(e)}if("fbin"===t){const{createContext:t}=await import("./index.DWpw12No.js");return t(e)}}catch(e){console.warn(`Warning: Could not import context from CLI tool: ${e.message}`)}return{projectDir:process.cwd(),tags:e.ftag}}var D=e=>{const r=process.env.PATH||"",n="win32"===process.platform?(process.env.PATHEXT||".EXE;.CMD;.BAT;.COM").split(";"):[""],i=r.split(t);for(const t of i)for(const r of n){const n=o(t,"win32"===process.platform?e+r:e);if(c(n))return n}return null};const C=e.dirname(r(import.meta.url)),T=process.cwd();function P(t){const o=e.resolve(T,t);if(s.existsSync(o))return o;const r=e.resolve(C,"../..",t);if(s.existsSync(r))return r;throw new Error(`Template path not found: ${t}`)}const E={command:"create",describe:"Create a new fnode project",builder:e=>e.option("name",{type:"string",describe:"Project name",demandOption:!0}).option("vscode",{type:"boolean",default:!0,alias:"vs",describe:"Open in VS Code after creation"}).option("runtime",{type:"string",default:"node",choices:["node","python","bun"],describe:"Runtime environment"}),handler:async t=>{try{const o=process.cwd(),r=P("./template/fnode/project"),n=e.resolve(o,t.name);s.existsSync(n)||s.mkdirSync(n),await u({dir:r,outDir:n,context:{name:t.name,runtime:t.runtime,platform:m.platform()},copyUnmatchedAlso:!0});let i=await f("fnode build",{cwd:n});if(0!==i.code)throw new Error("Failed to build project.");if(D("git")&&(i=await f("git init --initial-branch=main",{cwd:n}),0!==i.code))throw new Error("Failed to initialize git.");if(D("code")&&t.vscode&&(i=await f(`cd ${n} && code .`),0!==i.code))throw new Error("Failed to open vscode.");console.log("Creating project succeeded!"),process.exit(0)}catch(e){console.error("Initialization failed!",e.message),process.exit(1)}}};async function F(t){if(t.id)return{id:t.id,buildId:t.buildId,mode:t.mode,protocol:t.protocol||"ac:",templateDir:P("./template/fnode/node"),projectDir:e.resolve(process.cwd(),`./.output/${t.id}`),tags:t.ftag};try{const o=await async function({tags:t}){let o=function(t){const o=e.resolve(t,"node.yaml"),r=e.resolve(t,"fnode.yaml");if(s.existsSync(r))return r;if(s.existsSync(o))try{const e=s.readFileSync(o,"utf8");return s.writeFileSync(r,e,"utf8"),s.unlinkSync(o),console.log(`Migrated node.yaml to fnode.yaml in ${t}`),r}catch(e){return console.error(`Error migrating node.yaml to fnode.yaml: ${e.message}`),o}return r}(process.cwd());if(!s.existsSync(o))throw new Error("fnode.yaml file not found in current directory.");const{raw:r,parsed:n}=await y({file:o,tags:t}),i=e.dirname(o);n.features=n.features||{};const a=n.features;a.runtime=a.runtime||{},a.runtime.type=a.runtime.type||"node","python"===a.runtime.type?a.runtime.template=a.runtime.template||"python":"bun"===a.runtime.type?a.runtime.template=a.runtime.template||"bun":a.runtime.template=a.runtime.template||"node";const c={libraryAtom:{doc:{...n},fileName:"index"},projectDir:i,projectFilePath:o,projectFileContent:r,projectFileParsed:n,runtime:a.runtime};let l=e.resolve(i,"fnet/targets.yaml");if(!s.existsSync(l)&&(l=e.resolve(i,"node.devops.yaml"),s.existsSync(l))){const t=e.resolve(i,"fnet");s.existsSync(t)||s.mkdirSync(t),s.copyFileSync(l,e.resolve(i,"fnet/targets.yaml")),s.unlinkSync(l)}if(s.existsSync(l)){const{raw:e,parsed:o}=await y({file:l,tags:t}),r=g.parseDocument(e);c.devops={filePath:l,fileContent:e,yamlDocument:r,doc:{...o},type:"library.deploy",save:async()=>{s.writeFileSync(c.devops.filePath,r.toString())}}}const d=e.resolve(i,"readme.md");if(s.existsSync(d)){const e=s.readFileSync(d,"utf8");c.readme={filePath:d,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return c}({tags:t.ftag});return{buildId:t.buildId,mode:t.mode,protocol:t.protocol||"local:",templateDir:P(`./template/fnode/${o.runtime.template}`),projectDir:e.resolve(o.projectDir,"./.workspace"),projectSrcDir:e.resolve(o.projectDir,"./src"),project:o,tags:t.ftag}}catch(e){return console.warn(`Warning: Could not load project: ${e.message}`),{projectDir:process.cwd(),tags:t.ftag}}}var B=Object.freeze({__proto__:null,createContext:F});const A={command:"project",describe:"Manage fnode project",builder:e=>e.option("update",{type:"boolean",default:!1,alias:"-u",describe:"Update project files"}),handler:async e=>{try{const t=P("./template/fnode/project"),o=process.cwd(),r=await F(e);if(e.update){if(await u({dir:t,outDir:o,context:{name:r.project.projectFileParsed.name,runtime:r.project.runtime.type,platform:m.platform()},copyUnmatchedAlso:!0}),0!==(await f("fnode build",{cwd:o})).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(e){console.error("Project failed.",e.message),process.exit(1)}}};class k{static async createBuilder(e){if(!e.project){console.warn("No project provided, defaulting to node runtime");return new(0,(await import("./index.C13sJvOd.js")).default)(e)}const t=e.project?.runtime?.type||"node";try{return new(await this.loadBuilderClass(t))(e)}catch(o){console.warn(`Warning: Could not load builder for runtime '${t}'. Falling back to node builder.`),console.warn(`Error: ${o.message}`);return new(0,(await import("./index.C13sJvOd.js")).default)(e)}}static async loadBuilderClass(e){switch(e.toLowerCase()){case"node":return(await import("./index.C13sJvOd.js")).default;case"python":return(await import("./index.HuSUGVCc.js")).default;case"bun":return(await import("./index.BwO0ciN2.js")).default;default:throw new Error(`Unsupported runtime type: ${e}`)}}}const R={command:"build",describe:"Build fnode project",builder:e=>e.option("id",{type:"string",describe:"Project ID"}).option("buildId",{type:"string",alias:"bid",describe:"Build ID"}).option("mode",{type:"string",default:"build",choices:["all","file","build","deploy","bpmn"],describe:"Build mode"}).option("ftag",{type:"array",describe:"Tags for conditional configuration"}),handler:async e=>{try{const t=await F(e),o=await k.createBuilder(t);await o.init(),await o.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}}},G={command:"deploy",describe:"Build and deploy fnode project",builder:e=>e.option("id",{type:"string",describe:"Project ID"}).option("buildId",{type:"string",alias:"bid",describe:"Build ID"}).option("ftag",{type:"array",describe:"Tags for conditional configuration"}),handler:async e=>{try{const t=await F({...e,mode:"all"}),o=await k.createBuilder(t);await o.init(),await o.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}}},N={command:"file",describe:"Just create files",builder:e=>e.option("id",{type:"string",describe:"Project ID"}).option("buildId",{type:"string",alias:"bid",describe:"Build ID"}).option("ftag",{type:"array",describe:"Tags for conditional configuration"}),handler:async e=>{try{const t=await F({...e,mode:"file"}),o=await k.createBuilder(t);await o.init(),await o.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}}},U={command:"input [name]",describe:"Create or modify an input config file",builder:e=>e.positional("name",{type:"string",demandOption:!1,describe:"Input name"}),handler:async t=>{try{const o=await F(t),{project:r}=o,{projectDir:n,projectFileParsed:i}=r,a=i.input;if(!a)throw new Error("Config schema not found in project file.");if(!Reflect.has(t,"name")){const{inputName:e}=await w({type:"input",name:"inputName",message:"Input name:",initial:"dev"});t.name=e}const c=e.resolve(n,".fnet");s.existsSync(c)||s.mkdirSync(c);const l=e.resolve(c,`${t.name}.fnet`),d=s.existsSync(l),p=(await import("@fnet/object-from-schema")).default,m=await p({schema:a,format:"yaml",ref:d?l:void 0});s.writeFileSync(l,m)}catch(e){console.error(e.message),process.exit(1)}}},M=e.dirname(r(import.meta.url)),_=process.cwd();process.on("uncaughtException",(e=>{j||(j=!0,setTimeout((()=>process.exit(1)),500))})),process.on("unhandledRejection",(e=>{j||(j=!0,setTimeout((()=>process.exit(1)),500))})),function(){a({name:["redis"],dir:_,optional:!0});const t=function({baseDir:t}){let o=t=t||b;for(;o!==e.parse(o).root;){const t=e.join(o,"node_modules");if(s.existsSync(t))return t;o=e.dirname(o)}return null}({baseDir:M}),o="win32"===process.platform?";":":";t&&(process.env.PATH=`${e.join(t,"/.bin")}${o}${process.env.PATH}`)}(),async function(){try{let t=n(process.argv.slice(2)).usage("Usage: $0 <command> [options]").command(E).command(A).command(R).command(G).command(N).command(U);t=$(t,{bin:"npm"}),t=$(t,{bin:"node"}),t=$(t,{bin:"bun"}),t=$(t,{name:"serve",bin:"bun",preArgs:["run","serve","--"]}),t=$(t,{name:"watch",bin:"bun",preArgs:["run","watch","--"]}),t=$(t,{name:"app",bin:"bun",preArgs:["run","app","--"]}),t=$(t,{name:"cli",bin:"bun",preArgs:["run","cli","--"]}),t=$(t,{name:"compile",bin:"bun",preArgs:["run","compile","--"]}),t=function(t,{name:o}){return t.command(`${o} [options]`,"Install the project as a binary",(e=>e.option("name",{alias:"n",describe:"Name to use for the installed binary",type:"string"}).option("force",{alias:"f",describe:"Force overwrite if binary already exists",type:"boolean",default:!1}).option("version",{alias:"v",describe:"Version of the binary",type:"string"}).option("yes",{alias:"y",describe:"Automatically answer yes to all prompts",type:"boolean",default:!1}).help(!1).version(!1)),(async t=>{try{const o=await I(t),{projectDir:r}=o;console.log(i.blue("Compiling project..."));const n=e.join(r,".bin");s.existsSync(n)||s.mkdirSync(n,{recursive:!0});const a=e.basename(e.dirname(r)),c=o.project?.projectFileParsed?.features?.cli?.bin,l=t.name||c||a;console.log(i.blue(`Using binary name: ${l}`));const d=e.join(n,l),{spawn:p}=await import("child_process"),m=p("bun",["build","./dist/cli/esm/index.js","--compile",`--outfile=${d}`],{cwd:r,stdio:"inherit",shell:!0});await new Promise(((e,t)=>{m.on("close",(o=>{0===o?e():t(new Error(`Compilation failed with code ${o}`))})),m.on("error",(e=>{t(e)}))})),"win32"!==process.platform&&s.chmodSync(d,493),console.log(i.green(`Binary compiled successfully: ${d}`)),console.log(i.blue("Installing binary..."));const u=["install",d];t.name&&u.push("--name",t.name),t.version&&u.push("--version",t.version),t.force&&u.push("--force"),t.yes&&u.push("--yes");const f=p("fbin",u,{stdio:"inherit",shell:!0});await new Promise(((e,t)=>{f.on("close",(o=>{0===o?e():t(new Error(`Installation failed with code ${o}`))})),f.on("error",(e=>{t(e)}))}))}catch(e){console.error(i.red(`Failed to install binary: ${e.message}`)),process.exit(1)}}))}(t,{name:"install"}),t=$(t,{bin:"npx"}),t=$(t,{bin:"cdk"}),t=$(t,{bin:"aws"}),t=function(e,{name:t,preArgs:o=[]}){return e.command(`${t} <config> <command> [options..]`,"Run a command with a config context",(e=>e.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await I(e),{projectDir:r}=t,n=e.config,i=await a({name:n,dir:r,transferEnv:!1,optional:!0,tags:t.tags}),c=i?.data?.env||void 0,l=e.command,d=process.argv.slice(5);x(p(l,[...o,...d],{cwd:s.existsSync(r)?r:process.cwd(),stdio:"inherit",shell:!0,detached:!0,env:{...process.env,...c}}))}catch(e){console.error(e.message),process.exit(1)}}))}(t,{name:"with"}),t=function(e,{name:t,projectType:o="auto"}){return e.command(`${t} group [options..]`,"Run a command group.",(e=>e.positional("group",{type:"string"}).option("ftag",{type:"array"}).help(!1).version(!1)),(async e=>{try{const{runCommandGroup:t}=await import("./index.DrwlOzAe.js");await t({projectType:o,group:e.group,tags:e.ftag,args:e,argv:process.argv})}catch(e){console.error(e.message),process.exit(1)}}))}(t,{name:"run",projectType:"fnode"}),t=S(t,{name:"python"}),t=S(t,{name:"python3"}),t=S(t,{name:"pip"}),t=S(t,{name:"pip3"}),t.demandCommand(1,"You need at least one command before moving on").help().argv}catch(e){console.error(i.red(`Fatal error: ${e.message}`)),process.exit(1)}}().catch((e=>{console.error(i.red(`Fatal error: ${e.message}`)),process.exit(1)}));export{P as r,D as w};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import e from"node:fs";import t from"node:path";import r from"semver";import o from"@fnet/shelljs";import i from"@fnet/config";import n from"@fnet/object-from-schema";import s from"yaml";import{r as m,w as p}from"./index.js";import{fileURLToPath as a}from"node:url";import"yargs";import"chalk";import"node:util";import"tree-kill";import"node:child_process";import"node:os";import"@flownet/lib-render-templates-dir";import"@fnet/yaml";import"@fnet/prompt";import"fs";import"path";import"@fnet/shell-flow";async function c({atom:a,setProgress:c,context:l,deploymentProject:f,deploymentProjectTarget:d,yamlTarget:y}){await c({message:"Deploying it as npm package."});const g=l.projectDir,w=t.resolve(g,"package.json"),u=e.readFileSync(w),h=JSON.parse(u);h.name=d.params.name,h.version=r.inc(d.version,"patch");const b=d.params.bin?.name||d.params.bin;!1!==d.params.bin?.enabled&&b&&"string"==typeof b&&(h.bin={[b]:"dist/cli/esm/index.js"}),delete h.scripts,delete h.devDependencies,h.scripts={serve:"npx serve ."},e.writeFileSync(w,JSON.stringify(h,null,"\t"));const v=d.config||"npm";let j=(await i({name:v,dir:l.projectDir,tags:l.tags,optional:!0}))?.data;if(!j){const r=m("./template/schemas/to-npm.yaml"),o=await n({schema:r,tags:l.tags}),i=l.project.projectDir,p=t.resolve(i,".fnet");e.existsSync(p)||e.mkdirSync(p),e.writeFileSync(t.resolve(p,`${v}.fnet`),s.stringify(o)),j=o}if(e.writeFileSync(t.resolve(g,".npmrc"),`//registry.npmjs.org/:_authToken=${j.env.NPM_TOKEN}`),!0!==d.dryRun){if(p("bun")){if(0!==(await o("bun publish --access public",{cwd:g})).code)throw new Error("Couldnt publish to npm")}else{if(0!==(await o("npm publish --access public",{cwd:g})).code)throw new Error("Couldnt publish to npm")}e.writeFileSync(w,u),f.isDirty=!0,d.version=h.version,y.set("version",h.version)}}t.dirname(a(import.meta.url)),process.cwd();export{c as default};
|
package/dist/frun/index.js
CHANGED
|
@@ -1,126 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import yargs from '
|
|
3
|
-
import { hideBin } from 'yargs/helpers';
|
|
4
|
-
import fs from 'fs';
|
|
5
|
-
import path from 'path';
|
|
6
|
-
import fnetYaml from '@fnet/yaml';
|
|
7
|
-
import fnetShellFlow from '@fnet/shell-flow';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Run a command group from a project file
|
|
11
|
-
*
|
|
12
|
-
* @param {Object} options - Options for running the command
|
|
13
|
-
* @param {string} options.projectType - Type of project ('fnode', 'fnet', or 'auto')
|
|
14
|
-
* @param {string} options.group - Command group to run
|
|
15
|
-
* @param {Array} options.tags - Tags for conditional configuration
|
|
16
|
-
* @param {Object} options.args - Command line arguments
|
|
17
|
-
* @param {Array} options.argv - Raw command line arguments
|
|
18
|
-
* @returns {Promise<void>}
|
|
19
|
-
*/
|
|
20
|
-
async function runCommandGroup({ projectType, group, tags, args, argv }) {
|
|
21
|
-
try {
|
|
22
|
-
// Detect project file based on project type
|
|
23
|
-
const projectFile = await detectProjectFile(projectType);
|
|
24
|
-
|
|
25
|
-
// Load project file
|
|
26
|
-
const { parsed: projectFileParsed } = await fnetYaml({
|
|
27
|
-
file: projectFile.path,
|
|
28
|
-
tags
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
// Check if commands section exists
|
|
32
|
-
const commands = projectFileParsed.commands;
|
|
33
|
-
if (!commands) {
|
|
34
|
-
throw new Error(`Commands section not found in ${projectFile.name}`);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// Check if command group exists
|
|
38
|
-
const commandGroup = commands[group];
|
|
39
|
-
if (!commandGroup) {
|
|
40
|
-
throw new Error(`Command group '${group}' not found in ${projectFile.name}`);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// Run command group
|
|
44
|
-
// console.log(`Running command group '${group}' from ${projectFile.name}...`);
|
|
45
|
-
await fnetShellFlow({
|
|
46
|
-
commands: commandGroup,
|
|
47
|
-
context: {
|
|
48
|
-
args,
|
|
49
|
-
argv,
|
|
50
|
-
projectType: projectFile.type
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
} catch (error) {
|
|
55
|
-
console.error(`Error: ${error.message}`);
|
|
56
|
-
process.exit(1);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Detect project file based on project type
|
|
62
|
-
*
|
|
63
|
-
* @param {string} projectType - Type of project ('fnode', 'fnet', or 'auto')
|
|
64
|
-
* @returns {Promise<Object>} Project file information
|
|
65
|
-
*/
|
|
66
|
-
async function detectProjectFile(projectType) {
|
|
67
|
-
const cwd = process.cwd();
|
|
68
|
-
const fnodeYamlPath = path.resolve(cwd, 'fnode.yaml');
|
|
69
|
-
const fnetYamlPath = path.resolve(cwd, 'fnet.yaml');
|
|
70
|
-
|
|
71
|
-
// For auto detection, check both files
|
|
72
|
-
if (fs.existsSync(fnodeYamlPath)) {
|
|
73
|
-
return {
|
|
74
|
-
path: fnodeYamlPath,
|
|
75
|
-
name: 'fnode.yaml',
|
|
76
|
-
type: 'fnode'
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
if (fs.existsSync(fnetYamlPath)) {
|
|
81
|
-
return {
|
|
82
|
-
path: fnetYamlPath,
|
|
83
|
-
name: 'fnet.yaml',
|
|
84
|
-
type: 'fnet'
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
throw new Error('No project file (fnode.yaml or fnet.yaml) found in current directory');
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// Main function
|
|
92
|
-
async function main() {
|
|
93
|
-
const argv = yargs(hideBin(process.argv))
|
|
94
|
-
.usage('Usage: $0 <command> [options]')
|
|
95
|
-
.command('$0 <group> [options..]', 'Run a command group from project file', (yargs) => {
|
|
96
|
-
return yargs
|
|
97
|
-
.positional('group', {
|
|
98
|
-
type: 'string',
|
|
99
|
-
describe: 'Command group to run'
|
|
100
|
-
})
|
|
101
|
-
.option('ftag', {
|
|
102
|
-
type: 'array',
|
|
103
|
-
describe: 'Tags for conditional configuration'
|
|
104
|
-
})
|
|
105
|
-
.example('$0 build', 'Run the build command group')
|
|
106
|
-
.example('$0 test --ftag dev', 'Run the test command group with dev tag')
|
|
107
|
-
})
|
|
108
|
-
.help()
|
|
109
|
-
.version()
|
|
110
|
-
.argv;
|
|
111
|
-
|
|
112
|
-
// Run command group using the common utility
|
|
113
|
-
await runCommandGroup({
|
|
114
|
-
projectType: 'auto', // Auto-detect project type
|
|
115
|
-
group: argv.group,
|
|
116
|
-
tags: argv.ftag,
|
|
117
|
-
args: argv,
|
|
118
|
-
argv: process.argv
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
// Run main function
|
|
123
|
-
main().catch(error => {
|
|
124
|
-
console.error(`Fatal error: ${error.message}`);
|
|
125
|
-
process.exit(1);
|
|
126
|
-
});
|
|
2
|
+
import o from"yargs";import{hideBin as r}from"yargs/helpers";import{promisify as e}from"node:util";import t from"tree-kill";import a from"fs";import n from"path";import s from"@fnet/yaml";import c from"@fnet/shell-flow";e(t);let i=!1;async function m({projectType:o,group:r,tags:e,args:t,argv:i}){try{const o=await async function(){const o=process.cwd(),r=n.resolve(o,"fnode.yaml"),e=n.resolve(o,"fnet.yaml");if(a.existsSync(r))return{path:r,name:"fnode.yaml",type:"fnode"};if(a.existsSync(e))return{path:e,name:"fnet.yaml",type:"fnet"};throw new Error("No project file (fnode.yaml or fnet.yaml) found in current directory")}(),{parsed:m}=await s({file:o.path,tags:e}),p=m.commands;if(!p)throw new Error(`Commands section not found in ${o.name}`);const f=p[r];if(!f)throw new Error(`Command group '${r}' not found in ${o.name}`);await c({commands:f,context:{args:t,argv:i,projectType:o.type}})}catch(o){console.error(`Error: ${o.message}`),process.exit(1)}}const p={command:"$0 <group> [options..]",describe:"Run a command group from project file",builder:o=>o.positional("group",{type:"string",describe:"Command group to run"}).option("ftag",{type:"array",describe:"Tags for conditional configuration"}).example("$0 build","Run the build command group").example("$0 test --ftag dev","Run the test command group with dev tag"),handler:async o=>{try{await m({projectType:"auto",group:o.group,tags:o.ftag,args:o,argv:process.argv})}catch(o){console.error(`Error: ${o.message}`),process.exit(1)}}};process.on("uncaughtException",(o=>{i||(i=!0,setTimeout((()=>process.exit(1)),500))})),process.on("unhandledRejection",(o=>{i||(i=!0,setTimeout((()=>process.exit(1)),500))})),async function(){try{o(r(process.argv)).usage("Usage: $0 <command> [options]").command(p).help().version().argv}catch(o){console.error(`Fatal error: ${o.message}`),process.exit(1)}}().catch((o=>{console.error(`Fatal error: ${o.message}`),process.exit(1)}));
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import e from"node:fs";import t from"node:path";import r from"semver";import o from"@fnet/shelljs";import i from"@fnet/config";import s from"@fnet/object-from-schema";import n from"yaml";import{r as m,w as p}from"./index.js";import{fileURLToPath as a}from"node:url";import"node:child_process";import"node:os";import"tree-kill";import"yargs";import"chalk";import"@fnet/prompt";import"@fnet/yaml";import"@fnet/shell-flow";import"@flownet/lib-render-templates-dir";import"node:util";import"nunjucks";import"lodash.clonedeep";import"isobject";import"redis";import"@flownet/lib-is-redis-online";import"node:crypto";import"@flownet/lib-atom-api-js";import"lodash.merge";import"@flownet/lib-parse-imports-js";import"@fnet/npm-list-versions";import"@fnet/npm-pick-versions";import"object-hash";import"ajv/dist/2020.js";import"ajv/dist/standalone/index.js";import"ajv-formats";import"@flownet/lib-parse-node-url";import"bpmn-moddle";import"dagre";import"@fnet/expression";import"@fnet/list-files";import"@fnet/key-value-transformer";import"lodash.pick";import"lodash.omit";async function l({atom:a,setProgress:l,context:c,deploymentProject:d,deploymentProjectTarget:f,yamlTarget:y}){await l({message:"Deploying it as npm package."});const w=c.projectDir,b=t.resolve(w,"package.json"),h=e.readFileSync(b),j=JSON.parse(h);j.name=f.params.name,j.version=r.inc(f.version,"patch");const u=f.params.bin?.name||f.params.bin;!1!==f.params.bin?.enabled&&u&&"string"==typeof u&&(j.bin={[u]:"dist/cli/esm/index.js"}),delete j.scripts,delete j.devDependencies,j.scripts={serve:"npx serve ."},e.writeFileSync(b,JSON.stringify(j,null,"\t"));const g=f.config||"npm";let v=(await i({name:g,dir:c.projectDir,tags:c.tags,optional:!0}))?.data;if(!v){const r=m("./template/schemas/to-npm.yaml"),o=await s({schema:r,tags:c.tags}),i=c.project.projectDir,p=t.resolve(i,".fnet");e.existsSync(p)||e.mkdirSync(p),e.writeFileSync(t.resolve(p,`${g}.fnet`),n.stringify(o)),v=o}if(e.writeFileSync(t.resolve(w,".npmrc"),`//registry.npmjs.org/:_authToken=${v.env.NPM_TOKEN}`),!0!==f.dryRun){if(p("bun")){if(0!==(await o("bun publish --access public",{cwd:w})).code)throw new Error("Couldnt publish to npm")}else{if(0!==(await o("npm publish --access public",{cwd:w})).code)throw new Error("Couldnt publish to npm")}e.writeFileSync(b,h),d.isDirty=!0,f.version=j.version,y.set("version",j.version)}}t.dirname(a(import.meta.url)),process.cwd();export{l as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import e from"node:fs";import t from"node:path";import a from"nunjucks";import s from"@flownet/lib-parse-imports-js";import o from"@flownet/lib-parse-node-url";import{B as i,c as r,a as n}from"./index.D5QuQuJX.js";import p from"lodash.merge";import{f as l,i as c,a as d,b as u,c as f,d as b,p as m,e as g,g as _,h,j as y,k as w,l as x,m as v,r as k}from"./index.CLPC6OJN.js";import j from"@fnet/npm-list-versions";import D from"@fnet/shelljs";import"node:crypto";import"yaml";import"chalk";import"@flownet/lib-atom-api-js";import"@fnet/config";import"@fnet/list-files";import"redis";import"@flownet/lib-is-redis-online";import"@fnet/yaml";import"@flownet/lib-render-templates-dir";import"@fnet/npm-pick-versions";import"object-hash";import"ajv/dist/2020.js";import"ajv/dist/standalone/index.js";import"ajv-formats";import"./index.js";import"node:url";import"node:child_process";import"node:os";import"yargs";import"@fnet/prompt";import"node:util";import"tree-kill";function C({dir:a,name:s="index"}){let o=t.resolve(a,`./${s}.tsx`);if(e.existsSync(o)||(o=t.resolve(a,`./${s}.ts`)),e.existsSync(o)||(o=t.resolve(a,`./${s}.jsx`)),e.existsSync(o)||(o=t.resolve(a,`./${s}.js`)),!e.existsSync(o))return{};const i=o,r=t.extname(o);return{file:i,ext:r,ts:".ts"===r||".tsx"===r,name:s}}async function S(e){const{atom:a,context:o,setProgress:i}=e;i("Initializing features..."),a.doc.features=a.doc.features||{};const r=a.doc.features;r.project=r.project||{},r.project.format=r.project.format||r.project_format||"esm",r.project_format=r.project.format,r.dts_enabled=!0===r.dts||void 0!==r.dts&&!1!==r.dts;const n=t.resolve(o.project.projectDir),m=C({dir:t.resolve(n,"./app")});if(m.file){i("Parsing app entry imports...");let e=await s({file:m.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));r.app_uses_jsx=t,r.app_has_entry=!0,e=await s({file:m.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),r.app_entry_uses_jsx=t,r.app_entry_is_ts=m.ts,r.app_entry_ext=m.ext}const g=C({dir:t.resolve(n,"./cli")});if(g.file){i("Parsing cli entry imports...");let e=await s({file:g.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));r.cli_uses_jsx=t,r.cli_has_entry=!0,e=await s({file:g.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),r.cli_entry_uses_jsx=t,r.cli_entry_is_ts=g.ts,r.cli_entry_ext=g.ext}if("workflow.lib"===a.type){const e=C({dir:t.resolve(n,"./src")});if(e.file){i("Parsing src entry imports...");let t=await s({file:e.file,recursive:!0}),a=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));r.src_uses_jsx=a,r.src_has_entry=!0,t=await s({file:e.file}),a=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),r.src_entry_uses_jsx=a,r.src_entry_is_ts=e.ts,r.src_entry_ext=e.ext}}const _=Reflect.has(r,"app_entry_uses_jsx")?!0===r.app_entry_uses_jsx:!0===r.src_entry_uses_jsx,h=Reflect.has(r,"cli_entry_uses_jsx")?!0===r.cli_entry_uses_jsx:!0===r.src_entry_uses_jsx;r.form_enabled=_||h||!0===r.form||!0===r.form?.enabled,r.multiple_enabled=r.multiple_enabled||!0===r.multiple||!0===r.multiple?.enabled,!1===r.app?r.app={enabled:!1}:!0===r.app?r.app={enabled:!0,extend:!0===r.app_has_entry,export:!0,react:_}:r.app={enabled:!0,extend:!0===r.app_has_entry,export:!0,react:_,...r.app||{}},r.app.enabled=!0===r.app.enabled&&(!0===a.doc.features.form_enabled||!0===r.app.extend||!0===r.app.enabled),r.app.format=r.app.format||"esm",r.app.folder=r.app.folder||r.app.format||"default",!1===r.cli?r.cli={enabled:!1}:!0===r.cli?r.cli={enabled:!0,extend:!0===r.cli_has_entry,export:!0,react:h}:r.cli={enabled:!0,extend:!0===r.cli_has_entry,export:!0,react:h,...r.cli||{}},r.cli.enabled=!0===r.cli.enabled&&(!1===a.doc.features.form_enabled||!0===r.cli.extend||!0===r.cli.enabled),r.cli.format=r.cli.format||"esm",r.cli.folder=r.cli.folder||r.cli.folder||"esm",r.cli.node_options=r.cli.node?.options||r.cli.node_options||"",r.cli.bin=r.cli.bin||a.doc.name,r.cli.installable=!0===r.cli.installable,r.cli.enabled&&(a.doc["npm::bin"]=r.cli.bin,console.log(`Setting npm::bin to ${r.cli.bin} from features.cli.bin`)),r.json=r.cli.enabled||r.json;const y={cjs:{format:"cjs",context:r.form_enabled?"window":"global",babel:!0===r.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!1!==r.cjs,copy:!1},esm:{format:"esm",context:r.form_enabled?"window":"global",babel:!0===r.src_uses_jsx||!1,browser:!1,replace:!0,terser:!1,enabled:!1!==r.esm,copy:!0},iife:{format:"iife",context:r.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0===r.iife,terser:!0,copy:!1}};!0===r.webos&&(y.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,input:"./src/app/index.js",output_dir:"./dist/app/webos",copy:!1,babel_options:{targets:{chrome:"79"}}}),!0===r.electron&&(y.electron={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/electron"}),!0===r.nextjs&&(y.nextjs={format:"esm",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/nextjs"}),!0===r.ios&&(y.ios={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/ios"}),!0===r.macos&&(y.macos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/macos"}),!0===r.app.enabled&&(r.app.dir=`./dist/app/${r.app.folder}`,y.app={format:r.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:r.app.dir,terser:!0,output_exports:!1===r.app.export?"none":"auto",browsersync:!0}),!0===r.cli.enabled&&(r.cli.dir=`./dist/cli/${r.cli.folder}`,y.cli={format:r.cli.format,context:"global",babel:!0===r.src_uses_jsx||!0===r.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:r.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===r.cli.export?"none":"auto"});const w={server:".",startPath:`${t.normalize(r.app.dir||".")}`,files:[t.normalize("./dist/**/*")],cors:!0,open:!1};r.babel_options=p({targets:{browsers:"last 9 versions, not dead",node:"18"}},r.babel_options||r.babel?.options),r.browsersync_options=p(w,r.browsersync_options||r.browsersync?.options||{}),r.replace_options=p({},r.replace_options||r.replace?.options||{}),Reflect.has(r.browsersync_options,"proxy")&&delete r.browsersync_options.server,r.rollup=r.rollup||{},r.rollup_output=p(y,r.rollup_output||r.rollup?.output||{}),r.preact_enabled=!0===r.preact||r.preact&&!1!==r.preact?.enabled;let x=Object.keys(y);for(const e of x){const t=y[e];t&&(!1!==r.rollup[e]?(t.babel_options=t.babel_options||r.babel_options,t.browsersync_options=p(r.browsersync_options,t.browsersync_options),t.replace_options=p(r.replace_options,t.replace_options),r.preact_enabled&&(t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{},t.alias.entries.react="preact/compat",t.alias.entries["react-dom"]="preact/compat"),(r.form_enabled||r.babel)&&(t.babel=!0)):delete r.rollup_output[e])}x=Object.keys(r.rollup_output),r.babel_enabled=x.some((e=>!0===r.rollup_output[e].babel)),r.browser_enabled=x.some((e=>!0===r.rollup_output[e].babel)),r.browsersync_enabled=!1!==r.browsersync&&x.some((e=>!0===r.rollup_output[e].browsersync)),r.browsersync_enabled=r.browsersync_enabled&&r.app.enabled,r.dependency_auto_enabled=!1!==r.dependency_auto&&!1!==r.dependency_auto?.enabled,r.npm_install_flags=r.npm_install_flags||"",r.react_version=r.react_version||r.react?.version||18,c(e),d(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:s,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:s,packageDevDependencies:a})}(e),u(e),f(e),b(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:s,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]]},features:s,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:s,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.8"]]},features:s,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"workbox",packages:[["rollup-plugin-workbox","^8"]],options:{generate:{swDest:"dist/app/esm/sw.js",globDirectory:"dist/app/esm",globPatterns:["**/*.{html,js,css,png,jpg}"],skipWaiting:!0,clientsClaim:!0}},explicit:!0},features:s,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:s,packageDevDependencies:a})}(e)}class A extends i{async initRuntime(){await S(this.apiContext),await async function({atom:e,packageDependencies:t,packageDevDependencies:a,setProgress:s}){s("Initializing dependencies");const o=e.doc.dependencies||[];if(o.filter((e=>!e.dev)).forEach((e=>t.push(e))),o.filter((e=>e.dev)).forEach((e=>a.push(e))),"workflow"===e.type&&(t.push({package:"get-value",version:"^3"}),t.push({package:"set-value",version:"^4"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let a="^18.2";s("Fetching React versions"),a=`^${(await j({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:a}),t.push({package:"react-dom",version:a}),"workflow"===e.type&&(t.push({package:"@fnet/react-app",version:"^0.1"}),t.push({package:"@fnet/react-app-state",version:"^0.1"}))}e.doc.features.preact_enabled&&t.push({package:"preact",version:"^10"}),!0===e.doc.features.cli.enabled&&(t.push({package:"@fnet/args",version:"^0.1"}),a.push({package:"ajv",version:"^8"}),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled&&t.push({package:"@fnet/config",version:"0.2.21"})),e.doc.features.render&&!1!==e.doc.features.render.enabled&&a.push({package:"@flownet/lib-render-templates-dir",version:"0.1.19"}),a.push({package:"@babel/core",version:"^7"}),a.push({package:"@rollup/plugin-commonjs",version:"^28"}),a.push({package:"@rollup/plugin-node-resolve",version:"^16"}),a.push({package:"@rollup/plugin-replace",version:"^6"}),a.push({package:"rollup",version:"^4"}),e.doc.features.dts_enabled&&a.push({package:"rollup-plugin-dts",version:"^6"}),a.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),a.push({package:"@rollup/plugin-alias",version:"^5"}),a.push({package:"fs-extra",version:"^11"}),e.doc.features.babel_enabled&&(a.push({package:"@rollup/plugin-babel",version:"^6"}),a.push({package:"@babel/preset-env",version:"^7"}),a.push({package:"@babel/preset-react",version:"^7"}),e.doc.features.babel?.options?.plugins?.forEach((e=>{switch(e[0]){case"@babel/plugin-proposal-decorators":a.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":a.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":a.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":a.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":a.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"})}}))),a.push({package:"@fnet/rollup-plugin-delete",version:"0.1.10"}),e.doc.features.browsersync_enabled&&a.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.11"})}(this.apiContext),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}async initLibs(){this.setProgress({message:"Initializing external libs."});const e=[{name:this.atom.doc.name,type:"atom",parent_id:this.atom.parent_id}];this.libs=e,await this.initAtomLibsAndDeps({libs:e,packageDependencies:this.apiContext.packageDependencies})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const a=e.filter((e=>"atom"===e.type));for(let e=0;e<a.length;e++){const s=a[e],o=await this.findAtomLibrary({url:s.name});s.atom=o;const i=o.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));i?.forEach((e=>{const a=t.find((t=>t.package===e.package));a?"string"==typeof e.path?(a.path||[]).some((t=>t===e.path))||(a.path=a.path||[],a.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(a.path||[]).some((t=>t===e))||(a.path=a.path||[],a.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const a=o({url:e});if(!a)throw new Error(`Invalid package name: ${e}`);if(a.protocol||(a.protocol=this.context.protocol),"ac:"===a.protocol){const t=a.pathname.split("/");if(1===t.length)return await this.apiContext.Atom.first({where:{name:e,parent_id:this.atomConfig.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===t.length){const e=await this.apiContext.Atom.first({where:{name:t[0],parent_id:this.atomConfig.env.ATOM_LIBRARIES_ID,type:"folder"}});return await this.apiContext.Atom.first({where:{name:t[1],parent_id:e.id,type:"workflow.lib"}})}}else if("local:"===a.protocol){const e=this.atom;e.protocol="local:",e.doc.dependencies=e.doc.dependencies||[],e.name=e.doc.name;const a=t.resolve(this.context.projectSrcDir,"index.js"),o=await s({file:a,recursive:!0}),i=e.doc.dependencies,r=o.all;for await(const e of r){if("npm"!==e.type)continue;if(i.find((t=>t.package===e.package)))continue;const t=await m({name:e.package,projectDir:this.context.projectDir,setProgress:this.apiContext.setProgress});i.push({package:e.package,subpath:e.subpath,version:t.minorRange,type:"npm"})}return e}}async createAtomLibFiles({libs:a}){await this.setProgress({message:"Creating external lib files."}),this.atom.typesDir="./types";const s=a.filter((e=>"atom"===e.type));for(let a=0;a<s.length;a++){const o=s[a].atom,i=this.context.projectDir;if("local:"===o.protocol){const a=t.resolve(this.context.projectSrcDir,`${o.fileName||o.name}.js`),s=t.relative(t.join(this.context.projectDir,"src","default"),a);if(!e.existsSync(a)){e.mkdirSync(t.dirname(a),{recursive:!0});let s="export default async (args)=>{\n";s+="}",e.writeFileSync(a,s,"utf8")}o.relativePath=s.split(t.sep).join("/"),this.atom.typesDir=`./types/${t.basename(i)}/src`}else{const a=t.join(i,"src","libs",`${o.id}.js`),s=o.doc.contents?.find((e=>"esm"===e.format))||o.doc;e.writeFileSync(a,s.content,"utf8")}}}async createEngine(){await this.setProgress({message:"Creating engine file."});const s={libs:this.libs.filter((e=>"atom"===e.type)),libraryAtom:this.atom,atom:this.atom},o=this.context.templateDir,i=a.compile(e.readFileSync(t.resolve(o,t.join("src","default","engine.js.njk")),"utf8"),this.apiContext.njEnv).render(s),r=this.context.projectDir,n=t.resolve(r,t.join("src","default","index.js"));e.writeFileSync(n,i,"utf8")}async build(){try{this.fileMode&&(await this.createAtomLibFiles({libs:this.libs}),await this.createEngine(),await this.createProjectYaml(),await r(this.apiContext),await g(this.apiContext),await n(this.apiContext),await _(this.apiContext),await h(this.apiContext),await y(this.apiContext),await async function({atom:o,setProgress:i,context:r,packageDependencies:n}){await i({message:"Creating rollup file."});const p={atom:o,packageDependencies:n},l=t.resolve(r.projectDir,"src","default/index.js");if(!e.existsSync(l))throw new Error(`Entry file not found: ${l}`);const c=(await s({file:l,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),d=o.doc.features.rollup_output,u=Object.keys(d);for(let e=0;e<u.length;e++){const t=d[u[e]];if(!0===t.browser&&c.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(c.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<c.length;e++){const a=c[e];t.alias.entries[a]=`node:${a}`,t.alias.entries[`node:${a}`]=a}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(c)}}const f=r.templateDir;let b=a.compile(e.readFileSync(t.resolve(f,"rollup.config.mjs.njk"),"utf8"),a.configure(f)).render(p);const m=r.projectDir;let g=t.resolve(m,"rollup.config.mjs");e.writeFileSync(g,b,"utf8")}(this.apiContext),await w(this.apiContext),await x(this.apiContext),await async function({atom:e,setProgress:t,context:a}){if(!e.doc.features.dts_enabled)return;const s=a.projectDir;if(await t({message:"Creating .d.ts"}),0!==(await D("tsc",{cwd:s})).code)throw new Error("Couldnt create .d.ts files.")}(this.apiContext),this.buildMode&&(await v(this.apiContext),await k(this.apiContext),this.deployMode&&await this.deploy())),await this._cache_set(this.buildKey,{status:"COMPLETED"})}catch(e){throw await this._cache_set(this.buildKey,{status:"FAILED",message:e.message||e}),console.log(e),e}}}export{A as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import e from"node:fs";import t from"node:path";import a from"nunjucks";import i from"@flownet/lib-parse-imports-js";import s from"@flownet/lib-parse-node-url";import{B as r,c as o,a as n}from"./index.D5QuQuJX.js";import p from"lodash.merge";import{i as l,a as c,b as d,c as m,d as f,p as u,e as h,g as _,h as y,j as b,k as x,l as g,m as j,r as w}from"./index.CLPC6OJN.js";import v from"@fnet/npm-list-versions";import"node:crypto";import"yaml";import"chalk";import"@flownet/lib-atom-api-js";import"@fnet/config";import"@fnet/list-files";import"redis";import"@flownet/lib-is-redis-online";import"@fnet/yaml";import"@flownet/lib-render-templates-dir";import"@fnet/npm-pick-versions";import"object-hash";import"ajv/dist/2020.js";import"ajv/dist/standalone/index.js";import"ajv-formats";import"@fnet/shelljs";import"./index.js";import"node:url";import"node:child_process";import"node:os";import"yargs";import"@fnet/prompt";import"node:util";import"tree-kill";function k({dir:a,name:i="index"}){let s=t.resolve(a,`./${i}.tsx`);if(e.existsSync(s)||(s=t.resolve(a,`./${i}.ts`)),e.existsSync(s)||(s=t.resolve(a,`./${i}.jsx`)),e.existsSync(s)||(s=t.resolve(a,`./${i}.js`)),!e.existsSync(s))return{};const r=s,o=t.extname(s);return{file:r,ext:o,ts:".ts"===o||".tsx"===o,name:i}}class D extends r{async initRuntime(){await async function({atom:e,context:a,setProgress:s}){await s({message:"Initializing features..."}),e.doc.features=e.doc.features||{};const r=e.doc.features;r.project=r.project||{},r.project.format=r.project.format||r.project_format||"esm",r.project_format=r.project.format,r.dts_enabled=!0===r.dts||void 0!==r.dts&&!1!==r.dts;const o=t.resolve(a.project.projectDir),n=k({dir:t.resolve(o,"./app")});if(n.file){s("Parsing app entry imports...");let e=await i({file:n.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));r.app_uses_jsx=t,r.app_has_entry=!0,e=await i({file:n.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),r.app_entry_uses_jsx=t,r.app_entry_is_ts=n.ts,r.app_entry_ext=n.ext}const u=k({dir:t.resolve(o,"./cli")});if(u.file){s("Parsing cli entry imports...");let e=await i({file:u.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));r.cli_uses_jsx=t,r.cli_has_entry=!0,e=await i({file:u.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),r.cli_entry_uses_jsx=t,r.cli_entry_is_ts=u.ts,r.cli_entry_ext=u.ext}if("workflow.lib"===e.type){const e=k({dir:t.resolve(o,"./src")});if(e.file){s("Parsing src entry imports...");let t=await i({file:e.file,recursive:!0}),a=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));r.src_uses_jsx=a,r.src_has_entry=!0,t=await i({file:e.file}),a=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),r.src_entry_uses_jsx=a,r.src_entry_is_ts=e.ts,r.src_entry_ext=e.ext}}const h=Reflect.has(r,"app_entry_uses_jsx")?!0===r.app_entry_uses_jsx:!0===r.src_entry_uses_jsx,_=Reflect.has(r,"cli_entry_uses_jsx")?!0===r.cli_entry_uses_jsx:!0===r.src_entry_uses_jsx;r.form_enabled=h||_||!0===r.form||!0===r.form?.enabled,r.multiple_enabled=r.multiple_enabled||!0===r.multiple||!0===r.multiple?.enabled,!1===r.app?r.app={enabled:!1}:!0===r.app?r.app={enabled:!0,extend:!0===r.app_has_entry,export:!0,react:h}:r.app={enabled:!0,extend:!0===r.app_has_entry,export:!0,react:h,...r.app||{}},r.app.enabled=!0===r.app.enabled&&(!0===e.doc.features.form_enabled||!0===r.app.extend||!0===r.app.enabled),r.app.format=r.app.format||"esm",r.app.folder=r.app.folder||r.app.format||"esm",r.app.dir=`./dist/app/${r.app.folder}`,r.app.html=!1!==r.app.html,!1===r.cli?r.cli={enabled:!1}:!0===r.cli?r.cli={enabled:!0,extend:!0===r.cli_has_entry,export:!0,react:_}:r.cli={enabled:!0,extend:!0===r.cli_has_entry,export:!0,react:_,...r.cli||{}},r.cli.enabled=!0===r.cli.enabled&&(!1===e.doc.features.form_enabled||!0===r.cli.extend||!0===r.cli.enabled),r.cli.format=r.cli.format||"esm",r.cli.folder=r.cli.folder||r.cli.folder||"esm",r.cli.dir=`./dist/cli/${r.cli.folder}`,r.cli.node_options=r.cli.node?.options||r.cli.node_options||"",r.json=r.cli.enabled||r.json,r.bun=r.bun||{},r.bun.build=r.bun.build||{};const y={default:{format:"esm",target:"browser",minify:!1,sourcemap:"external",entrypoints:["./src/default/index.js"],outdir:"./dist/default/esm"},defaultCjs:{format:"cjs",target:"node",minify:!1,sourcemap:"external",entrypoints:["./src/default/index.js"],outdir:"./dist/default/cjs"}};r.cli.enabled&&(y.cli={format:"esm",target:"node",minify:!1,sourcemap:"external",entrypoints:["./src/cli/index.js"],outdir:r.cli.dir}),r.app.enabled&&(y.app={format:"esm",target:"browser",minify:!1,sourcemap:"external",entrypoints:["./src/app/index.js"],outdir:r.app.dir}),r.bun.build=p(y,r.bun.build||{}),r.preact_enabled=!0===r.preact||r.preact&&!1!==r.preact?.enabled,r.dependency_auto_enabled=!1!==r.dependency_auto&&!1!==r.dependency_auto?.enabled,r.npm_install_flags=r.npm_install_flags||"",r.react_version=r.react_version||r.react?.version||18,r.runtime=r.runtime||{},r.runtime.type="bun",r.runtime.template="bun",l({atom:e}),c({atom:e}),d({atom:e}),m({atom:e}),f({atom:e})}(this.apiContext),await async function({atom:e,packageDependencies:t,packageDevDependencies:a,setProgress:i}){i("Initializing dependencies for Bun");const s=e.doc.dependencies||[];if(s.filter((e=>!e.dev)).forEach((e=>t.push(e))),s.filter((e=>e.dev)).forEach((e=>a.push(e))),"workflow"===e.type&&(t.push({package:"get-value",version:"^3"}),t.push({package:"set-value",version:"^4"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let a="^18.2";i("Fetching React versions"),a=`^${(await v({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:a}),t.push({package:"react-dom",version:a}),"workflow"===e.type&&(t.push({package:"@fnet/react-app",version:"^0.1"}),t.push({package:"@fnet/react-app-state",version:"^0.1"}))}e.doc.features.preact_enabled&&t.push({package:"preact",version:"^10"}),!0===e.doc.features.cli.enabled&&(t.push({package:"@fnet/args",version:"^0.1"}),a.push({package:"ajv",version:"^8"}),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled&&t.push({package:"@fnet/config",version:"0.2.21"})),e.doc.features.render&&!1!==e.doc.features.render.enabled&&a.push({package:"@flownet/lib-render-templates-dir",version:"0.1.19"})}(this.apiContext),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}async initLibs(){this.setProgress({message:"Initializing external libs."});const e=[{name:this.atom.doc.name,type:"atom",parent_id:this.atom.parent_id}];this.libs=e,await this.initAtomLibsAndDeps({libs:e,packageDependencies:this.apiContext.packageDependencies})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const a=e.filter((e=>"atom"===e.type));for(let e=0;e<a.length;e++){const i=a[e],s=await this.findAtomLibrary({url:i.name});i.atom=s;const r=s.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));r?.forEach((e=>{const a=t.find((t=>t.package===e.package));a?"string"==typeof e.path?(a.path||[]).some((t=>t===e.path))||(a.path=a.path||[],a.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(a.path||[]).some((t=>t===e))||(a.path=a.path||[],a.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const a=s({url:e});if(!a)throw new Error(`Invalid package name: ${e}`);if(a.protocol||(a.protocol=this.context.protocol),"ac:"===a.protocol){const t=a.pathname.split("/");if(1===t.length)return await this.apiContext.Atom.first({where:{name:e,parent_id:this.atomConfig.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===t.length){const e=await this.apiContext.Atom.first({where:{name:t[0],parent_id:this.atomConfig.env.ATOM_LIBRARIES_ID,type:"folder"}});return await this.apiContext.Atom.first({where:{name:t[1],parent_id:e.id,type:"workflow.lib"}})}}else if("local:"===a.protocol){const e=this.atom;e.protocol="local:",e.doc.dependencies=e.doc.dependencies||[],e.name=e.doc.name;const a=t.resolve(this.context.projectSrcDir,"index.js"),s=await i({file:a,recursive:!0}),r=e.doc.dependencies,o=s.all;for await(const e of o){if("npm"!==e.type)continue;if(r.find((t=>t.package===e.package)))continue;const t=await u({name:e.package,projectDir:this.context.projectDir,setProgress:this.apiContext.setProgress});r.push({package:e.package,subpath:e.subpath,version:t.minorRange,type:"npm"})}return e}}async createAtomLibFiles({libs:a}){await this.setProgress({message:"Creating external lib files."}),this.atom.typesDir="./types";const i=a.filter((e=>"atom"===e.type));for(let a=0;a<i.length;a++){const s=i[a].atom,r=this.context.projectDir;if("local:"===s.protocol){const a=t.resolve(this.context.projectSrcDir,`${s.fileName||s.name}.js`),i=t.relative(t.join(this.context.projectDir,"src","default"),a);if(!e.existsSync(a)){e.mkdirSync(t.dirname(a),{recursive:!0});let i="export default async (args)=>{\n";i+="}",e.writeFileSync(a,i,"utf8")}s.relativePath=i.split(t.sep).join("/"),this.atom.typesDir=`./types/${t.basename(r)}/src`}else{const a=t.join(r,"src","libs",`${s.id}.js`),i=s.doc.contents?.find((e=>"esm"===e.format))||s.doc;e.writeFileSync(a,i.content,"utf8")}}}async createEngine(){await this.setProgress({message:"Creating engine file."});const i={libs:this.libs.filter((e=>"atom"===e.type)),libraryAtom:this.atom,atom:this.atom},s=this.context.templateDir,r=a.compile(e.readFileSync(t.resolve(s,t.join("src","default","engine.js.njk")),"utf8"),this.apiContext.njEnv).render(i),o=this.context.projectDir,n=t.resolve(o,t.join("src","default","index.js"));e.writeFileSync(n,r,"utf8")}async build(){try{this.fileMode&&(await this.createAtomLibFiles({libs:this.libs}),await this.createEngine(),await this.createProjectYaml(),await o(this.apiContext),await h(this.apiContext),await n(this.apiContext),await _(this.apiContext),await y(this.apiContext),await b(this.apiContext),await async function({atom:i,setProgress:s,context:r,packageDependencies:o}){await s({message:"Creating build.js file."});const n={atom:i,packageDependencies:o},p=r.templateDir,l=a.compile(e.readFileSync(t.resolve(p,"build.js.njk"),"utf8"),a.configure(p)).render(n),c=r.projectDir,d=t.resolve(c,"build.js");e.writeFileSync(d,l,"utf8"),e.chmodSync(d,"755")}(this.apiContext),await x(this.apiContext),await g(this.apiContext),this.buildMode&&(await j(this.apiContext),await w(this.apiContext),this.deployMode&&await this.deploy())),await this._cache_set(this.buildKey,{status:"COMPLETED"})}catch(e){throw await this._cache_set(this.buildKey,{status:"FAILED",message:e.message||e}),console.log(e),e}}}export{D as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import e from"node:fs";import r from"node:path";import t from"semver";import i from"@fnet/shelljs";import o from"@fnet/config";import n from"@fnet/object-from-schema";import s from"yaml";import{r as a,w as m}from"./index.js";import{fileURLToPath as p}from"node:url";import"node:child_process";import"node:os";import"yargs";import"chalk";import"@fnet/prompt";import"@fnet/yaml";import"@flownet/lib-render-templates-dir";import"node:util";import"tree-kill";async function c({atom:p,setProgress:c,context:l,deploymentProject:d,deploymentProjectTarget:f,yamlTarget:y}){await c({message:"Deploying it as npm package."});const g=l.projectDir,u=r.resolve(g,"package.json"),w=e.readFileSync(u),b=JSON.parse(w);b.name=f.params.name,b.version=t.inc(f.version,"patch");const h=f.params.bin?.name||f.params.bin;!1!==f.params.bin?.enabled&&h&&"string"==typeof h&&(b.bin={[h]:"dist/cli/esm/index.js"}),delete b.scripts,delete b.devDependencies,b.scripts={serve:"npx serve ."},e.writeFileSync(u,JSON.stringify(b,null,"\t"));const v=f.config||"npm";let j=(await o({name:v,dir:l.projectDir,tags:l.tags,optional:!0}))?.data;if(!j){const t=a("./template/schemas/to-npm.yaml"),i=await n({schema:t,tags:l.tags}),o=l.project.projectDir,m=r.resolve(o,".fnet");e.existsSync(m)||e.mkdirSync(m),e.writeFileSync(r.resolve(m,`${v}.fnet`),s.stringify(i)),j=i}if(e.writeFileSync(r.resolve(g,".npmrc"),`//registry.npmjs.org/:_authToken=${j.env.NPM_TOKEN}`),!0!==f.dryRun){if(m("bun")){if(0!==(await i("bun publish --access public",{cwd:g})).code)throw new Error("Couldnt publish to npm")}else{if(0!==(await i("npm publish --access public",{cwd:g})).code)throw new Error("Couldnt publish to npm")}e.writeFileSync(u,w),d.isDirty=!0,f.version=b.version,y.set("version",b.version)}}r.dirname(p(import.meta.url)),process.cwd();export{c as default};
|