@fnet/cli 1.13.0 → 1.14.1

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.
Files changed (109) hide show
  1. package/dist/fbin/index.js +1 -1
  2. package/dist/fnet/index.4gymwzqb.js +1 -0
  3. package/dist/fnet/index.5r21wfyc.js +1 -0
  4. package/dist/fnet/index.js +9 -9
  5. package/dist/fnet/index.kanz1359.js +2 -0
  6. package/dist/fnet/index.kjw4nv5z.js +1 -0
  7. package/dist/fnet/index.n7q2w82x.js +1 -0
  8. package/dist/{fnode/index.c8qd1bz3.js → fnet/index.pj3wr582.js} +1 -1
  9. package/dist/fnet/index.r3cben5x.js +1 -0
  10. package/dist/fnet/index.sbphkm7x.js +1 -0
  11. package/dist/{fnode/index.e6g5y0zg.js → fnet/index.wmeh7jrw.js} +1 -1
  12. package/dist/fnet/index.xym49mp3.js +1 -0
  13. package/dist/fnet/index.ydv6st7k.js +1 -0
  14. package/dist/fnode/index.05n3mvs9.js +2 -0
  15. package/dist/fnode/index.22v7wtt0.js +2 -0
  16. package/dist/fnode/{index.dtp0a202.js → index.3ay4fp2s.js} +1 -1
  17. package/dist/fnode/index.6g3j97vm.js +1 -0
  18. package/dist/fnode/{index.q61zqpb9.js → index.782edcjp.js} +1 -1
  19. package/dist/fnode/index.7cqahb2f.js +1 -0
  20. package/dist/fnode/index.fy1xwqp2.js +1 -0
  21. package/dist/fnode/index.js +2 -2
  22. package/dist/fnode/index.kswhzt5n.js +1 -0
  23. package/dist/fnode/{index.1k1sj9qs.js → index.q9ghzdn2.js} +3 -3
  24. package/dist/fnode/index.r4xke6yy.js +1 -0
  25. package/dist/fnode/index.w4cz5r8m.js +1 -0
  26. package/dist/fnode/index.wd23pxn8.js +1 -0
  27. package/dist/fnode/index.xvyybysy.js +1 -0
  28. package/dist/fnode/index.z9232w6h.js +1 -0
  29. package/dist/frun/index.js +1 -1
  30. package/dist/fservice/index.js +1 -1
  31. package/package.json +5 -9
  32. package/readme.md +240 -191
  33. package/scripts/postinstall.js +19 -4
  34. package/template/deploy/to-docker/aws/Dockerfile.njk +114 -0
  35. package/template/deploy/to-docker/aws/build.sh.njk +127 -0
  36. package/template/deploy/to-docker/docker/Dockerfile.njk +67 -0
  37. package/template/deploy/to-docker/docker/build.sh.njk +48 -0
  38. package/template/deploy/to-docker/gcloud/Dockerfile.njk +69 -0
  39. package/template/deploy/to-docker/gcloud/build.sh.njk +39 -0
  40. package/template/deploy/to-docker/podman/Dockerfile.njk +69 -0
  41. package/template/deploy/to-docker/podman/build.sh.njk +44 -0
  42. package/template/deploy/to-electron/mac/entitlements.plist.njk +18 -0
  43. package/template/deploy/to-electron/main.js.njk +37 -0
  44. package/template/deploy/to-electron/package.json.njk +36 -0
  45. package/template/deploy/to-electron/src/index.html.njk +23 -0
  46. package/template/deploy/to-ios-app/fnet/index.html.njk +23 -0
  47. package/template/deploy/to-ios-app/fnet-ios-app/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
  48. package/template/deploy/to-ios-app/fnet-ios-app/Assets.xcassets/AppIcon.appiconset/Contents.json +112 -0
  49. package/template/deploy/to-ios-app/fnet-ios-app/Assets.xcassets/Contents.json +6 -0
  50. package/template/deploy/to-ios-app/fnet-ios-app/Assets.xcassets/launch-images.imageset/Contents.json +23 -0
  51. package/template/deploy/to-ios-app/fnet-ios-app/ContentView.swift +32 -0
  52. package/template/deploy/to-ios-app/fnet-ios-app/Info.plist +10 -0
  53. package/template/deploy/to-ios-app/fnet-ios-app/LaunchScreen.storyboard +26 -0
  54. package/template/deploy/to-ios-app/fnet-ios-app/Preview Content/Preview Assets.xcassets/Contents.json +6 -0
  55. package/template/deploy/to-ios-app/fnet-ios-app/WebView.swift +42 -0
  56. package/template/deploy/to-ios-app/fnet-ios-app/fnet_ios_appApp.swift +17 -0
  57. package/template/deploy/to-ios-app/fnet-ios-app.xcodeproj/project.pbxproj.njk +417 -0
  58. package/template/deploy/to-ios-app/fnet-ios-app.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  59. package/template/deploy/to-ios-app/fnet-ios-app.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  60. package/template/deploy/to-ios-app/fnet-ios-app.xcodeproj/xcshareddata/xcschemes/fnet-ios-app.xcscheme +77 -0
  61. package/template/deploy/to-macos-app/fnet/index.html.njk +23 -0
  62. package/template/deploy/to-macos-app/fnet-macos-app/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
  63. package/template/deploy/to-macos-app/fnet-macos-app/Assets.xcassets/AppIcon.appiconset/Contents.json +68 -0
  64. package/template/deploy/to-macos-app/fnet-macos-app/Assets.xcassets/Contents.json +6 -0
  65. package/template/deploy/to-macos-app/fnet-macos-app/ContentView.swift +13 -0
  66. package/template/deploy/to-macos-app/fnet-macos-app/Preview Content/Preview Assets.xcassets/Contents.json +6 -0
  67. package/template/deploy/to-macos-app/fnet-macos-app/WebView.swift +30 -0
  68. package/template/deploy/to-macos-app/fnet-macos-app/fnet_macos_app.entitlements +16 -0
  69. package/template/deploy/to-macos-app/fnet-macos-app/fnet_macos_appApp.swift +17 -0
  70. package/template/deploy/to-macos-app/fnet-macos-app.xcodeproj/project.pbxproj.njk +396 -0
  71. package/template/deploy/to-macos-app/fnet-macos-app.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  72. package/template/deploy/to-macos-app/fnet-macos-app.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  73. package/template/deploy/to-nextjs/app/layout.tsx.njk +13 -0
  74. package/template/deploy/to-nextjs/app/page.tsx.njk +28 -0
  75. package/template/deploy/to-nextjs/next-env.d.ts +5 -0
  76. package/template/deploy/to-nextjs/package.json.njk +20 -0
  77. package/template/deploy/to-nextjs/tsconfig.json +34 -0
  78. package/template/deploy/to-pyip/package/__init__.py.njk +4 -0
  79. package/template/deploy/to-pyip/package/cli/__init__.py.njk +3 -0
  80. package/template/deploy/to-pyip/package/cli/index.py.njk +24 -0
  81. package/template/deploy/to-pyip/package/lib/__init__.py.njk +3 -0
  82. package/template/deploy/to-pyip/pyproject.toml +3 -0
  83. package/template/deploy/to-pyip/setup.py.njk +32 -0
  84. package/template/deploy/to-rust/Cargo.toml.njk +16 -0
  85. package/template/deploy/to-rust/src/main.rs.njk +112 -0
  86. package/template/deploy/to-webos/appinfo.json.njk +14 -0
  87. package/template/deploy/to-webos/index.html.njk +39 -0
  88. package/template/deploy/to-webos/webOSTVjs-1.2.10/LICENSE-2.0.txt +202 -0
  89. package/template/deploy/to-webos/webOSTVjs-1.2.10/webOSTV-dev.js +1 -0
  90. package/template/deploy/to-webos/webOSTVjs-1.2.10/webOSTV.js +1 -0
  91. package/dist/fnet/index.06vbpwcx.js +0 -1
  92. package/dist/fnet/index.26r88tdp.js +0 -1
  93. package/dist/fnet/index.2g93a9kt.js +0 -1
  94. package/dist/fnet/index.61jdafta.js +0 -1
  95. package/dist/fnet/index.80hh5mtp.js +0 -1
  96. package/dist/fnet/index.a2mbqyxe.js +0 -1
  97. package/dist/fnet/index.gywx3fae.js +0 -1
  98. package/dist/fnet/index.gza1frda.js +0 -1
  99. package/dist/fnet/index.r2gf0b3s.js +0 -1
  100. package/dist/fnet/index.rfysmk2b.js +0 -2
  101. package/dist/fnode/index.5f1kfz9t.js +0 -1
  102. package/dist/fnode/index.7ev6y63q.js +0 -1
  103. package/dist/fnode/index.a4q2w1yd.js +0 -1
  104. package/dist/fnode/index.btj5x5s4.js +0 -1
  105. package/dist/fnode/index.n1598ffs.js +0 -1
  106. package/dist/fnode/index.ng6w9cac.js +0 -1
  107. package/dist/fnode/index.r8s8r2n7.js +0 -2
  108. package/dist/fnode/index.xc08sjp4.js +0 -1
  109. package/dist/fnode/index.zb59076q.js +0 -1
@@ -0,0 +1 @@
1
+ import{g as q}from"./index.22v7wtt0.js";import"./index.5qbcx2y3.js";import G from"@fnet/config";import o from"node:fs";import b from"@fnet/shelljs";import F from"@flownet/lib-render-templates-dir";import i from"node:path";var z=async({atom:y,params:n,config:V,src:v,dest:w})=>{if(n.name=n.name||"rust",n.entry=n.entry||"app/esm",n.version=n.version||"0.1.0",n.title=n.title||y?.doc?.title||n.name||y?.doc?.name||"Rust App",n.package_name=n.package_name||n.name,n.author=n.author||y?.doc?.author||"Flownet",n.description=n.description||y?.doc?.description||"Rust App built with Flownet",n.vendor=n.vendor||"flownet.ai",n.include_css=y?.doc?.features?.css_options?.extract===!0,n.bundle_name=y?.doc?.bundleName,n.package_dir=n.package_dir||`./.package/${n.name}`,n.package_dir=i.resolve(w,n.package_dir),o.existsSync(n.package_dir))o.rmSync(n.package_dir,{recursive:!0});if(n.out_dir=n.out_dir||`./.out/${n.name}`,n.out_dir=i.resolve(w,n.out_dir),o.existsSync(n.out_dir))o.rmSync(n.out_dir,{recursive:!0});let C=q("./template/deploy/to-rust");if(!o.existsSync(C))throw Error(`${C} doesn't exist`);if(!v||!o.existsSync(v))throw Error(`${v} doesn't exists`);let E=i.resolve(i.join(v,"dist",n.entry));if(!o.existsSync(E))throw Error(`${E} doesn't exists`);if(!w||!o.existsSync(w))throw Error(`${w} doesn't exists`);let x=i.resolve(w,n.out_dir);if(!o.existsSync(x))o.mkdirSync(x,{recursive:!0});let $=i.resolve(v,n.package_dir);if(!o.existsSync($))o.mkdirSync($,{recursive:!0});await F({dir:C,outDir:x,context:{atom:y,params:n,config:V},copyUnmatchedAlso:!0});let N=i.resolve(x,"./dist");if(!o.existsSync(N))o.mkdirSync(N,{recursive:!0});let g=await b(`cp -a ${E}/** ${N}`);if(g.code!==0)throw Error("Couldn't copy project dist files.");if(g=await b("cargo build",{cwd:x}),g.code!==0)throw Error("Couldn't build project.");if(g=await b("cargo build --release",{cwd:x}),g.code!==0)throw Error("Couldn't build project.")};import A from"lodash.clonedeep";import H from"semver";async function I({atom:y,target:n,onProgress:V,projectDir:v,dependencies:w,context:C,yamlTarget:E}){if(V)await V({message:"Deploying it as Rust package."});let $=n?.config?await G({name:n.config,dir:v,optional:!0,transferEnv:!1,tags:C.tags}):void 0,N=H.inc(n.version||"0.1.0","patch");n.params.version=N,n.version=N,E.set("version",N);let g=A(n.params);g.dependencies=A(w);let B={atom:y,params:g,config:$?.config,src:v,dest:v};return{deployer:await z(B)}}export{I as default};
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{e as qq}from"./index.wbt2dhhm.js";import{f as y}from"./index.r8s8r2n7.js";import{g as n}from"./index.c8qd1bz3.js";import{j as D}from"./index.5qbcx2y3.js";import tq from"yargs";import Iq from"chalk";import{ProcessManager as eq}from"@fnet/shell-flow";import x from"node:path";import{spawn as u}from"node:child_process";import P from"node:fs";import b from"chalk";import _q from"@fnet/config";function F(q,{name:K,bin:Z,preArgs:Q=[],createContext:$,processManager:G}){if(typeof Z==="function")Z=Z();return q.command(`${K||Z} [commands..]`,`${Z} ${Q.join(" ")}`,(z)=>{return z.help(!1).version(!1)},async(z)=>{try{let W=await $(z),{projectDir:U}=W,O=(M)=>{if(!M.includes(" "))return M;if(process.platform==="win32")return`"${M.replace(/(["^])/g,"^$1")}"`;else return`"${M.replace(/(["\\$`])/g,"\\$1")}"`},V=process.argv.slice(3).map(O),H={...process.env},J=x.join(U,"node_modules");H.NODE_PATH=J,H.NODE_PRESERVE_SYMLINKS=1;let _=u(Z,[...Q,...V],{cwd:U,stdio:"inherit",shell:!0,env:H});if(G)G.track(_);await new Promise((M)=>{_.on("close",(k)=>{M(k)})})}catch(W){console.error(W.message),process.exit(1)}})}function f(q,{name:K,bin:Z,preArgs:Q=[],createContext:$,processManager:G}){return q.command(`${K||Z} [commands..]`,`${Z} ${Q.join(" ")}`,(z)=>{return z.help(!1).version(!1)},async(z)=>{try{let W=await $(z),{projectDir:U}=W,O=(J)=>{if(!J.includes(" "))return J;if(process.platform==="win32")return`"${J.replace(/(["^])/g,"^$1")}"`;else return`"${J.replace(/(["\\$`])/g,"\\$1")}"`},V=process.argv.slice(3).map(O);Z=x.join(U,".conda","bin",Z||K);let H=u(Z,[...Q,...V],{cwd:U,stdio:"inherit",shell:!0,env:{PYTHONPATH:U}});if(G)G.track(H);await new Promise((J)=>{H.on("close",(_)=>{J(_)})})}catch(W){console.error(W.message),process.exit(1)}})}function o(q,{name:K,createContext:Z,processManager:Q}){return q.command(`${K} <binary> [commands..]`,"Run a binary from conda environment",($)=>{return $.positional("binary",{type:"string",describe:"Binary name to run from .conda/bin"}).help(!1).version(!1)},async($)=>{try{let G=await Z($),{projectDir:z}=G,W=(J)=>{if(!J.includes(" "))return J;if(process.platform==="win32")return`"${J.replace(/(["^])/g,"^$1")}"`;else return`"${J.replace(/(["\\$`])/g,"\\$1")}"`},U=$.binary,O=process.argv.slice(4).map(W),V=x.join(z,".conda","bin",U),H=u(V,O,{cwd:z,stdio:"inherit",shell:!0,env:{PYTHONPATH:z}});if(Q)Q.track(H);await new Promise((J)=>{H.on("close",(_)=>{J(_)})})}catch(G){console.error(G.message),process.exit(1)}})}function a(q,{name:K,preArgs:Z=[],createContext:Q,processManager:$}){return q.command(`${K} <config> <command> [options..]`,"Run a command with a config context",(G)=>{return G.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)},async(G)=>{try{let z=await Q(G),{projectDir:W}=z,U=G.config,V=(await _q({name:U,dir:W,transferEnv:!1,optional:!0,tags:z.tags}))?.data?.env||void 0,H=G.command,J=process.argv.slice(5),_=u(H,[...Z,...J],{cwd:P.existsSync(W)?W:process.cwd(),stdio:"inherit",shell:!0,env:{...process.env,...V}});if($)$.track(_);await new Promise((M)=>{_.on("close",(k)=>{M(k)})})}catch(z){console.error(z.message),process.exit(1)}})}function r(q,{name:K,projectType:Z="auto",processManager:Q}){return q.command(`${K} group [options..]`,"Run a command group.",($)=>{return $.positional("group",{type:"string"}).option("ftag",{type:"array"}).help(!1).version(!1)},async($)=>{try{let{runCommandGroup:G}=await import("./index.c7szj58t.js");await G({projectType:Z,group:$.group,tags:$.ftag,args:$,argv:process.argv,processManager:Q})}catch(G){console.error(G.message),process.exit(1)}})}function t(q,{name:K,createContext:Z,processManager:Q}){return q.command(`${K} [options]`,"Install the project as a binary",($)=>{return $.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("yes",{alias:"y",describe:"Automatically answer yes to all prompts",type:"boolean",default:!1})},async($)=>{try{let G=await Z($),{projectDir:z}=G;console.log(b.blue("Compiling project..."));let W=x.join(z,".bin");if(!P.existsSync(W))P.mkdirSync(W,{recursive:!0});let U=x.basename(x.dirname(z)),O=G.project?.projectFileParsed?.features?.cli?.bin,V=$.name||O||U;console.log(b.blue(`Using binary name: ${V}`));let H=x.join(W,V),{spawn:J}=await import("child_process"),_=J("bun",["build","./dist/cli/esm/index.js","--compile",`--outfile=${H}`],{cwd:z,stdio:"inherit",shell:!0});if(Q)Q.track(_);if(await new Promise((N,C)=>{_.on("close",(E)=>{if(E===0)N();else C(Error(`Compilation failed with code ${E}`))}),_.on("error",(E)=>{C(E)})}),process.platform!=="win32")P.chmodSync(H,493);console.log(b.green(`Binary compiled successfully: ${H}`)),console.log(b.blue("Installing binary..."));let M=["install",H];if($.name)M.push("--name",$.name);if($.force)M.push("--force");if($.yes)M.push("--yes");let k=J("fbin",M,{stdio:"inherit",shell:!0});if(Q)Q.track(k);await new Promise((N,C)=>{k.on("close",(E)=>{if(E===0)N();else C(Error(`Installation failed with code ${E}`))}),k.on("error",(E)=>{C(E)})})}catch(G){console.error(b.red(`Failed to install binary: ${G.message}`)),process.exit(1)}})}import R from"node:path";import A from"node:fs";import e from"@fnet/yaml";import Fq from"yaml";async function X(q){let K=qq(q.ftag);if(q.id)return{id:q.id,buildId:q.buildId,mode:q.mode,protocol:q.protocol||"ac:",templateDir:y("./template/fnode/node"),projectDir:R.resolve(process.cwd(),`./.output/${q.id}`),tags:K,dev:q.dev,bpmn:q.bpmn===!0};else try{let Z=await Aq({tags:K}),Q=Z.runtime.type==="bun"?"node":Z.runtime.type;return{buildId:q.buildId,mode:q.mode,protocol:q.protocol||"src:",templateDir:y(`./template/fnode/${Q}`),projectDir:R.resolve(Z.projectDir,"./.workspace"),projectSrcDir:R.resolve(Z.projectDir,"./src"),projectSrcDirSymlink:R.resolve(Z.projectDir,"./.workspace/src-core"),projectAppDir:R.resolve(Z.projectDir,"./app"),projectAppDirSymlink:R.resolve(Z.projectDir,"./.workspace/app"),projectCliDir:R.resolve(Z.projectDir,"./cli"),projectCliDirSymlink:R.resolve(Z.projectDir,"./.workspace/cli"),project:Z,tags:K,dev:q.dev,bpmn:q.bpmn===!0}}catch(Z){return console.warn(`Warning: Could not load project: ${Z.message}`),{projectDir:process.cwd(),tags:K}}}async function Aq({tags:q}){let K=Rq(process.cwd());if(!A.existsSync(K))throw Error("fnode.yaml file not found in current directory.");let{raw:Z,parsed:Q}=await e({file:K,tags:q}),$=R.dirname(K);Q.features=Q.features||{};let G=Q.features;if(G.runtime=G.runtime||{},G.runtime.type=G.runtime.type||"node",G.runtime.type==="python")G.runtime.template=G.runtime.template||"python";else if(G.runtime.type==="bun")G.runtime.template=G.runtime.template||"node";else G.runtime.template=G.runtime.template||"node";let z={libraryAtom:{doc:{...Q},fileName:"index"},projectDir:$,projectFilePath:K,projectFileContent:Z,projectFileParsed:Q,runtime:G.runtime},W=R.resolve($,"fnet/targets.yaml");if(!A.existsSync(W)){if(W=R.resolve($,"node.devops.yaml"),A.existsSync(W)){let O=R.resolve($,"fnet");if(!A.existsSync(O))A.mkdirSync(O);A.copyFileSync(W,R.resolve($,"fnet/targets.yaml")),A.unlinkSync(W)}}if(A.existsSync(W)){let{raw:O,parsed:V}=await e({file:W,tags:q}),H=Fq.parseDocument(O);z.devops={filePath:W,fileContent:O,yamlDocument:H,doc:{...V},type:"library.deploy",save:async()=>{A.writeFileSync(z.devops.filePath,H.toString())}}}let U=R.resolve($,"readme.md");if(A.existsSync(U)){let O=A.readFileSync(U,"utf8");z.readme={filePath:U,fileContent:O,doc:{content:O,"content-type":"markdown"},type:"wiki"}}return z}function Rq(q){let K=R.resolve(q,"node.yaml"),Z=R.resolve(q,"fnode.yaml");if(A.existsSync(Z))return Z;if(A.existsSync(K))try{let Q=A.readFileSync(K,"utf8");return A.writeFileSync(Z,Q,"utf8"),A.unlinkSync(K),console.log(`Migrated node.yaml to fnode.yaml in ${q}`),Z}catch(Q){return console.error(`Error migrating node.yaml to fnode.yaml: ${Q.message}`),K}return Z}import Mq from"node:path";import Kq from"node:fs";import Nq from"node:os";import Eq from"@flownet/lib-render-templates-dir";import i from"@fnet/shelljs";var Bq={command:"create",describe:"Create a new fnode project",builder:(q)=>{return q.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(q)=>{try{let K=process.cwd(),Z=y("./template/fnode/project"),Q=Mq.resolve(K,q.name);if(!Kq.existsSync(Q))Kq.mkdirSync(Q);await Eq({dir:Z,outDir:Q,context:{name:q.name,runtime:q.runtime,platform:Nq.platform()},copyUnmatchedAlso:!0});let $=await i("fnode build",{cwd:Q});if($.code!==0)throw Error("Failed to build project.");if(n("git")){if($=await i("git init --initial-branch=main",{cwd:Q}),$.code!==0)throw Error("Failed to initialize git.")}if(n("code")&&q.vscode){if($=await i(`cd ${Q} && code .`),$.code!==0)throw Error("Failed to open vscode.")}console.log("Creating project succeeded!"),process.exit(0)}catch(K){console.error("Initialization failed!",K.message),process.exit(1)}}},Qq=Bq;import kq from"node:os";import Sq from"@flownet/lib-render-templates-dir";import xq from"@fnet/shelljs";var Dq={command:"project",describe:"Manage fnode project",builder:(q)=>{return q.option("update",{type:"boolean",default:!1,alias:"-u",describe:"Update project files"})},handler:async(q)=>{try{let K=y("./template/fnode/project"),Z=process.cwd(),Q=await X(q);if(q.update){if(await Sq({dir:K,outDir:Z,context:{name:Q.project.projectFileParsed.name,runtime:Q.project.runtime.type,platform:kq.platform()},copyUnmatchedAlso:!0}),(await xq("fnode build",{cwd:Z})).code!==0)throw Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(K){console.error("Project failed.",K.message),process.exit(1)}}},Zq=Dq;class $q{static async createBuilder(q){if(!q.project)return console.warn("No project provided, defaulting to node runtime"),new(await import("./index.1k1sj9qs.js")).default(q);let K=q.project?.runtime?.type||"node";try{return new(await this.loadBuilderClass(K))(q)}catch(Z){throw Error(`Failed to create builder for runtime '${K}': ${Z.message}`)}}static async loadBuilderClass(q){switch(q.toLowerCase()){case"node":case"bun":return(await import("./index.1k1sj9qs.js")).default;case"python":return(await import("./index.dtp0a202.js")).default;default:throw Error(`Unsupported runtime type: ${q}`)}}}var S=$q;var yq={command:"build",describe:"Build fnode project",builder:(q)=>{return q.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"}).option("dev",{type:"boolean",default:!1,describe:"Development mode"}).option("bpmn",{type:"boolean",default:!1,describe:"Generate BPMN diagram"})},handler:async(q)=>{try{let K=await X(q),Z=await S.createBuilder(K);await Z.init(),await Z.build(),console.log("Building library succeeded!"),process.exit(0)}catch(K){console.error("Building library failed!",K.message),process.exit(1)}}},zq=yq;var Cq={command:"build:dev",describe:"Build fnode project",builder:(q)=>{return q.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"}).option("dev",{type:"boolean",default:!1,describe:"Development mode"}).option("bpmn",{type:"boolean",default:!1,describe:"Generate BPMN diagram"})},handler:async(q)=>{try{q.dev=!0;let K=await X(q),Z=await S.createBuilder(K);await Z.init(),await Z.build(),console.log("Building library succeeded!"),process.exit(0)}catch(K){console.error("Building library failed!",K.message),process.exit(1)}}},Gq=Cq;var bq={command:"deploy",describe:"Build and deploy fnode project",builder:(q)=>{return q.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(q)=>{try{let K=await X({...q,mode:"all"}),Z=await S.createBuilder(K);await Z.init(),await Z.build(),console.log("Building library succeeded!"),process.exit(0)}catch(K){console.error("Building library failed!",K.message),process.exit(1)}}},Wq=bq;var fq={command:"file",describe:"Just create files",builder:(q)=>{return q.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(q)=>{try{let K=await X({...q,mode:"file"}),Z=await S.createBuilder(K);await Z.init(),await Z.build(),console.log("Building library succeeded!"),process.exit(0)}catch(K){console.error("Building library failed!",K.message),process.exit(1)}}},Hq=fq;import Yq from"node:path";import v from"node:fs";import Pq from"@fnet/prompt";var uq={command:"input [name]",describe:"Create or modify an input config file",builder:(q)=>{return q.positional("name",{type:"string",demandOption:!1,describe:"Input name"})},handler:async(q)=>{try{let K=await X(q),{project:Z}=K,{projectDir:Q,projectFileParsed:$}=Z,G=$.input;if(!G)throw Error("Config schema not found in project file.");if(!Reflect.has(q,"name")){let{inputName:H}=await Pq({type:"input",name:"inputName",message:"Input name:",initial:"dev"});q.name=H}let z=Yq.resolve(Q,".fnet");if(!v.existsSync(z))v.mkdirSync(z);let W=Yq.resolve(z,`${q.name}.fnet`),U=v.existsSync(W),O=(await import("@fnet/object-from-schema")).default,V=await O({schema:G,format:"yaml",ref:U?W:void 0});v.writeFileSync(W,V)}catch(K){console.error(K.message),process.exit(1)}}},Jq=uq;import T from"node:path";import L from"node:fs";import h from"node:os";import{spawn as g}from"node:child_process";import Y from"chalk";import B from"@fnet/prompt";import j from"chalk";import Uq from"@fnet/prompt";async function vq(q){let{items:K,message:Z,nameField:Q="name",valueField:$="name",initialValue:G=null,allowAbort:z=!0}=q;if(!K||K.length===0)return console.log(j.yellow("No items available for selection.")),null;if(K.length===1&&!z){let H=K[0],J=typeof H==="string"?H:H[$];return console.log(j.blue(`Only one option available: ${typeof H==="string"?H:H[Q]}`)),J}let W=K.map((H)=>{if(typeof H==="string")return{name:H,value:H,message:H};else return{name:H[$],value:H[$],message:H[Q]||H[$]}});if(z)W.push({name:"cancel",value:null,message:j.yellow("Cancel")});let U=null;if(G){let H=W.findIndex((J)=>J.name===G);if(H!==-1)U=H}let O="selectedItem",{[O]:V}=await Uq({type:"select",name:O,message:Z,choices:W,initial:U});if(V==="cancel")return null;return V}async function jq(q){let{items:K,message:Z,nameField:Q="name",valueField:$="name",initialValues:G=[],allowAbort:z=!0}=q;if(!K||K.length===0)return console.log(j.yellow("No items available for selection.")),null;let W=K.map((H)=>{if(typeof H==="string")return{name:H,value:H,message:H};else return{name:H[$],value:H[$],message:H[Q]||H[$]}}),U=[];if(G&&G.length>0)U=W.map((H,J)=>G.includes(H.name)?J:-1).filter((H)=>H!==-1);let O="selectedItems",V=await Uq({type:"multiselect",name:O,message:Z,choices:W,initial:U,hint:"(Use space to select, enter to confirm)",validate:(H)=>{if(H.length===0&&!z)return"Please select at least one item";return!0}});if(z&&V[O].length===0)return null;return V[O]}var c={promptForSelection:vq,promptForMultipleSelection:jq};var I=T.join(h.homedir(),".fnet","express");async function Oq(q){q.command(["$0 [project-name]","create [project-name]"],"Create a new express project",(K)=>{return K.positional("project-name",{describe:"Name of the project",type:"string"}).option("yes",{alias:"y",describe:"Skip all prompts and use defaults",type:"boolean",default:!1}).option("runtime",{describe:"Runtime to use (node, python, bun)",type:"string",choices:["node","python","bun"],default:"node"})},async(K)=>{await hq(K)}).command("list","List express projects",(K)=>{return K.option("today",{describe:"Show only projects created today",type:"boolean",default:!1}).option("type",{describe:"Filter by project type (fnode or fnet)",type:"string",choices:["fnode","fnet"]}).option("all",{describe:"Show all projects regardless of type",type:"boolean",default:!1,alias:"a"}).option("name",{describe:"Filter by project name",type:"string"})},async(K)=>{await gq(K)}).command("open [project-name]","Open an express project",(K)=>{return K.positional("project-name",{describe:"Name of the project to open",type:"string"}).option("latest",{describe:"Open the most recent project",type:"boolean",default:!1})},async(K)=>{await lq(K)}).command("move [project-name] [destination]","Move an express project to a real project location",(K)=>{return K.positional("project-name",{describe:"Name of the project to move",type:"string"}).positional("destination",{describe:"Destination directory",type:"string"}).option("latest",{describe:"Move the most recent project",type:"boolean",default:!1})},async(K)=>{await dq(K)}).command("remove [project-name]","Remove an express project",(K)=>{return K.positional("project-name",{describe:"Name of the project to remove",type:"string"}).option("latest",{describe:"Remove the most recent project",type:"boolean",default:!1}).option("yes",{alias:"y",describe:"Skip confirmation prompt",type:"boolean",default:!1})},async(K)=>{await pq(K)}).command("enter [project-name]","Enter the directory of an express project in the active terminal",(K)=>{return K.positional("project-name",{describe:"Name of the project to enter",type:"string"}).option("latest",{describe:"Enter the most recent project directory",type:"boolean",default:!1})},async(K)=>{await iq(K)}).demandCommand(1,"You need to specify a command").help()}async function hq(q){try{if(!L.existsSync(I))L.mkdirSync(I,{recursive:!0});let K=new Date().toISOString().slice(0,10).replace(/-/g,""),Z=T.join(I,K);if(!L.existsSync(Z))L.mkdirSync(Z,{recursive:!0});let Q=q.projectName,$,G=q.runtime;if(!q.yes){if(!Q){let J=L.readdirSync(Z).filter((N)=>N.startsWith("fnode-")).map((N)=>parseInt(N.replace("fnode-",""),10)).filter((N)=>!isNaN(N)),M=`fnode-${J.length>0?Math.max(...J)+1:1}`;Q=(await B([{type:"input",name:"projectName",message:"Enter project name:",default:M}])).projectName}G=(await B({type:"select",name:"runtime",message:"Select runtime:",choices:["node","python","bun"],initial:G||"node"})).runtime}else{if(!Q){let V=L.readdirSync(Z).filter((J)=>J.startsWith("fnode-")).map((J)=>parseInt(J.replace("fnode-",""),10)).filter((J)=>!isNaN(J));Q=`fnode-${V.length>0?Math.max(...V)+1:1}`}if(!G)G="node"}if($=T.join(Z,Q),L.existsSync($)){let V=1;while(L.existsSync(T.join(Z,`${Q}-${V}`)))V++;Q=`${Q}-${V}`,$=T.join(Z,Q)}if(!q.yes){if(!(await B([{type:"confirm",name:"proceed",message:`Create express project "${Q}" in ${$}?`,default:!0}])).proceed){console.log(Y.yellow("Project creation cancelled."));return}}console.log(Y.blue(`Creating express project "${Q}" in ${$}...`));let z=T.dirname($),U=["create","--name",T.basename($)];if(U.push("--runtime",G),q.yes)U.push("--yes");if(!L.existsSync(z))L.mkdirSync(z,{recursive:!0});let O=g("fnode",U,{stdio:"inherit",shell:!0,cwd:z});return new Promise((V,H)=>{O.on("close",(J)=>{if(J===0)if(console.log(Y.green(`
2
+ import{e as qq}from"./index.wbt2dhhm.js";import{f as n}from"./index.05n3mvs9.js";import{g as y}from"./index.22v7wtt0.js";import{j as D}from"./index.5qbcx2y3.js";import tq from"yargs";import Iq from"chalk";import{ProcessManager as eq}from"@fnet/shell-flow";import x from"node:path";import{spawn as u}from"node:child_process";import P from"node:fs";import b from"chalk";import _q from"@fnet/config";function F(q,{name:K,bin:Z,preArgs:Q=[],createContext:$,processManager:G}){if(typeof Z==="function")Z=Z();return q.command(`${K||Z} [commands..]`,`${Z} ${Q.join(" ")}`,(z)=>{return z.help(!1).version(!1)},async(z)=>{try{let W=await $(z),{projectDir:U}=W,O=(M)=>{if(!M.includes(" "))return M;if(process.platform==="win32")return`"${M.replace(/(["^])/g,"^$1")}"`;else return`"${M.replace(/(["\\$`])/g,"\\$1")}"`},V=process.argv.slice(3).map(O),H={...process.env},J=x.join(U,"node_modules");H.NODE_PATH=J,H.NODE_PRESERVE_SYMLINKS=1;let _=u(Z,[...Q,...V],{cwd:U,stdio:"inherit",shell:!0,env:H});if(G)G.track(_);await new Promise((M)=>{_.on("close",(k)=>{M(k)})})}catch(W){console.error(W.message),process.exit(1)}})}function f(q,{name:K,bin:Z,preArgs:Q=[],createContext:$,processManager:G}){return q.command(`${K||Z} [commands..]`,`${Z} ${Q.join(" ")}`,(z)=>{return z.help(!1).version(!1)},async(z)=>{try{let W=await $(z),{projectDir:U}=W,O=(J)=>{if(!J.includes(" "))return J;if(process.platform==="win32")return`"${J.replace(/(["^])/g,"^$1")}"`;else return`"${J.replace(/(["\\$`])/g,"\\$1")}"`},V=process.argv.slice(3).map(O);Z=x.join(U,".conda","bin",Z||K);let H=u(Z,[...Q,...V],{cwd:U,stdio:"inherit",shell:!0,env:{PYTHONPATH:U}});if(G)G.track(H);await new Promise((J)=>{H.on("close",(_)=>{J(_)})})}catch(W){console.error(W.message),process.exit(1)}})}function o(q,{name:K,createContext:Z,processManager:Q}){return q.command(`${K} <binary> [commands..]`,"Run a binary from conda environment",($)=>{return $.positional("binary",{type:"string",describe:"Binary name to run from .conda/bin"}).help(!1).version(!1)},async($)=>{try{let G=await Z($),{projectDir:z}=G,W=(J)=>{if(!J.includes(" "))return J;if(process.platform==="win32")return`"${J.replace(/(["^])/g,"^$1")}"`;else return`"${J.replace(/(["\\$`])/g,"\\$1")}"`},U=$.binary,O=process.argv.slice(4).map(W),V=x.join(z,".conda","bin",U),H=u(V,O,{cwd:z,stdio:"inherit",shell:!0,env:{PYTHONPATH:z}});if(Q)Q.track(H);await new Promise((J)=>{H.on("close",(_)=>{J(_)})})}catch(G){console.error(G.message),process.exit(1)}})}function a(q,{name:K,preArgs:Z=[],createContext:Q,processManager:$}){return q.command(`${K} <config> <command> [options..]`,"Run a command with a config context",(G)=>{return G.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)},async(G)=>{try{let z=await Q(G),{projectDir:W}=z,U=G.config,V=(await _q({name:U,dir:W,transferEnv:!1,optional:!0,tags:z.tags}))?.data?.env||void 0,H=G.command,J=process.argv.slice(5),_=u(H,[...Z,...J],{cwd:P.existsSync(W)?W:process.cwd(),stdio:"inherit",shell:!0,env:{...process.env,...V}});if($)$.track(_);await new Promise((M)=>{_.on("close",(k)=>{M(k)})})}catch(z){console.error(z.message),process.exit(1)}})}function r(q,{name:K,projectType:Z="auto",processManager:Q}){return q.command(`${K} group [options..]`,"Run a command group.",($)=>{return $.positional("group",{type:"string"}).option("ftag",{type:"array"}).help(!1).version(!1)},async($)=>{try{let{runCommandGroup:G}=await import("./index.c7szj58t.js");await G({projectType:Z,group:$.group,tags:$.ftag,args:$,argv:process.argv,processManager:Q})}catch(G){console.error(G.message),process.exit(1)}})}function t(q,{name:K,createContext:Z,processManager:Q}){return q.command(`${K} [options]`,"Install the project as a binary",($)=>{return $.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("yes",{alias:"y",describe:"Automatically answer yes to all prompts",type:"boolean",default:!1})},async($)=>{try{let G=await Z($),{projectDir:z}=G;console.log(b.blue("Compiling project..."));let W=x.join(z,".bin");if(!P.existsSync(W))P.mkdirSync(W,{recursive:!0});let U=x.basename(x.dirname(z)),O=G.project?.projectFileParsed?.features?.cli?.bin,V=$.name||O||U;console.log(b.blue(`Using binary name: ${V}`));let H=x.join(W,V),{spawn:J}=await import("child_process"),_=J("bun",["build","./dist/cli/esm/index.js","--compile",`--outfile=${H}`],{cwd:z,stdio:"inherit",shell:!0});if(Q)Q.track(_);if(await new Promise((N,C)=>{_.on("close",(E)=>{if(E===0)N();else C(Error(`Compilation failed with code ${E}`))}),_.on("error",(E)=>{C(E)})}),process.platform!=="win32")P.chmodSync(H,493);console.log(b.green(`Binary compiled successfully: ${H}`)),console.log(b.blue("Installing binary..."));let M=["install",H];if($.name)M.push("--name",$.name);if($.force)M.push("--force");if($.yes)M.push("--yes");let k=J("fbin",M,{stdio:"inherit",shell:!0});if(Q)Q.track(k);await new Promise((N,C)=>{k.on("close",(E)=>{if(E===0)N();else C(Error(`Installation failed with code ${E}`))}),k.on("error",(E)=>{C(E)})})}catch(G){console.error(b.red(`Failed to install binary: ${G.message}`)),process.exit(1)}})}import R from"node:path";import A from"node:fs";import e from"@fnet/yaml";import Fq from"yaml";async function X(q){let K=qq(q.ftag);if(q.id)return{id:q.id,buildId:q.buildId,mode:q.mode,protocol:q.protocol||"ac:",templateDir:y("./template/fnode/node"),projectDir:R.resolve(process.cwd(),`./.output/${q.id}`),tags:K,dev:q.dev,bpmn:q.bpmn===!0};else try{let Z=await Aq({tags:K}),Q=Z.runtime.type==="bun"?"node":Z.runtime.type;return{buildId:q.buildId,mode:q.mode,protocol:q.protocol||"src:",templateDir:y(`./template/fnode/${Q}`),projectDir:R.resolve(Z.projectDir,"./.workspace"),projectSrcDir:R.resolve(Z.projectDir,"./src"),projectSrcDirSymlink:R.resolve(Z.projectDir,"./.workspace/src-core"),projectAppDir:R.resolve(Z.projectDir,"./app"),projectAppDirSymlink:R.resolve(Z.projectDir,"./.workspace/app"),projectCliDir:R.resolve(Z.projectDir,"./cli"),projectCliDirSymlink:R.resolve(Z.projectDir,"./.workspace/cli"),project:Z,tags:K,dev:q.dev,bpmn:q.bpmn===!0}}catch(Z){return console.warn(`Warning: Could not load project: ${Z.message}`),{projectDir:process.cwd(),tags:K}}}async function Aq({tags:q}){let K=Rq(process.cwd());if(!A.existsSync(K))throw Error("fnode.yaml file not found in current directory.");let{raw:Z,parsed:Q}=await e({file:K,tags:q}),$=R.dirname(K);Q.features=Q.features||{};let G=Q.features;if(G.runtime=G.runtime||{},G.runtime.type=G.runtime.type||"node",G.runtime.type==="python")G.runtime.template=G.runtime.template||"python";else if(G.runtime.type==="bun")G.runtime.template=G.runtime.template||"node";else G.runtime.template=G.runtime.template||"node";let z={libraryAtom:{doc:{...Q},fileName:"index"},projectDir:$,projectFilePath:K,projectFileContent:Z,projectFileParsed:Q,runtime:G.runtime},W=R.resolve($,"fnet/targets.yaml");if(!A.existsSync(W)){if(W=R.resolve($,"node.devops.yaml"),A.existsSync(W)){let O=R.resolve($,"fnet");if(!A.existsSync(O))A.mkdirSync(O);A.copyFileSync(W,R.resolve($,"fnet/targets.yaml")),A.unlinkSync(W)}}if(A.existsSync(W)){let{raw:O,parsed:V}=await e({file:W,tags:q}),H=Fq.parseDocument(O);z.devops={filePath:W,fileContent:O,yamlDocument:H,doc:{...V},type:"library.deploy",save:async()=>{A.writeFileSync(z.devops.filePath,H.toString())}}}let U=R.resolve($,"readme.md");if(A.existsSync(U)){let O=A.readFileSync(U,"utf8");z.readme={filePath:U,fileContent:O,doc:{content:O,"content-type":"markdown"},type:"wiki"}}return z}function Rq(q){let K=R.resolve(q,"node.yaml"),Z=R.resolve(q,"fnode.yaml");if(A.existsSync(Z))return Z;if(A.existsSync(K))try{let Q=A.readFileSync(K,"utf8");return A.writeFileSync(Z,Q,"utf8"),A.unlinkSync(K),console.log(`Migrated node.yaml to fnode.yaml in ${q}`),Z}catch(Q){return console.error(`Error migrating node.yaml to fnode.yaml: ${Q.message}`),K}return Z}import Mq from"node:path";import Kq from"node:fs";import Nq from"node:os";import Eq from"@flownet/lib-render-templates-dir";import i from"@fnet/shelljs";var Bq={command:"create",describe:"Create a new fnode project",builder:(q)=>{return q.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(q)=>{try{let K=process.cwd(),Z=y("./template/fnode/project"),Q=Mq.resolve(K,q.name);if(!Kq.existsSync(Q))Kq.mkdirSync(Q);await Eq({dir:Z,outDir:Q,context:{name:q.name,runtime:q.runtime,platform:Nq.platform()},copyUnmatchedAlso:!0});let $=await i("fnode build",{cwd:Q});if($.code!==0)throw Error("Failed to build project.");if(n("git")){if($=await i("git init --initial-branch=main",{cwd:Q}),$.code!==0)throw Error("Failed to initialize git.")}if(n("code")&&q.vscode){if($=await i(`cd ${Q} && code .`),$.code!==0)throw Error("Failed to open vscode.")}console.log("Creating project succeeded!"),process.exit(0)}catch(K){console.error("Initialization failed!",K.message),process.exit(1)}}},Qq=Bq;import kq from"node:os";import Sq from"@flownet/lib-render-templates-dir";import xq from"@fnet/shelljs";var Dq={command:"project",describe:"Manage fnode project",builder:(q)=>{return q.option("update",{type:"boolean",default:!1,alias:"-u",describe:"Update project files"})},handler:async(q)=>{try{let K=y("./template/fnode/project"),Z=process.cwd(),Q=await X(q);if(q.update){if(await Sq({dir:K,outDir:Z,context:{name:Q.project.projectFileParsed.name,runtime:Q.project.runtime.type,platform:kq.platform()},copyUnmatchedAlso:!0}),(await xq("fnode build",{cwd:Z})).code!==0)throw Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(K){console.error("Project failed.",K.message),process.exit(1)}}},Zq=Dq;class $q{static async createBuilder(q){if(!q.project)return console.warn("No project provided, defaulting to node runtime"),new(await import("./index.q9ghzdn2.js")).default(q);let K=q.project?.runtime?.type||"node";try{return new(await this.loadBuilderClass(K))(q)}catch(Z){throw Error(`Failed to create builder for runtime '${K}': ${Z.message}`)}}static async loadBuilderClass(q){switch(q.toLowerCase()){case"node":case"bun":return(await import("./index.q9ghzdn2.js")).default;case"python":return(await import("./index.3ay4fp2s.js")).default;default:throw Error(`Unsupported runtime type: ${q}`)}}}var S=$q;var yq={command:"build",describe:"Build fnode project",builder:(q)=>{return q.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"}).option("dev",{type:"boolean",default:!1,describe:"Development mode"}).option("bpmn",{type:"boolean",default:!1,describe:"Generate BPMN diagram"})},handler:async(q)=>{try{let K=await X(q),Z=await S.createBuilder(K);await Z.init(),await Z.build(),console.log("Building library succeeded!"),process.exit(0)}catch(K){console.error("Building library failed!",K.message),process.exit(1)}}},zq=yq;var Cq={command:"build:dev",describe:"Build fnode project",builder:(q)=>{return q.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"}).option("dev",{type:"boolean",default:!1,describe:"Development mode"}).option("bpmn",{type:"boolean",default:!1,describe:"Generate BPMN diagram"})},handler:async(q)=>{try{q.dev=!0;let K=await X(q),Z=await S.createBuilder(K);await Z.init(),await Z.build(),console.log("Building library succeeded!"),process.exit(0)}catch(K){console.error("Building library failed!",K.message),process.exit(1)}}},Gq=Cq;var bq={command:"deploy",describe:"Build and deploy fnode project",builder:(q)=>{return q.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(q)=>{try{let K=await X({...q,mode:"all"}),Z=await S.createBuilder(K);await Z.init(),await Z.build(),console.log("Building library succeeded!"),process.exit(0)}catch(K){console.error("Building library failed!",K.message),process.exit(1)}}},Wq=bq;var fq={command:"file",describe:"Just create files",builder:(q)=>{return q.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(q)=>{try{let K=await X({...q,mode:"file"}),Z=await S.createBuilder(K);await Z.init(),await Z.build(),console.log("Building library succeeded!"),process.exit(0)}catch(K){console.error("Building library failed!",K.message),process.exit(1)}}},Hq=fq;import Yq from"node:path";import v from"node:fs";import Pq from"@fnet/prompt";var uq={command:"input [name]",describe:"Create or modify an input config file",builder:(q)=>{return q.positional("name",{type:"string",demandOption:!1,describe:"Input name"})},handler:async(q)=>{try{let K=await X(q),{project:Z}=K,{projectDir:Q,projectFileParsed:$}=Z,G=$.input;if(!G)throw Error("Config schema not found in project file.");if(!Reflect.has(q,"name")){let{inputName:H}=await Pq({type:"input",name:"inputName",message:"Input name:",initial:"dev"});q.name=H}let z=Yq.resolve(Q,".fnet");if(!v.existsSync(z))v.mkdirSync(z);let W=Yq.resolve(z,`${q.name}.fnet`),U=v.existsSync(W),O=(await import("@fnet/object-from-schema")).default,V=await O({schema:G,format:"yaml",ref:U?W:void 0});v.writeFileSync(W,V)}catch(K){console.error(K.message),process.exit(1)}}},Jq=uq;import T from"node:path";import L from"node:fs";import h from"node:os";import{spawn as g}from"node:child_process";import Y from"chalk";import B from"@fnet/prompt";import j from"chalk";import Uq from"@fnet/prompt";async function vq(q){let{items:K,message:Z,nameField:Q="name",valueField:$="name",initialValue:G=null,allowAbort:z=!0}=q;if(!K||K.length===0)return console.log(j.yellow("No items available for selection.")),null;if(K.length===1&&!z){let H=K[0],J=typeof H==="string"?H:H[$];return console.log(j.blue(`Only one option available: ${typeof H==="string"?H:H[Q]}`)),J}let W=K.map((H)=>{if(typeof H==="string")return{name:H,value:H,message:H};else return{name:H[$],value:H[$],message:H[Q]||H[$]}});if(z)W.push({name:"cancel",value:null,message:j.yellow("Cancel")});let U=null;if(G){let H=W.findIndex((J)=>J.name===G);if(H!==-1)U=H}let O="selectedItem",{[O]:V}=await Uq({type:"select",name:O,message:Z,choices:W,initial:U});if(V==="cancel")return null;return V}async function jq(q){let{items:K,message:Z,nameField:Q="name",valueField:$="name",initialValues:G=[],allowAbort:z=!0}=q;if(!K||K.length===0)return console.log(j.yellow("No items available for selection.")),null;let W=K.map((H)=>{if(typeof H==="string")return{name:H,value:H,message:H};else return{name:H[$],value:H[$],message:H[Q]||H[$]}}),U=[];if(G&&G.length>0)U=W.map((H,J)=>G.includes(H.name)?J:-1).filter((H)=>H!==-1);let O="selectedItems",V=await Uq({type:"multiselect",name:O,message:Z,choices:W,initial:U,hint:"(Use space to select, enter to confirm)",validate:(H)=>{if(H.length===0&&!z)return"Please select at least one item";return!0}});if(z&&V[O].length===0)return null;return V[O]}var c={promptForSelection:vq,promptForMultipleSelection:jq};var I=T.join(h.homedir(),".fnet","express");async function Oq(q){q.command(["$0 [project-name]","create [project-name]"],"Create a new express project",(K)=>{return K.positional("project-name",{describe:"Name of the project",type:"string"}).option("yes",{alias:"y",describe:"Skip all prompts and use defaults",type:"boolean",default:!1}).option("runtime",{describe:"Runtime to use (node, python, bun)",type:"string",choices:["node","python","bun"],default:"node"})},async(K)=>{await hq(K)}).command("list","List express projects",(K)=>{return K.option("today",{describe:"Show only projects created today",type:"boolean",default:!1}).option("type",{describe:"Filter by project type (fnode or fnet)",type:"string",choices:["fnode","fnet"]}).option("all",{describe:"Show all projects regardless of type",type:"boolean",default:!1,alias:"a"}).option("name",{describe:"Filter by project name",type:"string"})},async(K)=>{await gq(K)}).command("open [project-name]","Open an express project",(K)=>{return K.positional("project-name",{describe:"Name of the project to open",type:"string"}).option("latest",{describe:"Open the most recent project",type:"boolean",default:!1})},async(K)=>{await lq(K)}).command("move [project-name] [destination]","Move an express project to a real project location",(K)=>{return K.positional("project-name",{describe:"Name of the project to move",type:"string"}).positional("destination",{describe:"Destination directory",type:"string"}).option("latest",{describe:"Move the most recent project",type:"boolean",default:!1})},async(K)=>{await dq(K)}).command("remove [project-name]","Remove an express project",(K)=>{return K.positional("project-name",{describe:"Name of the project to remove",type:"string"}).option("latest",{describe:"Remove the most recent project",type:"boolean",default:!1}).option("yes",{alias:"y",describe:"Skip confirmation prompt",type:"boolean",default:!1})},async(K)=>{await pq(K)}).command("enter [project-name]","Enter the directory of an express project in the active terminal",(K)=>{return K.positional("project-name",{describe:"Name of the project to enter",type:"string"}).option("latest",{describe:"Enter the most recent project directory",type:"boolean",default:!1})},async(K)=>{await iq(K)}).demandCommand(1,"You need to specify a command").help()}async function hq(q){try{if(!L.existsSync(I))L.mkdirSync(I,{recursive:!0});let K=new Date().toISOString().slice(0,10).replace(/-/g,""),Z=T.join(I,K);if(!L.existsSync(Z))L.mkdirSync(Z,{recursive:!0});let Q=q.projectName,$,G=q.runtime;if(!q.yes){if(!Q){let J=L.readdirSync(Z).filter((N)=>N.startsWith("fnode-")).map((N)=>parseInt(N.replace("fnode-",""),10)).filter((N)=>!isNaN(N)),M=`fnode-${J.length>0?Math.max(...J)+1:1}`;Q=(await B([{type:"input",name:"projectName",message:"Enter project name:",default:M}])).projectName}G=(await B({type:"select",name:"runtime",message:"Select runtime:",choices:["node","python","bun"],initial:G||"node"})).runtime}else{if(!Q){let V=L.readdirSync(Z).filter((J)=>J.startsWith("fnode-")).map((J)=>parseInt(J.replace("fnode-",""),10)).filter((J)=>!isNaN(J));Q=`fnode-${V.length>0?Math.max(...V)+1:1}`}if(!G)G="node"}if($=T.join(Z,Q),L.existsSync($)){let V=1;while(L.existsSync(T.join(Z,`${Q}-${V}`)))V++;Q=`${Q}-${V}`,$=T.join(Z,Q)}if(!q.yes){if(!(await B([{type:"confirm",name:"proceed",message:`Create express project "${Q}" in ${$}?`,default:!0}])).proceed){console.log(Y.yellow("Project creation cancelled."));return}}console.log(Y.blue(`Creating express project "${Q}" in ${$}...`));let z=T.dirname($),U=["create","--name",T.basename($)];if(U.push("--runtime",G),q.yes)U.push("--yes");if(!L.existsSync(z))L.mkdirSync(z,{recursive:!0});let O=g("fnode",U,{stdio:"inherit",shell:!0,cwd:z});return new Promise((V,H)=>{O.on("close",(J)=>{if(J===0)if(console.log(Y.green(`
3
3
  Express project "${Q}" created successfully!`)),console.log(Y.blue(`
4
4
  Project location: ${$}`)),!q.yes)mq($);else V();else console.error(Y.red(`
5
5
  Failed to create express project "${Q}".`)),H(Error(`Process exited with code ${J}`))})})}catch(K){console.error(Y.red(`Error creating express project: ${K.message}`)),process.exit(1)}}async function gq(q){try{if(!L.existsSync(I)){console.log(Y.yellow("No express projects found."));return}let K=L.readdirSync(I).filter((z)=>/^\d{8}$/.test(z)).sort((z,W)=>W.localeCompare(z));if(q.today){let z=new Date().toISOString().slice(0,10).replace(/-/g,""),W=K.indexOf(z);if(W===-1){console.log(Y.yellow("No express projects found for today."));return}K.splice(0,W),K.splice(1)}let Z=[];if(!q.type&&!q.all)q.type="fnode";for(let z of K){let W=T.join(I,z),U=L.readdirSync(W);for(let O of U){let V=T.join(W,O),H=L.statSync(V),J="unknown";if(O.startsWith("fnode-")||L.existsSync(T.join(V,"fnode.yaml")))J="fnode";else if(O.startsWith("fnet-")||L.existsSync(T.join(V,"fnet.yaml")))J="fnet";if(q.type&&J!==q.type)continue;if(q.name&&!O.includes(q.name))continue;let _=`${z.slice(0,4)}-${z.slice(4,6)}-${z.slice(6,8)}`;Z.push({name:O,type:J,date:_,path:V,created:H.birthtime})}}if(Z.sort((z,W)=>W.created-z.created),Z.length===0){console.log(Y.yellow("No express projects found matching the criteria."));return}console.log(Y.blue(`
@@ -7,4 +7,4 @@ Express Projects:`));let Q=(await import("./index.kvn877g8.js")).default,$=["NAM
7
7
  Total: ${Z.length} projects`))}catch(K){console.error(Y.red(`Error listing express projects: ${K.message}`)),process.exit(1)}}async function lq(q){try{if(!L.existsSync(I)){console.log(Y.yellow("No express projects found."));return}let K;if(q.latest){if(K=await l(),!K){console.log(Y.yellow("No express projects found."));return}}else if(q.projectName){if(K=await d(q.projectName),!K){console.log(Y.yellow(`Project "${q.projectName}" not found.`));return}}else{let Z=await m();if(!Z){console.log(Y.yellow("No project selected."));return}K=T.join(I,Z)}await s(K)}catch(K){console.error(Y.red(`Error opening express project: ${K.message}`)),process.exit(1)}}async function dq(q){try{let K=process.cwd(),Z=K.includes(I),Q;if(Z)Q=K,console.log(Y.blue(`Using current express project: ${T.basename(Q)}`));else if(q.latest){if(Q=await l(),!Q){console.log(Y.yellow("No express projects found."));return}}else if(q.projectName){if(Q=await d(q.projectName),!Q){console.log(Y.yellow(`Project "${q.projectName}" not found.`));return}}else{let z=await m();if(!z){console.log(Y.yellow("No project selected."));return}Q=T.join(I,z)}let $=q.destination;if(!$)$=(await B({type:"input",name:"destination",message:"Enter destination directory:",initial:T.join(process.cwd(),T.basename(Q))})).destination;if($.startsWith("~"))$=T.join(h.homedir(),$.slice(1));if($=T.resolve($),$.startsWith(Q+T.sep)||$===Q){console.log(Y.red("Destination cannot be inside the source directory."));return}if(L.existsSync($)){if(!L.statSync($).isDirectory()){console.log(Y.red(`Destination "${$}" is not a directory.`));return}if(L.readdirSync($).length>0){if(!(await B({type:"confirm",name:"overwrite",message:`Destination "${$}" is not empty. Continue anyway?`,initial:!1})).overwrite){console.log(Y.yellow("Project move cancelled."));return}}}else L.mkdirSync($,{recursive:!0});if(console.log(Y.blue(`Moving project from ${Q} to ${$}...`)),Vq(Q,$),console.log(Y.green(`
8
8
  Project moved successfully to ${$}`)),(await B({type:"confirm",name:"deleteOriginal",message:"Delete the original express project?",initial:!1})).deleteOriginal)L.rmSync(Q,{recursive:!0,force:!0}),console.log(Y.green("Original project deleted."));await s($)}catch(K){console.error(Y.red(`Error moving express project: ${K.message}`)),process.exit(1)}}async function l(){let q=L.readdirSync(I).filter((z)=>/^\d{8}$/.test(z)).sort((z,W)=>W.localeCompare(z));if(q.length===0)return null;let K=q[0],Z=T.join(I,K),Q=L.readdirSync(Z);if(Q.length===0)return null;let $=null,G=0;for(let z of Q){let W=T.join(Z,z),U=L.statSync(W);if(U.birthtimeMs>G)G=U.birthtimeMs,$=W}return $}async function d(q){let K=L.readdirSync(I).filter((Z)=>/^\d{8}$/.test(Z)).sort((Z,Q)=>Q.localeCompare(Z));for(let Z of K){let Q=T.join(I,Z),$=L.readdirSync(Q);if($.includes(q))return T.join(Q,q);let G=$.filter((z)=>z.includes(q));if(G.length>0)if(G.length===1)return T.join(Q,G[0]);else{let z=G.map((U)=>({name:T.join(Q,U),value:T.join(Q,U),message:`${U} (${Z})`})),W=await c.promptForSelection({items:z,message:`Multiple projects match "${q}". Please select one:`,nameField:"message",valueField:"value",allowAbort:!0});if(W===null)return console.log(Y.yellow("Operation cancelled.")),null;return W}}return null}async function m(){let q=[],K=L.readdirSync(I).filter((Q)=>/^\d{8}$/.test(Q)).sort((Q,$)=>$.localeCompare(Q));for(let Q of K){let $=T.join(I,Q),G=L.readdirSync($);for(let z of G){let W=T.join($,z),U=L.statSync(W),O=`${Q}/${z}`;q.push({name:O,value:O,message:`${z} (${Q})`,created:U.birthtime})}}if(q.sort((Q,$)=>$.created-Q.created),q.length===0)return null;let Z=await c.promptForSelection({items:q,message:"Select a project:",nameField:"message",valueField:"value",allowAbort:!0});if(Z===null)return console.log(Y.yellow("Operation cancelled.")),null;return Z}async function mq(q){try{if((await B({type:"confirm",name:"openIDE",message:"Would you like to open the project in an IDE?",initial:!0})).openIDE)await s(q)}catch(K){console.error(Y.red(`Error opening IDE: ${K.message}`))}}async function s(q){let K=await Lq("code --version"),Z=await Lq("code-insiders --version"),Q=null;if(K&&Z)Q=(await B({type:"select",name:"ide",message:"Which IDE would you like to use?",choices:[{name:"Visual Studio Code",value:"code"},{name:"Visual Studio Code Insiders",value:"code-insiders"}]})).ide;else if(K)Q="code";else if(Z)Q="code-insiders";else{console.log(Y.yellow("No supported IDE found. Please open the project manually.")),console.log(Y.blue(`Project path: ${q}`));return}console.log(Y.blue(`Opening project in ${Q}...`)),console.log(Y.blue(`Project path: ${q}`));let $=g(Q,[q],{stdio:"inherit",shell:!0});return new Promise((G,z)=>{$.on("close",(W)=>{if(W===0)console.log(Y.green(`Project opened in ${Q}.`)),G();else console.error(Y.red(`Failed to open project in ${Q}.`)),z(Error(`Process exited with code ${W}`))})})}async function Lq(q){return new Promise((K)=>{g(q,{shell:!0,stdio:"ignore"}).on("close",(Q)=>{K(Q===0)})})}function Vq(q,K){if(!L.existsSync(K))L.mkdirSync(K,{recursive:!0});let Z=L.readdirSync(q,{withFileTypes:!0});for(let Q of Z){let $=T.join(q,Q.name),G=T.join(K,Q.name);if(Q.isDirectory()){if(Q.name===".git"||Q.name===".workspace")continue;Vq($,G)}else L.copyFileSync($,G)}}async function pq(q){try{if(!L.existsSync(I)){console.log(Y.yellow("No express projects found."));return}let K;if(q.latest){if(K=await l(),!K){console.log(Y.yellow("No express projects found."));return}}else if(q.projectName){if(K=await d(q.projectName),!K){console.log(Y.yellow(`Project "${q.projectName}" not found.`));return}}else{let Q=await m();if(!Q){console.log(Y.yellow("No project selected."));return}K=T.join(I,Q)}let Z=T.basename(K);if(!q.yes){if(!(await B({type:"confirm",name:"confirm",message:`Are you sure you want to remove project "${Z}"?`,initial:!1})).confirm){console.log(Y.yellow("Project removal cancelled."));return}}console.log(Y.blue(`Removing project "${Z}"...`)),L.rmSync(K,{recursive:!0,force:!0}),console.log(Y.green(`Project "${Z}" removed successfully.`))}catch(K){console.error(Y.red(`Error removing express project: ${K.message}`)),process.exit(1)}}async function iq(q){try{if(!L.existsSync(I)){console.log(Y.yellow("No express projects found."));return}let K;if(q.latest){if(K=await l(),!K){console.log(Y.yellow("No express projects found."));return}}else if(q.projectName){if(K=await d(q.projectName),!K){console.log(Y.yellow(`Project "${q.projectName}" not found.`));return}}else{let $=await m();if(!$){console.log(Y.yellow("No project selected."));return}K=T.join(I,$)}console.log(Y.blue(`Entering project directory: ${K}`)),console.log(Y.yellow(`
9
9
  Opening a new shell in the project directory...`));let Z=process.env.SHELL||"/bin/bash",Q=g(Z,[],{stdio:"inherit",cwd:K,shell:!0});return new Promise(($)=>{Q.on("close",()=>{console.log(Y.green(`
10
- Returned from project directory.`)),$()})})}catch(K){console.error(Y.red(`Error entering express project directory: ${K.message}`)),process.exit(1)}}import Tq from"node:path";import{fileURLToPath as aq}from"node:url";import nq from"node:fs";import p from"node:path";import{fileURLToPath as cq}from"node:url";var sq=p.dirname(cq(import.meta.url));function oq({baseDir:q}){q=q||sq;let K=q;while(K!==p.parse(K).root){let Z=p.join(K,"node_modules");if(nq.existsSync(Z))return Z;K=p.dirname(K)}return null}var Xq=oq;var rq=Tq.dirname(aq(import.meta.url));function wq(){let q=Xq({baseDir:rq}),K=process.platform==="win32"?";":":";if(q)process.env.PATH=`${Tq.join(q,"/.bin")}${K}${process.env.PATH}`}var w=new eq;wq();async function qK(){try{let q=tq(process.argv.slice(2)).scriptName("fnode").usage("Usage: fnode <command> [options]").command(Qq).command(Zq).command(zq).command(Gq).command(Wq).command(Hq).command(Jq).command("express","Create and manage express projects",Oq);q=F(q,{bin:"npm",createContext:X,processManager:w}),q=F(q,{bin:"node",createContext:X,processManager:w}),q=F(q,{bin:"bun",createContext:X,processManager:w}),q=F(q,{name:"serve",bin:"bun",preArgs:["run","serve","--"],createContext:X,processManager:w}),q=F(q,{name:"watch",bin:"bun",preArgs:["run","watch","--"],createContext:X,processManager:w}),q=F(q,{name:"app",bin:"bun",preArgs:["run","app","--"],createContext:X,processManager:w}),q=F(q,{name:"cli",bin:"bun",preArgs:["run","cli","--"],createContext:X,processManager:w}),q=F(q,{name:"cli:dev",bin:"bun",preArgs:["run","cli:dev","--"],createContext:X,processManager:w}),q=F(q,{name:"cli:compile",bin:"bun",preArgs:["run","cli:compile","--"],createContext:X,processManager:w}),q=F(q,{name:"cli:compile:dev",bin:"bun",preArgs:["run","cli:compile:dev","--"],createContext:X,processManager:w}),q=F(q,{name:"cli:install",bin:"bun",preArgs:["run","cli:install","--"],createContext:X,processManager:w}),q=F(q,{name:"compile",bin:"bun",preArgs:["run","compile","--"],createContext:X,processManager:w}),q=t(q,{name:"install",createContext:X,processManager:w}),q=F(q,{bin:"npx",createContext:X,processManager:w}),q=F(q,{bin:"cdk",createContext:X,processManager:w}),q=F(q,{bin:"aws",createContext:X,processManager:w}),q=a(q,{name:"with",createContext:X,processManager:w}),q=r(q,{name:"run",projectType:"fnode",processManager:w}),q=f(q,{name:"python",createContext:X,processManager:w}),q=f(q,{name:"python3",createContext:X,processManager:w}),q=f(q,{name:"pip",createContext:X,processManager:w}),q=f(q,{name:"pip3",createContext:X,processManager:w}),q=o(q,{name:"bin",createContext:X,processManager:w}),q.demandCommand(1,"You need at least one command before moving on").help().version("1.12.0").parse()}catch(q){console.error(Iq.red(`Fatal error: ${q.message}`)),await w.dispose(),process.exit(1)}}qK().catch(async(q)=>{console.error(Iq.red(`Fatal error: ${q.message}`)),await w.dispose(),process.exit(1)});
10
+ Returned from project directory.`)),$()})})}catch(K){console.error(Y.red(`Error entering express project directory: ${K.message}`)),process.exit(1)}}import Tq from"node:path";import{fileURLToPath as aq}from"node:url";import nq from"node:fs";import p from"node:path";import{fileURLToPath as cq}from"node:url";var sq=p.dirname(cq(import.meta.url));function oq({baseDir:q}){q=q||sq;let K=q;while(K!==p.parse(K).root){let Z=p.join(K,"node_modules");if(nq.existsSync(Z))return Z;K=p.dirname(K)}return null}var Xq=oq;var rq=Tq.dirname(aq(import.meta.url));function wq(){let q=Xq({baseDir:rq}),K=process.platform==="win32"?";":":";if(q)process.env.PATH=`${Tq.join(q,"/.bin")}${K}${process.env.PATH}`}var w=new eq;wq();async function qK(){try{let q=tq(process.argv.slice(2)).scriptName("fnode").usage("Usage: fnode <command> [options]").command(Qq).command(Zq).command(zq).command(Gq).command(Wq).command(Hq).command(Jq).command("express","Create and manage express projects",Oq);q=F(q,{bin:"npm",createContext:X,processManager:w}),q=F(q,{bin:"node",createContext:X,processManager:w}),q=F(q,{bin:"bun",createContext:X,processManager:w}),q=F(q,{name:"serve",bin:"bun",preArgs:["run","serve","--"],createContext:X,processManager:w}),q=F(q,{name:"watch",bin:"bun",preArgs:["run","watch","--"],createContext:X,processManager:w}),q=F(q,{name:"app",bin:"bun",preArgs:["run","app","--"],createContext:X,processManager:w}),q=F(q,{name:"cli",bin:"bun",preArgs:["run","cli","--"],createContext:X,processManager:w}),q=F(q,{name:"cli:dev",bin:"bun",preArgs:["run","cli:dev","--"],createContext:X,processManager:w}),q=F(q,{name:"cli:compile",bin:"bun",preArgs:["run","cli:compile","--"],createContext:X,processManager:w}),q=F(q,{name:"cli:compile:dev",bin:"bun",preArgs:["run","cli:compile:dev","--"],createContext:X,processManager:w}),q=F(q,{name:"cli:install",bin:"bun",preArgs:["run","cli:install","--"],createContext:X,processManager:w}),q=F(q,{name:"compile",bin:"bun",preArgs:["run","compile","--"],createContext:X,processManager:w}),q=t(q,{name:"install",createContext:X,processManager:w}),q=F(q,{bin:"npx",createContext:X,processManager:w}),q=F(q,{bin:"cdk",createContext:X,processManager:w}),q=F(q,{bin:"aws",createContext:X,processManager:w}),q=a(q,{name:"with",createContext:X,processManager:w}),q=r(q,{name:"run",projectType:"fnode",processManager:w}),q=f(q,{name:"python",createContext:X,processManager:w}),q=f(q,{name:"python3",createContext:X,processManager:w}),q=f(q,{name:"pip",createContext:X,processManager:w}),q=f(q,{name:"pip3",createContext:X,processManager:w}),q=o(q,{name:"bin",createContext:X,processManager:w}),q.demandCommand(1,"You need at least one command before moving on").help().version("1.14.0").parse()}catch(q){console.error(Iq.red(`Fatal error: ${q.message}`)),await w.dispose(),process.exit(1)}}qK().catch(async(q)=>{console.error(Iq.red(`Fatal error: ${q.message}`)),await w.dispose(),process.exit(1)});
@@ -0,0 +1 @@
1
+ import{g as Q}from"./index.22v7wtt0.js";import"./index.5qbcx2y3.js";import T from"@fnet/config";import y from"node:fs";import K from"@fnet/shelljs";import _ from"@flownet/lib-create-ios-icons";import g from"@flownet/lib-create-ios-launch-screens";import k from"@flownet/lib-render-templates-dir";import O from"node:path";import L from"@fnet/xcode-cert-inspector";var U=async({atom:w,params:n,config:$,src:A,dest:N})=>{let H=(await L()).find((V)=>V.certificateType==="Development"&&V.platforms.includes("macOS"))?.teamID;if(n.name=n.name||"macos-app",n.entry=n.entry||"app/macos",n.id=n.id||"com.example.macos-app",n.version=n.version||"0.1.0",n.title=n.title||w?.doc?.title||n.name||w?.doc?.name||"macOS App",n.package_name=n.package_name||n.name,n.author=n.author||w?.doc?.author||"Flownet",n.description=n.description||w?.doc?.description||"macOS App built with Flownet",n.vendor=n.vendor||"flownet.ai",n.include_css=w?.doc?.features?.css_options?.extract===!0,n.bundle_name=w?.doc?.bundleName,n.package_dir=n.package_dir||`./.package/${n.name}`,n.package_dir=O.resolve(N,n.package_dir),n.code_sign_identity=n.code_sign_identity||"Apple Development",n.code_sign_style=n.code_sign_style||"Automatic",n.development_team=n.development_team||H,n.product_bundle_identifier=n.product_bundle_identifier||n.id,n.product_name=n.product_name||n.name,y.existsSync(n.package_dir))y.rmSync(n.package_dir,{recursive:!0});if(n.out_dir=n.out_dir||`./.out/${n.name}`,n.out_dir=O.resolve(N,n.out_dir),y.existsSync(n.out_dir))y.rmSync(n.out_dir,{recursive:!0});let E=Q("./template/deploy/to-macos-app");if(!y.existsSync(E))throw Error(`${E} doesn't exist`);if(!A||!y.existsSync(A))throw Error(`${A} doesn't exists`);let x=O.resolve(A,"./dist");if(!y.existsSync(x))throw Error(`${x} doesn't exists`);if(!N||!y.existsSync(N))throw Error(`${N} doesn't exists`);let v=O.resolve(N,n.out_dir);if(!y.existsSync(v))y.mkdirSync(v,{recursive:!0});let q=O.resolve(A,n.package_dir);if(!y.existsSync(q))y.mkdirSync(q,{recursive:!0});await k({dir:E,outDir:v,context:{atom:w,params:n,config:$},copyUnmatchedAlso:!0});let z=O.resolve(v,"./fnet");if(!y.existsSync(z))y.mkdirSync(z,{recursive:!0});let B=await K(`cp -a ${x} ${z}`);if(B.code!==0)throw Error("Couldnt copy project dist files.");let X=O.resolve(v,"./fnet-macos-app/Assets.xcassets/AppIcon.appiconset");await _({text:n.id,dir:X,platform:"macos"});let Y=O.resolve(v,"./fnet-macos-app/Assets.xcassets/launch-images.imageset");await g({text:n.id,dir:Y,sizes:[{width:1242,height:2688},{width:1536,height:2048},{width:2048,height:1536}]});let Z=[{build:"Debug",sdk:"macosx"},{build:"Release",sdk:"macosx"}];for(let V of Z){let M="xcodebuild";if(M+=" -project fnet-macos-app.xcodeproj",M+=" -scheme fnet-macos-app",M+=` -configuration ${V.build}`,M+=` -sdk ${V.sdk}`,M+=" -allowProvisioningUpdates",M+=" build",M+=" DSTROOT=./dist",M+=" SYMROOT=./dist",B=await K(`${M}`,{cwd:v}),B.code!==0)throw Error(`Couldn't build project: ${B.stderr}`)}};import W from"lodash.clonedeep";import J from"semver";async function P({atom:w,target:n,onProgress:$,projectDir:A,dependencies:N,context:F,yamlTarget:G}){if($)await $({message:"Deploying it as macos-app package."});let E=n?.config?await T({name:n.config,dir:A,optional:!0,transferEnv:!1,tags:F.tags}):void 0,x=J.inc(n.version||"0.1.0","patch");n.params.version=x,n.version=x,G.set("version",x);let v=W(n.params);v.dependencies=W(N);let q={atom:w,params:v,config:E?.config,src:A,dest:A};return{deployer:await U(q)}}export{P as default};
@@ -1,3 +1,3 @@
1
- import{b as CT,c as jT,d as hT}from"./index.q61zqpb9.js";import{g as j}from"./index.c8qd1bz3.js";import"./index.5qbcx2y3.js";import C from"node:fs";import b from"node:path";import aT from"nunjucks";import eT from"@flownet/lib-parse-imports-js";import T0 from"@flownet/lib-parse-node-url";import _ from"lodash.merge";import h from"node:fs";import R from"node:path";import F from"@flownet/lib-parse-imports-js";import wT from"lodash.merge";function S({feature:$,features:z,packageDevDependencies:O}){let{name:W,packages:T,options:K,extraCheck:H,explicit:G}=$,Y=`${W}_enabled`,M=z.rollup_output||{},A=Object.keys(M),V=K||{},J=z[W]?.options;if(J)V=wT(V,J);let X=!z[W]||z[W]?.enabled===!1;A.forEach((Z)=>{let q=z.rollup_output[Z];if(!q)return;if(Reflect.has(q,W)){if(X||!q[W]||q[W]?.enabled===!1){delete q[W];return}if(q[W]===!0)q[W]={enabled:!0,options:V}}else if(!X&&!G&&z[Y]!==!1)q[W]={enabled:!0};else return;q[W]=q[W]||{},q[W].options={...V,...q[W].options}});let y=A.some((Z)=>z.rollup_output[Z][W]?.enabled===!0);if(H)y=H()&&y;if(z[Y]=y,y)T.forEach((Z)=>O.push({package:Z[0],version:Z[1]}))}function w($){let{atom:z,packageDevDependencies:O}=$,W=z.doc.features;S({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:W,packageDevDependencies:O})}function P($){let{atom:z,packageDevDependencies:O}=$,W=z.doc.features;S({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:W,packageDevDependencies:O})}function v($){let{atom:z,packageDevDependencies:O}=$,W=z.doc.features;S({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.8"]]},features:W,packageDevDependencies:O})}function m($){let{atom:z,packageDevDependencies:O}=$,W=z.doc.features;S({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:W,packageDevDependencies:O})}function k($){let{atom:z,packageDevDependencies:O}=$,W=z.doc.features;S({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]],expilicit:!0},features:W,packageDevDependencies:O})}function g($){let{atom:z,packageDevDependencies:O}=$,W=z.doc.features;S({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:W,packageDevDependencies:O})}function f($){let{atom:z,packageDevDependencies:O}=$,W=z.doc.features;S({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:W,packageDevDependencies:O})}function i($){let{atom:z,packageDevDependencies:O}=$,W=z.doc.features;S({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:W,packageDevDependencies:O})}function o($){let{atom:z,packageDevDependencies:O}=$,W=z.doc.features;if(W.runtime.type==="bun")return;S({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:W,packageDevDependencies:O})}function u($){let{atom:z,packageDevDependencies:O}=$,W=z.doc.features;S({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:W,packageDevDependencies:O})}function d($){let{atom:z,packageDevDependencies:O}=$,W=z.doc.features;S({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:W,packageDevDependencies:O})}function D($){let{atom:z,packageDevDependencies:O}=$,W=z.doc.features;if(W.runtime.type==="bun")return;let T={};if(W.app?.enabled===!0){if(T.targets=T.targets||[],T.targets.push({src:"./src/app/index.html",dest:W.app.dir}),!Reflect.has(W.app,"copy")){if(!Reflect.has(W,"copy"))W.copy=!0}}S({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:T},features:W,packageDevDependencies:O})}function c($){let{atom:z,packageDevDependencies:O}=$,W=z.doc.features,T=W.css&&W.css.enabled!==!1,K=[];if(T)K.push(["rollup-plugin-postcss","^4"]),K.push(["sass","^1.66"]),(W.css?.options?.plugins||[]).forEach((G)=>{switch(G.name){case"postcss-import":K.push(["postcss-import","^15"]);break;case"postcss-url":K.push(["postcss-url","^10"]);break;case"postcss-preset-env":K.push(["postcss-preset-env","^9"]);break;case"autoprefixer":K.push(["autoprefixer","^10"]);break;case"cssnano":K.push(["cssnano","^6"]);break}});S({feature:{name:"css",packages:K},features:W,packageDevDependencies:O})}function r({dir:$,name:z="index"}){let O=R.resolve($,`./${z}.tsx`);if(!h.existsSync(O))O=R.resolve($,`./${z}.ts`);if(!h.existsSync(O))O=R.resolve($,`./${z}.jsx`);if(!h.existsSync(O))O=R.resolve($,`./${z}.js`);if(!h.existsSync(O))return{};let W=O,T=R.extname(O);return{file:W,ext:T,ts:T===".ts"||T===".tsx",name:z}}async function n($){let{atom:z,context:O,setProgress:W}=$;W("Initializing features..."),z.doc.features=z.doc.features||{};let T=z.doc.features;T.project=T.project||{},T.project.format=T.project.format||T.project_format||"esm",T.project_format=T.project.format,T.dts_enabled=T.dts===!0||typeof T.dts<"u"&&T.dts!==!1;let K=R.resolve(O.project.projectDir),H=r({dir:R.resolve(K,"./app")});if(H.file){W("Parsing app entry imports...");let Z=await F({file:H.file,recursive:!0}),q=Z.all.some((Q)=>Q.usesJSX===!0&&Q.type==="local");T.app_uses_jsx=q,T.app_has_entry=!0,Z=await F({file:H.file}),q=Z.all.some((Q)=>Q.usesJSX===!0&&Q.type==="local"),T.app_entry_uses_jsx=q,T.app_entry_is_ts=H.ts,T.app_entry_ext=H.ext}let G=r({dir:R.resolve(K,"./cli")});if(G.file){W("Parsing cli entry imports...");let Z=await F({file:G.file,recursive:!0}),q=Z.all.some((Q)=>Q.usesJSX===!0&&Q.type==="local");T.cli_uses_jsx=q,T.cli_has_entry=!0,Z=await F({file:G.file}),q=Z.all.some((Q)=>Q.usesJSX===!0&&Q.type==="local"),T.cli_entry_uses_jsx=q,T.cli_entry_is_ts=G.ts,T.cli_entry_ext=G.ext}if(z.type==="workflow.lib"){let Z=r({dir:R.resolve(K,"./src")});if(Z.file){W("Parsing src entry imports...");let q=await F({file:Z.file,recursive:!0}),Q=q.all.some((U)=>U.usesJSX===!0&&U.type==="local");T.src_uses_jsx=Q,T.src_has_entry=!0,q=await F({file:Z.file}),Q=q.all.some((U)=>U.usesJSX===!0&&U.type==="local"),T.src_entry_uses_jsx=Q,T.src_entry_is_ts=Z.ts,T.src_entry_ext=Z.ext}}let Y=Reflect.has(T,"app_entry_uses_jsx")?T.app_entry_uses_jsx===!0:T.src_entry_uses_jsx===!0,M=Reflect.has(T,"cli_entry_uses_jsx")?T.cli_entry_uses_jsx===!0:T.src_entry_uses_jsx===!0;if(T.form_enabled=Y||M||T.form===!0||T.form?.enabled===!0,T.multiple_enabled=T.multiple_enabled||T.multiple===!0||T.multiple?.enabled===!0,T.app===!1)T.app={enabled:!1};else if(T.app===!0)T.app={enabled:!0,extend:T.app_has_entry===!0,export:!0,react:Y};else T.app={enabled:!0,extend:T.app_has_entry===!0,export:!0,react:Y,...T.app||{}};if(T.app.enabled=T.app.enabled===!0&&(z.doc.features.form_enabled===!0||T.app.extend===!0||T.app.enabled===!0),T.app.format=T.app.format||"esm",T.app.folder=T.app.folder||T.app.format||"default",T.cli===!1)T.cli={enabled:!1};else if(T.cli===!0)T.cli={enabled:!0,extend:T.cli_has_entry===!0,export:!0,react:M};else T.cli={enabled:!0,extend:T.cli_has_entry===!0,export:!0,react:M,...T.cli||{}};if(T.cli.enabled=T.cli.enabled===!0&&(z.doc.features.form_enabled===!1||T.cli.extend===!0||T.cli.enabled===!0),T.cli.format=T.cli.format||"esm",T.cli.folder=T.cli.folder||T.cli.folder||"esm",T.cli.node_options=T.cli.node?.options||T.cli.node_options||"",T.cli.bin=T.cli.bin||z.doc.name,T.cli.installable=T.cli.installable===!0,T.cli.enabled)z.doc["npm::bin"]=T.cli.bin;T.json=T.cli.enabled||T.json;let A={cjs:{format:"cjs",context:T.form_enabled?"window":"global",babel:T.src_uses_jsx===!0||!1,browser:!1,replace:!0,terser:!0,enabled:T.cjs!==!1,copy:!1},esm:{format:"esm",context:T.form_enabled?"window":"global",babel:T.src_uses_jsx===!0||!1,browser:!1,replace:!0,terser:!1,enabled:T.esm!==!1,copy:!0},iife:{format:"iife",context:T.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:T.iife===!0,terser:!0,copy:!1}},V={targets:{browsers:"last 9 versions, not dead",node:"18"}},J={};if(T.webos===!0)A.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"}}};if(T.electron===!0)A.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"};if(T.nextjs===!0)A.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"};if(T.ios===!0)A.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"};if(T.macos===!0)A.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"};if(T.app.enabled===!0)T.app.dir=`./dist/app/${T.app.folder}`,T.app.output={file:`./dist/app/${T.app.folder}/index.js`,dir:`./dist/app/${T.app.folder}/`,...T.app.output||{}},T.app.input={file:"./src/app/index.js",dir:"./src/app/",...T.app.input||{}},A.app={format:T.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:T.app.input.file,output_dir:T.app.dir,terser:!0,output_exports:T.app.export===!1?"none":"auto",browsersync:!0};if(T.cli.enabled===!0)T.cli.dir=`./dist/cli/${T.cli.folder}`,T.cli.output={file:`./dist/cli/${T.cli.folder}/index.js`,dir:`./dist/cli/${T.cli.folder}/`,...T.cli.output||{}},T.cli.input={file:"./src/cli/index.js",dir:"./src/cli/",...T.cli.input||{}},A.cli={format:T.cli.format,context:"global",babel:T.src_uses_jsx===!0||T.cli_uses_jsx===!0||!1,browser:!1,replace:!0,enabled:!0,input:T.cli.input.file,output_dir:T.cli.dir,banner:"#!/usr/bin/env bun",terser:!0,output_exports:T.cli.export===!1?"none":"auto"};let X={server:".",startPath:`${R.normalize(T.app.dir||".")}`,files:[R.normalize("./dist/**/*")],cors:!0,open:!1};if(T.babel_options=_(V,T.babel_options||T.babel?.options),T.browsersync_options=_(X,T.browsersync_options||T.browsersync?.options||{}),T.replace_options=_(J,T.replace_options||T.replace?.options||{}),Reflect.has(T.browsersync_options,"proxy"))delete T.browsersync_options.server;T.rollup=T.rollup||{},T.rollup_output=_(A,T.rollup_output||T.rollup?.output||{}),T.preact_enabled=T.preact===!0||T.preact&&T.preact?.enabled!==!1;let y=Object.keys(A);for(let Z of y){let q=A[Z];if(!q)continue;if(T.rollup[Z]===!1){delete T.rollup_output[Z];continue}if(q.babel_options=q.babel_options||T.babel_options,q.browsersync_options=_(T.browsersync_options,q.browsersync_options),q.replace_options=_(T.replace_options,q.replace_options),T.preact_enabled)q.alias_enabled=!0,q.alias=q.alias||{},q.alias.entries=q.alias.entries||{},q.alias.entries.react="preact/compat",q.alias.entries["react-dom"]="preact/compat";if(T.form_enabled||T.babel)q.babel=!0}y=Object.keys(T.rollup_output),T.babel_enabled=y.some((Z)=>T.rollup_output[Z].babel===!0),T.browser_enabled=y.some((Z)=>T.rollup_output[Z].babel===!0),T.browsersync_enabled=T.browsersync!==!1&&y.some((Z)=>T.rollup_output[Z].browsersync===!0),T.browsersync_enabled=T.browsersync_enabled&&T.app.enabled,T.dependency_auto_enabled=T.dependency_auto!==!1&&T.dependency_auto?.enabled!==!1,T.npm_install_flags=T.npm_install_flags||"",T.react_version=T.react_version||T.react?.version||18,T.bpmn=T.bpmn||{},T.bpmn.enabled=T.bpmn.enabled!==!1,T.bpmn.per_flow=T.bpmn.per_flow===!0,c($),D($),d($),u($),o($),f($),i($),g($),k($),m($),v($),w($),P($)}import PT from"@fnet/npm-list-versions";async function p({atom:$,packageDependencies:z,packageDevDependencies:O,setProgress:W}){W("Initializing dependencies");let T=$.doc.dependencies||[];if(T.filter((K)=>!K.dev).forEach((K)=>z.push(K)),T.filter((K)=>K.dev).forEach((K)=>O.push(K)),$.type==="workflow")z.push({package:"dot-prop",version:"^10"});if($.doc.features.form_enabled){if($.doc.features.dependency_auto_enabled){let K="^18.2";if(W("Fetching React versions"),K=`^${(await PT({name:"react",groupBy:{major:!0}})).find((Y)=>Y[0]===$.doc.features.react_version.toString())[0]}`,z.push({package:"react",version:K}),z.push({package:"react-dom",version:K}),$.type==="workflow")z.push({package:"@fnet/react-app",version:"^0.1"}),z.push({package:"@fnet/react-app-state",version:"^0.1"})}}if($.doc.features.preact_enabled)z.push({package:"preact",version:"^10"});if($.doc.features.cli.enabled===!0){if(z.push({package:"@fnet/args",version:"^0.1"}),$.doc.features.cli.fargs&&$.doc.features.cli.fargs?.enabled!==!1)z.push({package:"@fnet/config",version:"0.2.21"});if($.doc.features.cli.mcp&&$.doc.features.cli.mcp.enabled===!0)z.push({package:"@modelcontextprotocol/sdk",version:"^1.10"}),z.push({package:"express",version:"^4.18"})}if($.doc.features.render&&$.doc.features.render.enabled!==!1)O.push({package:"@flownet/lib-render-templates-dir",version:"0.1.19"});if(O.push({package:"@babel/core",version:"^7"}),O.push({package:"@rollup/plugin-commonjs",version:"^28"}),O.push({package:"@rollup/plugin-node-resolve",version:"^16"}),O.push({package:"@rollup/plugin-replace",version:"^6"}),O.push({package:"rollup",version:"^4"}),$.doc.features.dts_enabled)O.push({package:"rollup-plugin-dts",version:"^6"});if(O.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),O.push({package:"@rollup/plugin-alias",version:"^5"}),O.push({package:"fs-extra",version:"^11"}),$.doc.features.babel_enabled)O.push({package:"@rollup/plugin-babel",version:"^6"}),O.push({package:"@babel/preset-env",version:"^7"}),O.push({package:"@babel/preset-react",version:"^7"}),$.doc.features.babel?.options?.plugins?.forEach((K)=>{switch(K[0]){case"@babel/plugin-proposal-decorators":O.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":O.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":O.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":O.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":O.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"});break}});if(O.push({package:"@fnet/rollup-plugin-delete",version:"0.1.10"}),$.doc.features.browsersync_enabled)O.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.11"})}import vT from"@fnet/npm-list-versions";async function s({atom:$,packageDependencies:z,packageDevDependencies:O,setProgress:W}){W("Initializing dependencies for Bun");let T=$.doc.dependencies||[];if(T.filter((K)=>!K.dev).forEach((K)=>z.push(K)),T.filter((K)=>K.dev).forEach((K)=>O.push(K)),$.type==="workflow")z.push({package:"dot-prop",version:"^10"});if($.doc.features.form_enabled){if($.doc.features.dependency_auto_enabled){let K="^18.2";if(W("Fetching React versions"),K=`^${(await vT({name:"react",groupBy:{major:!0}})).find((Y)=>Y[0]===$.doc.features.react_version.toString())[0]}`,z.push({package:"react",version:K}),z.push({package:"react-dom",version:K}),$.type==="workflow")z.push({package:"@fnet/react-app",version:"^0.1"}),z.push({package:"@fnet/react-app-state",version:"^0.1"})}}if($.doc.features.preact_enabled)z.push({package:"preact",version:"^10"});if($.doc.features.cli.enabled===!0){if(z.push({package:"@fnet/args",version:"^0.1"}),$.doc.features.cli.fargs&&$.doc.features.cli.fargs?.enabled!==!1)z.push({package:"@fnet/config",version:"0.2.21"});if($.doc.features.cli.mcp&&$.doc.features.cli.mcp.enabled===!0)z.push({package:"@modelcontextprotocol/sdk",version:"^1.10"}),z.push({package:"express",version:"^4.18"})}if($.doc.features.render&&$.doc.features.render.enabled!==!1)O.push({package:"@flownet/lib-render-templates-dir",version:"0.1.19"})}import AT from"node:fs";import ST from"node:path";import mT from"@flownet/lib-render-templates-dir";async function t({atom:$,setProgress:z,context:O,packageDependencies:W}){if($.doc.features.app.enabled!==!0)return;await z({message:"Creating app folder"});let T={atom:$,packageDependencies:W,ts:Date.now()},K=O.templateDir,H=ST.resolve(O.projectDir,"src/app");if(!AT.existsSync(H))AT.mkdirSync(H,{recursive:!0});let G=["index.js.njk"];if($.doc.features.app.html!==!1)G.push("index.html.njk");await mT({pattern:G,dir:ST.resolve(K,"src/app"),outDir:H,context:T})}import yT from"nunjucks";import N from"node:fs";import E from"node:path";import fT from"@flownet/lib-parse-imports-js";import kT from"@fnet/npm-pick-versions";import gT from"object-hash";import l from"node:fs";import UT from"node:path";async function I({projectDir:$,name:z,setProgress:O,count:W=1}){let T,H=gT(["npm-pick-versions",z,W]),G=UT.join($,".cache"),Y=UT.join(G,H+".json");if(l.existsSync(Y)){if(O)O(`Picking npm version of ${z} from cache ...`);T=JSON.parse(l.readFileSync(Y,"utf8"))}else{if(O)O(`Picking npm version of ${z} ...`);T=await kT({name:z,count:W}),l.mkdirSync(G,{recursive:!0}),l.writeFileSync(Y,JSON.stringify(T),"utf8")}return T}async function a({atom:$,context:z,packageDependencies:O,packageDevDependencies:W,setProgress:T}){await T({message:"Creating package.json."}),O.filter((q)=>q.dev===!0).forEach((q)=>{if(!W.find((U)=>U.package===q.package))W.push(q);let Q=O.findIndex((U)=>U.package===q.package);O.splice(Q,1)});let H=O.find((q)=>q.package==="react"),G=O.find((q)=>q.package==="react-dom");if(H&&!G)O.push({package:"react-dom",version:H.version});else if(H&&G)G.version=H.version;if(H&&$.doc.features.react_version>=17){if(!O.find((q)=>q.package==="@emotion/react"))O.push({package:"@emotion/react",version:"^11"});if(!O.find((q)=>q.package==="@emotion/styled"))O.push({package:"@emotion/styled",version:"^11"})}let Y=[];if($.doc.features.app.enabled===!0)Y.push({file:E.resolve(z.projectDir,"src/app/index.js"),dev:$.doc.features.app.dev===!0});if($.doc.features.cli.enabled===!0)Y.push({file:E.resolve(z.projectDir,"src/cli/index.js"),dev:$.doc.features.cli.dev===!0});for await(let q of Y){let Q=q.file;if(!N.existsSync(Q))throw Error(`App file not found: ${Q}`);let L=(await fT({file:Q,recursive:!0,verbose:!1})).all;for await(let B of L){if(B.type!=="npm")continue;if(O.find((x)=>x.package===B.package))continue;if(W.find((x)=>x.package===B.package))continue;let xT=await I({name:B.package,projectDir:z.projectDir,setProgress:T});(q.dev===!0?W:O).push({package:B.package,subpath:B.subpath,version:xT.minorRange,type:"npm"})}}for await(let q of O){if(q.version!==void 0)continue;let Q=await I({name:q.package,projectDir:z.projectDir,setProgress:T});q.version=Q.minorRange}for await(let q of W){if(q.version!==void 0)continue;let Q=await I({name:q.package,projectDir:z.projectDir,setProgress:T});q.version=Q.minorRange}let M={atom:$,packageDependencies:O,packageDevDependencies:W},A=z.templateDir,J=yT.compile(N.readFileSync(E.resolve(A,"package.json.njk"),"utf8"),yT.configure(A)).render(M),X=z.projectDir,y=E.resolve(X,"package.json");N.writeFileSync(y,J,"utf8");let Z=E.resolve(z.project.projectDir,"fnet");if(N.existsSync(Z)){let q=E.resolve(z.projectDir,"fnet");if(!N.existsSync(q))N.mkdirSync(q);let Q=N.readdirSync(Z);for(let U of Q){let L=E.resolve(Z,U);if(!N.lstatSync(L).isFile())continue;let B=E.resolve(q,U);N.copyFileSync(L,B)}}}import XT from"node:fs";import JT from"node:path";import iT from"@flownet/lib-render-templates-dir";async function e({atom:$,setProgress:z,context:O,packageDependencies:W}){if($.doc.features.cli.enabled!==!0)return;await z({message:"Creating cli."});let T={atom:$,packageDependencies:W},K=O.templateDir,H=JT.resolve(O.projectDir,"src/cli");if(!XT.existsSync(H))XT.mkdirSync(H,{recursive:!0});await iT({pattern:["index.js.njk"],dir:JT.resolve(K,"src/cli"),outDir:H,context:T})}import TT from"node:fs";import $T from"node:path";import VT from"nunjucks";import oT from"@flownet/lib-parse-imports-js";async function OT({atom:$,setProgress:z,context:O,packageDependencies:W}){await z({message:"Creating rollup file."});let T={atom:$,packageDependencies:W},K=$T.resolve(O.projectDir,"src","default/index.js");if(!TT.existsSync(K))throw Error(`Entry file not found: ${K}`);let G=(await oT({file:K,recursive:!0})).all.filter((Z)=>Z.type==="node").map((Z)=>Z.path),Y=$.doc.features.rollup_output,M=Object.keys(Y);for(let Z=0;Z<M.length;Z++){let q=M[Z],Q=Y[q];if(Q.browser===!0){if(G.length>0){Q.globals_enabled=!0,Q.globals=Q.globals||[],Q.globals=Q.globals.concat(G.map((U)=>{return{key:U,value:U}})),Q.alias_enabled=!0,Q.alias=Q.alias||{},Q.alias.entries=Q.alias.entries||{};for(let U=0;U<G.length;U++){let L=G[U];Q.alias.entries[L]=`node:${L}`,Q.alias.entries[`node:${L}`]=L}Q.external_enabled=!0,Q.external=Q.external||[],Q.external=Q.external.concat(G)}}}let A=O.templateDir,J=VT.compile(TT.readFileSync($T.resolve(A,"rollup.config.mjs.njk"),"utf8"),VT.configure(A)).render(T),X=O.projectDir,y=$T.resolve(X,"rollup.config.mjs");TT.writeFileSync(y,J,"utf8")}import zT from"node:fs";import bT from"node:path";import RT from"nunjucks";async function WT({atom:$,setProgress:z,context:O,packageDependencies:W}){await z({message:"Creating build.js file."});let T={atom:$,packageDependencies:W},K=O.templateDir,G=RT.compile(zT.readFileSync(bT.resolve(K,"build.js.njk"),"utf8"),RT.configure(K)).render(T),Y=O.projectDir,M=bT.resolve(Y,"build.js");zT.writeFileSync(M,G,"utf8"),zT.chmodSync(M,"755")}import KT from"node:fs";import qT from"node:path";import uT from"nunjucks";import dT from"ajv/dist/2020.js";import DT from"ajv/dist/standalone/index.js";import cT from"ajv-formats";async function GT({atom:$,setProgress:z,context:O,njEnv:W}){if($.doc.features.cli.enabled!==!0)return;await z({message:"Creating input args."});let T={},K=[];if($.doc.input)T=$.doc.input;else T={type:"object",properties:{},required:[]};if($.doc.features.cli.fargs&&$.doc.features.cli.fargs?.enabled!==!1){let Q=$.doc.features.cli.fargs,U={type:"string",description:"Config name to load args",hidden:!1},L={type:"array",description:"Tags to filter the config",hidden:!1};if(Reflect.has(Q,"default"))U.default=Q.default}let G={imports:K,atom:$},Y=O.templateDir,A=uT.compile(KT.readFileSync(qT.resolve(Y,"src/default/input.args.js.njk"),"utf8"),W).render(G),V=O.projectDir,J=qT.resolve(V,"src/default/input.args.js");KT.writeFileSync(J,A,"utf8");let X=new dT({allErrors:!0,useDefaults:!0,formats:{},strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}});cT(X);let y=X.compile(T),q=DT(X,y)+`
2
- export { schema31 as schema };`;KT.writeFileSync(qT.resolve(V,"src/default/validate_input.js"),q,"utf8")}import LT from"node:fs";import NT from"node:path";import BT from"nunjucks";async function QT({atom:$,setProgress:z,context:O,packageDependencies:W}){await z({message:"Creating tsconfig.json."});let T={atom:$,packageDependencies:W},K=O.templateDir,G=BT.compile(LT.readFileSync(NT.resolve(K,"tsconfig.json.njk"),"utf8"),BT.configure(K)).render(T),Y=O.projectDir,M=NT.resolve(Y,"tsconfig.json");LT.writeFileSync(M,G,"utf8")}import rT from"node:path";import ET from"@fnet/shelljs";async function YT({setProgress:$,context:z}){let O=z.projectDir;await $({message:"Prettifiying source files."});let W=rT.join("src","**","*");if(j("bun")){let T=await ET(`prettier --write ${W} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:O});if(T.code!==0)throw Error(T.stderr)}else{let T=await ET(`prettier --write ${W} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:O});if(T.code!==0)throw Error(T.stderr)}}import nT from"@fnet/shelljs";async function ZT({atom:$,setProgress:z,context:O}){if(!$.doc.features.dts_enabled)return;let W=O.projectDir;if(await z({message:"Creating .d.ts"}),(await nT("tsc",{cwd:W})).code!==0)throw Error("Couldnt create .d.ts files.")}import IT from"@fnet/shelljs";async function HT({setProgress:$,atom:z,context:O}){let W=O.projectDir;if(await $({message:"Installing npm packages."}),j("bun")){if((await IT(`bun install ${z.doc.features.npm_install_flags}`,{cwd:W})).code!==0)throw Error("Couldnt install npm packages.")}else if((await IT(`npm install ${z.doc.features.npm_install_flags}`,{cwd:W})).code!==0)throw Error("Couldnt install npm packages.")}import _T from"node:fs";import pT from"node:path";import{spawn as sT}from"node:child_process";async function FT($){let{projectDir:z,scriptName:O,args:W=[],env:T=process.env,shell:K=!0,detached:H=!0,onSpawn:G}=$;if(!z||!O)throw Error("projectDir and scriptName are required");let Y=pT.resolve(z,"package.json");if(!_T.existsSync(Y))throw Error(`package.json not found at ${Y}`);let M=JSON.parse(_T.readFileSync(Y,"utf8")),A=M.scripts?.[O];if(!A){let X=Object.keys(M.scripts||{}).join(", ");throw Error(`Script '${O}' not found. Available: ${X}`)}let V=W.length>0?`${A} ${W.join(" ")}`:A,J=sT(V,[],{cwd:z,stdio:"inherit",shell:K,detached:H,env:{...T}});if(G)G(J);return new Promise((X,y)=>{J.on("error",(Z)=>{y(Error(`Failed to start '${O}': ${Z.message}`))}),J.on("close",(Z)=>{X({subprocess:J,exitCode:Z})})})}import tT from"node:path";async function MT({setProgress:$,context:z}){let O=z.projectDir;await $({message:"Building main project."});let W=z.dev?"build:dev":"build",T={...process.env},K=tT.join(O,"node_modules");T.NODE_PATH=K,T.NODE_PRESERVE_SYMLINKS=1,await FT({projectDir:O,scriptName:W,shell:!0,detached:!0,env:T})}class lT extends CT{async initRuntime(){if(await n(this.apiContext),this.apiContext.context.project.runtime.type==="bun")await s(this.apiContext);else await p(this.apiContext);await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}async initLibs(){this.setProgress({message:"Initializing external libs."});let $=[{name:this.atom.doc.name,type:"atom",parent_id:this.atom.parent_id}];this.libs=$,await this.initAtomLibsAndDeps({libs:$,packageDependencies:this.apiContext.packageDependencies})}async initAtomLibsAndDeps({libs:$,packageDependencies:z}){let O=$.filter((W)=>W.type==="atom");for(let W=0;W<O.length;W++){let T=O[W],K=await this.findAtomLibrary({url:T.name});T.atom=K,K.doc.dependencies?.filter((G)=>typeof G.repo>"u"||G.repo==="npm")?.forEach((G)=>{let Y=z.find((M)=>M.package===G.package);if(Y){if(typeof G.path==="string"){if(!(Y.path||[]).some((M)=>M===G.path))Y.path=Y.path||[],Y.path.push(G.path)}else if(Array.isArray(G.path))G.path.forEach((M)=>{if(!(Y.path||[]).some((A)=>A===M))Y.path=Y.path||[],Y.path.push(M)})}else z.push(G)})}z.sort((W,T)=>W.package?.localeCompare(T.package))}async findAtomLibrary({url:$}){let z=T0({url:$});if(!z)throw Error(`Invalid package name: ${$}`);if(!z.protocol)z.protocol=this.context.protocol;if(z.protocol==="ac:"){let O=z.pathname.split("/");if(O.length===1)return await this.apiContext.Atom.first({where:{name:$,parent_id:this.atomConfig.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(O.length===2){let W=await this.apiContext.Atom.first({where:{name:O[0],parent_id:this.atomConfig.env.ATOM_LIBRARIES_ID,type:"folder"}});return await this.apiContext.Atom.first({where:{name:O[1],parent_id:W.id,type:"workflow.lib"}})}}else if(z.protocol==="src:"){let O=this.atom;O.protocol="src:",O.doc.dependencies=O.doc.dependencies||[],O.name=O.doc.name;let W=b.resolve(this.context.projectSrcDir,"index.js"),T=await eT({file:W,recursive:!0}),K=O.doc.dependencies,H=T.all;for await(let G of H){if(G.type!=="npm")continue;if(K.find((M)=>M.package===G.package))continue;let Y=await I({name:G.package,projectDir:this.context.projectDir,setProgress:this.apiContext.setProgress});K.push({package:G.package,subpath:G.subpath,version:Y.minorRange,type:"npm"})}return O}}async createAtomLibFiles({libs:$}){await this.setProgress({message:"Creating external lib files."}),this.atom.typesDir="./types";let z=$.filter((O)=>O.type==="atom");for(let O=0;O<z.length;O++){let T=z[O].atom,K=this.context.projectDir;if(T.protocol==="src:"){let H=b.resolve(this.context.projectSrcDir,`${T.fileName||T.name}.js`),G=b.relative(b.join(this.context.projectDir,"src","default"),H);if(!C.existsSync(H)){C.mkdirSync(b.dirname(H),{recursive:!0});let Y=`export default async (input)=>{
3
- `;Y+="}",C.writeFileSync(H,Y,"utf8")}T.relativePath=G.split(b.sep).join("/"),this.atom.typesDir=`./types/${b.basename(K)}/src`}else{let H=b.join(K,"src","libs",`${T.id}.js`),G=T.doc.contents?.find((Y)=>Y.format==="esm")||T.doc;C.writeFileSync(H,G.content,"utf8")}}}async createEngine(){await this.setProgress({message:"Creating engine file."});let z={libs:this.libs.filter((G)=>G.type==="atom"),libraryAtom:this.atom,atom:this.atom},O=this.context.templateDir,T=aT.compile(C.readFileSync(b.resolve(O,b.join("src","default","engine.js.njk")),"utf8"),this.apiContext.njEnv).render(z),K=this.context.projectDir,H=b.resolve(K,b.join("src","default","index.js"));C.writeFileSync(H,T,"utf8")}async build(){try{if(this.fileMode){let $=this.apiContext.context.project;if(await this.createAtomLibFiles({libs:this.libs}),await this.createEngine(),await this.createProjectYaml(),await hT(this.apiContext),await QT(this.apiContext),await jT(this.apiContext),await GT(this.apiContext),await e(this.apiContext),await t(this.apiContext),$.runtime.type==="bun")await WT(this.apiContext);else await OT(this.apiContext);if(await a(this.apiContext),await YT(this.apiContext),await ZT(this.apiContext),this.buildMode){if(await HT(this.apiContext),await MT(this.apiContext),this.deployMode)await this.deploy()}}await this._cache_set(this.buildKey,{status:"COMPLETED"})}catch($){throw await this._cache_set(this.buildKey,{status:"FAILED",message:$.message||$}),console.log($),$}}}var B1=lT;export{B1 as default};
1
+ import{b as hT,c as lT,d as xT}from"./index.782edcjp.js";import{f as C}from"./index.05n3mvs9.js";import"./index.5qbcx2y3.js";import j from"node:fs";import b from"node:path";import aT from"nunjucks";import eT from"@flownet/lib-parse-imports-js";import T0 from"@flownet/lib-parse-node-url";import _ from"lodash.merge";import h from"node:fs";import R from"node:path";import F from"@flownet/lib-parse-imports-js";import vT from"lodash.merge";function S({feature:$,features:z,packageDevDependencies:O}){let{name:W,packages:T,options:K,extraCheck:H,explicit:G}=$,Y=`${W}_enabled`,M=z.rollup_output||{},A=Object.keys(M),J=K||{},V=z[W]?.options;if(V)J=vT(J,V);let X=!z[W]||z[W]?.enabled===!1;A.forEach((Z)=>{let q=z.rollup_output[Z];if(!q)return;if(Reflect.has(q,W)){if(X||!q[W]||q[W]?.enabled===!1){delete q[W];return}if(q[W]===!0)q[W]={enabled:!0,options:J}}else if(!X&&!G&&z[Y]!==!1)q[W]={enabled:!0};else return;q[W]=q[W]||{},q[W].options={...J,...q[W].options}});let y=A.some((Z)=>z.rollup_output[Z][W]?.enabled===!0);if(H)y=H()&&y;if(z[Y]=y,y)T.forEach((Z)=>O.push({package:Z[0],version:Z[1]}))}function w($){let{atom:z,packageDevDependencies:O}=$,W=z.doc.features;S({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:W,packageDevDependencies:O})}function P($){let{atom:z,packageDevDependencies:O}=$,W=z.doc.features;S({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:W,packageDevDependencies:O})}function v($){let{atom:z,packageDevDependencies:O}=$,W=z.doc.features;S({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.8"]]},features:W,packageDevDependencies:O})}function m($){let{atom:z,packageDevDependencies:O}=$,W=z.doc.features;S({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:W,packageDevDependencies:O})}function k($){let{atom:z,packageDevDependencies:O}=$,W=z.doc.features;S({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]],expilicit:!0},features:W,packageDevDependencies:O})}function g($){let{atom:z,packageDevDependencies:O}=$,W=z.doc.features;S({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:W,packageDevDependencies:O})}function f($){let{atom:z,packageDevDependencies:O}=$,W=z.doc.features;S({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:W,packageDevDependencies:O})}function i($){let{atom:z,packageDevDependencies:O}=$,W=z.doc.features;S({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:W,packageDevDependencies:O})}function o($){let{atom:z,packageDevDependencies:O}=$,W=z.doc.features;if(W.runtime.type==="bun")return;S({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:W,packageDevDependencies:O})}function u($){let{atom:z,packageDevDependencies:O}=$,W=z.doc.features;S({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:W,packageDevDependencies:O})}function d($){let{atom:z,packageDevDependencies:O}=$,W=z.doc.features;S({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:W,packageDevDependencies:O})}function D($){let{atom:z,packageDevDependencies:O}=$,W=z.doc.features;if(W.runtime.type==="bun")return;let T={};if(W.app?.enabled===!0){if(T.targets=T.targets||[],T.targets.push({src:"./src/app/index.html",dest:W.app.dir}),!Reflect.has(W.app,"copy")){if(!Reflect.has(W,"copy"))W.copy=!0}}S({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:T},features:W,packageDevDependencies:O})}function c($){let{atom:z,packageDevDependencies:O}=$,W=z.doc.features,T=W.css&&W.css.enabled!==!1,K=[];if(T)K.push(["rollup-plugin-postcss","^4"]),K.push(["sass","^1.66"]),(W.css?.options?.plugins||[]).forEach((G)=>{switch(G.name){case"postcss-import":K.push(["postcss-import","^15"]);break;case"postcss-url":K.push(["postcss-url","^10"]);break;case"postcss-preset-env":K.push(["postcss-preset-env","^9"]);break;case"autoprefixer":K.push(["autoprefixer","^10"]);break;case"cssnano":K.push(["cssnano","^6"]);break}});S({feature:{name:"css",packages:K},features:W,packageDevDependencies:O})}function r({dir:$,name:z="index"}){let O=R.resolve($,`./${z}.tsx`);if(!h.existsSync(O))O=R.resolve($,`./${z}.ts`);if(!h.existsSync(O))O=R.resolve($,`./${z}.jsx`);if(!h.existsSync(O))O=R.resolve($,`./${z}.js`);if(!h.existsSync(O))return{};let W=O,T=R.extname(O);return{file:W,ext:T,ts:T===".ts"||T===".tsx",name:z}}async function n($){let{atom:z,context:O,setProgress:W}=$;W("Initializing features..."),z.doc.features=z.doc.features||{};let T=z.doc.features;T.project=T.project||{},T.project.format=T.project.format||T.project_format||"esm",T.project_format=T.project.format,T.dts_enabled=T.dts===!0||typeof T.dts<"u"&&T.dts!==!1;let K=R.resolve(O.project.projectDir),H=r({dir:R.resolve(K,"./app")});if(H.file){W("Parsing app entry imports...");let Z=await F({file:H.file,recursive:!0}),q=Z.all.some((Q)=>Q.usesJSX===!0&&Q.type==="local");T.app_uses_jsx=q,T.app_has_entry=!0,Z=await F({file:H.file}),q=Z.all.some((Q)=>Q.usesJSX===!0&&Q.type==="local"),T.app_entry_uses_jsx=q,T.app_entry_is_ts=H.ts,T.app_entry_ext=H.ext}let G=r({dir:R.resolve(K,"./cli")});if(G.file){W("Parsing cli entry imports...");let Z=await F({file:G.file,recursive:!0}),q=Z.all.some((Q)=>Q.usesJSX===!0&&Q.type==="local");T.cli_uses_jsx=q,T.cli_has_entry=!0,Z=await F({file:G.file}),q=Z.all.some((Q)=>Q.usesJSX===!0&&Q.type==="local"),T.cli_entry_uses_jsx=q,T.cli_entry_is_ts=G.ts,T.cli_entry_ext=G.ext}if(z.type==="workflow.lib"){let Z=r({dir:R.resolve(K,"./src")});if(Z.file){W("Parsing src entry imports...");let q=await F({file:Z.file,recursive:!0}),Q=q.all.some((U)=>U.usesJSX===!0&&U.type==="local");T.src_uses_jsx=Q,T.src_has_entry=!0,q=await F({file:Z.file}),Q=q.all.some((U)=>U.usesJSX===!0&&U.type==="local"),T.src_entry_uses_jsx=Q,T.src_entry_is_ts=Z.ts,T.src_entry_ext=Z.ext}}let Y=Reflect.has(T,"app_entry_uses_jsx")?T.app_entry_uses_jsx===!0:T.src_entry_uses_jsx===!0,M=Reflect.has(T,"cli_entry_uses_jsx")?T.cli_entry_uses_jsx===!0:T.src_entry_uses_jsx===!0;if(T.form_enabled=Y||M||T.form===!0||T.form?.enabled===!0,T.multiple_enabled=T.multiple_enabled||T.multiple===!0||T.multiple?.enabled===!0,T.app===!1)T.app={enabled:!1};else if(T.app===!0)T.app={enabled:!0,extend:T.app_has_entry===!0,export:!0,react:Y};else T.app={enabled:!0,extend:T.app_has_entry===!0,export:!0,react:Y,...T.app||{}};if(T.app.enabled=T.app.enabled===!0&&(z.doc.features.form_enabled===!0||T.app.extend===!0||T.app.enabled===!0),T.app.format=T.app.format||"esm",T.app.folder=T.app.folder||T.app.format||"default",T.cli===!1)T.cli={enabled:!1};else if(T.cli===!0)T.cli={enabled:!0,extend:T.cli_has_entry===!0,export:!0,react:M};else T.cli={enabled:!0,extend:T.cli_has_entry===!0,export:!0,react:M,...T.cli||{}};if(T.cli.enabled=T.cli.enabled===!0&&(z.doc.features.form_enabled===!1||T.cli.extend===!0||T.cli.enabled===!0),T.cli.format=T.cli.format||"esm",T.cli.folder=T.cli.folder||T.cli.folder||"esm",T.cli.node_options=T.cli.node?.options||T.cli.node_options||"",T.cli.bin=T.cli.bin||z.doc.name,T.cli.installable=T.cli.installable===!0,T.cli.enabled)z.doc["npm::bin"]=T.cli.bin;T.json=T.cli.enabled||T.json;let A={cjs:{format:"cjs",context:T.form_enabled?"window":"global",babel:T.src_uses_jsx===!0||!1,browser:!1,replace:!0,terser:!0,enabled:T.cjs!==!1,copy:!1},esm:{format:"esm",context:T.form_enabled?"window":"global",babel:T.src_uses_jsx===!0||!1,browser:!1,replace:!0,terser:!1,enabled:T.esm!==!1,copy:!0},iife:{format:"iife",context:T.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:T.iife===!0,terser:!0,copy:!1}},J={targets:{browsers:"last 9 versions, not dead",node:"18"}},V={};if(T.webos===!0)A.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"}}};if(T.electron===!0)A.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"};if(T.nextjs===!0)A.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"};if(T.ios===!0)A.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"};if(T.macos===!0)A.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"};if(T.app.enabled===!0)T.app.dir=`./dist/app/${T.app.folder}`,T.app.output={file:`./dist/app/${T.app.folder}/index.js`,dir:`./dist/app/${T.app.folder}/`,...T.app.output||{}},T.app.input={file:"./src/app/index.js",dir:"./src/app/",...T.app.input||{}},A.app={format:T.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:T.app.input.file,output_dir:T.app.dir,terser:!0,output_exports:T.app.export===!1?"none":"auto",browsersync:!0};if(T.cli.enabled===!0)T.cli.dir=`./dist/cli/${T.cli.folder}`,T.cli.output={file:`./dist/cli/${T.cli.folder}/index.js`,dir:`./dist/cli/${T.cli.folder}/`,...T.cli.output||{}},T.cli.input={file:"./src/cli/index.js",dir:"./src/cli/",...T.cli.input||{}},A.cli={format:T.cli.format,context:"global",babel:T.src_uses_jsx===!0||T.cli_uses_jsx===!0||!1,browser:!1,replace:!0,enabled:!0,input:T.cli.input.file,output_dir:T.cli.dir,banner:"#!/usr/bin/env bun",terser:!0,output_exports:T.cli.export===!1?"none":"auto"};let X={server:".",startPath:`${R.normalize(T.app.dir||".")}`,files:[R.normalize("./dist/**/*")],cors:!0,open:!1};if(T.babel_options=_(J,T.babel_options||T.babel?.options),T.browsersync_options=_(X,T.browsersync_options||T.browsersync?.options||{}),T.replace_options=_(V,T.replace_options||T.replace?.options||{}),Reflect.has(T.browsersync_options,"proxy"))delete T.browsersync_options.server;T.rollup=T.rollup||{},T.rollup_output=_(A,T.rollup_output||T.rollup?.output||{}),T.preact_enabled=T.preact===!0||T.preact&&T.preact?.enabled!==!1;let y=Object.keys(A);for(let Z of y){let q=A[Z];if(!q)continue;if(T.rollup[Z]===!1){delete T.rollup_output[Z];continue}if(q.babel_options=q.babel_options||T.babel_options,q.browsersync_options=_(T.browsersync_options,q.browsersync_options),q.replace_options=_(T.replace_options,q.replace_options),T.preact_enabled)q.alias_enabled=!0,q.alias=q.alias||{},q.alias.entries=q.alias.entries||{},q.alias.entries.react="preact/compat",q.alias.entries["react-dom"]="preact/compat";if(T.form_enabled||T.babel)q.babel=!0}y=Object.keys(T.rollup_output),T.babel_enabled=y.some((Z)=>T.rollup_output[Z].babel===!0),T.browser_enabled=y.some((Z)=>T.rollup_output[Z].babel===!0),T.browsersync_enabled=T.browsersync!==!1&&y.some((Z)=>T.rollup_output[Z].browsersync===!0),T.browsersync_enabled=T.browsersync_enabled&&T.app.enabled,T.dependency_auto_enabled=T.dependency_auto!==!1&&T.dependency_auto?.enabled!==!1,T.npm_install_flags=T.npm_install_flags||"",T.react_version=T.react_version||T.react?.version||18,T.bpmn=T.bpmn||{},T.bpmn.enabled=T.bpmn.enabled!==!1,T.bpmn.per_flow=T.bpmn.per_flow===!0,c($),D($),d($),u($),o($),f($),i($),g($),k($),m($),v($),w($),P($)}import mT from"@fnet/npm-list-versions";async function p({atom:$,packageDependencies:z,packageDevDependencies:O,setProgress:W}){W("Initializing dependencies");let T=$.doc.dependencies||[];if(T.filter((K)=>!K.dev).forEach((K)=>z.push(K)),T.filter((K)=>K.dev).forEach((K)=>O.push(K)),$.type==="workflow")z.push({package:"dot-prop",version:"^10"});if($.doc.features.form_enabled){if($.doc.features.dependency_auto_enabled){let K="^18.2";if(W("Fetching React versions"),K=`^${(await mT({name:"react",groupBy:{major:!0}})).find((Y)=>Y[0]===$.doc.features.react_version.toString())[0]}`,z.push({package:"react",version:K}),z.push({package:"react-dom",version:K}),$.type==="workflow")z.push({package:"@fnet/react-app",version:"^0.1"}),z.push({package:"@fnet/react-app-state",version:"^0.1"})}}if($.doc.features.preact_enabled)z.push({package:"preact",version:"^10"});if($.doc.features.cli.enabled===!0){if(z.push({package:"@fnet/args",version:"^0.1"}),$.doc.features.cli.fargs&&$.doc.features.cli.fargs?.enabled!==!1)z.push({package:"@fnet/config",version:"0.2.21"});if($.doc.features.cli.mcp&&$.doc.features.cli.mcp.enabled===!0)z.push({package:"@modelcontextprotocol/sdk",version:"^1.10"}),z.push({package:"express",version:"^4.18"})}if($.doc.features.render&&$.doc.features.render.enabled!==!1)O.push({package:"@flownet/lib-render-templates-dir",version:"0.1.19"});if(O.push({package:"@babel/core",version:"^7"}),O.push({package:"@rollup/plugin-commonjs",version:"^28"}),O.push({package:"@rollup/plugin-node-resolve",version:"^16"}),O.push({package:"@rollup/plugin-replace",version:"^6"}),O.push({package:"rollup",version:"^4"}),$.doc.features.dts_enabled)O.push({package:"rollup-plugin-dts",version:"^6"});if(O.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),O.push({package:"@rollup/plugin-alias",version:"^5"}),O.push({package:"fs-extra",version:"^11"}),$.doc.features.babel_enabled)O.push({package:"@rollup/plugin-babel",version:"^6"}),O.push({package:"@babel/preset-env",version:"^7"}),O.push({package:"@babel/preset-react",version:"^7"}),$.doc.features.babel?.options?.plugins?.forEach((K)=>{switch(K[0]){case"@babel/plugin-proposal-decorators":O.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":O.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":O.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":O.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":O.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"});break}});if(O.push({package:"@fnet/rollup-plugin-delete",version:"0.1.10"}),$.doc.features.browsersync_enabled)O.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.11"})}import kT from"@fnet/npm-list-versions";async function s({atom:$,packageDependencies:z,packageDevDependencies:O,setProgress:W}){W("Initializing dependencies for Bun");let T=$.doc.dependencies||[];if(T.filter((K)=>!K.dev).forEach((K)=>z.push(K)),T.filter((K)=>K.dev).forEach((K)=>O.push(K)),$.type==="workflow")z.push({package:"dot-prop",version:"^10"});if($.doc.features.form_enabled){if($.doc.features.dependency_auto_enabled){let K="^18.2";if(W("Fetching React versions"),K=`^${(await kT({name:"react",groupBy:{major:!0}})).find((Y)=>Y[0]===$.doc.features.react_version.toString())[0]}`,z.push({package:"react",version:K}),z.push({package:"react-dom",version:K}),$.type==="workflow")z.push({package:"@fnet/react-app",version:"^0.1"}),z.push({package:"@fnet/react-app-state",version:"^0.1"})}}if($.doc.features.preact_enabled)z.push({package:"preact",version:"^10"});if($.doc.features.cli.enabled===!0){if(z.push({package:"@fnet/args",version:"^0.1"}),$.doc.features.cli.fargs&&$.doc.features.cli.fargs?.enabled!==!1)z.push({package:"@fnet/config",version:"0.2.21"});if($.doc.features.cli.mcp&&$.doc.features.cli.mcp.enabled===!0)z.push({package:"@modelcontextprotocol/sdk",version:"^1.10"}),z.push({package:"express",version:"^4.18"})}if($.doc.features.render&&$.doc.features.render.enabled!==!1)O.push({package:"@flownet/lib-render-templates-dir",version:"0.1.19"})}import AT from"node:fs";import ST from"node:path";import gT from"@flownet/lib-render-templates-dir";async function t({atom:$,setProgress:z,context:O,packageDependencies:W}){if($.doc.features.app.enabled!==!0)return;await z({message:"Creating app folder"});let T={atom:$,packageDependencies:W,ts:Date.now()},K=O.templateDir,H=ST.resolve(O.projectDir,"src/app");if(!AT.existsSync(H))AT.mkdirSync(H,{recursive:!0});let G=["index.js.njk"];if($.doc.features.app.html!==!1)G.push("index.html.njk");await gT({pattern:G,dir:ST.resolve(K,"src/app"),outDir:H,context:T})}import yT from"nunjucks";import B from"node:fs";import E from"node:path";import oT from"@flownet/lib-parse-imports-js";import fT from"@fnet/npm-pick-versions";import iT from"object-hash";import l from"node:fs";import UT from"node:path";async function I({projectDir:$,name:z,setProgress:O,count:W=1}){let T,H=iT(["npm-pick-versions",z,W]),G=UT.join($,".cache"),Y=UT.join(G,H+".json");if(l.existsSync(Y)){if(O)O(`Picking npm version of ${z} from cache ...`);T=JSON.parse(l.readFileSync(Y,"utf8"))}else{if(O)O(`Picking npm version of ${z} ...`);T=await fT({name:z,count:W}),l.mkdirSync(G,{recursive:!0}),l.writeFileSync(Y,JSON.stringify(T),"utf8")}return T}async function a({atom:$,context:z,packageDependencies:O,packageDevDependencies:W,setProgress:T}){await T({message:"Creating package.json."}),O.filter((q)=>q.dev===!0).forEach((q)=>{if(!W.find((U)=>U.package===q.package))W.push(q);let Q=O.findIndex((U)=>U.package===q.package);O.splice(Q,1)});let H=O.find((q)=>q.package==="react"),G=O.find((q)=>q.package==="react-dom");if(H&&!G)O.push({package:"react-dom",version:H.version});else if(H&&G)G.version=H.version;if(H&&$.doc.features.react_version>=17){if(!O.find((q)=>q.package==="@emotion/react"))O.push({package:"@emotion/react",version:"^11"});if(!O.find((q)=>q.package==="@emotion/styled"))O.push({package:"@emotion/styled",version:"^11"})}let Y=[];if($.doc.features.app.enabled===!0)Y.push({file:E.resolve(z.projectDir,"src/app/index.js"),dev:$.doc.features.app.dev===!0});if($.doc.features.cli.enabled===!0)Y.push({file:E.resolve(z.projectDir,"src/cli/index.js"),dev:$.doc.features.cli.dev===!0});for await(let q of Y){let Q=q.file;if(!B.existsSync(Q))throw Error(`App file not found: ${Q}`);let L=(await oT({file:Q,recursive:!0,verbose:!1})).all;for await(let N of L){if(N.type!=="npm")continue;if(O.find((x)=>x.package===N.package))continue;if(W.find((x)=>x.package===N.package))continue;let PT=await I({name:N.package,projectDir:z.projectDir,setProgress:T});(q.dev===!0?W:O).push({package:N.package,subpath:N.subpath,version:PT.minorRange,type:"npm"})}}for await(let q of O){if(q.version!==void 0)continue;let Q=await I({name:q.package,projectDir:z.projectDir,setProgress:T});q.version=Q.minorRange}for await(let q of W){if(q.version!==void 0)continue;let Q=await I({name:q.package,projectDir:z.projectDir,setProgress:T});q.version=Q.minorRange}let M={atom:$,packageDependencies:O,packageDevDependencies:W},A=z.templateDir,V=yT.compile(B.readFileSync(E.resolve(A,"package.json.njk"),"utf8"),yT.configure(A)).render(M),X=z.projectDir,y=E.resolve(X,"package.json");B.writeFileSync(y,V,"utf8");let Z=E.resolve(z.project.projectDir,"fnet");if(B.existsSync(Z)){let q=E.resolve(z.projectDir,"fnet");if(!B.existsSync(q))B.mkdirSync(q);let Q=B.readdirSync(Z);for(let U of Q){let L=E.resolve(Z,U);if(!B.lstatSync(L).isFile())continue;let N=E.resolve(q,U);B.copyFileSync(L,N)}}}import XT from"node:fs";import VT from"node:path";import uT from"@flownet/lib-render-templates-dir";async function e({atom:$,setProgress:z,context:O,packageDependencies:W}){if($.doc.features.cli.enabled!==!0)return;await z({message:"Creating cli."});let T={atom:$,packageDependencies:W},K=O.templateDir,H=VT.resolve(O.projectDir,"src/cli");if(!XT.existsSync(H))XT.mkdirSync(H,{recursive:!0});await uT({pattern:["index.js.njk"],dir:VT.resolve(K,"src/cli"),outDir:H,context:T})}import TT from"node:fs";import $T from"node:path";import JT from"nunjucks";import dT from"@flownet/lib-parse-imports-js";async function OT({atom:$,setProgress:z,context:O,packageDependencies:W}){await z({message:"Creating rollup file."});let T={atom:$,packageDependencies:W},K=$T.resolve(O.projectDir,"src","default/index.js");if(!TT.existsSync(K))throw Error(`Entry file not found: ${K}`);let G=(await dT({file:K,recursive:!0})).all.filter((Z)=>Z.type==="node").map((Z)=>Z.path),Y=$.doc.features.rollup_output,M=Object.keys(Y);for(let Z=0;Z<M.length;Z++){let q=M[Z],Q=Y[q];if(Q.browser===!0){if(G.length>0){Q.globals_enabled=!0,Q.globals=Q.globals||[],Q.globals=Q.globals.concat(G.map((U)=>{return{key:U,value:U}})),Q.alias_enabled=!0,Q.alias=Q.alias||{},Q.alias.entries=Q.alias.entries||{};for(let U=0;U<G.length;U++){let L=G[U];Q.alias.entries[L]=`node:${L}`,Q.alias.entries[`node:${L}`]=L}Q.external_enabled=!0,Q.external=Q.external||[],Q.external=Q.external.concat(G)}}}let A=O.templateDir,V=JT.compile(TT.readFileSync($T.resolve(A,"rollup.config.mjs.njk"),"utf8"),JT.configure(A)).render(T),X=O.projectDir,y=$T.resolve(X,"rollup.config.mjs");TT.writeFileSync(y,V,"utf8")}import zT from"node:fs";import bT from"node:path";import RT from"nunjucks";async function WT({atom:$,setProgress:z,context:O,packageDependencies:W}){await z({message:"Creating build.js file."});let T={atom:$,packageDependencies:W},K=O.templateDir,G=RT.compile(zT.readFileSync(bT.resolve(K,"build.js.njk"),"utf8"),RT.configure(K)).render(T),Y=O.projectDir,M=bT.resolve(Y,"build.js");zT.writeFileSync(M,G,"utf8"),zT.chmodSync(M,"755")}import KT from"node:fs";import qT from"node:path";import DT from"nunjucks";import cT from"ajv/dist/2020.js";import rT from"ajv/dist/standalone/index.js";import nT from"ajv-formats";async function GT({atom:$,setProgress:z,context:O,njEnv:W}){if($.doc.features.cli.enabled!==!0)return;await z({message:"Creating input args."});let T={},K=[];if($.doc.input)T=$.doc.input;else T={type:"object",properties:{},required:[]};if($.doc.features.cli.fargs&&$.doc.features.cli.fargs?.enabled!==!1){let Q=$.doc.features.cli.fargs,U={type:"string",description:"Config name to load args",hidden:!1},L={type:"array",description:"Tags to filter the config",hidden:!1};if(Reflect.has(Q,"default"))U.default=Q.default}let G={imports:K,atom:$},Y=O.templateDir,A=DT.compile(KT.readFileSync(qT.resolve(Y,"src/default/input.args.js.njk"),"utf8"),W).render(G),J=O.projectDir,V=qT.resolve(J,"src/default/input.args.js");KT.writeFileSync(V,A,"utf8");let X=new cT({allErrors:!0,useDefaults:!0,formats:{},strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}});nT(X);let y=X.compile(T),q=rT(X,y)+`
2
+ export { schema31 as schema };`;KT.writeFileSync(qT.resolve(J,"src/default/validate_input.js"),q,"utf8")}import LT from"node:fs";import BT from"node:path";import NT from"nunjucks";async function QT({atom:$,setProgress:z,context:O,packageDependencies:W}){await z({message:"Creating tsconfig.json."});let T={atom:$,packageDependencies:W},K=O.templateDir,G=NT.compile(LT.readFileSync(BT.resolve(K,"tsconfig.json.njk"),"utf8"),NT.configure(K)).render(T),Y=O.projectDir,M=BT.resolve(Y,"tsconfig.json");LT.writeFileSync(M,G,"utf8")}import pT from"node:path";import ET from"@fnet/shelljs";async function YT({setProgress:$,context:z}){let O=z.projectDir;await $({message:"Prettifiying source files."});let W=pT.join("src","**","*");if(C("bun")){let T=await ET(`bunx prettier --write ${W} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:O});if(T.code!==0)throw Error(T.stderr)}else{let T=await ET(`npx prettier --write ${W} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:O});if(T.code!==0)throw Error(T.stderr)}}import IT from"@fnet/shelljs";async function ZT({atom:$,setProgress:z,context:O}){if(!$.doc.features.dts_enabled)return;let W=O.projectDir;if(await z({message:"Creating .d.ts"}),C("bun")){if((await IT("bunx tsc",{cwd:W})).code!==0)throw Error("Couldnt create .d.ts files.")}else if((await IT("npx tsc",{cwd:W})).code!==0)throw Error("Couldnt create .d.ts files.")}import _T from"@fnet/shelljs";async function HT({setProgress:$,atom:z,context:O}){let W=O.projectDir;if(await $({message:"Installing npm packages."}),C("bun")){if((await _T(`bun install ${z.doc.features.npm_install_flags}`,{cwd:W})).code!==0)throw Error("Couldnt install npm packages.")}else if((await _T(`npm install ${z.doc.features.npm_install_flags}`,{cwd:W})).code!==0)throw Error("Couldnt install npm packages.")}import FT from"node:fs";import sT from"node:path";import{spawn as tT}from"node:child_process";async function CT($){let{projectDir:z,scriptName:O,args:W=[],env:T=process.env,shell:K=!0,detached:H=!0,onSpawn:G}=$;if(!z||!O)throw Error("projectDir and scriptName are required");let Y=sT.resolve(z,"package.json");if(!FT.existsSync(Y))throw Error(`package.json not found at ${Y}`);let M=JSON.parse(FT.readFileSync(Y,"utf8")),A=M.scripts?.[O];if(!A){let X=Object.keys(M.scripts||{}).join(", ");throw Error(`Script '${O}' not found. Available: ${X}`)}let J=W.length>0?`${A} ${W.join(" ")}`:A,V=tT(J,[],{cwd:z,stdio:"inherit",shell:K,detached:H,env:{...T}});if(G)G(V);return new Promise((X,y)=>{V.on("error",(Z)=>{y(Error(`Failed to start '${O}': ${Z.message}`))}),V.on("close",(Z)=>{X({subprocess:V,exitCode:Z})})})}import jT from"node:path";async function MT({setProgress:$,context:z}){let O=z.projectDir;await $({message:"Building main project."});let W=z.dev?"build:dev":"build",T={...process.env},K=jT.join(O,"node_modules");T.NODE_PATH=K,T.PATH=`${jT.join(K,".bin")}:${T.PATH||""}`,T.NODE_PRESERVE_SYMLINKS=1,await CT({projectDir:O,scriptName:W,shell:!0,detached:!0,env:T})}class wT extends hT{async initRuntime(){if(await n(this.apiContext),this.apiContext.context.project.runtime.type==="bun")await s(this.apiContext);else await p(this.apiContext);await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}async initLibs(){this.setProgress({message:"Initializing external libs."});let $=[{name:this.atom.doc.name,type:"atom",parent_id:this.atom.parent_id}];this.libs=$,await this.initAtomLibsAndDeps({libs:$,packageDependencies:this.apiContext.packageDependencies})}async initAtomLibsAndDeps({libs:$,packageDependencies:z}){let O=$.filter((W)=>W.type==="atom");for(let W=0;W<O.length;W++){let T=O[W],K=await this.findAtomLibrary({url:T.name});T.atom=K,K.doc.dependencies?.filter((G)=>typeof G.repo>"u"||G.repo==="npm")?.forEach((G)=>{let Y=z.find((M)=>M.package===G.package);if(Y){if(typeof G.path==="string"){if(!(Y.path||[]).some((M)=>M===G.path))Y.path=Y.path||[],Y.path.push(G.path)}else if(Array.isArray(G.path))G.path.forEach((M)=>{if(!(Y.path||[]).some((A)=>A===M))Y.path=Y.path||[],Y.path.push(M)})}else z.push(G)})}z.sort((W,T)=>W.package?.localeCompare(T.package))}async findAtomLibrary({url:$}){let z=T0({url:$});if(!z)throw Error(`Invalid package name: ${$}`);if(!z.protocol)z.protocol=this.context.protocol;if(z.protocol==="ac:"){let O=z.pathname.split("/");if(O.length===1)return await this.apiContext.Atom.first({where:{name:$,parent_id:this.atomConfig.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(O.length===2){let W=await this.apiContext.Atom.first({where:{name:O[0],parent_id:this.atomConfig.env.ATOM_LIBRARIES_ID,type:"folder"}});return await this.apiContext.Atom.first({where:{name:O[1],parent_id:W.id,type:"workflow.lib"}})}}else if(z.protocol==="src:"){let O=this.atom;O.protocol="src:",O.doc.dependencies=O.doc.dependencies||[],O.name=O.doc.name;let W=b.resolve(this.context.projectSrcDir,"index.js"),T=await eT({file:W,recursive:!0}),K=O.doc.dependencies,H=T.all;for await(let G of H){if(G.type!=="npm")continue;if(K.find((M)=>M.package===G.package))continue;let Y=await I({name:G.package,projectDir:this.context.projectDir,setProgress:this.apiContext.setProgress});K.push({package:G.package,subpath:G.subpath,version:Y.minorRange,type:"npm"})}return O}}async createAtomLibFiles({libs:$}){await this.setProgress({message:"Creating external lib files."}),this.atom.typesDir="./types";let z=$.filter((O)=>O.type==="atom");for(let O=0;O<z.length;O++){let T=z[O].atom,K=this.context.projectDir;if(T.protocol==="src:"){let H=b.resolve(this.context.projectSrcDir,`${T.fileName||T.name}.js`),G=b.relative(b.join(this.context.projectDir,"src","default"),H);if(!j.existsSync(H)){j.mkdirSync(b.dirname(H),{recursive:!0});let Y=`export default async (input)=>{
3
+ `;Y+="}",j.writeFileSync(H,Y,"utf8")}T.relativePath=G.split(b.sep).join("/"),this.atom.typesDir=`./types/${b.basename(K)}/src`}else{let H=b.join(K,"src","libs",`${T.id}.js`),G=T.doc.contents?.find((Y)=>Y.format==="esm")||T.doc;j.writeFileSync(H,G.content,"utf8")}}}async createEngine(){await this.setProgress({message:"Creating engine file."});let z={libs:this.libs.filter((G)=>G.type==="atom"),libraryAtom:this.atom,atom:this.atom},O=this.context.templateDir,T=aT.compile(j.readFileSync(b.resolve(O,b.join("src","default","engine.js.njk")),"utf8"),this.apiContext.njEnv).render(z),K=this.context.projectDir,H=b.resolve(K,b.join("src","default","index.js"));j.writeFileSync(H,T,"utf8")}async build(){try{if(this.fileMode){let $=this.apiContext.context.project;if(await this.createAtomLibFiles({libs:this.libs}),await this.createEngine(),await this.createProjectYaml(),await xT(this.apiContext),await QT(this.apiContext),await lT(this.apiContext),await GT(this.apiContext),await e(this.apiContext),await t(this.apiContext),$.runtime.type==="bun")await WT(this.apiContext);else await OT(this.apiContext);if(await a(this.apiContext),await YT(this.apiContext),await ZT(this.apiContext),this.buildMode){if(await HT(this.apiContext),await MT(this.apiContext),this.deployMode)await this.deploy()}}await this._cache_set(this.buildKey,{status:"COMPLETED"})}catch($){throw await this._cache_set(this.buildKey,{status:"FAILED",message:$.message||$}),console.log($),$}}}var N1=wT;export{N1 as default};
@@ -0,0 +1 @@
1
+ import{g as c}from"./index.22v7wtt0.js";import"./index.5qbcx2y3.js";import F from"@fnet/config";import o from"node:fs";import b from"@fnet/shelljs";import B from"@flownet/lib-render-templates-dir";import E from"node:path";var q=async({atom:y,params:n,config:V,src:i,dest:x})=>{if(n.name=n.name||"nextjs",n.entry=n.entry||"app/esm",n.id=n.id||"com.example.nextjs",n.version=n.version||"0.1.0",n.title=n.title||y?.doc?.title||n.name||y?.doc?.name||"NextJs App",n.package_name=n.package_name||n.name,n.author=n.author||y?.doc?.author||"Flownet",n.description=n.description||y?.doc?.description||"NextJs App built with Flownet",n.vendor=n.vendor||"flownet.ai",n.include_css=y?.doc?.features?.css_options?.extract===!0,n.bundle_name=y?.doc?.bundleName,n.package_dir=n.package_dir||`./.package/${n.name}`,n.package_dir=E.resolve(x,n.package_dir),o.existsSync(n.package_dir))o.rmSync(n.package_dir,{recursive:!0});if(n.out_dir=n.out_dir||`./.out/${n.name}`,n.out_dir=E.resolve(x,n.out_dir),o.existsSync(n.out_dir))o.rmSync(n.out_dir,{recursive:!0});let f=c("./template/deploy/to-nextjs");if(!o.existsSync(f))throw Error(`${f} doesn't exist`);if(!i||!o.existsSync(i))throw Error(`${i} doesn't exists`);let C=E.resolve(i,"./dist");if(!o.existsSync(C))throw Error(`${C} doesn't exists`);if(!x||!o.existsSync(x))throw Error(`${x} doesn't exists`);let g=E.resolve(x,n.out_dir);if(!o.existsSync(g))o.mkdirSync(g,{recursive:!0});let $=E.resolve(i,n.package_dir);if(!o.existsSync($))o.mkdirSync($,{recursive:!0});if(n.dependencies=n.dependencies||[],!n.dependencies.find((v)=>v.package==="next"))n.dependencies.push({package:"next",version:"^13.5"});if(!n.dependencies.find((v)=>v.package==="react"))n.dependencies.push({package:"react",version:"^18.2"});if(!n.dependencies.find((v)=>v.package==="react-dom"))n.dependencies.push({package:"react-dom",version:"^18.2"});await B({dir:f,outDir:g,context:{atom:y,params:n,config:V},copyUnmatchedAlso:!0});let N=await b(`cp -a ${C} ${g}`);if(N.code!==0)throw Error("Couldn't copy project dist files.");if(N=await b("npm install && npm run build",{cwd:g}),N.code!==0)throw Error("Couldn't build project.")};import z from"lodash.clonedeep";import G from"semver";async function H({atom:y,target:n,onProgress:V,projectDir:i,dependencies:x,context:f,yamlTarget:C}){if(V)await V({message:"Deploying it as nextjs package."});let $=n?.config?await F({name:n.config,dir:i,optional:!0,transferEnv:!1,tags:f.tags}):void 0,N=G.inc(n.version||"0.1.0","patch");n.params.version=N,n.version=N,C.set("version",N);let v=z(n.params);v.dependencies=z(x);let A={atom:y,params:v,config:$?.config,src:i,dest:i};return{deployer:await q(A)}}export{H as default};
@@ -0,0 +1 @@
1
+ import{g as Q}from"./index.22v7wtt0.js";import"./index.5qbcx2y3.js";import T from"@fnet/config";import y from"node:fs";import M from"@fnet/shelljs";import _ from"@flownet/lib-create-ios-icons";import g from"@flownet/lib-create-ios-launch-screens";import k from"@flownet/lib-render-templates-dir";import x from"node:path";import L from"@fnet/xcode-cert-inspector";var U=async({atom:w,params:n,config:q,src:A,dest:O})=>{let K=(await L()).find(($)=>$.certificateType==="Development"&&$.platforms.includes("iOS"))?.teamID;if(n.name=n.name||"ios-app",n.entry=n.entry||"app/ios",n.id=n.id||"com.example.ios-app",n.version=n.version||"0.1.0",n.title=n.title||w?.doc?.title||n.name||w?.doc?.name||"iOS App",n.package_name=n.package_name||n.name,n.author=n.author||w?.doc?.author||"Flownet",n.description=n.description||w?.doc?.description||"iOS App built with Flownet",n.vendor=n.vendor||"flownet.ai",n.include_css=w?.doc?.features?.css_options?.extract===!0,n.bundle_name=w?.doc?.bundleName,n.package_dir=n.package_dir||`./.package/${n.name}`,n.package_dir=x.resolve(O,n.package_dir),n.code_sign_identity=n.code_sign_identity||"Apple Development",n.code_sign_style=n.code_sign_style||"Automatic",n.development_team=n.development_team||K,n.provisioning_profile_specifier=n.provisioning_profile_specifier||"",n.product_bundle_identifier=n.product_bundle_identifier||n.id,n.product_name=n.product_name||n.name,y.existsSync(n.package_dir))y.rmSync(n.package_dir,{recursive:!0});if(n.out_dir=n.out_dir||`./.out/${n.name}`,n.out_dir=x.resolve(O,n.out_dir),y.existsSync(n.out_dir))y.rmSync(n.out_dir,{recursive:!0});let V=Q("./template/deploy/to-ios-app");if(!y.existsSync(V))throw Error(`${V} doesn't exist`);if(!A||!y.existsSync(A))throw Error(`${A} doesn't exists`);let E=x.resolve(A,"./dist");if(!y.existsSync(E))throw Error(`${E} doesn't exists`);if(!O||!y.existsSync(O))throw Error(`${O} doesn't exists`);let v=x.resolve(O,n.out_dir);if(!y.existsSync(v))y.mkdirSync(v,{recursive:!0});let z=x.resolve(A,n.package_dir);if(!y.existsSync(z))y.mkdirSync(z,{recursive:!0});await k({dir:V,outDir:v,context:{atom:w,params:n,config:q},copyUnmatchedAlso:!0});let B=x.resolve(v,"./fnet");if(!y.existsSync(B))y.mkdirSync(B,{recursive:!0});let F=await M(`cp -a ${E} ${B}`);if(F.code!==0)throw Error("Couldnt copy project dist files.");let X=x.resolve(v,"./fnet-ios-app/Assets.xcassets/AppIcon.appiconset");await _({text:n.id,dir:X,platform:"ios"});let Y=x.resolve(v,"./fnet-ios-app/Assets.xcassets/launch-images.imageset");await g({text:n.id,dir:Y,sizes:[{width:1242,height:2688},{width:1536,height:2048},{width:2048,height:1536}]});let Z=[{build:"Debug",sdk:"iphonesimulator"},{build:"Release",sdk:"iphoneos"}];for(let $ of Z){let N="xcodebuild";if(N+=" -project fnet-ios-app.xcodeproj",N+=" -scheme fnet-ios-app",N+=` -configuration ${$.build}`,N+=` -sdk ${$.sdk}`,N+=" -allowProvisioningUpdates",N+=" build",N+=" DSTROOT=./dist",N+=" SYMROOT=./dist",F=await M(`${N}`,{cwd:v}),F.code!==0)throw Error(`Couldn't build project: ${F.stderr}`)}};import W from"lodash.clonedeep";import J from"semver";async function P({atom:w,target:n,onProgress:q,projectDir:A,dependencies:O,context:G,yamlTarget:H}){if(q)await q({message:"Deploying it as ios-app package."});let V=n?.config?await T({name:n.config,dir:A,optional:!0,transferEnv:!1,tags:G.tags}):void 0,E=J.inc(n.version||"0.1.0","patch");n.params.version=E,n.version=E,H.set("version",E);let v=W(n.params);v.dependencies=W(O);let z={atom:w,params:v,config:V?.config,src:A,dest:A};return{deployer:await U(z)}}export{P as default};
@@ -0,0 +1 @@
1
+ import{f as _}from"./index.05n3mvs9.js";import{g as Z}from"./index.22v7wtt0.js";import"./index.5qbcx2y3.js";import A from"node:fs";import E from"node:path";import u from"semver";import Y from"@fnet/shelljs";import v from"@fnet/config";import w from"@fnet/object-from-schema";import b from"yaml";import{fileURLToPath as F}from"node:url";var h=E.dirname(F(import.meta.url)),m=process.cwd();async function T({atom:y,setProgress:$,context:B,deploymentProject:L,deploymentProjectTarget:z,yamlTarget:R}){await $({message:"Deploying it as npm package."});let G=B.projectDir,H=E.resolve(G,"package.json"),V=A.readFileSync(H),q=JSON.parse(V);q.name=z.params.name,q.version=u.inc(z.version,"patch");let I=z.params.bin?.name||z.params.bin;if(z.params.bin?.enabled!==!1&&I&&typeof I==="string")q.bin={[I]:"dist/cli/esm/index.js"};delete q.scripts,delete q.devDependencies,q.scripts={serve:"npx serve ."},A.writeFileSync(H,JSON.stringify(q,null,"\t"));let W=z.config||"npm",K=(await v({name:W,dir:B.projectDir,tags:B.tags,optional:!0}))?.data;if(!K){let M=Z("./template/schemas/to-npm.yaml"),X=await w({schema:M,tags:B.tags}),U=B.project.projectDir,Q=E.resolve(U,".fnet");if(!A.existsSync(Q))A.mkdirSync(Q);A.writeFileSync(E.resolve(Q,`${W}.fnet`),b.stringify(X)),K=X}if(A.writeFileSync(E.resolve(G,".npmrc"),`//registry.npmjs.org/:_authToken=${K.env.NPM_TOKEN}`),z.dryRun===!0)return;if(_("bun")){if((await Y("bun publish --access public",{cwd:G})).code!==0)throw Error("Couldnt publish to npm")}else if((await Y("npm publish --access public",{cwd:G})).code!==0)throw Error("Couldnt publish to npm");A.writeFileSync(H,V),L.isDirty=!0,z.version=q.version,R.set("version",q.version)}export{T as default};
@@ -0,0 +1 @@
1
+ import{g as K}from"./index.22v7wtt0.js";import"./index.5qbcx2y3.js";import Q from"@fnet/config";import w from"node:fs";import J from"@flownet/lib-render-templates-dir";import O from"@fnet/auto-conda-env";import $ from"node:path";var L=async({atom:I,params:o,config:G,src:q,dest:x})=>{if(o.name=o.name||"pyip",o.version=o.version||"0.1.0",o.package_name=o.package_name||o.name,o.bin_name=o.bin_name||o.package_name,o.package_dir=o.package_dir||`./.package/${o.name}`,o.package_dir=$.resolve(x,o.package_dir),o.dependencies=o.dependencies||[],w.existsSync(o.package_dir))w.rmSync(o.package_dir,{recursive:!0});if(o.out_dir=o.out_dir||`./.out/${o.name}`,o.out_dir=$.resolve(x,o.out_dir),w.existsSync(o.out_dir))w.rmSync(o.out_dir,{recursive:!0});let C=K("./template/deploy/to-pyip");if(!w.existsSync(C))throw Error(`${C} doesn't exist`);if(!q||!w.existsSync(q))throw Error(`${q} doesn't exists`);if(!x||!w.existsSync(x))throw Error(`${x} doesn't exists`);let F=$.resolve($.join(q,"src","default"));if(!w.existsSync(F))throw Error(`${F} doesn't exists`);let V=$.resolve(x,o.out_dir);if(!w.existsSync(V))w.mkdirSync(V,{recursive:!0});let H=$.resolve(q,o.package_dir);if(!w.existsSync(H))w.mkdirSync(H,{recursive:!0});let B={atom:I,params:o,config:G};await J({dir:C,outDir:V,context:B,unmatched:!0});let z=$.resolve(V,"package");if(!w.existsSync(z))w.mkdirSync(z,{recursive:!0});await J({dir:F,outDir:$.join(z,"lib"),context:B,unmatched:!0,ignore:["__pycache__/**","__init__.py"],follow:!0}),w.renameSync(z,$.resolve(V,o.package_name)),z=$.resolve(V,o.package_name);let N=await O({pythonVersion:"3.12",packages:[{package:"twine"}]}),y;if(y=await N.runBin("pip",["install","-e","."],{wdir:V}),y?.errors)throw Error(y.errors.format());if(y=await N.runBin("pip",["show","-f",o.package_name]),y?.errors)throw Error(y.errors.format());if(y=await N.runBin("pip",["list"]),y?.errors)throw Error(y.errors.format());if(y=await N.runBin(o.bin_name,["--help"]),y?.errors)throw Error(y.errors.format());if(y=await N.runCode(`from ${o.package_name}.lib import default; print(default);`),y?.errors)throw Error(y.errors.format());if(y=await N.runCode(`from ${o.package_name} import default; print(default);`),y?.errors)throw Error(y.errors.format());if(y=await N.runCode(`from ${o.package_name} import main; print(main);`),y?.errors)throw Error(y.errors.format());if(y=await N.runBin("pip",["uninstall",o.package_name,"-y"]),y?.errors)throw Error(y.errors.format());if(y=await N.runFile($.join(V,"setup.py"),["sdist","bdist_wheel"],{wdir:V}),y?.errors)throw Error(y.errors.format());if(y=await N.runBin("twine",["upload","dist/*"],{wdir:V}),y?.errors)throw Error(y.errors.format())};import M from"lodash.clonedeep";import U from"semver";async function W({atom:I,target:o,onProgress:G,projectDir:q,dependencies:x,context:C,yamlTarget:F}){if(G)await G({message:"Deploying it as pypi package."});let H=o?.config?await Q({name:o.config,dir:q,optional:!0,transferEnv:!1,tags:C.tags}):void 0,B=U.inc(o.version||"0.1.0","patch");o.params.version=B,o.version=B,F.set("version",B);let z=M(o.params);z.dependencies=M(x);let N={atom:I,params:z,config:H?.config,src:q,dest:q};return{deployer:await L(N)}}export{W as default};
@@ -0,0 +1 @@
1
+ import{g as z}from"./index.22v7wtt0.js";import"./index.5qbcx2y3.js";import H from"@fnet/config";import o from"node:fs";import q from"@fnet/shelljs";import C from"@flownet/lib-render-templates-dir";import G from"@flownet/lib-create-ios-icons";import W from"node:path";var A=async({atom:w,params:n,config:V,src:b,dest:y})=>{if(n.name=n.name||"webos",n.entry=n.entry||"app/webos",n.id=n.id||"com.example.webos",n.title=n.title||w?.doc?.title||n.name||w?.doc?.name||"WebOS App",n.version=n.version||"0.1.0",n.vendor=n.vendor||"flownet.ai",n.include_css=w?.doc?.features?.css_options?.extract===!0,n.bundle_name=w?.doc?.bundleName,n.package_name=n.package_name||n.name,n.author=n.author||w?.doc?.author||"Flownet",n.description=n.description||w?.doc?.description||"WebOS App built with Flownet",n.package_dir=n.package_dir||`./.package/${n.name}`,n.package_dir=W.resolve(y,n.package_dir),o.existsSync(n.package_dir))o.rmSync(n.package_dir,{recursive:!0});if(n.out_dir=n.out_dir||`./.out/${n.name}`,n.out_dir=W.resolve(y,n.out_dir),o.existsSync(n.out_dir))o.rmSync(n.out_dir,{recursive:!0});let g=z("./template/deploy/to-webos");if(!o.existsSync(g))throw Error(`${g} doesn't exist`);if(!b||!o.existsSync(b))throw Error(`${b} doesn't exists`);let E=W.resolve(b,"./dist");if(!o.existsSync(E))throw Error(`${E} doesn't exists`);if(!y||!o.existsSync(y))throw Error(`${y} doesn't exists`);let v=W.resolve(y,n.out_dir);if(!o.existsSync(v))o.mkdirSync(v,{recursive:!0});await C({dir:g,outDir:v,context:{atom:w,params:n,config:V},copyUnmatchedAlso:!0});let x=await q(`cp -a ${E} ${v}`);if(x.code!==0)throw Error("Couldnt copy dist files.");let N=W.resolve(y,n.package_dir);if(!o.existsSync(N))o.mkdirSync(N,{recursive:!0});let $=W.resolve(v,"./");await G({text:n.id,dir:$,sizes:[80,130]});let f={...process.env};if(delete f.NODE_OPTIONS,x=await q(`ares-package '${v}' --outdir='${N}' --no-minify`,{cwd:y,env:f}),x.code!==0)throw Error(x.stderr);else console.log(x.stdout)};import B from"lodash.clonedeep";import K from"semver";async function L({atom:w,target:n,onProgress:V,projectDir:b,dependencies:y,context:g,yamlTarget:E}){if(V)await V({message:"Deploying it as webos package."});let x=n?.config?await H({name:n.config,dir:b,optional:!0,transferEnv:!1,tags:g.tags}):void 0,N=K.inc(n.version||"0.1.0","patch");n.params.version=N,n.version=N,E.set("version",N);let $=B(n.params);$.dependencies=B(y);let f={atom:w,params:$,config:x?.config,src:b,dest:b};return{deployer:await A(f)}}export{L as default};
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env node
2
2
  import w from"yargs";import{hideBin as T}from"yargs/helpers";import{ProcessManager as Y}from"@fnet/shell-flow";import $ from"fs";import O from"path";import Z from"chalk";import S from"@fnet/yaml";import C,{ProcessManager as y}from"@fnet/shell-flow";import H from"os";function L(I=[]){let q=[...I],D=H.platform(),J=H.arch();if(!q.includes(D))q.push(D);if(!q.includes(J))q.push(J);return q}async function G({projectType:I,group:q,tags:D,args:J,argv:U,processManager:W}){try{let Q=await b(I);D=L(D);let{parsed:_}=await S({file:Q.path,tags:D}),X=_.commands;if(!X)throw Error(`Commands section not found in ${Q.name}`);let V=X[q];if(!V)throw Error(`Command group '${q}' not found in ${Q.name}`);await C({commands:V,context:{args:J,argv:U,projectType:Q.type},processManager:W})}catch(Q){console.error(`Error: ${Q.message}`),process.exit(1)}}async function N({projectType:I,tags:q}){try{let D=await b(I),{parsed:J}=await S({file:D.path,tags:q}),U=J.commands;if(!U){console.log(Z.yellow(`No commands found in ${D.name}`));return}console.log(`
3
3
  ${Z.bold("Available commands")} ${Z.dim(`(${D.name})`)}:
4
- `);let W=Object.entries(U),Q=Math.max(...W.map(([X])=>X.length)),_=!1;for(let[X,V]of W){let R=V&&typeof V==="object"&&!Array.isArray(V),A=R?V.description||"":"",z=R?V.usage||"":"",B=!!(A||z);if(B&&_)console.log("");let E=X.padEnd(Q);if(B){if(console.log(` ${Z.bold.cyan(E)} ${A}`),z)console.log(` ${"".padEnd(Q)} ${Z.dim("$ "+z)}`)}else console.log(` ${Z.cyan(E)}`);_=B}}catch(D){console.error(`Error: ${D.message}`),process.exit(1)}}async function b(I){let q=process.cwd(),D=O.resolve(q,"fnode.yaml"),J=O.resolve(q,"fnet.yaml");if(I==="fnode"){if($.existsSync(D))return{path:D,name:"fnode.yaml",type:"fnode"};throw Error("fnode.yaml file not found in current directory")}if(I==="fnet"){if($.existsSync(J))return{path:J,name:"fnet.yaml",type:"fnet"};throw Error("fnet.yaml file not found in current directory")}if($.existsSync(D))return{path:D,name:"fnode.yaml",type:"fnode"};if($.existsSync(J))return{path:J,name:"fnet.yaml",type:"fnet"};throw Error("No project file (fnode.yaml or fnet.yaml) found in current directory")}function K({processManager:I}){return{command:"$0 [group] [options..]",describe:"Run a command group from project file",builder:(q)=>{return q.parserConfiguration({}).middleware((D)=>{let J=/^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)+$/;Object.keys(D).forEach((U)=>{if(J.test(U)){let W=U.replace(/-/g,"_");D[W]=D[U]}})}).positional("group",{type:"string",describe:"Command group to run"}).option("list",{type:"boolean",describe:"List all available command groups",alias:"l"}).option("ftag",{type:"array",describe:"Tags for conditional configuration"}).example("$0 build","Run the build command group").example("$0 --list","List all available command groups").example("$0 test --ftag dev","Run the test command group with dev tag")},handler:async(q)=>{try{if(q.list){await N({projectType:"auto",tags:q.ftag});return}if(!q.group)console.error("Error: Please specify a command group or use --list to see available commands."),process.exit(1);await G({projectType:"auto",group:q.group,tags:q.ftag,args:q,argv:process.argv,processManager:I})}catch(D){console.error(`Error: ${D.message}`),await I.dispose(),process.exit(1)}}}}var x=new Y;w(T(process.argv)).scriptName("frun").usage("Usage: $0 <command> [options]").command(K({processManager:x})).help().version("1.12.0").fail(async(I,q)=>{if(q)console.error(`Error: ${q.message}`);else if(I)console.error(`Error: ${I}`);await x.dispose(),process.exit(1)}).parse();
4
+ `);let W=Object.entries(U),Q=Math.max(...W.map(([X])=>X.length)),_=!1;for(let[X,V]of W){let R=V&&typeof V==="object"&&!Array.isArray(V),A=R?V.description||"":"",z=R?V.usage||"":"",B=!!(A||z);if(B&&_)console.log("");let E=X.padEnd(Q);if(B){if(console.log(` ${Z.bold.cyan(E)} ${A}`),z)console.log(` ${"".padEnd(Q)} ${Z.dim("$ "+z)}`)}else console.log(` ${Z.cyan(E)}`);_=B}}catch(D){console.error(`Error: ${D.message}`),process.exit(1)}}async function b(I){let q=process.cwd(),D=O.resolve(q,"fnode.yaml"),J=O.resolve(q,"fnet.yaml");if(I==="fnode"){if($.existsSync(D))return{path:D,name:"fnode.yaml",type:"fnode"};throw Error("fnode.yaml file not found in current directory")}if(I==="fnet"){if($.existsSync(J))return{path:J,name:"fnet.yaml",type:"fnet"};throw Error("fnet.yaml file not found in current directory")}if($.existsSync(D))return{path:D,name:"fnode.yaml",type:"fnode"};if($.existsSync(J))return{path:J,name:"fnet.yaml",type:"fnet"};throw Error("No project file (fnode.yaml or fnet.yaml) found in current directory")}function K({processManager:I}){return{command:"$0 [group] [options..]",describe:"Run a command group from project file",builder:(q)=>{return q.parserConfiguration({}).middleware((D)=>{let J=/^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)+$/;Object.keys(D).forEach((U)=>{if(J.test(U)){let W=U.replace(/-/g,"_");D[W]=D[U]}})}).positional("group",{type:"string",describe:"Command group to run"}).option("list",{type:"boolean",describe:"List all available command groups",alias:"l"}).option("ftag",{type:"array",describe:"Tags for conditional configuration"}).example("$0 build","Run the build command group").example("$0 --list","List all available command groups").example("$0 test --ftag dev","Run the test command group with dev tag")},handler:async(q)=>{try{if(q.list){await N({projectType:"auto",tags:q.ftag});return}if(!q.group)console.error("Error: Please specify a command group or use --list to see available commands."),process.exit(1);await G({projectType:"auto",group:q.group,tags:q.ftag,args:q,argv:process.argv,processManager:I})}catch(D){console.error(`Error: ${D.message}`),await I.dispose(),process.exit(1)}}}}var x=new Y;w(T(process.argv)).scriptName("frun").usage("Usage: $0 <command> [options]").command(K({processManager:x})).help().version("1.14.0").fail(async(I,q)=>{if(q)console.error(`Error: ${q.message}`);else if(I)console.error(`Error: ${I}`);await x.dispose(),process.exit(1)}).parse();
@@ -15,5 +15,5 @@ ${z}
15
15
  `).filter((T)=>T.includes("=")).reduce((T,E)=>{let[z,...K]=E.split("=");return T[z.trim()]=K.join("=").trim(),T},{})}}},workingDir:{type:"string",description:"Working directory","x-prompt":{type:"input",message:"Enter working directory (optional):"}},autoStart:{type:"boolean",description:"Start on boot",default:!1,"x-prompt":{type:"confirm",message:"Start service on boot?",initial:!1}},restartOnFailure:{type:"boolean",description:"Restart on failure",default:!0,"x-prompt":{type:"confirm",message:"Restart service on failure?",initial:!0}},system:{type:"boolean",description:"System service",default:!0,"x-prompt":{type:"confirm",message:"Register as system service?",initial:!0}},user:{type:"string",description:"User to run the service as","x-prompt":{type:"input",message:"Enter user to run the service as (optional):"}},instances:{type:"integer",description:"Number of instances to run",default:1,minimum:1,"x-prompt":{type:"number",message:"Enter number of instances to run:",initial:1}},metadata:{type:"object",additionalProperties:!0,description:"Custom metadata"}}}}var h={getServiceManifestSchema:j$};import p from"chalk";import E$ from"@fnet/prompt";async function D$($){let{items:_,message:Y,nameField:T="name",valueField:E="name",initialValue:z=null,allowAbort:K=!0}=$;if(!_||_.length===0)return console.log(p.yellow("No items available for selection.")),null;if(_.length===1&&!K){let q=_[0],P=typeof q==="string"?q:q[E];return console.log(p.blue(`Only one option available: ${typeof q==="string"?q:q[T]}`)),P}let Q=_.map((q)=>{if(typeof q==="string")return{name:q,value:q,message:q};else return{name:q[E],value:q[E],message:q[T]||q[E]}});if(K)Q.push({name:"cancel",value:null,message:p.yellow("Cancel")});let G=null;if(z){let q=Q.findIndex((P)=>P.name===z);if(q!==-1)G=q}let O="selectedItem",{[O]:M}=await E$({type:"select",name:O,message:Y,choices:Q,initial:G});if(M==="cancel")return null;return M}async function P$($){let{items:_,message:Y,nameField:T="name",valueField:E="name",initialValues:z=[],allowAbort:K=!0}=$;if(!_||_.length===0)return console.log(p.yellow("No items available for selection.")),null;let Q=_.map((q)=>{if(typeof q==="string")return{name:q,value:q,message:q};else return{name:q[E],value:q[E],message:q[T]||q[E]}}),G=[];if(z&&z.length>0)G=Q.map((q,P)=>z.includes(q.name)?P:-1).filter((q)=>q!==-1);let O="selectedItems",M=await E$({type:"multiselect",name:O,message:Y,choices:Q,initial:G,hint:"(Use space to select, enter to confirm)",validate:(q)=>{if(q.length===0&&!K)return"Please select at least one item";return!0}});if(K&&M[O].length===0)return null;return M[O]}var w={promptForSelection:D$,promptForMultipleSelection:P$};var b$={command:"manifest <subcommand>",describe:"Manage service manifests",builder:($)=>{return $.command({command:"create",describe:"Create a new service manifest",builder:(_)=>{return _.option("name",{describe:"Service manifest name",type:"string"}).option("output",{describe:"Output file path",type:"string",alias:"o"})},handler:S$}).command({command:"list",describe:"List service manifests",builder:(_)=>{return _.option("format",{describe:"Output format",type:"string",choices:["json","text","table"],default:"table"})},handler:N$}).command({command:"show [n]",describe:"Show service manifest details",builder:(_)=>{return _.positional("name",{describe:"Service manifest name",type:"string",demandOption:!1}).option("format",{describe:"Output format",type:"string",choices:["json","yaml"],default:"yaml"})},handler:y$}).command({command:"edit [n]",describe:"Edit a service manifest",builder:(_)=>{return _.positional("name",{describe:"Service manifest name",type:"string",demandOption:!1})},handler:u$}).command({command:"delete [n]",describe:"Delete a service manifest",builder:(_)=>{return _.positional("name",{describe:"Service manifest name",type:"string",demandOption:!1}).option("force",{describe:"Force deletion without confirmation",type:"boolean",default:!1,alias:"f"})},handler:k$}).command({command:"validate [n]",describe:"Validate a service manifest",builder:(_)=>{return _.positional("name",{describe:"Service manifest name",type:"string",demandOption:!1})},handler:d$}).demandCommand(1,"You need to specify a subcommand")},handler:()=>{}};async function S$($){try{let _=await I($),Y=h.getServiceManifestSchema(),T=await J$({schema:Y,format:"yaml"});console.log("Result from fnetObjectFromSchema:",T);let E;if(typeof T==="string")try{E=(await import("yaml")).default.parse(T)}catch(Q){console.warn(X.yellow(`Failed to parse YAML: ${Q.message}`)),E={name:"service-"+Date.now()}}else if(T&&typeof T==="object")E=T.data||T;else E={name:"service-"+Date.now()};console.log("Generated manifest:",E);let z=$.name||(E&&E.name?E.name:"service-"+Date.now());if(J.servicManifestExists(z)&&!$.force){let{confirmOverwrite:Q}=await K$({type:"confirm",name:"confirmOverwrite",message:`Service manifest '${z}' already exists. Overwrite?`,initial:!1});if(!Q){console.log(X.yellow("Operation cancelled."));return}}if(J.saveServiceManifest(z,E))console.log(X.green(`Service manifest '${z}' created successfully.`)),console.log(X.blue(`Location: ${J.getServiceManifestPath(z)}`));else console.error(X.red(`Failed to create service manifest '${z}'.`))}catch(_){console.error(X.red(`Error: ${_.message}`)),process.exit(1)}}async function N$($){try{let _=await I($),Y=J.listServiceManifests();if(Y.length===0){console.log(X.yellow("No service manifests found."));return}if($.format==="json")console.log(JSON.stringify(Y,null,2));else if($.format==="text")Y.forEach((T)=>console.log(T));else{console.log(X.bold(`
16
16
  Service Definitions:`));let T=(await import("./index.ezmyhtvd.js")).default,E=["NAME","BINARY","DESCRIPTION"],z=T.createTable(E,{chars:{mid:"","mid-mid":"","left-mid":"","right-mid":""}});for(let K of Y){let Q=J.loadServiceManifest(K);if(Q)z.push([X.white(K),X.cyan(Q.binary||"undefined"),Q.description||""])}console.log(z.toString()),console.log(`Total: ${Y.length} manifest(s)`)}}catch(_){console.error(X.red(`Error: ${_.message}`)),process.exit(1)}}async function y$($){try{let _=await I($);if(!$.name){let T=J.listServiceManifests();if(T.length===0){console.log(X.yellow("No service manifests found."));return}let E=await w.promptForSelection({items:T,message:"Select a service manifest to show:",allowAbort:!0});if(E===null){console.log(X.yellow("Operation cancelled."));return}$.name=E}let Y=J.loadServiceManifest($.name);if(!Y)console.error(X.red(`Service manifest '${$.name}' not found.`)),process.exit(1);if($.format==="json")console.log(JSON.stringify(Y,null,2));else{let T=(await import("yaml")).default;console.log(T.stringify(Y))}}catch(_){console.error(X.red(`Error: ${_.message}`)),process.exit(1)}}async function u$($){try{let _=await I($);if(!$.name){let Q=J.listServiceManifests();if(Q.length===0){console.log(X.yellow("No service manifests found."));return}let G=await w.promptForSelection({items:Q,message:"Select a service manifest to edit:",allowAbort:!0});if(G===null){console.log(X.yellow("Operation cancelled."));return}$.name=G}let Y=J.loadServiceManifest($.name);if(!Y)console.error(X.red(`Service manifest '${$.name}' not found.`)),process.exit(1);let T=h.getServiceManifestSchema(),z=(await J$({schema:T,ref:Y,format:"yaml"})).data;if(J.saveServiceManifest($.name,z))console.log(X.green(`Service manifest '${$.name}' updated successfully.`));else console.error(X.red(`Failed to update service manifest '${$.name}'.`))}catch(_){console.error(X.red(`Error: ${_.message}`)),process.exit(1)}}async function k$($){try{let _=await I($);if(!$.name){let T=J.listServiceManifests();if(T.length===0){console.log(X.yellow("No service manifests found."));return}let E=await w.promptForSelection({items:T,message:"Select a service manifest to delete:",allowAbort:!0});if(E===null){console.log(X.yellow("Operation cancelled."));return}$.name=E}if(!J.servicManifestExists($.name))console.error(X.red(`Service manifest '${$.name}' not found.`)),process.exit(1);if(!$.force){let{confirmDelete:T}=await K$({type:"confirm",name:"confirmDelete",message:`Are you sure you want to delete service manifest '${$.name}'?`,initial:!1});if(!T){console.log(X.yellow("Operation cancelled."));return}}if(J.deleteServiceManifest($.name))console.log(X.green(`Service manifest '${$.name}' deleted successfully.`));else console.error(X.red(`Failed to delete service manifest '${$.name}'.`))}catch(_){console.error(X.red(`Error: ${_.message}`)),process.exit(1)}}async function d$($){try{let _=await I($);if(!$.name){let E=J.listServiceManifests();if(E.length===0){console.log(X.yellow("No service manifests found."));return}let z=await w.promptForSelection({items:E,message:"Select a service manifest to validate:",allowAbort:!0});if(z===null){console.log(X.yellow("Operation cancelled."));return}$.name=z}let Y=J.loadServiceManifest($.name);if(!Y)console.error(X.red(`Service manifest '${$.name}' not found.`)),process.exit(1);let T=J.validateServiceManifest(Y);if(T.valid)console.log(X.green(`Service manifest '${$.name}' is valid.`));else console.error(X.red(`Service manifest '${$.name}' is invalid:`)),T.errors.forEach((E)=>{console.error(X.red(`- ${E}`))}),process.exit(1)}catch(_){console.error(X.red(`Error: ${_.message}`)),process.exit(1)}}var Q$=b$;import B from"chalk";var p$={command:"register",describe:"Register a service manifest as a system service",builder:($)=>{return $.option("manifest",{describe:"Service manifest name",type:"string",demandOption:!1,alias:"d"}).option("start",{describe:"Start the service after registration",type:"boolean",default:!1})},handler:async($)=>{try{let _=await I($),Y=$.manifest;if(!Y){let E=J.listServiceManifests();if(E.length===0)console.log(B.yellow('No service manifests found. Create one first using "fservice manifest create".')),process.exit(1);if(Y=await w.promptForSelection({items:E,message:"Select a service manifest to register:",allowAbort:!0}),!Y){console.log(B.yellow("Operation cancelled."));return}}if(!J.servicManifestExists(Y))console.error(B.red(`Service manifest '${Y}' not found.`)),process.exit(1);console.log(B.blue(`Registering service from manifest '${Y}'...`));let T=await J.registerService(Y);if(console.log(B.green(`Service '${T.name}' registered successfully.`)),$.start){console.log(B.blue(`Starting service '${T.name}'...`));let E=(await import("@fnet/service")).default;try{await E({action:"start",name:T.name}),console.log(B.green(`Service '${T.name}' started successfully.`));let z=J.loadServiceMetadata();if(z.services[T.name])z.services[T.name].status="running",z.services[T.name].lastStarted=new Date().toISOString(),J.saveServiceMetadata(z)}catch(z){console.error(B.red(`Failed to start service: ${z.message}`))}}}catch(_){console.error(B.red(`Error: ${_.message}`)),process.exit(1)}}},W$=p$;import H from"chalk";import g$ from"@fnet/prompt";var f$={command:"unregister",describe:"Unregister a service from the system",builder:($)=>{return $.option("name",{describe:"Service name",type:"string",demandOption:!1,alias:"n"}).option("keep-manifest",{describe:"Keep the service manifest",type:"boolean",default:!0}).option("force",{describe:"Force unregistration without confirmation",type:"boolean",default:!1,alias:"f"})},handler:async($)=>{try{let _=await I($),Y=J.loadServiceMetadata(),T=$.name;if(!T){let z=Object.keys(Y.services);if(z.length===0)console.log(H.yellow("No registered services found.")),process.exit(1);if(T=await w.promptForSelection({items:z,message:"Select a service to unregister:",allowAbort:!0}),!T){console.log(H.yellow("Operation cancelled."));return}}if(!Y.services[T])console.error(H.red(`Service '${T}' not found in metadata.`)),process.exit(1);if(!$.force){let{confirmUnregister:z}=await g$({type:"confirm",name:"confirmUnregister",message:`Are you sure you want to unregister service '${T}'?`,initial:!1});if(!z){console.log(H.yellow("Operation cancelled."));return}}console.log(H.blue(`Unregistering service '${T}'...`));let E=(await import("@fnet/service")).default;try{let z=Y.services[T].manifest,K=J.loadServiceManifest(z);if(!K)throw Error(`Service manifest '${z}' not found`);let Q=K.system!==!1;try{await E({action:"stop",name:T,system:Q}),console.log(H.blue(`Service '${T}' stopped.`))}catch(G){console.warn(H.yellow(`Warning: Failed to stop service: ${G.message}`))}if(await E({action:"unregister",name:T,system:Q}),console.log(H.green(`Service '${T}' unregistered successfully.`)),delete Y.services[T],J.saveServiceMetadata(Y),!$.keepDefinition&&z){if(J.servicManifestExists(z))if(J.deleteServiceManifest(z))console.log(H.green(`Service manifest '${z}' deleted.`));else console.warn(H.yellow(`Warning: Failed to delete service manifest '${z}'.`))}}catch(z){console.error(H.red(`Failed to unregister service: ${z.message}`)),process.exit(1)}}catch(_){console.error(H.red(`Error: ${_.message}`)),process.exit(1)}}},X$=f$;import x from"chalk";var h$={command:"start",describe:"Start a registered service",builder:($)=>{return $.option("name",{describe:"Service name",type:"string",demandOption:!1,alias:"n"})},handler:async($)=>{try{let _=await I($),Y=J.loadServiceMetadata(),T=$.name;if(!T){let z=Object.keys(Y.services);if(z.length===0)console.log(x.yellow("No registered services found.")),process.exit(1);if(T=await w.promptForSelection({items:z,message:"Select a service to start:",allowAbort:!0}),!T){console.log(x.yellow("Operation cancelled."));return}}if(!Y.services[T])console.error(x.red(`Service '${T}' not found in metadata.`)),process.exit(1);console.log(x.blue(`Starting service '${T}'...`));let E=(await import("@fnet/service")).default;try{let z=Y.services[T].manifest,K=J.loadServiceManifest(z);if(!K)throw Error(`Service manifest '${z}' not found`);await E({action:"start",name:T,system:K.system!==!1}),console.log(x.green(`Service '${T}' started successfully.`)),Y.services[T].status="running",Y.services[T].lastStarted=new Date().toISOString(),J.saveServiceMetadata(Y)}catch(z){console.error(x.red(`Failed to start service: ${z.message}`)),process.exit(1)}}catch(_){console.error(x.red(`Error: ${_.message}`)),process.exit(1)}}},Z$=h$;import F from"chalk";var o$={command:"stop",describe:"Stop a running service",builder:($)=>{return $.option("name",{describe:"Service name",type:"string",demandOption:!1,alias:"n"})},handler:async($)=>{try{let _=await I($),Y=J.loadServiceMetadata(),T=$.name;if(!T){let z=Object.keys(Y.services);if(z.length===0)console.log(F.yellow("No registered services found.")),process.exit(1);if(T=await w.promptForSelection({items:z,message:"Select a service to stop:",allowAbort:!0}),!T){console.log(F.yellow("Operation cancelled."));return}}if(!Y.services[T])console.error(F.red(`Service '${T}' not found in metadata.`)),process.exit(1);console.log(F.blue(`Stopping service '${T}'...`));let E=(await import("@fnet/service")).default;try{let z=Y.services[T].manifest,K=J.loadServiceManifest(z);if(!K)throw Error(`Service manifest '${z}' not found`);await E({action:"stop",name:T,system:K.system!==!1}),console.log(F.green(`Service '${T}' stopped successfully.`)),Y.services[T].status="stopped",Y.services[T].lastStopped=new Date().toISOString(),J.saveServiceMetadata(Y)}catch(z){console.error(F.red(`Failed to stop service: ${z.message}`)),process.exit(1)}}catch(_){console.error(F.red(`Error: ${_.message}`)),process.exit(1)}}},q$=o$;import U from"chalk";var v$={command:"restart",describe:"Restart a service",builder:($)=>{return $.option("name",{describe:"Service name",type:"string",demandOption:!1,alias:"n"})},handler:async($)=>{try{let _=await I($),Y=J.loadServiceMetadata(),T=$.name;if(!T){let z=Object.keys(Y.services);if(z.length===0)console.log(U.yellow("No registered services found.")),process.exit(1);if(T=await w.promptForSelection({items:z,message:"Select a service to restart:",allowAbort:!0}),!T){console.log(U.yellow("Operation cancelled."));return}}if(!Y.services[T])console.error(U.red(`Service '${T}' not found in metadata.`)),process.exit(1);console.log(U.blue(`Restarting service '${T}'...`));let E=(await import("@fnet/service")).default;try{await E({action:"stop",name:T}),console.log(U.blue(`Service '${T}' stopped.`)),await E({action:"start",name:T}),console.log(U.green(`Service '${T}' restarted successfully.`)),Y.services[T].status="running",Y.services[T].lastRestarted=new Date().toISOString(),J.saveServiceMetadata(Y)}catch(z){console.error(U.red(`Failed to restart service: ${z.message}`)),process.exit(1)}}catch(_){console.error(U.red(`Error: ${_.message}`)),process.exit(1)}}},I$=v$;import L from"chalk";var l$={command:"status",describe:"Check the status of a service",builder:($)=>{return $.option("name",{describe:"Service name",type:"string",demandOption:!1,alias:"n"}).option("format",{describe:"Output format",type:"string",choices:["json","text","table"],default:"table"})},handler:async($)=>{try{let _=await I($),Y=J.loadServiceMetadata(),T=$.name;if(!T){let z=Object.keys(Y.services);if(z.length===0)console.log(L.yellow("No registered services found.")),process.exit(1);if(T=await w.promptForSelection({items:z,message:"Select a service to check status:",allowAbort:!0}),!T){console.log(L.yellow("Operation cancelled."));return}}if(!Y.services[T])console.error(L.red(`Service '${T}' not found in metadata.`)),process.exit(1);console.log(L.blue(`Checking status of service '${T}'...`));let E=(await import("@fnet/service")).default;try{let z=Y.services[T].manifest,K=J.loadServiceManifest(z);if(!K)throw Error(`Service manifest '${z}' not found`);let Q=await E({action:"status",name:T,system:K.system!==!1});if(console.log(L.green(`Service '${T}' status: ${Q}`)),Y.services[T].status=Q||"unknown",Y.services[T].lastChecked=new Date().toISOString(),J.saveServiceMetadata(Y),$.format==="json")console.log(JSON.stringify({name:T,status:Q||"unknown",manifest:z,binary:Y.services[T].binary},null,2));else if($.format==="text")console.log(`Name: ${T}`),console.log(`Status: ${Q||"unknown"}`),console.log(`Definition: ${z}`),console.log(`Binary: ${Y.services[T].binary}`);else console.log(L.bold(`
17
17
  Service Status:`)),console.log(L.bold("─".repeat(50))),console.log(`${L.bold("Name:")} ${T}`),console.log(`${L.bold("Status:")} ${n$(Q)(Q||"unknown")}`),console.log(`${L.bold("Definition:")} ${z}`),console.log(`${L.bold("Binary:")} ${Y.services[T].binary}`),console.log(L.bold("─".repeat(50)))}catch(z){console.error(L.red(`Failed to check service status: ${z.message}`)),process.exit(1)}}catch(_){console.error(L.red(`Error: ${_.message}`)),process.exit(1)}}};function n$($){switch($){case"running":return L.green;case"stopped":return L.yellow;case"failed":return L.red;default:return L.gray}}var G$=l$;import N from"chalk";var m$={command:"list",describe:"List all registered services",builder:($)=>{return $.option("binary",{describe:"Filter by binary name",type:"string",alias:"b"}).option("status",{describe:"Filter by status",type:"string",choices:["running","stopped","failed","unknown"],alias:"s"}).option("format",{describe:"Output format",type:"string",choices:["json","text","table"],default:"table"})},handler:async($)=>{try{let _=await I($),Y=J.loadServiceMetadata(),T=Object.entries(Y.services).map(([E,z])=>({name:E,...z}));if($.binary)T=T.filter((E)=>E.binary===$.binary);if($.status)T=T.filter((E)=>E.status===$.status);if(T.length===0){console.log(N.yellow("No services found."));return}if($.format==="json")console.log(JSON.stringify(T,null,2));else if($.format==="text")T.forEach((E)=>{console.log(`${E.name} (${E.status||"unknown"})`)});else{let E=["NAME","STATUS","BINARY","DEFINITION"],z=o.createTable(E,{chars:{mid:"","mid-mid":"","left-mid":"","right-mid":""}});T.forEach((K)=>{let Q=o.getStatusColor(K.status);z.push([N.white(K.name),Q(K.status||"unknown"),N.cyan(K.binary),K.manifest])}),console.log(N.bold(`
18
- Registered Services:`)),console.log(z.toString()),console.log(`Total: ${T.length} service(s)`)}}catch(_){console.error(N.red(`Error: ${_.message}`)),process.exit(1)}}},R$=m$;var w_=c$(r$(process.argv)).scriptName("fservice").usage("Usage: $0 <command> [options]").version("1.12.0").command(Q$).command(W$).command(X$).command(Z$).command(q$).command(I$).command(G$).command(R$).demandCommand(1,"You need to specify a command").strict().help().alias("h","help").alias("v","version").fail(($,_,Y)=>{if(_)console.error(v.red(`Error: ${_.message}`)),console.error(_);else console.error(v.red(`Error: ${$}`));console.error(v.yellow(`
18
+ Registered Services:`)),console.log(z.toString()),console.log(`Total: ${T.length} service(s)`)}}catch(_){console.error(N.red(`Error: ${_.message}`)),process.exit(1)}}},R$=m$;var w_=c$(r$(process.argv)).scriptName("fservice").usage("Usage: $0 <command> [options]").version("1.14.0").command(Q$).command(W$).command(X$).command(Z$).command(q$).command(I$).command(G$).command(R$).demandCommand(1,"You need to specify a command").strict().help().alias("h","help").alias("v","version").fail(($,_,Y)=>{if(_)console.error(v.red(`Error: ${_.message}`)),console.error(_);else console.error(v.red(`Error: ${$}`));console.error(v.yellow(`
19
19
  Usage:`),Y.help()),process.exit(1)}).parse();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fnet/cli",
3
- "version": "1.13.0",
3
+ "version": "1.14.1",
4
4
  "files": [
5
5
  "dist",
6
6
  "template",
@@ -28,13 +28,9 @@
28
28
  "@flownet/lib-is-redis-online": "^0.1.15",
29
29
  "@flownet/lib-parse-imports-js": "0.4.6",
30
30
  "@flownet/lib-parse-node-url": "^0.1.18",
31
+ "@flownet/lib-create-ios-icons": "^0.2.3",
32
+ "@flownet/lib-create-ios-launch-screens": "^0.2.3",
31
33
  "@flownet/lib-render-templates-dir": "^0.1.19",
32
- "@flownet/lib-to-docker": "^0.3.26",
33
- "@flownet/lib-to-electron": "^0.3.9",
34
- "@flownet/lib-to-ios-app": "^0.3.16",
35
- "@flownet/lib-to-macos-app": "^0.3.13",
36
- "@flownet/lib-to-nextjs": "^0.3.10",
37
- "@flownet/lib-to-webos": "^0.3.16",
38
34
  "@fnet/auto-conda-env": "^0.2.4",
39
35
  "@fnet/config": "^0.2.32",
40
36
  "@fnet/dir-zipper": "^0.1.8",
@@ -48,8 +44,7 @@
48
44
  "@fnet/service": "^0.1.9",
49
45
  "@fnet/shell-flow": "0.4.1",
50
46
  "@fnet/shelljs": "^0.2.4",
51
- "@fnet/to-pyip": "^0.2.1",
52
- "@fnet/to-rust": "^0.1.14",
47
+ "@fnet/xcode-cert-inspector": "^0.1.10",
53
48
  "@fnet/up-list-files": "^0.1.14",
54
49
  "@fnet/yaml": "^0.1.49",
55
50
  "@node-red/util": "^4.1.8",
@@ -64,6 +59,7 @@
64
59
  "isobject": "^4.0.0",
65
60
  "lodash.clonedeep": "^4.5.0",
66
61
  "lodash.merge": "^4.6.2",
62
+ "nanoid": "^5.1",
67
63
  "nunjucks": "^3.2.4",
68
64
  "object-hash": "^3.0.0",
69
65
  "prettier": "^3.8.3",