@fnet/cli 1.5.1 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/dist/fbin/index.js +1 -1
  2. package/dist/fnet/{index.kacxf1cj.js → index.06vbpwcx.js} +1 -1
  3. package/dist/fnet/{index.c6w3x23h.js → index.26r88tdp.js} +1 -1
  4. package/dist/fnet/{index.csewbp01.js → index.2ah9pn6n.js} +1 -1
  5. package/dist/fnet/{index.8rjk97vr.js → index.2g93a9kt.js} +1 -1
  6. package/dist/fnet/{index.sy0ns8yw.js → index.61jdafta.js} +1 -1
  7. package/dist/fnet/index.6nhq5ca9.js +3 -0
  8. package/dist/fnet/{index.h915z0xh.js → index.80hh5mtp.js} +1 -1
  9. package/dist/fnet/{index.tnk86191.js → index.844kkj93.js} +1 -1
  10. package/dist/fnet/{index.jw757ba0.js → index.a2mbqyxe.js} +1 -1
  11. package/dist/fnet/{index.bfgjmapr.js → index.drbq51nw.js} +1 -1
  12. package/dist/fnet/{index.r2vf2y39.js → index.ex68wdp1.js} +1 -1
  13. package/dist/fnet/{index.5n4c3bt9.js → index.fe9rrvng.js} +1 -1
  14. package/dist/{fnode/index.wsren1fr.js → fnet/index.gywx3fae.js} +1 -1
  15. package/dist/fnet/{index.hjf7cfd2.js → index.gza1frda.js} +1 -1
  16. package/dist/fnet/index.js +12 -12
  17. package/dist/fnet/index.pbtmt70j.js +2 -0
  18. package/dist/{fnode/index.d3jn9x95.js → fnet/index.pg6fm615.js} +1 -1
  19. package/dist/fnet/{index.vsdjwxjr.js → index.qmrnkssy.js} +1 -1
  20. package/dist/fnet/{index.hjqqrn9q.js → index.qnkv04zn.js} +1 -1
  21. package/dist/fnet/{index.f7f1p3sd.js → index.r2gf0b3s.js} +1 -1
  22. package/dist/fnet/{index.2084z2ed.js → index.rfysmk2b.js} +1 -1
  23. package/dist/fnet/{index.xgmnb1yb.js → index.rkyn71zy.js} +1 -1
  24. package/dist/fnet/{index.nw663a3f.js → index.vpc49edd.js} +1 -1
  25. package/dist/fnode/{index.f9z32b48.js → index.1k1sj9qs.js} +1 -1
  26. package/dist/fnode/{index.2kw09s80.js → index.3968nzbd.js} +1 -1
  27. package/dist/fnode/{index.sq5z9qb7.js → index.5f1kfz9t.js} +1 -1
  28. package/dist/fnode/{index.dwhfb656.js → index.5p4zde7t.js} +1 -1
  29. package/dist/fnode/{index.a0fxx5cv.js → index.5qbcx2y3.js} +1 -1
  30. package/dist/fnode/{index.gs5z7sd8.js → index.7ev6y63q.js} +1 -1
  31. package/dist/fnode/{index.sx9nmvs3.js → index.a4q2w1yd.js} +1 -1
  32. package/dist/fnode/{index.3m37s816.js → index.btj5x5s4.js} +1 -1
  33. package/dist/fnode/index.c7szj58t.js +3 -0
  34. package/dist/fnode/{index.05n3mvs9.js → index.c8qd1bz3.js} +1 -1
  35. package/dist/fnode/{index.hc15cpdb.js → index.dtp0a202.js} +1 -1
  36. package/dist/fnode/{index.kj3pj4ph.js → index.e6g5y0zg.js} +1 -1
  37. package/dist/fnode/{index.6c7y2ywb.js → index.gxm60tqk.js} +1 -1
  38. package/dist/fnode/{index.30av7tz5.js → index.j1ner1yd.js} +1 -1
  39. package/dist/fnode/index.js +7 -7
  40. package/dist/fnode/{index.xw4a37ev.js → index.kvn877g8.js} +1 -1
  41. package/dist/{fnet/index.88perqhm.js → fnode/index.n1598ffs.js} +1 -1
  42. package/dist/fnode/{index.qr7b0d5k.js → index.ng6w9cac.js} +1 -1
  43. package/dist/fnode/{index.c589497d.js → index.q61zqpb9.js} +2 -2
  44. package/dist/fnode/{index.9qgtmxq3.js → index.r8s8r2n7.js} +1 -1
  45. package/dist/fnode/{index.peb3c98j.js → index.rmg5mgw9.js} +1 -1
  46. package/dist/fnode/{index.ycgzkvhs.js → index.vsqseyhf.js} +1 -1
  47. package/dist/fnode/{index.b6jt1ba1.js → index.w9hzkjf2.js} +1 -1
  48. package/dist/fnode/index.wbt2dhhm.js +2 -0
  49. package/dist/fnode/{index.wn36esy2.js → index.xc08sjp4.js} +1 -1
  50. package/dist/fnode/{index.n6gnxh4v.js → index.zb59076q.js} +1 -1
  51. package/dist/{fnet/index.45cmcbgj.js → fnode/index.zhpbpxhe.js} +1 -1
  52. package/dist/frun/index.js +3 -3
  53. package/dist/fservice/index.js +1 -1
  54. package/package.json +1 -1
  55. package/dist/fnet/index.c28e53p3.js +0 -3
  56. package/dist/fnode/index.2q2ggmej.js +0 -3
@@ -0,0 +1,2 @@
1
+ import q from"os";function B(v=[]){let b=[...v],j=q.platform(),k=q.arch();if(!b.includes(j))b.push(j);if(!b.includes(k))b.push(k);return b}
2
+ export{B as a};
@@ -1 +1 @@
1
- import"./index.a0fxx5cv.js";import o from"node:fs";import s from"node:path";import u from"semver";import y from"@fnet/shelljs";import g from"@fnet/config";async function S({setProgress:p,context:t,deploymentProject:l,deploymentProjectTarget:i,registerToPackageManager:d,yamlTarget:f}){await p({message:"Deploying it as gcs package."});let c=t.projectDir,a=s.resolve(c,"package.json"),m=o.readFileSync(a),n=JSON.parse(m);n.name=i.params.name,n.version=u.inc(i.version,"patch"),delete n.scripts,delete n.devDependencies,o.writeFileSync(a,JSON.stringify(n,null,"\t"));let{file:v,data:r}=await g({name:i.config||"gcs",dir:t.projectDir,tags:t.tags}),e="fnet-files-to-gcs";if(e+=` --projectId='${r.env.GCS_PROJECT_ID}'`,e+=` --bucketName='${r.env.GCS_BUCKET_NAME}'`,e+=` --keyFilename='${s.resolve(s.dirname(v),r.env.GCS_UPLOADER_KEY_FILE)}'`,e+=` --dir='${c}'`,e+=" --pattern='dist/**/**'",e+=" --pattern='bin/**/**'",e+=" --pattern='test/**/**'",e+=" --pattern='*.html'",e+=` --destDir='${n.name}/${n.version}'`,e+=" --metadata.cacheControl='public, max-age=31536000, immutable'",console.log(e),r.env.DOMAIN)e+=` --domain='${r.env.DOMAIN}'`;if(i.dry_run===!0||i.params.dry_run===!0)e+=" --dryRun";if(await y(e),o.writeFileSync(a,m),i.dryRun===!0)return;l.isDirty=!0,i.version=n.version,f.set("version",n.version),await d({target:i,packageJSON:n})}export{S as default};
1
+ import"./index.drbq51nw.js";import o from"node:fs";import s from"node:path";import u from"semver";import y from"@fnet/shelljs";import g from"@fnet/config";async function S({setProgress:p,context:t,deploymentProject:l,deploymentProjectTarget:i,registerToPackageManager:d,yamlTarget:f}){await p({message:"Deploying it as gcs package."});let c=t.projectDir,a=s.resolve(c,"package.json"),m=o.readFileSync(a),n=JSON.parse(m);n.name=i.params.name,n.version=u.inc(i.version,"patch"),delete n.scripts,delete n.devDependencies,o.writeFileSync(a,JSON.stringify(n,null,"\t"));let{file:v,data:r}=await g({name:i.config||"gcs",dir:t.projectDir,tags:t.tags}),e="fnet-files-to-gcs";if(e+=` --projectId='${r.env.GCS_PROJECT_ID}'`,e+=` --bucketName='${r.env.GCS_BUCKET_NAME}'`,e+=` --keyFilename='${s.resolve(s.dirname(v),r.env.GCS_UPLOADER_KEY_FILE)}'`,e+=` --dir='${c}'`,e+=" --pattern='dist/**/**'",e+=" --pattern='bin/**/**'",e+=" --pattern='test/**/**'",e+=" --pattern='*.html'",e+=` --destDir='${n.name}/${n.version}'`,e+=" --metadata.cacheControl='public, max-age=31536000, immutable'",console.log(e),r.env.DOMAIN)e+=` --domain='${r.env.DOMAIN}'`;if(i.dry_run===!0||i.params.dry_run===!0)e+=" --dryRun";if(await y(e),o.writeFileSync(a,m),i.dryRun===!0)return;l.isDirty=!0,i.version=n.version,f.set("version",n.version),await d({target:i,packageJSON:n})}export{S as default};
@@ -1 +1 @@
1
- import"./index.bfgjmapr.js";import p from"node:fs";import f from"node:path";import w from"semver";import k from"@fnet/shelljs";import y from"@fnet/config";async function P({setProgress:A,context:i,deploymentProject:v,deploymentProjectTarget:o,yamlTarget:u}){await A({message:"Deploying it as fnet package."});let d=i.projectDir,a=f.resolve(d,"package.json"),m=p.readFileSync(a),t=JSON.parse(m);t.name=o.params.name,t.version=w.inc(o.version,"patch"),delete t.scripts,delete t.devDependencies,p.writeFileSync(a,JSON.stringify(t,null,"\t"));let{file:r,data:e}=await y({name:o.config||"fnet-package",dir:i.projectDir,tags:i.tags});if(!e.env.ATOM_API_URL)throw Error(`ATOM_API_URL is required in ${r}`);if(!e.env.ATOM_API_USERNAME)throw Error(`ATOM_API_USERNAME is required in ${r}`);if(!e.env.ATOM_API_PASSWORD)throw Error(`ATOM_API_PASSWORD is required in ${r}`);let l=`${e.env.ATOM_API_URL}/v1/auth/token`,h=e.env.ATOM_API_USERNAME,O=e.env.ATOM_API_PASSWORD,s=await fetch(l,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:h,password:O})});if(!s.ok)throw Error(`Failed to fetch token: ${s.statusText}`);let _=(await s.json())?.access_token;if(!_)throw Error(`Invalid access_token from ${l}`);let n="fnet-files-to-gcs";if(n+=` --projectId='${e.env.GCS_PROJECT_ID}'`,n+=` --bucketName='${e.env.GCS_BUCKET_NAME}'`,n+=` --keyFilename='${f.resolve(f.dirname(r),e.env.GCS_UPLOADER_KEY_FILE)}'`,n+=` --dir='${d}'`,n+=" --pattern='dist/**/**'",n+=" --pattern='bin/**/**'",n+=" --pattern='test/**/**'",n+=" --pattern='*.html'",n+=` --destDir='${t.name}/${t.version}'`,n+=" --metadata.cacheControl='public, max-age=31536000, immutable'",e.env.DOMAIN)n+=` --domain='${e.env.DOMAIN}'`;if(o.dry_run===!0||o.params.dry_run===!0)n+=" --dryRun";if(await k(n),p.writeFileSync(a,m),o.dryRun===!0)return;v.isDirty=!0,o.version=t.version,u.set("version",t.version);let S=`${e.env.ATOM_API_URL}/v1/service/fnet-package/publish`,c=await fetch(S,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${_}`},body:JSON.stringify({name:t.name,version:t.version,version_domain:e.env.DOMAIN,docs:o.params.docs,configs:o.params.configs})});if(!c.ok)throw Error(`Failed to publish fnet package: ${c.statusText}`);if((await c.json())?.error)throw Error("Failed to publish fnet package.")}export{P as default};
1
+ import"./index.drbq51nw.js";import p from"node:fs";import f from"node:path";import w from"semver";import k from"@fnet/shelljs";import y from"@fnet/config";async function P({setProgress:A,context:i,deploymentProject:v,deploymentProjectTarget:o,yamlTarget:u}){await A({message:"Deploying it as fnet package."});let d=i.projectDir,a=f.resolve(d,"package.json"),m=p.readFileSync(a),t=JSON.parse(m);t.name=o.params.name,t.version=w.inc(o.version,"patch"),delete t.scripts,delete t.devDependencies,p.writeFileSync(a,JSON.stringify(t,null,"\t"));let{file:r,data:e}=await y({name:o.config||"fnet-package",dir:i.projectDir,tags:i.tags});if(!e.env.ATOM_API_URL)throw Error(`ATOM_API_URL is required in ${r}`);if(!e.env.ATOM_API_USERNAME)throw Error(`ATOM_API_USERNAME is required in ${r}`);if(!e.env.ATOM_API_PASSWORD)throw Error(`ATOM_API_PASSWORD is required in ${r}`);let l=`${e.env.ATOM_API_URL}/v1/auth/token`,h=e.env.ATOM_API_USERNAME,O=e.env.ATOM_API_PASSWORD,s=await fetch(l,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:h,password:O})});if(!s.ok)throw Error(`Failed to fetch token: ${s.statusText}`);let _=(await s.json())?.access_token;if(!_)throw Error(`Invalid access_token from ${l}`);let n="fnet-files-to-gcs";if(n+=` --projectId='${e.env.GCS_PROJECT_ID}'`,n+=` --bucketName='${e.env.GCS_BUCKET_NAME}'`,n+=` --keyFilename='${f.resolve(f.dirname(r),e.env.GCS_UPLOADER_KEY_FILE)}'`,n+=` --dir='${d}'`,n+=" --pattern='dist/**/**'",n+=" --pattern='bin/**/**'",n+=" --pattern='test/**/**'",n+=" --pattern='*.html'",n+=` --destDir='${t.name}/${t.version}'`,n+=" --metadata.cacheControl='public, max-age=31536000, immutable'",e.env.DOMAIN)n+=` --domain='${e.env.DOMAIN}'`;if(o.dry_run===!0||o.params.dry_run===!0)n+=" --dryRun";if(await k(n),p.writeFileSync(a,m),o.dryRun===!0)return;v.isDirty=!0,o.version=t.version,u.set("version",t.version);let S=`${e.env.ATOM_API_URL}/v1/service/fnet-package/publish`,c=await fetch(S,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${_}`},body:JSON.stringify({name:t.name,version:t.version,version_domain:e.env.DOMAIN,docs:o.params.docs,configs:o.params.configs})});if(!c.ok)throw Error(`Failed to publish fnet package: ${c.statusText}`);if((await c.json())?.error)throw Error("Failed to publish fnet package.")}export{P as default};
@@ -1 +1 @@
1
- import"./index.bfgjmapr.js";import O from"semver";import P from"@fnet/config";import R from"node:fs";import S from"@fnet/shelljs";import D from"form-data";async function M({setProgress:u,context:n,deploymentProject:m,deploymentProjectTarget:e,yamlTarget:w}){await u({message:"Deploying it as fnet node."});let{file:t,data:o}=await P({name:e.config||"fnet-node",dir:n.project.projectDir,tags:n.tags});if(!o.env.ATOM_API_URL)throw Error(`ATOM_API_URL is required in ${t}`);if(!o.env.ATOM_API_USERNAME)throw Error(`ATOM_API_USERNAME is required in ${t}`);if(!o.env.ATOM_API_PASSWORD)throw Error(`ATOM_API_PASSWORD is required in ${t}`);let l=`${o.env.ATOM_API_URL}/v1/auth/token`,A=o.env.ATOM_API_USERNAME,_=o.env.ATOM_API_PASSWORD,s=await fetch(l,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:A,password:_})});if(!s.ok)throw Error(`Failed to fetch token: ${s.statusText}`);let i=(await s.json())?.access_token;if(!i)throw Error(`Invalid access_token from ${l}`);m.isDirty=!0;let a=O.inc(e.version,"patch");e.params.version=a,e.version=a,w.set("version",a);let T=`${o.env.ATOM_API_URL}/v1/service/fnet-node/publish`,p=await fetch(T,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${i}`},body:JSON.stringify({name:e.params.name,version:e.params.version,docs:e.params.docs,configs:e.params.configs})});if(!p.ok)throw Error(`Error publishing fnet node: ${p.statusText}`);let h=await p.json();if(h?.error)throw Error("Error publishing fnet node.");let v=h?.upload.id,r="fnet-dir-zipper";r+=` --sourceDir='${n.project.projectDir}'`,r+=" --pattern=**/*",r+=" --stdout_format=json";let c=await S(r);if(c.code!==0)throw Error(c.stderr);let E=JSON.parse(c.stdout).path,d=new D;d.append("file",R.createReadStream(E));let f=await fetch(`${o.env.ATOM_API_URL}/v1/service/upload/single/${v}`,{method:"POST",headers:{...d.getHeaders(),Authorization:`Bearer ${i}`},body:d});if(!f.ok)throw Error(`Error uploading fnet node: ${f.statusText}`);if((await f.json())?.error)throw Error("Error uploading fnet node.")}export{M as default};
1
+ import"./index.drbq51nw.js";import O from"semver";import P from"@fnet/config";import R from"node:fs";import S from"@fnet/shelljs";import D from"form-data";async function M({setProgress:u,context:n,deploymentProject:m,deploymentProjectTarget:e,yamlTarget:w}){await u({message:"Deploying it as fnet node."});let{file:t,data:o}=await P({name:e.config||"fnet-node",dir:n.project.projectDir,tags:n.tags});if(!o.env.ATOM_API_URL)throw Error(`ATOM_API_URL is required in ${t}`);if(!o.env.ATOM_API_USERNAME)throw Error(`ATOM_API_USERNAME is required in ${t}`);if(!o.env.ATOM_API_PASSWORD)throw Error(`ATOM_API_PASSWORD is required in ${t}`);let l=`${o.env.ATOM_API_URL}/v1/auth/token`,A=o.env.ATOM_API_USERNAME,_=o.env.ATOM_API_PASSWORD,s=await fetch(l,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:A,password:_})});if(!s.ok)throw Error(`Failed to fetch token: ${s.statusText}`);let i=(await s.json())?.access_token;if(!i)throw Error(`Invalid access_token from ${l}`);m.isDirty=!0;let a=O.inc(e.version,"patch");e.params.version=a,e.version=a,w.set("version",a);let T=`${o.env.ATOM_API_URL}/v1/service/fnet-node/publish`,p=await fetch(T,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${i}`},body:JSON.stringify({name:e.params.name,version:e.params.version,docs:e.params.docs,configs:e.params.configs})});if(!p.ok)throw Error(`Error publishing fnet node: ${p.statusText}`);let h=await p.json();if(h?.error)throw Error("Error publishing fnet node.");let v=h?.upload.id,r="fnet-dir-zipper";r+=` --sourceDir='${n.project.projectDir}'`,r+=" --pattern=**/*",r+=" --stdout_format=json";let c=await S(r);if(c.code!==0)throw Error(c.stderr);let E=JSON.parse(c.stdout).path,d=new D;d.append("file",R.createReadStream(E));let f=await fetch(`${o.env.ATOM_API_URL}/v1/service/upload/single/${v}`,{method:"POST",headers:{...d.getHeaders(),Authorization:`Bearer ${i}`},body:d});if(!f.ok)throw Error(`Error uploading fnet node: ${f.statusText}`);if((await f.json())?.error)throw Error("Error uploading fnet node.")}export{M as default};
@@ -1 +1 @@
1
- import"./index.bfgjmapr.js";import d from"@fnet/config";import l from"@flownet/lib-to-ios-app";import a from"lodash.clonedeep";import u from"semver";async function g({atom:p,target:e,onProgress:s,projectDir:n,dependencies:r,context:t,yamlTarget:f}){if(s)await s({message:"Deploying it as ios-app package."});let c=e?.config?await d({name:e.config,dir:n,optional:!0,transferEnv:!1,tags:t.tags}):void 0,o=u.inc(e.version||"0.1.0","patch");e.params.version=o,e.version=o,f.set("version",o);let i=a(e.params);i.dependencies=a(r);let m={atom:p,params:i,config:c?.config,src:n,dest:n};return{deployer:await l(m)}}export{g as default};
1
+ import"./index.drbq51nw.js";import d from"@fnet/config";import l from"@flownet/lib-to-ios-app";import a from"lodash.clonedeep";import u from"semver";async function g({atom:p,target:e,onProgress:s,projectDir:n,dependencies:r,context:t,yamlTarget:f}){if(s)await s({message:"Deploying it as ios-app package."});let c=e?.config?await d({name:e.config,dir:n,optional:!0,transferEnv:!1,tags:t.tags}):void 0,o=u.inc(e.version||"0.1.0","patch");e.params.version=o,e.version=o,f.set("version",o);let i=a(e.params);i.dependencies=a(r);let m={atom:p,params:i,config:c?.config,src:n,dest:n};return{deployer:await l(m)}}export{g as default};
@@ -1,2 +1,2 @@
1
1
  import i from"node:path";import c from"node:fs";import{fileURLToPath as u}from"node:url";var v=i.dirname(u(import.meta.url)),A=process.cwd();function T(s){let r=i.resolve(A,s);if(c.existsSync(r))return r;let o=i.resolve(v,"../..",s);if(c.existsSync(o))return o;throw Error(`Template path not found: ${s}`)}import{existsSync as p}from"node:fs";import{delimiter as C,join as H}from"node:path";var O=(s)=>{let r=process.env.PATH||"",o=process.platform==="win32"?(process.env.PATHEXT||".EXE;.CMD;.BAT;.COM").split(";"):[""],f=r.split(C);for(let E of f)for(let x of o){let n=H(E,process.platform==="win32"?s+x:s);if(p(n))return n}return null};
2
- export{T as a,O as b};
2
+ export{T as b,O as c};
@@ -1 +1 @@
1
- import"./index.bfgjmapr.js";import O from"semver";import P from"@fnet/config";import R from"node:fs";import S from"@fnet/shelljs";import D from"form-data";async function M({setProgress:h,context:t,deploymentProject:u,deploymentProjectTarget:o,yamlTarget:m}){await h({message:"Deploying it as fnet flow."});let{file:n,data:e}=await P({name:o.config||"fnet-flow",dir:t.project.projectDir,tags:t.tags});if(!e.env.ATOM_API_URL)throw Error(`ATOM_API_URL is required in ${n}`);if(!e.env.ATOM_API_USERNAME)throw Error(`ATOM_API_USERNAME is required in ${n}`);if(!e.env.ATOM_API_PASSWORD)throw Error(`ATOM_API_PASSWORD is required in ${n}`);let d=`${e.env.ATOM_API_URL}/v1/auth/token`,A=e.env.ATOM_API_USERNAME,_=e.env.ATOM_API_PASSWORD,s=await fetch(d,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:A,password:_})});if(!s.ok)throw Error(`Failed to fetch token: ${s.statusText}`);let i=(await s.json())?.access_token;if(!i)throw Error(`Invalid access_token from ${d}`);u.isDirty=!0;let a=O.inc(o.version,"patch");o.params.version=a,o.version=a,m.set("version",a);let T=`${e.env.ATOM_API_URL}/v1/service/fnet-flow/publish`,p=await fetch(T,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${i}`},body:JSON.stringify({name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs})});if(!p.ok)throw Error(`Error publishing fnet flow: ${p.statusText}`);let w=await p.json();if(w?.error)throw Error("Error publishing fnet flow.");let v=w?.upload.id,r="fnet-dir-zipper";r+=` --sourceDir='${t.project.projectDir}'`,r+=" --pattern=**/*",r+=" --stdout_format=json";let f=await S(r);if(f.code!==0)throw Error(f.stderr);let E=JSON.parse(f.stdout).path,c=new D;c.append("file",R.createReadStream(E));let l=await fetch(`${e.env.ATOM_API_URL}/v1/service/upload/single/${v}`,{method:"POST",headers:{...c.getHeaders(),Authorization:`Bearer ${i}`},body:c});if(!l.ok)throw Error(`Error uploading fnet flow: ${l.statusText}`);if((await l.json())?.error)throw Error("Error uploading fnet flow.")}export{M as default};
1
+ import"./index.drbq51nw.js";import O from"semver";import P from"@fnet/config";import R from"node:fs";import S from"@fnet/shelljs";import D from"form-data";async function M({setProgress:h,context:t,deploymentProject:u,deploymentProjectTarget:o,yamlTarget:m}){await h({message:"Deploying it as fnet flow."});let{file:n,data:e}=await P({name:o.config||"fnet-flow",dir:t.project.projectDir,tags:t.tags});if(!e.env.ATOM_API_URL)throw Error(`ATOM_API_URL is required in ${n}`);if(!e.env.ATOM_API_USERNAME)throw Error(`ATOM_API_USERNAME is required in ${n}`);if(!e.env.ATOM_API_PASSWORD)throw Error(`ATOM_API_PASSWORD is required in ${n}`);let d=`${e.env.ATOM_API_URL}/v1/auth/token`,A=e.env.ATOM_API_USERNAME,_=e.env.ATOM_API_PASSWORD,s=await fetch(d,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:A,password:_})});if(!s.ok)throw Error(`Failed to fetch token: ${s.statusText}`);let i=(await s.json())?.access_token;if(!i)throw Error(`Invalid access_token from ${d}`);u.isDirty=!0;let a=O.inc(o.version,"patch");o.params.version=a,o.version=a,m.set("version",a);let T=`${e.env.ATOM_API_URL}/v1/service/fnet-flow/publish`,p=await fetch(T,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${i}`},body:JSON.stringify({name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs})});if(!p.ok)throw Error(`Error publishing fnet flow: ${p.statusText}`);let w=await p.json();if(w?.error)throw Error("Error publishing fnet flow.");let v=w?.upload.id,r="fnet-dir-zipper";r+=` --sourceDir='${t.project.projectDir}'`,r+=" --pattern=**/*",r+=" --stdout_format=json";let f=await S(r);if(f.code!==0)throw Error(f.stderr);let E=JSON.parse(f.stdout).path,c=new D;c.append("file",R.createReadStream(E));let l=await fetch(`${e.env.ATOM_API_URL}/v1/service/upload/single/${v}`,{method:"POST",headers:{...c.getHeaders(),Authorization:`Bearer ${i}`},body:c});if(!l.ok)throw Error(`Error uploading fnet flow: ${l.statusText}`);if((await l.json())?.error)throw Error("Error uploading fnet flow.")}export{M as default};
@@ -1 +1 @@
1
- import"./index.bfgjmapr.js";import l from"node:fs";import f from"node:path";import u from"@fnet/config";async function j({atom:p,Atom:i,setProgress:y,context:r,packageDependencies:w,deploymentProject:m,deploymentProjectTarget:t}){await y({message:"Deploying it as workflow lib."});let s=(await u({name:"atom",dir:r.projectDir,tags:r.tags}))?.data,e,a,n,o=t.deploy.name.split("/");if(o.length===1)a=s.env.ATOM_LIBRARIES_ID,n=t.deploy.name;else if(o.length===2){let c=await i.first({where:{name:o[0],parent_id:s.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!c)throw Error("Couldnt file lib folder.");a=c.id,n=o[1]}else throw Error("Wrong name path.");if(t.dryRun===!0)return;if(m.isDirty=!0,!t.deploy.id){if(e=await i.create({parent_id:a,doc:{name:n,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!e)return;t.deploy.id=e.id}else if(e=await i.get({id:t.deploy.id}),!e)return;let d=r.projectDir;if(e.doc.contents=[{content:l.readFileSync(f.resolve(d,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),["content-type"]:"javascript",format:"esm"},{content:l.readFileSync(f.resolve(d,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),["content-type"]:"javascript",format:"cjs"},{content:l.readFileSync(f.resolve(d,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),["content-type"]:"javascript",format:"iife"}],e.doc.name=n,e.doc.dependencies=w,p.type==="workflow.lib")e.doc.subtype="library";else if(p.type==="workflow")e.doc.subtype="workflow";e=await i.update(e,{id:e.id})}export{j as default};
1
+ import"./index.drbq51nw.js";import l from"node:fs";import f from"node:path";import u from"@fnet/config";async function j({atom:p,Atom:i,setProgress:y,context:r,packageDependencies:w,deploymentProject:m,deploymentProjectTarget:t}){await y({message:"Deploying it as workflow lib."});let s=(await u({name:"atom",dir:r.projectDir,tags:r.tags}))?.data,e,a,n,o=t.deploy.name.split("/");if(o.length===1)a=s.env.ATOM_LIBRARIES_ID,n=t.deploy.name;else if(o.length===2){let c=await i.first({where:{name:o[0],parent_id:s.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!c)throw Error("Couldnt file lib folder.");a=c.id,n=o[1]}else throw Error("Wrong name path.");if(t.dryRun===!0)return;if(m.isDirty=!0,!t.deploy.id){if(e=await i.create({parent_id:a,doc:{name:n,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!e)return;t.deploy.id=e.id}else if(e=await i.get({id:t.deploy.id}),!e)return;let d=r.projectDir;if(e.doc.contents=[{content:l.readFileSync(f.resolve(d,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),["content-type"]:"javascript",format:"esm"},{content:l.readFileSync(f.resolve(d,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),["content-type"]:"javascript",format:"cjs"},{content:l.readFileSync(f.resolve(d,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),["content-type"]:"javascript",format:"iife"}],e.doc.name=n,e.doc.dependencies=w,p.type==="workflow.lib")e.doc.subtype="library";else if(p.type==="workflow")e.doc.subtype="workflow";e=await i.update(e,{id:e.id})}export{j as default};
@@ -1,3 +1,3 @@
1
- import{b as CT,c as jT,d as hT}from"./index.c589497d.js";import{f as j}from"./index.05n3mvs9.js";import"./index.a0fxx5cv.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)+`
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
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
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 +1 @@
1
- import"./index.a0fxx5cv.js";import O from"semver";import P from"@fnet/config";import R from"node:fs";import S from"@fnet/shelljs";import D from"form-data";async function M({setProgress:h,context:t,deploymentProject:u,deploymentProjectTarget:o,yamlTarget:m}){await h({message:"Deploying it as fnet flow."});let{file:n,data:e}=await P({name:o.config||"fnet-flow",dir:t.project.projectDir,tags:t.tags});if(!e.env.ATOM_API_URL)throw Error(`ATOM_API_URL is required in ${n}`);if(!e.env.ATOM_API_USERNAME)throw Error(`ATOM_API_USERNAME is required in ${n}`);if(!e.env.ATOM_API_PASSWORD)throw Error(`ATOM_API_PASSWORD is required in ${n}`);let d=`${e.env.ATOM_API_URL}/v1/auth/token`,A=e.env.ATOM_API_USERNAME,_=e.env.ATOM_API_PASSWORD,s=await fetch(d,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:A,password:_})});if(!s.ok)throw Error(`Failed to fetch token: ${s.statusText}`);let i=(await s.json())?.access_token;if(!i)throw Error(`Invalid access_token from ${d}`);u.isDirty=!0;let a=O.inc(o.version,"patch");o.params.version=a,o.version=a,m.set("version",a);let T=`${e.env.ATOM_API_URL}/v1/service/fnet-flow/publish`,p=await fetch(T,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${i}`},body:JSON.stringify({name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs})});if(!p.ok)throw Error(`Error publishing fnet flow: ${p.statusText}`);let w=await p.json();if(w?.error)throw Error("Error publishing fnet flow.");let v=w?.upload.id,r="fnet-dir-zipper";r+=` --sourceDir='${t.project.projectDir}'`,r+=" --pattern=**/*",r+=" --stdout_format=json";let f=await S(r);if(f.code!==0)throw Error(f.stderr);let E=JSON.parse(f.stdout).path,c=new D;c.append("file",R.createReadStream(E));let l=await fetch(`${e.env.ATOM_API_URL}/v1/service/upload/single/${v}`,{method:"POST",headers:{...c.getHeaders(),Authorization:`Bearer ${i}`},body:c});if(!l.ok)throw Error(`Error uploading fnet flow: ${l.statusText}`);if((await l.json())?.error)throw Error("Error uploading fnet flow.")}export{M as default};
1
+ import"./index.5qbcx2y3.js";import O from"semver";import P from"@fnet/config";import R from"node:fs";import S from"@fnet/shelljs";import D from"form-data";async function M({setProgress:h,context:t,deploymentProject:u,deploymentProjectTarget:o,yamlTarget:m}){await h({message:"Deploying it as fnet flow."});let{file:n,data:e}=await P({name:o.config||"fnet-flow",dir:t.project.projectDir,tags:t.tags});if(!e.env.ATOM_API_URL)throw Error(`ATOM_API_URL is required in ${n}`);if(!e.env.ATOM_API_USERNAME)throw Error(`ATOM_API_USERNAME is required in ${n}`);if(!e.env.ATOM_API_PASSWORD)throw Error(`ATOM_API_PASSWORD is required in ${n}`);let d=`${e.env.ATOM_API_URL}/v1/auth/token`,A=e.env.ATOM_API_USERNAME,_=e.env.ATOM_API_PASSWORD,s=await fetch(d,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:A,password:_})});if(!s.ok)throw Error(`Failed to fetch token: ${s.statusText}`);let i=(await s.json())?.access_token;if(!i)throw Error(`Invalid access_token from ${d}`);u.isDirty=!0;let a=O.inc(o.version,"patch");o.params.version=a,o.version=a,m.set("version",a);let T=`${e.env.ATOM_API_URL}/v1/service/fnet-flow/publish`,p=await fetch(T,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${i}`},body:JSON.stringify({name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs})});if(!p.ok)throw Error(`Error publishing fnet flow: ${p.statusText}`);let w=await p.json();if(w?.error)throw Error("Error publishing fnet flow.");let v=w?.upload.id,r="fnet-dir-zipper";r+=` --sourceDir='${t.project.projectDir}'`,r+=" --pattern=**/*",r+=" --stdout_format=json";let f=await S(r);if(f.code!==0)throw Error(f.stderr);let E=JSON.parse(f.stdout).path,c=new D;c.append("file",R.createReadStream(E));let l=await fetch(`${e.env.ATOM_API_URL}/v1/service/upload/single/${v}`,{method:"POST",headers:{...c.getHeaders(),Authorization:`Bearer ${i}`},body:c});if(!l.ok)throw Error(`Error uploading fnet flow: ${l.statusText}`);if((await l.json())?.error)throw Error("Error uploading fnet flow.")}export{M as default};
@@ -1 +1 @@
1
- import"./index.a0fxx5cv.js";import d from"@fnet/config";import l from"@flownet/lib-to-webos";import a from"lodash.clonedeep";import u from"semver";async function g({atom:r,target:e,onProgress:s,projectDir:o,dependencies:t,context:f,yamlTarget:c}){if(s)await s({message:"Deploying it as webos package."});let m=e?.config?await d({name:e.config,dir:o,optional:!0,transferEnv:!1,tags:f.tags}):void 0,n=u.inc(e.version||"0.1.0","patch");e.params.version=n,e.version=n,c.set("version",n);let i=a(e.params);i.dependencies=a(t);let p={atom:r,params:i,config:m?.config,src:o,dest:o};return{deployer:await l(p)}}export{g as default};
1
+ import"./index.5qbcx2y3.js";import d from"@fnet/config";import l from"@flownet/lib-to-webos";import a from"lodash.clonedeep";import u from"semver";async function g({atom:r,target:e,onProgress:s,projectDir:o,dependencies:t,context:f,yamlTarget:c}){if(s)await s({message:"Deploying it as webos package."});let m=e?.config?await d({name:e.config,dir:o,optional:!0,transferEnv:!1,tags:f.tags}):void 0,n=u.inc(e.version||"0.1.0","patch");e.params.version=n,e.version=n,c.set("version",n);let i=a(e.params);i.dependencies=a(t);let p={atom:r,params:i,config:m?.config,src:o,dest:o};return{deployer:await l(p)}}export{g as default};
@@ -1 +1 @@
1
- import"./index.a0fxx5cv.js";import w from"semver";import d from"@fnet/config";async function T({setProgress:f,context:t,deploymentProject:p,deploymentProjectTarget:o,yamlTarget:A}){await f({message:"Deploying it as fnet form."});let{file:n,data:e}=await d({name:o.config||"fnet-form",dir:t.projectDir,tags:t.tags});if(!e.env.ATOM_API_URL)throw Error(`ATOM_API_URL is required in ${n}`);if(!e.env.ATOM_API_USERNAME)throw Error(`ATOM_API_USERNAME is required in ${n}`);if(!e.env.ATOM_API_PASSWORD)throw Error(`ATOM_API_PASSWORD is required in ${n}`);let a=`${e.env.ATOM_API_URL}/v1/auth/token`,m=e.env.ATOM_API_USERNAME,h=e.env.ATOM_API_PASSWORD,r=await fetch(a,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:m,password:h})});if(!r.ok)throw Error(`Failed to fetch token: ${r.statusText}`);let c=(await r.json())?.access_token;if(!c)throw Error(`Invalid access_token from ${a}`);p.isDirty=!0;let s=w.inc(o.version,"patch");o.params.version=s,o.version=s,A.set("version",s);let _=`${e.env.ATOM_API_URL}/v1/service/fnet-form/publish`,i=await fetch(_,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${c}`},body:JSON.stringify({name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs})});if(!i.ok)throw Error(`Error publishing fnet form: ${i.statusText}`);if((await i.json())?.error)throw Error("Error publishing fnet form.")}export{T as default};
1
+ import"./index.5qbcx2y3.js";import w from"semver";import d from"@fnet/config";async function T({setProgress:f,context:t,deploymentProject:p,deploymentProjectTarget:o,yamlTarget:A}){await f({message:"Deploying it as fnet form."});let{file:n,data:e}=await d({name:o.config||"fnet-form",dir:t.projectDir,tags:t.tags});if(!e.env.ATOM_API_URL)throw Error(`ATOM_API_URL is required in ${n}`);if(!e.env.ATOM_API_USERNAME)throw Error(`ATOM_API_USERNAME is required in ${n}`);if(!e.env.ATOM_API_PASSWORD)throw Error(`ATOM_API_PASSWORD is required in ${n}`);let a=`${e.env.ATOM_API_URL}/v1/auth/token`,m=e.env.ATOM_API_USERNAME,h=e.env.ATOM_API_PASSWORD,r=await fetch(a,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:m,password:h})});if(!r.ok)throw Error(`Failed to fetch token: ${r.statusText}`);let c=(await r.json())?.access_token;if(!c)throw Error(`Invalid access_token from ${a}`);p.isDirty=!0;let s=w.inc(o.version,"patch");o.params.version=s,o.version=s,A.set("version",s);let _=`${e.env.ATOM_API_URL}/v1/service/fnet-form/publish`,i=await fetch(_,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${c}`},body:JSON.stringify({name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs})});if(!i.ok)throw Error(`Error publishing fnet form: ${i.statusText}`);if((await i.json())?.error)throw Error("Error publishing fnet form.")}export{T as default};
@@ -1,2 +1,2 @@
1
1
  import{createRequire as q}from"node:module";var j=Object.create;var{getPrototypeOf:k,defineProperty:i,getOwnPropertyNames:l}=Object;var m=Object.prototype.hasOwnProperty;function n(a){return this[a]}var o,p,r=(a,b,d)=>{var f=a!=null&&typeof a==="object";if(f){var g=b?o??=new WeakMap:p??=new WeakMap,h=g.get(a);if(h)return h}d=a!=null?j(k(a)):{};let c=b||!a||!a.__esModule?i(d,"default",{value:a,enumerable:!0}):d;for(let e of l(a))if(!m.call(c,e))i(c,e,{get:n.bind(a,e),enumerable:!0});if(f)g.set(a,c);return c};var s=(a,b)=>()=>(b||a((b={exports:{}}).exports,b),b.exports);var u=q(import.meta.url);
2
- export{r as g,s as h,u as i};
2
+ export{r as h,s as i,u as j};
@@ -1 +1 @@
1
- import"./index.a0fxx5cv.js";import l from"@fnet/config";import d from"@fnet/to-rust";import a from"lodash.clonedeep";import u from"semver";async function y({atom:t,target:e,onProgress:s,projectDir:n,dependencies:r,context:f,yamlTarget:c}){if(s)await s({message:"Deploying it as Rust package."});let p=e?.config?await l({name:e.config,dir:n,optional:!0,transferEnv:!1,tags:f.tags}):void 0,o=u.inc(e.version||"0.1.0","patch");e.params.version=o,e.version=o,c.set("version",o);let i=a(e.params);i.dependencies=a(r);let m={atom:t,params:i,config:p?.config,src:n,dest:n};return{deployer:await d(m)}}export{y as default};
1
+ import"./index.5qbcx2y3.js";import l from"@fnet/config";import d from"@fnet/to-rust";import a from"lodash.clonedeep";import u from"semver";async function y({atom:t,target:e,onProgress:s,projectDir:n,dependencies:r,context:f,yamlTarget:c}){if(s)await s({message:"Deploying it as Rust package."});let p=e?.config?await l({name:e.config,dir:n,optional:!0,transferEnv:!1,tags:f.tags}):void 0,o=u.inc(e.version||"0.1.0","patch");e.params.version=o,e.version=o,c.set("version",o);let i=a(e.params);i.dependencies=a(r);let m={atom:t,params:i,config:p?.config,src:n,dest:n};return{deployer:await d(m)}}export{y as default};
@@ -1 +1 @@
1
- import"./index.a0fxx5cv.js";import d from"@fnet/config";import l from"@flownet/lib-to-docker";import a from"lodash.clonedeep";import u from"semver";async function y({atom:r,target:e,onProgress:s,projectDir:o,dependencies:c,context:t,yamlTarget:f}){if(s)await s({message:"Deploying it as docker package."});let p=e?.config?await d({name:e.config,dir:o,optional:!0,transferEnv:!1,tags:t.tags}):void 0,n=u.inc(e.version||"0.1.0","patch");e.params.version=n,e.version=n,f.set("version",n);let i=a(e.params);i.dependencies=a(c);let m={atom:r,params:i,config:p?.config,src:o,dest:o};return{deployer:await l(m)}}export{y as default};
1
+ import"./index.5qbcx2y3.js";import d from"@fnet/config";import l from"@flownet/lib-to-docker";import a from"lodash.clonedeep";import u from"semver";async function y({atom:r,target:e,onProgress:s,projectDir:o,dependencies:c,context:t,yamlTarget:f}){if(s)await s({message:"Deploying it as docker package."});let p=e?.config?await d({name:e.config,dir:o,optional:!0,transferEnv:!1,tags:t.tags}):void 0,n=u.inc(e.version||"0.1.0","patch");e.params.version=n,e.version=n,f.set("version",n);let i=a(e.params);i.dependencies=a(c);let m={atom:r,params:i,config:p?.config,src:o,dest:o};return{deployer:await l(m)}}export{y as default};
@@ -1 +1 @@
1
- import"./index.a0fxx5cv.js";import d from"@fnet/config";import l from"@flownet/lib-to-macos-app";import i from"lodash.clonedeep";import u from"semver";async function g({atom:p,target:e,onProgress:s,projectDir:n,dependencies:c,context:r,yamlTarget:t}){if(s)await s({message:"Deploying it as macos-app package."});let f=e?.config?await d({name:e.config,dir:n,optional:!0,transferEnv:!1,tags:r.tags}):void 0,o=u.inc(e.version||"0.1.0","patch");e.params.version=o,e.version=o,t.set("version",o);let a=i(e.params);a.dependencies=i(c);let m={atom:p,params:a,config:f?.config,src:n,dest:n};return{deployer:await l(m)}}export{g as default};
1
+ import"./index.5qbcx2y3.js";import d from"@fnet/config";import l from"@flownet/lib-to-macos-app";import i from"lodash.clonedeep";import u from"semver";async function g({atom:p,target:e,onProgress:s,projectDir:n,dependencies:c,context:r,yamlTarget:t}){if(s)await s({message:"Deploying it as macos-app package."});let f=e?.config?await d({name:e.config,dir:n,optional:!0,transferEnv:!1,tags:r.tags}):void 0,o=u.inc(e.version||"0.1.0","patch");e.params.version=o,e.version=o,t.set("version",o);let a=i(e.params);a.dependencies=i(c);let m={atom:p,params:a,config:f?.config,src:n,dest:n};return{deployer:await l(m)}}export{g as default};
@@ -0,0 +1,3 @@
1
+ import{e as $}from"./index.wbt2dhhm.js";import"./index.5qbcx2y3.js";import R from"fs";import _ from"path";import I from"chalk";import x from"@fnet/yaml";import H,{ProcessManager as w}from"@fnet/shell-flow";async function k({projectType:D,group:C,tags:q,args:A,argv:J,processManager:K}){try{let z=await G(D);q=$(q);let{parsed:Q}=await x({file:z.path,tags:q}),E=Q.commands;if(!E)throw Error(`Commands section not found in ${z.name}`);let B=E[C];if(!B)throw Error(`Command group '${C}' not found in ${z.name}`);await H({commands:B,context:{args:A,argv:J,projectType:z.type},processManager:K})}catch(z){console.error(`Error: ${z.message}`),process.exit(1)}}async function v({projectType:D,tags:C}){try{let q=await G(D),{parsed:A}=await x({file:q.path,tags:C}),J=A.commands;if(!J){console.log(I.yellow(`No commands found in ${q.name}`));return}console.log(`
2
+ ${I.bold("Available commands")} ${I.dim(`(${q.name})`)}:
3
+ `);let K=Object.entries(J),z=Math.max(...K.map(([E])=>E.length)),Q=!1;for(let[E,B]of K){let W=B&&typeof B==="object"&&!Array.isArray(B),X=W?B.description||"":"",U=W?B.usage||"":"",V=!!(X||U);if(V&&Q)console.log("");let Z=E.padEnd(z);if(V){if(console.log(` ${I.bold.cyan(Z)} ${X}`),U)console.log(` ${"".padEnd(z)} ${I.dim("$ "+U)}`)}else console.log(` ${I.cyan(Z)}`);Q=V}}catch(q){console.error(`Error: ${q.message}`),process.exit(1)}}async function G(D){let C=process.cwd(),q=_.resolve(C,"fnode.yaml"),A=_.resolve(C,"fnet.yaml");if(D==="fnode"){if(R.existsSync(q))return{path:q,name:"fnode.yaml",type:"fnode"};throw Error("fnode.yaml file not found in current directory")}if(D==="fnet"){if(R.existsSync(A))return{path:A,name:"fnet.yaml",type:"fnet"};throw Error("fnet.yaml file not found in current directory")}if(R.existsSync(q))return{path:q,name:"fnode.yaml",type:"fnode"};if(R.existsSync(A))return{path:A,name:"fnet.yaml",type:"fnet"};throw Error("No project file (fnode.yaml or fnet.yaml) found in current directory")}export{k as runCommandGroup,v as listCommandGroups,G as detectProjectFile};
@@ -1,2 +1,2 @@
1
1
  import{existsSync as c}from"node:fs";import{delimiter as f,join as i}from"node:path";var m=(t)=>{let r=process.env.PATH||"",s=process.platform==="win32"?(process.env.PATHEXT||".EXE;.CMD;.BAT;.COM").split(";"):[""],n=r.split(f);for(let p of n)for(let e of s){let o=i(p,process.platform==="win32"?t+e:t);if(c(o))return o}return null};
2
- export{m as f};
2
+ export{m as g};
@@ -1,3 +1,3 @@
1
- import{a as A,b,c as v,d as w}from"./index.c589497d.js";import"./index.a0fxx5cv.js";import K from"node:fs";import T from"node:path";import f from"node:os";async function U(I){let{atom:q,context:z,setProgress:H}=I;H("Initializing features..."),q.doc.features=q.doc.features||{};let _=q.doc.features;if(_.cli===!1)_.cli={enabled:!1};else if(_.cli===!0)_.cli={enabled:!0};else _.cli={enabled:!0};_.cli.enabled=_.cli.enabled===!0&&(q.doc.features.form_enabled===!1||_.cli.extend===!0||_.cli.enabled===!0)}async function V({atom:I,packageDependencies:q,packageDevDependencies:z,setProgress:H}){H("Initializing dependencies")}import Z from"node:fs";import $ from"node:path";import l from"@flownet/lib-render-templates-dir";async function W({atom:I,setProgress:q,context:z,packageDependencies:H}){if(I.doc.features.cli.enabled!==!0)return;await q({message:"Creating cli."});let _={atom:I,packageDependencies:H},N=z.templateDir,M=$.join(z.projectDir,"src","cli");if(!Z.existsSync(M))Z.mkdirSync(M,{recursive:!0});await l({pattern:["index.py.njk","__init__.py.njk"],dir:$.join(N,"src","cli"),outDir:M,context:_})}import Q from"node:path";import G from"@fnet/auto-conda-env";import u from"@flownet/lib-render-templates-dir";async function X(I){let{setProgress:q,atom:z,context:H}=I;q({message:"Installing Python packages"});let _=H.projectDir,N=await G({pythonVersion:"3.12",packages:[{package:"fnet-import-parser",version:"0.1.9"}]}),{errors:M,result:F}=await N.runBin("fnet_import_parser",["--entry_file",Q.join(_,"src","default","index.py")],{captureName:"result"});if(M)throw Error(M.format());let y=JSON.parse(F.items[0].stdout).required["third-party"]?.map((J)=>{return{package:J.metadata?.package||J.path,version:J.metadata?.version||void 0,channel:J.metadata?.channel||void 0}})||[],S=z.doc.dependencies||[];for(let J of y)if(!S.some((R)=>R.package===J.package))S.push(J);let E=Q.join(_,".conda"),Y=await G({envDir:E,pythonVersion:z.doc.features.runtime.version||"3.12",packages:S});H.pythonEnv=Y,I.packageDependencies=S;let L=z.doc.features.render?.dirs||[];for(let J of L)J.dir=Q.resolve(_,J.dir),J.outDir=Q.resolve(_,J.outDir),await u(J);let O={params:{}};O.params.package_name=z.doc.name,O.params.version="0.1.0",O.params.bin_name=z.doc.name,O.params.python_requires=z.doc.features.runtime.version||">=3.12",O.params.dependencies=S,O.params.scripts=JSON.stringify({cli:`PYTHONPATH='${Q.join("src")}' '${Q.relative(H.projectDir,Y.pythonBin)}' '${Q.join("src","cli","index.py")}'`}),await u({pattern:["setup.py.njk","package.json.njk","pyproject.toml.njk"],dir:H.templateDir,outDir:H.projectDir,context:O})}class B extends b{async initRuntime(){await U(this.apiContext),await V(this.apiContext),await this.initLibraryDirPython(),await this.initNunjucks(),await this.initLibsPython()}async initLibraryDirPython(){this.setProgress({message:"Initializing library directory."});let I=this.context.projectDir;this.setProgress({message:"Cleaning project directory."});let q=A({dir:I,ignore:[".cache","node_modules",".conda",".bin",".dev"],absolute:!0});for(let _ of q)K.rmSync(_,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."});let z=I;if(!K.existsSync(z))K.mkdirSync(z,{recursive:!0});if(z=T.join(I,"src"),!K.existsSync(z))K.mkdirSync(z,{recursive:!0});z=T.join(I,"src","default");let H=this.context.projectSrcDir;if(!K.existsSync(z))try{if(f.platform()==="win32")K.symlinkSync(H,z,"junction");else K.symlinkSync(H,z,"dir")}catch(_){throw Error(`Couldn't create symlink. Error: ${_.message}`)}if(z=T.join(I,".dev"),!K.existsSync(z))K.mkdirSync(z,{recursive:!0})}async initLibsPython(){this.setProgress({message:"Initializing external libs."});let I=this.atom;I.protocol="src:",I.doc.dependencies=I.doc.dependencies||[],I.name=I.doc.name;let q=[{name:this.atom.doc.name,type:"atom",parent_id:this.atom.parent_id,atom:I}];this.libs=q}async createAtomLibFilesPython({libs:I}){await this.setProgress({message:"Creating external lib files."});let q=I.filter((z)=>z.type==="atom");for(let z=0;z<q.length;z++){let _=q[z].atom;if(_.protocol==="src:"){let N=T.resolve(this.context.projectSrcDir,`${_.fileName||_.name}.py`);if(!K.existsSync(N)){K.mkdirSync(T.dirname(N),{recursive:!0});let M=`def default():
1
+ import{a as A,b,c as v,d as w}from"./index.q61zqpb9.js";import"./index.5qbcx2y3.js";import K from"node:fs";import T from"node:path";import f from"node:os";async function U(I){let{atom:q,context:z,setProgress:H}=I;H("Initializing features..."),q.doc.features=q.doc.features||{};let _=q.doc.features;if(_.cli===!1)_.cli={enabled:!1};else if(_.cli===!0)_.cli={enabled:!0};else _.cli={enabled:!0};_.cli.enabled=_.cli.enabled===!0&&(q.doc.features.form_enabled===!1||_.cli.extend===!0||_.cli.enabled===!0)}async function V({atom:I,packageDependencies:q,packageDevDependencies:z,setProgress:H}){H("Initializing dependencies")}import Z from"node:fs";import $ from"node:path";import l from"@flownet/lib-render-templates-dir";async function W({atom:I,setProgress:q,context:z,packageDependencies:H}){if(I.doc.features.cli.enabled!==!0)return;await q({message:"Creating cli."});let _={atom:I,packageDependencies:H},N=z.templateDir,M=$.join(z.projectDir,"src","cli");if(!Z.existsSync(M))Z.mkdirSync(M,{recursive:!0});await l({pattern:["index.py.njk","__init__.py.njk"],dir:$.join(N,"src","cli"),outDir:M,context:_})}import Q from"node:path";import G from"@fnet/auto-conda-env";import u from"@flownet/lib-render-templates-dir";async function X(I){let{setProgress:q,atom:z,context:H}=I;q({message:"Installing Python packages"});let _=H.projectDir,N=await G({pythonVersion:"3.12",packages:[{package:"fnet-import-parser",version:"0.1.9"}]}),{errors:M,result:F}=await N.runBin("fnet_import_parser",["--entry_file",Q.join(_,"src","default","index.py")],{captureName:"result"});if(M)throw Error(M.format());let y=JSON.parse(F.items[0].stdout).required["third-party"]?.map((J)=>{return{package:J.metadata?.package||J.path,version:J.metadata?.version||void 0,channel:J.metadata?.channel||void 0}})||[],S=z.doc.dependencies||[];for(let J of y)if(!S.some((R)=>R.package===J.package))S.push(J);let E=Q.join(_,".conda"),Y=await G({envDir:E,pythonVersion:z.doc.features.runtime.version||"3.12",packages:S});H.pythonEnv=Y,I.packageDependencies=S;let L=z.doc.features.render?.dirs||[];for(let J of L)J.dir=Q.resolve(_,J.dir),J.outDir=Q.resolve(_,J.outDir),await u(J);let O={params:{}};O.params.package_name=z.doc.name,O.params.version="0.1.0",O.params.bin_name=z.doc.name,O.params.python_requires=z.doc.features.runtime.version||">=3.12",O.params.dependencies=S,O.params.scripts=JSON.stringify({cli:`PYTHONPATH='${Q.join("src")}' '${Q.relative(H.projectDir,Y.pythonBin)}' '${Q.join("src","cli","index.py")}'`}),await u({pattern:["setup.py.njk","package.json.njk","pyproject.toml.njk"],dir:H.templateDir,outDir:H.projectDir,context:O})}class B extends b{async initRuntime(){await U(this.apiContext),await V(this.apiContext),await this.initLibraryDirPython(),await this.initNunjucks(),await this.initLibsPython()}async initLibraryDirPython(){this.setProgress({message:"Initializing library directory."});let I=this.context.projectDir;this.setProgress({message:"Cleaning project directory."});let q=A({dir:I,ignore:[".cache","node_modules",".conda",".bin",".dev"],absolute:!0});for(let _ of q)K.rmSync(_,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."});let z=I;if(!K.existsSync(z))K.mkdirSync(z,{recursive:!0});if(z=T.join(I,"src"),!K.existsSync(z))K.mkdirSync(z,{recursive:!0});z=T.join(I,"src","default");let H=this.context.projectSrcDir;if(!K.existsSync(z))try{if(f.platform()==="win32")K.symlinkSync(H,z,"junction");else K.symlinkSync(H,z,"dir")}catch(_){throw Error(`Couldn't create symlink. Error: ${_.message}`)}if(z=T.join(I,".dev"),!K.existsSync(z))K.mkdirSync(z,{recursive:!0})}async initLibsPython(){this.setProgress({message:"Initializing external libs."});let I=this.atom;I.protocol="src:",I.doc.dependencies=I.doc.dependencies||[],I.name=I.doc.name;let q=[{name:this.atom.doc.name,type:"atom",parent_id:this.atom.parent_id,atom:I}];this.libs=q}async createAtomLibFilesPython({libs:I}){await this.setProgress({message:"Creating external lib files."});let q=I.filter((z)=>z.type==="atom");for(let z=0;z<q.length;z++){let _=q[z].atom;if(_.protocol==="src:"){let N=T.resolve(this.context.projectSrcDir,`${_.fileName||_.name}.py`);if(!K.existsSync(N)){K.mkdirSync(T.dirname(N),{recursive:!0});let M=`def default():
2
2
  `;M+=` print("Hello world!")
3
3
  `,K.writeFileSync(N,M,"utf8")}}}}async build(){try{if(this.fileMode){if(await this.createAtomLibFilesPython({libs:this.libs}),await this.createProjectYaml(),await w(this.apiContext),await v(this.apiContext),await W(this.apiContext),this.buildMode){if(await X(this.apiContext),this.deployMode)await this.deploy()}}await this._cache_set(this.buildKey,{status:"COMPLETED"})}catch(I){throw await this._cache_set(this.buildKey,{status:"FAILED",message:I.message||I}),console.log(I),I}}}var qz=B;export{qz as default};
@@ -1 +1 @@
1
- import{e as Z}from"./index.9qgtmxq3.js";import{f as _}from"./index.05n3mvs9.js";import"./index.a0fxx5cv.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};
1
+ import{f as Z}from"./index.r8s8r2n7.js";import{g as _}from"./index.c8qd1bz3.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};
@@ -1 +1 @@
1
- import"./index.a0fxx5cv.js";import a from"node:fs";import r from"node:path";import m from"node:os";import I from"nunjucks";import i from"@node-red/util";import T from"@fnet/config";async function D({atom:d,setProgress:h,context:o,deploymentProject:w,deploymentProjectTarget:e,buildId:F,packageDependencies:c,njEnv:j}){await h({message:"Deploying it as node-red flow."});let{projectDir:s,templateDir:$}=o,u=d.type==="workflow"?"WF":"LIB",p;if(e.deploy.template==="simple")p={atom:d,packageDependencies:c,red:{tab:{id:e.deploy.id||i.util.generateId(),label:`${u}/${d.id?d.id:m.hostname()}/${d.name}/${e.deploy.name||e.deploy.template}`},function:{id:i.util.generateId(),name:d.doc.name,initialize:{content:a.readFileSync(r.resolve(s,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:d.doc.bundleName}},inject:{id:i.util.generateId(),...e.params?.inject,payload:e.params?.inject?.payloadType==="json"?`'${JSON.stringify(e.params?.inject?.payload)}'`:e.params?.inject?.payload},debug:{id:i.util.generateId()}}};else if(e.deploy.template==="cronjob"){let l=e.params?.schedules?cloneDeep(e.params?.schedules):void 0;l?.forEach((t)=>{if(t.payloadType==="json")t.payload=`'${JSON.stringify(t.payload)}'`}),p={atom:d,packageDependencies:c,red:{tab:{id:e.deploy.id||i.util.generateId(),label:`${u}/${d.id?d.id:m.hostname()}/${e.deploy.name||e.deploy.template}`},function:{id:i.util.generateId(),name:d.doc.name,initialize:{content:a.readFileSync(r.resolve(s,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:d.doc.bundleName}},cronjob:{id:i.util.generateId(),schedules:l},debug:{id:i.util.generateId()}}}}else if(e.deploy.template==="http")p={atom:d,packageDependencies:c,red:{tab:{id:e.deploy.id||i.util.generateId(),label:`${u}/${d.id?d.id:m.hostname()}/${e.deploy.name||e.deploy.template}`},function:{id:i.util.generateId(),name:d.doc.name,initialize:{content:a.readFileSync(r.resolve(s,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:d.doc.bundleName}},httpin:{id:i.util.generateId(),method:e.params.method||"get",url:e.params.url},httpout:{id:i.util.generateId()},debug:{id:i.util.generateId()}}};else return;let n=I.compile(a.readFileSync(r.resolve($,`deploy/node-red/${e.deploy.template}.yaml.njk`),"utf8"),j).render(p);if(a.writeFileSync(r.resolve(s,"node-red.yaml"),n),n=yaml.load(n),e.dryRun===!0)return;w.isDirty=!0;let b=(await T({name:o.redConfig||"red",dir:o.projectDir,tags:o.tags}))?.data,y=e.deploy.url||b.env.RED_URL,f={};if(e.deploy.auth!==!1)f.Authorization="Bearer "+atomAccessToken;if(!e.deploy.id){let l=await fetch(`${y}/flow`,{method:"POST",headers:{...f,"Content-Type":"application/json"},body:JSON.stringify(n)});if(!l.ok)throw Error(`Failed to create flow: ${l.statusText}`);let t=await l.json();e.deploy.id=t.id}else if(e.actions?.delete===!0){let l=await fetch(`${y}/flow/${e.deploy.id}`,{method:"DELETE",headers:f});if(!l.ok)throw Error(`Failed to delete flow: ${l.statusText}`);delete e.actions.delete,delete e.deploy.id,e.enabled=!1}else{let l=await fetch(`${y}/flow/${e.deploy.id}`,{method:"PUT",headers:{...f,"Content-Type":"application/json"},body:JSON.stringify(n)});if(!l.ok)throw Error(`Failed to update flow: ${l.statusText}`)}}export{D as default};
1
+ import"./index.5qbcx2y3.js";import a from"node:fs";import r from"node:path";import m from"node:os";import I from"nunjucks";import i from"@node-red/util";import T from"@fnet/config";async function D({atom:d,setProgress:h,context:o,deploymentProject:w,deploymentProjectTarget:e,buildId:F,packageDependencies:c,njEnv:j}){await h({message:"Deploying it as node-red flow."});let{projectDir:s,templateDir:$}=o,u=d.type==="workflow"?"WF":"LIB",p;if(e.deploy.template==="simple")p={atom:d,packageDependencies:c,red:{tab:{id:e.deploy.id||i.util.generateId(),label:`${u}/${d.id?d.id:m.hostname()}/${d.name}/${e.deploy.name||e.deploy.template}`},function:{id:i.util.generateId(),name:d.doc.name,initialize:{content:a.readFileSync(r.resolve(s,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:d.doc.bundleName}},inject:{id:i.util.generateId(),...e.params?.inject,payload:e.params?.inject?.payloadType==="json"?`'${JSON.stringify(e.params?.inject?.payload)}'`:e.params?.inject?.payload},debug:{id:i.util.generateId()}}};else if(e.deploy.template==="cronjob"){let l=e.params?.schedules?cloneDeep(e.params?.schedules):void 0;l?.forEach((t)=>{if(t.payloadType==="json")t.payload=`'${JSON.stringify(t.payload)}'`}),p={atom:d,packageDependencies:c,red:{tab:{id:e.deploy.id||i.util.generateId(),label:`${u}/${d.id?d.id:m.hostname()}/${e.deploy.name||e.deploy.template}`},function:{id:i.util.generateId(),name:d.doc.name,initialize:{content:a.readFileSync(r.resolve(s,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:d.doc.bundleName}},cronjob:{id:i.util.generateId(),schedules:l},debug:{id:i.util.generateId()}}}}else if(e.deploy.template==="http")p={atom:d,packageDependencies:c,red:{tab:{id:e.deploy.id||i.util.generateId(),label:`${u}/${d.id?d.id:m.hostname()}/${e.deploy.name||e.deploy.template}`},function:{id:i.util.generateId(),name:d.doc.name,initialize:{content:a.readFileSync(r.resolve(s,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:d.doc.bundleName}},httpin:{id:i.util.generateId(),method:e.params.method||"get",url:e.params.url},httpout:{id:i.util.generateId()},debug:{id:i.util.generateId()}}};else return;let n=I.compile(a.readFileSync(r.resolve($,`deploy/node-red/${e.deploy.template}.yaml.njk`),"utf8"),j).render(p);if(a.writeFileSync(r.resolve(s,"node-red.yaml"),n),n=yaml.load(n),e.dryRun===!0)return;w.isDirty=!0;let b=(await T({name:o.redConfig||"red",dir:o.projectDir,tags:o.tags}))?.data,y=e.deploy.url||b.env.RED_URL,f={};if(e.deploy.auth!==!1)f.Authorization="Bearer "+atomAccessToken;if(!e.deploy.id){let l=await fetch(`${y}/flow`,{method:"POST",headers:{...f,"Content-Type":"application/json"},body:JSON.stringify(n)});if(!l.ok)throw Error(`Failed to create flow: ${l.statusText}`);let t=await l.json();e.deploy.id=t.id}else if(e.actions?.delete===!0){let l=await fetch(`${y}/flow/${e.deploy.id}`,{method:"DELETE",headers:f});if(!l.ok)throw Error(`Failed to delete flow: ${l.statusText}`);delete e.actions.delete,delete e.deploy.id,e.enabled=!1}else{let l=await fetch(`${y}/flow/${e.deploy.id}`,{method:"PUT",headers:{...f,"Content-Type":"application/json"},body:JSON.stringify(n)});if(!l.ok)throw Error(`Failed to update flow: ${l.statusText}`)}}export{D as default};
@@ -1 +1 @@
1
- import"./index.a0fxx5cv.js";import p from"node:fs";import f from"node:path";import w from"semver";import k from"@fnet/shelljs";import y from"@fnet/config";async function P({setProgress:A,context:i,deploymentProject:v,deploymentProjectTarget:o,yamlTarget:u}){await A({message:"Deploying it as fnet package."});let d=i.projectDir,a=f.resolve(d,"package.json"),m=p.readFileSync(a),t=JSON.parse(m);t.name=o.params.name,t.version=w.inc(o.version,"patch"),delete t.scripts,delete t.devDependencies,p.writeFileSync(a,JSON.stringify(t,null,"\t"));let{file:r,data:e}=await y({name:o.config||"fnet-package",dir:i.projectDir,tags:i.tags});if(!e.env.ATOM_API_URL)throw Error(`ATOM_API_URL is required in ${r}`);if(!e.env.ATOM_API_USERNAME)throw Error(`ATOM_API_USERNAME is required in ${r}`);if(!e.env.ATOM_API_PASSWORD)throw Error(`ATOM_API_PASSWORD is required in ${r}`);let l=`${e.env.ATOM_API_URL}/v1/auth/token`,h=e.env.ATOM_API_USERNAME,O=e.env.ATOM_API_PASSWORD,s=await fetch(l,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:h,password:O})});if(!s.ok)throw Error(`Failed to fetch token: ${s.statusText}`);let _=(await s.json())?.access_token;if(!_)throw Error(`Invalid access_token from ${l}`);let n="fnet-files-to-gcs";if(n+=` --projectId='${e.env.GCS_PROJECT_ID}'`,n+=` --bucketName='${e.env.GCS_BUCKET_NAME}'`,n+=` --keyFilename='${f.resolve(f.dirname(r),e.env.GCS_UPLOADER_KEY_FILE)}'`,n+=` --dir='${d}'`,n+=" --pattern='dist/**/**'",n+=" --pattern='bin/**/**'",n+=" --pattern='test/**/**'",n+=" --pattern='*.html'",n+=` --destDir='${t.name}/${t.version}'`,n+=" --metadata.cacheControl='public, max-age=31536000, immutable'",e.env.DOMAIN)n+=` --domain='${e.env.DOMAIN}'`;if(o.dry_run===!0||o.params.dry_run===!0)n+=" --dryRun";if(await k(n),p.writeFileSync(a,m),o.dryRun===!0)return;v.isDirty=!0,o.version=t.version,u.set("version",t.version);let S=`${e.env.ATOM_API_URL}/v1/service/fnet-package/publish`,c=await fetch(S,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${_}`},body:JSON.stringify({name:t.name,version:t.version,version_domain:e.env.DOMAIN,docs:o.params.docs,configs:o.params.configs})});if(!c.ok)throw Error(`Failed to publish fnet package: ${c.statusText}`);if((await c.json())?.error)throw Error("Failed to publish fnet package.")}export{P as default};
1
+ import"./index.5qbcx2y3.js";import p from"node:fs";import f from"node:path";import w from"semver";import k from"@fnet/shelljs";import y from"@fnet/config";async function P({setProgress:A,context:i,deploymentProject:v,deploymentProjectTarget:o,yamlTarget:u}){await A({message:"Deploying it as fnet package."});let d=i.projectDir,a=f.resolve(d,"package.json"),m=p.readFileSync(a),t=JSON.parse(m);t.name=o.params.name,t.version=w.inc(o.version,"patch"),delete t.scripts,delete t.devDependencies,p.writeFileSync(a,JSON.stringify(t,null,"\t"));let{file:r,data:e}=await y({name:o.config||"fnet-package",dir:i.projectDir,tags:i.tags});if(!e.env.ATOM_API_URL)throw Error(`ATOM_API_URL is required in ${r}`);if(!e.env.ATOM_API_USERNAME)throw Error(`ATOM_API_USERNAME is required in ${r}`);if(!e.env.ATOM_API_PASSWORD)throw Error(`ATOM_API_PASSWORD is required in ${r}`);let l=`${e.env.ATOM_API_URL}/v1/auth/token`,h=e.env.ATOM_API_USERNAME,O=e.env.ATOM_API_PASSWORD,s=await fetch(l,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:h,password:O})});if(!s.ok)throw Error(`Failed to fetch token: ${s.statusText}`);let _=(await s.json())?.access_token;if(!_)throw Error(`Invalid access_token from ${l}`);let n="fnet-files-to-gcs";if(n+=` --projectId='${e.env.GCS_PROJECT_ID}'`,n+=` --bucketName='${e.env.GCS_BUCKET_NAME}'`,n+=` --keyFilename='${f.resolve(f.dirname(r),e.env.GCS_UPLOADER_KEY_FILE)}'`,n+=` --dir='${d}'`,n+=" --pattern='dist/**/**'",n+=" --pattern='bin/**/**'",n+=" --pattern='test/**/**'",n+=" --pattern='*.html'",n+=` --destDir='${t.name}/${t.version}'`,n+=" --metadata.cacheControl='public, max-age=31536000, immutable'",e.env.DOMAIN)n+=` --domain='${e.env.DOMAIN}'`;if(o.dry_run===!0||o.params.dry_run===!0)n+=" --dryRun";if(await k(n),p.writeFileSync(a,m),o.dryRun===!0)return;v.isDirty=!0,o.version=t.version,u.set("version",t.version);let S=`${e.env.ATOM_API_URL}/v1/service/fnet-package/publish`,c=await fetch(S,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${_}`},body:JSON.stringify({name:t.name,version:t.version,version_domain:e.env.DOMAIN,docs:o.params.docs,configs:o.params.configs})});if(!c.ok)throw Error(`Failed to publish fnet package: ${c.statusText}`);if((await c.json())?.error)throw Error("Failed to publish fnet package.")}export{P as default};
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
- import{e as S}from"./index.9qgtmxq3.js";import{f as s}from"./index.05n3mvs9.js";import{i as E}from"./index.a0fxx5cv.js";import Qz from"yargs";import _q from"chalk";import{ProcessManager as Zz}from"@fnet/shell-flow";import k from"node:path";import{spawn as P}from"node:child_process";import f from"node:fs";import x from"chalk";import Rq from"@fnet/config";import{promisify as Fq}from"node:util";import Aq from"tree-kill";var r=Fq(Aq),n=!1;async function m(q,z){if(n)return;if(n=!0,!q.killed&&q.pid)try{if(await r(q.pid,"SIGTERM").catch(()=>{}),await new Promise((Q)=>setTimeout(Q,500)),!q.killed)await r(q.pid,"SIGKILL").catch(()=>{})}catch(Q){}await new Promise((Q)=>setTimeout(Q,100));let Z=z==="SIGINT"?130:z==="SIGTERM"?143:1;process.exit(Z)}function D(q){["SIGINT","SIGTERM","SIGQUIT"].forEach((z)=>{process.once(z,async()=>{await m(q,z)})}),process.on("uncaughtException",async(z)=>{await m(q)}),process.on("unhandledRejection",async(z)=>{await m(q)}),q.on("close",(z)=>{if(!n)process.exit(z)})}function w(q,{name:z,bin:Z,preArgs:Q=[],createContext:$}){if(typeof Z==="function")Z=Z();return q.command(`${z||Z} [commands..]`,`${Z} ${Q.join(" ")}`,(W)=>{return W.help(!1).version(!1)},async(W)=>{try{let G=await $(W),{projectDir:K}=G,O=(F)=>{if(!F.includes(" "))return F;if(process.platform==="win32")return`"${F.replace(/(["^])/g,"^$1")}"`;else return`"${F.replace(/(["\\$`])/g,"\\$1")}"`},H=process.argv.slice(3).map(O),U={...process.env},Y=k.join(K,"node_modules");U.NODE_PATH=Y,U.NODE_PRESERVE_SYMLINKS=1;let X=P(Z,[...Q,...H],{cwd:K,stdio:"inherit",shell:!0,detached:!0,env:U});D(X)}catch(G){console.error(G.message),process.exit(1)}})}function y(q,{name:z,bin:Z,preArgs:Q=[],createContext:$}){return q.command(`${z||Z} [commands..]`,`${Z} ${Q.join(" ")}`,(W)=>{return W.help(!1).version(!1)},async(W)=>{try{let G=await $(W),{projectDir:K}=G,O=(Y)=>{if(!Y.includes(" "))return Y;if(process.platform==="win32")return`"${Y.replace(/(["^])/g,"^$1")}"`;else return`"${Y.replace(/(["\\$`])/g,"\\$1")}"`},H=process.argv.slice(3).map(O);Z=k.join(K,".conda","bin",Z||z);let U=P(Z,[...Q,...H],{cwd:K,stdio:"inherit",shell:!0,detached:!0,env:{PYTHONPATH:K}});D(U)}catch(G){console.error(G.message),process.exit(1)}})}function t(q,{name:z,createContext:Z}){return q.command(`${z} <binary> [commands..]`,"Run a binary from conda environment",(Q)=>{return Q.positional("binary",{type:"string",describe:"Binary name to run from .conda/bin"}).help(!1).version(!1)},async(Q)=>{try{let $=await Z(Q),{projectDir:W}=$,G=(Y)=>{if(!Y.includes(" "))return Y;if(process.platform==="win32")return`"${Y.replace(/(["^])/g,"^$1")}"`;else return`"${Y.replace(/(["\\$`])/g,"\\$1")}"`},K=Q.binary,O=process.argv.slice(4).map(G),H=k.join(W,".conda","bin",K),U=P(H,O,{cwd:W,stdio:"inherit",shell:!0,detached:!0,env:{PYTHONPATH:W}});D(U)}catch($){console.error($.message),process.exit(1)}})}function e(q,{name:z,preArgs:Z=[],createContext:Q}){return q.command(`${z} <config> <command> [options..]`,"Run a command with a config context",($)=>{return $.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)},async($)=>{try{let W=await Q($),{projectDir:G}=W,K=$.config,H=(await Rq({name:K,dir:G,transferEnv:!1,optional:!0,tags:W.tags}))?.data?.env||void 0,U=$.command,Y=process.argv.slice(5),X=P(U,[...Z,...Y],{cwd:f.existsSync(G)?G:process.cwd(),stdio:"inherit",shell:!0,detached:!0,env:{...process.env,...H}});D(X)}catch(W){console.error(W.message),process.exit(1)}})}function qq(q,{name:z,projectType:Z="auto",processManager:Q}){return q.command(`${z} group [options..]`,"Run a command group.",($)=>{return $.positional("group",{type:"string"}).option("ftag",{type:"array"}).help(!1).version(!1)},async($)=>{try{let{runCommandGroup:W}=await import("./index.2q2ggmej.js");await W({projectType:Z,group:$.group,tags:$.ftag,args:$,argv:process.argv,processManager:Q})}catch(W){console.error(W.message),process.exit(1)}})}function zq(q,{name:z,createContext:Z}){return q.command(`${z} [options]`,"Install the project as a binary",(Q)=>{return Q.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(Q)=>{try{let $=await Z(Q),{projectDir:W}=$;console.log(x.blue("Compiling project..."));let G=k.join(W,".bin");if(!f.existsSync(G))f.mkdirSync(G,{recursive:!0});let K=k.basename(k.dirname(W)),O=$.project?.projectFileParsed?.features?.cli?.bin,H=Q.name||O||K;console.log(x.blue(`Using binary name: ${H}`));let U=k.join(G,H),{spawn:Y}=await import("child_process"),X=Y("bun",["build","./dist/cli/esm/index.js","--compile",`--outfile=${U}`],{cwd:W,stdio:"inherit",shell:!0});if(await new Promise((b,A)=>{X.on("close",(R)=>{if(R===0)b();else A(Error(`Compilation failed with code ${R}`))}),X.on("error",(R)=>{A(R)})}),process.platform!=="win32")f.chmodSync(U,493);console.log(x.green(`Binary compiled successfully: ${U}`)),console.log(x.blue("Installing binary..."));let F=["install",U];if(Q.name)F.push("--name",Q.name);if(Q.force)F.push("--force");if(Q.yes)F.push("--yes");let C=Y("fbin",F,{stdio:"inherit",shell:!0});await new Promise((b,A)=>{C.on("close",(R)=>{if(R===0)b();else A(Error(`Installation failed with code ${R}`))}),C.on("error",(R)=>{A(R)})})}catch($){console.error(x.red(`Failed to install binary: ${$.message}`)),process.exit(1)}})}import _ from"node:path";import I from"node:fs";import Qq from"@fnet/yaml";import Nq from"yaml";async function V(q){if(q.id)return{id:q.id,buildId:q.buildId,mode:q.mode,protocol:q.protocol||"ac:",templateDir:S("./template/fnode/node"),projectDir:_.resolve(process.cwd(),`./.output/${q.id}`),tags:q.ftag,dev:q.dev,bpmn:q.bpmn===!0};else try{let z=await Bq({tags:q.ftag}),Z=z.runtime.type==="bun"?"node":z.runtime.type;return{buildId:q.buildId,mode:q.mode,protocol:q.protocol||"src:",templateDir:S(`./template/fnode/${Z}`),projectDir:_.resolve(z.projectDir,"./.workspace"),projectSrcDir:_.resolve(z.projectDir,"./src"),projectSrcDirSymlink:_.resolve(z.projectDir,"./.workspace/src-core"),projectAppDir:_.resolve(z.projectDir,"./app"),projectAppDirSymlink:_.resolve(z.projectDir,"./.workspace/app"),projectCliDir:_.resolve(z.projectDir,"./cli"),projectCliDirSymlink:_.resolve(z.projectDir,"./.workspace/cli"),project:z,tags:q.ftag,dev:q.dev,bpmn:q.bpmn===!0}}catch(z){return console.warn(`Warning: Could not load project: ${z.message}`),{projectDir:process.cwd(),tags:q.ftag}}}async function Bq({tags:q}){let z=kq(process.cwd());if(!I.existsSync(z))throw Error("fnode.yaml file not found in current directory.");let{raw:Z,parsed:Q}=await Qq({file:z,tags:q}),$=_.dirname(z);Q.features=Q.features||{};let W=Q.features;if(W.runtime=W.runtime||{},W.runtime.type=W.runtime.type||"node",W.runtime.type==="python")W.runtime.template=W.runtime.template||"python";else if(W.runtime.type==="bun")W.runtime.template=W.runtime.template||"node";else W.runtime.template=W.runtime.template||"node";let G={libraryAtom:{doc:{...Q},fileName:"index"},projectDir:$,projectFilePath:z,projectFileContent:Z,projectFileParsed:Q,runtime:W.runtime},K=_.resolve($,"fnet/targets.yaml");if(!I.existsSync(K)){if(K=_.resolve($,"node.devops.yaml"),I.existsSync(K)){let H=_.resolve($,"fnet");if(!I.existsSync(H))I.mkdirSync(H);I.copyFileSync(K,_.resolve($,"fnet/targets.yaml")),I.unlinkSync(K)}}if(I.existsSync(K)){let{raw:H,parsed:U}=await Qq({file:K,tags:q}),Y=Nq.parseDocument(H);G.devops={filePath:K,fileContent:H,yamlDocument:Y,doc:{...U},type:"library.deploy",save:async()=>{I.writeFileSync(G.devops.filePath,Y.toString())}}}let O=_.resolve($,"readme.md");if(I.existsSync(O)){let H=I.readFileSync(O,"utf8");G.readme={filePath:O,fileContent:H,doc:{content:H,"content-type":"markdown"},type:"wiki"}}return G}function kq(q){let z=_.resolve(q,"node.yaml"),Z=_.resolve(q,"fnode.yaml");if(I.existsSync(Z))return Z;if(I.existsSync(z))try{let Q=I.readFileSync(z,"utf8");return I.writeFileSync(Z,Q,"utf8"),I.unlinkSync(z),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}`),z}return Z}import Eq from"node:path";import Zq from"node:fs";import Sq from"node:os";import Dq from"@flownet/lib-render-templates-dir";import c from"@fnet/shelljs";var xq={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 z=process.cwd(),Z=S("./template/fnode/project"),Q=Eq.resolve(z,q.name);if(!Zq.existsSync(Q))Zq.mkdirSync(Q);await Dq({dir:Z,outDir:Q,context:{name:q.name,runtime:q.runtime,platform:Sq.platform()},copyUnmatchedAlso:!0});let $=await c("fnode build",{cwd:Q});if($.code!==0)throw Error("Failed to build project.");if(s("git")){if($=await c("git init --initial-branch=main",{cwd:Q}),$.code!==0)throw Error("Failed to initialize git.")}if(s("code")&&q.vscode){if($=await c(`cd ${Q} && code .`),$.code!==0)throw Error("Failed to open vscode.")}console.log("Creating project succeeded!"),process.exit(0)}catch(z){console.error("Initialization failed!",z.message),process.exit(1)}}},$q=xq;import yq from"node:os";import Cq from"@flownet/lib-render-templates-dir";import bq from"@fnet/shelljs";var fq={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 z=S("./template/fnode/project"),Z=process.cwd(),Q=await V(q);if(q.update){if(await Cq({dir:z,outDir:Z,context:{name:Q.project.projectFileParsed.name,runtime:Q.project.runtime.type,platform:yq.platform()},copyUnmatchedAlso:!0}),(await bq("fnode build",{cwd:Z})).code!==0)throw Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(z){console.error("Project failed.",z.message),process.exit(1)}}},Gq=fq;class Wq{static async createBuilder(q){if(!q.project)return console.warn("No project provided, defaulting to node runtime"),new(await import("./index.f9z32b48.js")).default(q);let z=q.project?.runtime?.type||"node";try{return new(await this.loadBuilderClass(z))(q)}catch(Z){throw Error(`Failed to create builder for runtime '${z}': ${Z.message}`)}}static async loadBuilderClass(q){switch(q.toLowerCase()){case"node":case"bun":return(await import("./index.f9z32b48.js")).default;case"python":return(await import("./index.hc15cpdb.js")).default;default:throw Error(`Unsupported runtime type: ${q}`)}}}var B=Wq;var Pq={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 z=await V(q),Z=await B.createBuilder(z);await Z.init(),await Z.build(),console.log("Building library succeeded!"),process.exit(0)}catch(z){console.error("Building library failed!",z.message),process.exit(1)}}},Kq=Pq;var vq={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 z=await V(q),Z=await B.createBuilder(z);await Z.init(),await Z.build(),console.log("Building library succeeded!"),process.exit(0)}catch(z){console.error("Building library failed!",z.message),process.exit(1)}}},Yq=vq;var jq={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 z=await V({...q,mode:"all"}),Z=await B.createBuilder(z);await Z.init(),await Z.build(),console.log("Building library succeeded!"),process.exit(0)}catch(z){console.error("Building library failed!",z.message),process.exit(1)}}},Jq=jq;var uq={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 z=await V({...q,mode:"file"}),Z=await B.createBuilder(z);await Z.init(),await Z.build(),console.log("Building library succeeded!"),process.exit(0)}catch(z){console.error("Building library failed!",z.message),process.exit(1)}}},Uq=uq;import Hq from"node:path";import v from"node:fs";import gq from"@fnet/prompt";var hq={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 z=await V(q),{project:Z}=z,{projectDir:Q,projectFileParsed:$}=Z,W=$.input;if(!W)throw Error("Config schema not found in project file.");if(!Reflect.has(q,"name")){let{inputName:Y}=await gq({type:"input",name:"inputName",message:"Input name:",initial:"dev"});q.name=Y}let G=Hq.resolve(Q,".fnet");if(!v.existsSync(G))v.mkdirSync(G);let K=Hq.resolve(G,`${q.name}.fnet`),O=v.existsSync(K),H=(await import("@fnet/object-from-schema")).default,U=await H({schema:W,format:"yaml",ref:O?K:void 0});v.writeFileSync(K,U)}catch(z){console.error(z.message),process.exit(1)}}},Lq=hq;import M from"node:path";import L from"node:fs";import u from"node:os";import{spawn as g}from"node:child_process";import J from"chalk";import N from"@fnet/prompt";import j from"chalk";import Oq from"@fnet/prompt";async function pq(q){let{items:z,message:Z,nameField:Q="name",valueField:$="name",initialValue:W=null,allowAbort:G=!0}=q;if(!z||z.length===0)return console.log(j.yellow("No items available for selection.")),null;if(z.length===1&&!G){let Y=z[0],X=typeof Y==="string"?Y:Y[$];return console.log(j.blue(`Only one option available: ${typeof Y==="string"?Y:Y[Q]}`)),X}let K=z.map((Y)=>{if(typeof Y==="string")return{name:Y,value:Y,message:Y};else return{name:Y[$],value:Y[$],message:Y[Q]||Y[$]}});if(G)K.push({name:"cancel",value:null,message:j.yellow("Cancel")});let O=null;if(W){let Y=K.findIndex((X)=>X.name===W);if(Y!==-1)O=Y}let H="selectedItem",{[H]:U}=await Oq({type:"select",name:H,message:Z,choices:K,initial:O});if(U==="cancel")return null;return U}async function lq(q){let{items:z,message:Z,nameField:Q="name",valueField:$="name",initialValues:W=[],allowAbort:G=!0}=q;if(!z||z.length===0)return console.log(j.yellow("No items available for selection.")),null;let K=z.map((Y)=>{if(typeof Y==="string")return{name:Y,value:Y,message:Y};else return{name:Y[$],value:Y[$],message:Y[Q]||Y[$]}}),O=[];if(W&&W.length>0)O=K.map((Y,X)=>W.includes(Y.name)?X:-1).filter((Y)=>Y!==-1);let H="selectedItems",U=await Oq({type:"multiselect",name:H,message:Z,choices:K,initial:O,hint:"(Use space to select, enter to confirm)",validate:(Y)=>{if(Y.length===0&&!G)return"Please select at least one item";return!0}});if(G&&U[H].length===0)return null;return U[H]}var i={promptForSelection:pq,promptForMultipleSelection:lq};var T=M.join(u.homedir(),".fnet","express");async function Mq(q){q.command(["$0 [project-name]","create [project-name]"],"Create a new express project",(z)=>{return z.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(z)=>{await dq(z)}).command("list","List express projects",(z)=>{return z.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(z)=>{await mq(z)}).command("open [project-name]","Open an express project",(z)=>{return z.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(z)=>{await nq(z)}).command("move [project-name] [destination]","Move an express project to a real project location",(z)=>{return z.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(z)=>{await cq(z)}).command("remove [project-name]","Remove an express project",(z)=>{return z.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(z)=>{await iq(z)}).command("enter [project-name]","Enter the directory of an express project in the active terminal",(z)=>{return z.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(z)=>{await oq(z)}).demandCommand(1,"You need to specify a command").help()}async function dq(q){try{if(!L.existsSync(T))L.mkdirSync(T,{recursive:!0});let z=new Date().toISOString().slice(0,10).replace(/-/g,""),Z=M.join(T,z);if(!L.existsSync(Z))L.mkdirSync(Z,{recursive:!0});let Q=q.projectName,$,W=q.runtime;if(!q.yes){if(!Q){let X=L.readdirSync(Z).filter((A)=>A.startsWith("fnode-")).map((A)=>parseInt(A.replace("fnode-",""),10)).filter((A)=>!isNaN(A)),C=`fnode-${X.length>0?Math.max(...X)+1:1}`;Q=(await N([{type:"input",name:"projectName",message:"Enter project name:",default:C}])).projectName}W=(await N({type:"select",name:"runtime",message:"Select runtime:",choices:["node","python","bun"],initial:W||"node"})).runtime}else{if(!Q){let U=L.readdirSync(Z).filter((X)=>X.startsWith("fnode-")).map((X)=>parseInt(X.replace("fnode-",""),10)).filter((X)=>!isNaN(X));Q=`fnode-${U.length>0?Math.max(...U)+1:1}`}if(!W)W="node"}if($=M.join(Z,Q),L.existsSync($)){let U=1;while(L.existsSync(M.join(Z,`${Q}-${U}`)))U++;Q=`${Q}-${U}`,$=M.join(Z,Q)}if(!q.yes){if(!(await N([{type:"confirm",name:"proceed",message:`Create express project "${Q}" in ${$}?`,default:!0}])).proceed){console.log(J.yellow("Project creation cancelled."));return}}console.log(J.blue(`Creating express project "${Q}" in ${$}...`));let G=M.dirname($),O=["create","--name",M.basename($)];if(O.push("--runtime",W),q.yes)O.push("--yes");if(!L.existsSync(G))L.mkdirSync(G,{recursive:!0});let H=g("fnode",O,{stdio:"inherit",shell:!0,cwd:G});return new Promise((U,Y)=>{H.on("close",(X)=>{if(X===0)if(console.log(J.green(`
2
+ import{e as Zq}from"./index.wbt2dhhm.js";import{f as S}from"./index.r8s8r2n7.js";import{g as s}from"./index.c8qd1bz3.js";import{j as E}from"./index.5qbcx2y3.js";import Zz from"yargs";import Fq from"chalk";import{ProcessManager as $z}from"@fnet/shell-flow";import k from"node:path";import{spawn as P}from"node:child_process";import f from"node:fs";import x from"chalk";import Nq from"@fnet/config";import{promisify as Aq}from"node:util";import Rq from"tree-kill";var r=Aq(Rq),n=!1;async function m(q,z){if(n)return;if(n=!0,!q.killed&&q.pid)try{if(await r(q.pid,"SIGTERM").catch(()=>{}),await new Promise((Q)=>setTimeout(Q,500)),!q.killed)await r(q.pid,"SIGKILL").catch(()=>{})}catch(Q){}await new Promise((Q)=>setTimeout(Q,100));let Z=z==="SIGINT"?130:z==="SIGTERM"?143:1;process.exit(Z)}function D(q){["SIGINT","SIGTERM","SIGQUIT"].forEach((z)=>{process.once(z,async()=>{await m(q,z)})}),process.on("uncaughtException",async(z)=>{await m(q)}),process.on("unhandledRejection",async(z)=>{await m(q)}),q.on("close",(z)=>{if(!n)process.exit(z)})}function w(q,{name:z,bin:Z,preArgs:Q=[],createContext:$}){if(typeof Z==="function")Z=Z();return q.command(`${z||Z} [commands..]`,`${Z} ${Q.join(" ")}`,(W)=>{return W.help(!1).version(!1)},async(W)=>{try{let G=await $(W),{projectDir:K}=G,O=(F)=>{if(!F.includes(" "))return F;if(process.platform==="win32")return`"${F.replace(/(["^])/g,"^$1")}"`;else return`"${F.replace(/(["\\$`])/g,"\\$1")}"`},H=process.argv.slice(3).map(O),U={...process.env},Y=k.join(K,"node_modules");U.NODE_PATH=Y,U.NODE_PRESERVE_SYMLINKS=1;let X=P(Z,[...Q,...H],{cwd:K,stdio:"inherit",shell:!0,detached:!0,env:U});D(X)}catch(G){console.error(G.message),process.exit(1)}})}function y(q,{name:z,bin:Z,preArgs:Q=[],createContext:$}){return q.command(`${z||Z} [commands..]`,`${Z} ${Q.join(" ")}`,(W)=>{return W.help(!1).version(!1)},async(W)=>{try{let G=await $(W),{projectDir:K}=G,O=(Y)=>{if(!Y.includes(" "))return Y;if(process.platform==="win32")return`"${Y.replace(/(["^])/g,"^$1")}"`;else return`"${Y.replace(/(["\\$`])/g,"\\$1")}"`},H=process.argv.slice(3).map(O);Z=k.join(K,".conda","bin",Z||z);let U=P(Z,[...Q,...H],{cwd:K,stdio:"inherit",shell:!0,detached:!0,env:{PYTHONPATH:K}});D(U)}catch(G){console.error(G.message),process.exit(1)}})}function t(q,{name:z,createContext:Z}){return q.command(`${z} <binary> [commands..]`,"Run a binary from conda environment",(Q)=>{return Q.positional("binary",{type:"string",describe:"Binary name to run from .conda/bin"}).help(!1).version(!1)},async(Q)=>{try{let $=await Z(Q),{projectDir:W}=$,G=(Y)=>{if(!Y.includes(" "))return Y;if(process.platform==="win32")return`"${Y.replace(/(["^])/g,"^$1")}"`;else return`"${Y.replace(/(["\\$`])/g,"\\$1")}"`},K=Q.binary,O=process.argv.slice(4).map(G),H=k.join(W,".conda","bin",K),U=P(H,O,{cwd:W,stdio:"inherit",shell:!0,detached:!0,env:{PYTHONPATH:W}});D(U)}catch($){console.error($.message),process.exit(1)}})}function e(q,{name:z,preArgs:Z=[],createContext:Q}){return q.command(`${z} <config> <command> [options..]`,"Run a command with a config context",($)=>{return $.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)},async($)=>{try{let W=await Q($),{projectDir:G}=W,K=$.config,H=(await Nq({name:K,dir:G,transferEnv:!1,optional:!0,tags:W.tags}))?.data?.env||void 0,U=$.command,Y=process.argv.slice(5),X=P(U,[...Z,...Y],{cwd:f.existsSync(G)?G:process.cwd(),stdio:"inherit",shell:!0,detached:!0,env:{...process.env,...H}});D(X)}catch(W){console.error(W.message),process.exit(1)}})}function qq(q,{name:z,projectType:Z="auto",processManager:Q}){return q.command(`${z} group [options..]`,"Run a command group.",($)=>{return $.positional("group",{type:"string"}).option("ftag",{type:"array"}).help(!1).version(!1)},async($)=>{try{let{runCommandGroup:W}=await import("./index.c7szj58t.js");await W({projectType:Z,group:$.group,tags:$.ftag,args:$,argv:process.argv,processManager:Q})}catch(W){console.error(W.message),process.exit(1)}})}function zq(q,{name:z,createContext:Z}){return q.command(`${z} [options]`,"Install the project as a binary",(Q)=>{return Q.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(Q)=>{try{let $=await Z(Q),{projectDir:W}=$;console.log(x.blue("Compiling project..."));let G=k.join(W,".bin");if(!f.existsSync(G))f.mkdirSync(G,{recursive:!0});let K=k.basename(k.dirname(W)),O=$.project?.projectFileParsed?.features?.cli?.bin,H=Q.name||O||K;console.log(x.blue(`Using binary name: ${H}`));let U=k.join(G,H),{spawn:Y}=await import("child_process"),X=Y("bun",["build","./dist/cli/esm/index.js","--compile",`--outfile=${U}`],{cwd:W,stdio:"inherit",shell:!0});if(await new Promise((b,A)=>{X.on("close",(R)=>{if(R===0)b();else A(Error(`Compilation failed with code ${R}`))}),X.on("error",(R)=>{A(R)})}),process.platform!=="win32")f.chmodSync(U,493);console.log(x.green(`Binary compiled successfully: ${U}`)),console.log(x.blue("Installing binary..."));let F=["install",U];if(Q.name)F.push("--name",Q.name);if(Q.force)F.push("--force");if(Q.yes)F.push("--yes");let C=Y("fbin",F,{stdio:"inherit",shell:!0});await new Promise((b,A)=>{C.on("close",(R)=>{if(R===0)b();else A(Error(`Installation failed with code ${R}`))}),C.on("error",(R)=>{A(R)})})}catch($){console.error(x.red(`Failed to install binary: ${$.message}`)),process.exit(1)}})}import _ from"node:path";import I from"node:fs";import Qq from"@fnet/yaml";import Bq from"yaml";async function V(q){let z=Zq(q.ftag);if(q.id)return{id:q.id,buildId:q.buildId,mode:q.mode,protocol:q.protocol||"ac:",templateDir:S("./template/fnode/node"),projectDir:_.resolve(process.cwd(),`./.output/${q.id}`),tags:z,dev:q.dev,bpmn:q.bpmn===!0};else try{let Z=await kq({tags:z}),Q=Z.runtime.type==="bun"?"node":Z.runtime.type;return{buildId:q.buildId,mode:q.mode,protocol:q.protocol||"src:",templateDir:S(`./template/fnode/${Q}`),projectDir:_.resolve(Z.projectDir,"./.workspace"),projectSrcDir:_.resolve(Z.projectDir,"./src"),projectSrcDirSymlink:_.resolve(Z.projectDir,"./.workspace/src-core"),projectAppDir:_.resolve(Z.projectDir,"./app"),projectAppDirSymlink:_.resolve(Z.projectDir,"./.workspace/app"),projectCliDir:_.resolve(Z.projectDir,"./cli"),projectCliDirSymlink:_.resolve(Z.projectDir,"./.workspace/cli"),project:Z,tags:z,dev:q.dev,bpmn:q.bpmn===!0}}catch(Z){return console.warn(`Warning: Could not load project: ${Z.message}`),{projectDir:process.cwd(),tags:z}}}async function kq({tags:q}){let z=Eq(process.cwd());if(!I.existsSync(z))throw Error("fnode.yaml file not found in current directory.");let{raw:Z,parsed:Q}=await Qq({file:z,tags:q}),$=_.dirname(z);Q.features=Q.features||{};let W=Q.features;if(W.runtime=W.runtime||{},W.runtime.type=W.runtime.type||"node",W.runtime.type==="python")W.runtime.template=W.runtime.template||"python";else if(W.runtime.type==="bun")W.runtime.template=W.runtime.template||"node";else W.runtime.template=W.runtime.template||"node";let G={libraryAtom:{doc:{...Q},fileName:"index"},projectDir:$,projectFilePath:z,projectFileContent:Z,projectFileParsed:Q,runtime:W.runtime},K=_.resolve($,"fnet/targets.yaml");if(!I.existsSync(K)){if(K=_.resolve($,"node.devops.yaml"),I.existsSync(K)){let H=_.resolve($,"fnet");if(!I.existsSync(H))I.mkdirSync(H);I.copyFileSync(K,_.resolve($,"fnet/targets.yaml")),I.unlinkSync(K)}}if(I.existsSync(K)){let{raw:H,parsed:U}=await Qq({file:K,tags:q}),Y=Bq.parseDocument(H);G.devops={filePath:K,fileContent:H,yamlDocument:Y,doc:{...U},type:"library.deploy",save:async()=>{I.writeFileSync(G.devops.filePath,Y.toString())}}}let O=_.resolve($,"readme.md");if(I.existsSync(O)){let H=I.readFileSync(O,"utf8");G.readme={filePath:O,fileContent:H,doc:{content:H,"content-type":"markdown"},type:"wiki"}}return G}function Eq(q){let z=_.resolve(q,"node.yaml"),Z=_.resolve(q,"fnode.yaml");if(I.existsSync(Z))return Z;if(I.existsSync(z))try{let Q=I.readFileSync(z,"utf8");return I.writeFileSync(Z,Q,"utf8"),I.unlinkSync(z),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}`),z}return Z}import Sq from"node:path";import $q from"node:fs";import Dq from"node:os";import xq from"@flownet/lib-render-templates-dir";import c from"@fnet/shelljs";var yq={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 z=process.cwd(),Z=S("./template/fnode/project"),Q=Sq.resolve(z,q.name);if(!$q.existsSync(Q))$q.mkdirSync(Q);await xq({dir:Z,outDir:Q,context:{name:q.name,runtime:q.runtime,platform:Dq.platform()},copyUnmatchedAlso:!0});let $=await c("fnode build",{cwd:Q});if($.code!==0)throw Error("Failed to build project.");if(s("git")){if($=await c("git init --initial-branch=main",{cwd:Q}),$.code!==0)throw Error("Failed to initialize git.")}if(s("code")&&q.vscode){if($=await c(`cd ${Q} && code .`),$.code!==0)throw Error("Failed to open vscode.")}console.log("Creating project succeeded!"),process.exit(0)}catch(z){console.error("Initialization failed!",z.message),process.exit(1)}}},Gq=yq;import Cq from"node:os";import bq from"@flownet/lib-render-templates-dir";import fq from"@fnet/shelljs";var Pq={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 z=S("./template/fnode/project"),Z=process.cwd(),Q=await V(q);if(q.update){if(await bq({dir:z,outDir:Z,context:{name:Q.project.projectFileParsed.name,runtime:Q.project.runtime.type,platform:Cq.platform()},copyUnmatchedAlso:!0}),(await fq("fnode build",{cwd:Z})).code!==0)throw Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(z){console.error("Project failed.",z.message),process.exit(1)}}},Wq=Pq;class Kq{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 z=q.project?.runtime?.type||"node";try{return new(await this.loadBuilderClass(z))(q)}catch(Z){throw Error(`Failed to create builder for runtime '${z}': ${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 B=Kq;var vq={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 z=await V(q),Z=await B.createBuilder(z);await Z.init(),await Z.build(),console.log("Building library succeeded!"),process.exit(0)}catch(z){console.error("Building library failed!",z.message),process.exit(1)}}},Yq=vq;var jq={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 z=await V(q),Z=await B.createBuilder(z);await Z.init(),await Z.build(),console.log("Building library succeeded!"),process.exit(0)}catch(z){console.error("Building library failed!",z.message),process.exit(1)}}},Jq=jq;var uq={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 z=await V({...q,mode:"all"}),Z=await B.createBuilder(z);await Z.init(),await Z.build(),console.log("Building library succeeded!"),process.exit(0)}catch(z){console.error("Building library failed!",z.message),process.exit(1)}}},Uq=uq;var gq={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 z=await V({...q,mode:"file"}),Z=await B.createBuilder(z);await Z.init(),await Z.build(),console.log("Building library succeeded!"),process.exit(0)}catch(z){console.error("Building library failed!",z.message),process.exit(1)}}},Hq=gq;import Lq from"node:path";import v from"node:fs";import hq from"@fnet/prompt";var pq={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 z=await V(q),{project:Z}=z,{projectDir:Q,projectFileParsed:$}=Z,W=$.input;if(!W)throw Error("Config schema not found in project file.");if(!Reflect.has(q,"name")){let{inputName:Y}=await hq({type:"input",name:"inputName",message:"Input name:",initial:"dev"});q.name=Y}let G=Lq.resolve(Q,".fnet");if(!v.existsSync(G))v.mkdirSync(G);let K=Lq.resolve(G,`${q.name}.fnet`),O=v.existsSync(K),H=(await import("@fnet/object-from-schema")).default,U=await H({schema:W,format:"yaml",ref:O?K:void 0});v.writeFileSync(K,U)}catch(z){console.error(z.message),process.exit(1)}}},Oq=pq;import M from"node:path";import L from"node:fs";import u from"node:os";import{spawn as g}from"node:child_process";import J from"chalk";import N from"@fnet/prompt";import j from"chalk";import Vq from"@fnet/prompt";async function lq(q){let{items:z,message:Z,nameField:Q="name",valueField:$="name",initialValue:W=null,allowAbort:G=!0}=q;if(!z||z.length===0)return console.log(j.yellow("No items available for selection.")),null;if(z.length===1&&!G){let Y=z[0],X=typeof Y==="string"?Y:Y[$];return console.log(j.blue(`Only one option available: ${typeof Y==="string"?Y:Y[Q]}`)),X}let K=z.map((Y)=>{if(typeof Y==="string")return{name:Y,value:Y,message:Y};else return{name:Y[$],value:Y[$],message:Y[Q]||Y[$]}});if(G)K.push({name:"cancel",value:null,message:j.yellow("Cancel")});let O=null;if(W){let Y=K.findIndex((X)=>X.name===W);if(Y!==-1)O=Y}let H="selectedItem",{[H]:U}=await Vq({type:"select",name:H,message:Z,choices:K,initial:O});if(U==="cancel")return null;return U}async function dq(q){let{items:z,message:Z,nameField:Q="name",valueField:$="name",initialValues:W=[],allowAbort:G=!0}=q;if(!z||z.length===0)return console.log(j.yellow("No items available for selection.")),null;let K=z.map((Y)=>{if(typeof Y==="string")return{name:Y,value:Y,message:Y};else return{name:Y[$],value:Y[$],message:Y[Q]||Y[$]}}),O=[];if(W&&W.length>0)O=K.map((Y,X)=>W.includes(Y.name)?X:-1).filter((Y)=>Y!==-1);let H="selectedItems",U=await Vq({type:"multiselect",name:H,message:Z,choices:K,initial:O,hint:"(Use space to select, enter to confirm)",validate:(Y)=>{if(Y.length===0&&!G)return"Please select at least one item";return!0}});if(G&&U[H].length===0)return null;return U[H]}var i={promptForSelection:lq,promptForMultipleSelection:dq};var T=M.join(u.homedir(),".fnet","express");async function Xq(q){q.command(["$0 [project-name]","create [project-name]"],"Create a new express project",(z)=>{return z.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(z)=>{await mq(z)}).command("list","List express projects",(z)=>{return z.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(z)=>{await nq(z)}).command("open [project-name]","Open an express project",(z)=>{return z.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(z)=>{await cq(z)}).command("move [project-name] [destination]","Move an express project to a real project location",(z)=>{return z.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(z)=>{await sq(z)}).command("remove [project-name]","Remove an express project",(z)=>{return z.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(z)=>{await oq(z)}).command("enter [project-name]","Enter the directory of an express project in the active terminal",(z)=>{return z.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(z)=>{await aq(z)}).demandCommand(1,"You need to specify a command").help()}async function mq(q){try{if(!L.existsSync(T))L.mkdirSync(T,{recursive:!0});let z=new Date().toISOString().slice(0,10).replace(/-/g,""),Z=M.join(T,z);if(!L.existsSync(Z))L.mkdirSync(Z,{recursive:!0});let Q=q.projectName,$,W=q.runtime;if(!q.yes){if(!Q){let X=L.readdirSync(Z).filter((A)=>A.startsWith("fnode-")).map((A)=>parseInt(A.replace("fnode-",""),10)).filter((A)=>!isNaN(A)),C=`fnode-${X.length>0?Math.max(...X)+1:1}`;Q=(await N([{type:"input",name:"projectName",message:"Enter project name:",default:C}])).projectName}W=(await N({type:"select",name:"runtime",message:"Select runtime:",choices:["node","python","bun"],initial:W||"node"})).runtime}else{if(!Q){let U=L.readdirSync(Z).filter((X)=>X.startsWith("fnode-")).map((X)=>parseInt(X.replace("fnode-",""),10)).filter((X)=>!isNaN(X));Q=`fnode-${U.length>0?Math.max(...U)+1:1}`}if(!W)W="node"}if($=M.join(Z,Q),L.existsSync($)){let U=1;while(L.existsSync(M.join(Z,`${Q}-${U}`)))U++;Q=`${Q}-${U}`,$=M.join(Z,Q)}if(!q.yes){if(!(await N([{type:"confirm",name:"proceed",message:`Create express project "${Q}" in ${$}?`,default:!0}])).proceed){console.log(J.yellow("Project creation cancelled."));return}}console.log(J.blue(`Creating express project "${Q}" in ${$}...`));let G=M.dirname($),O=["create","--name",M.basename($)];if(O.push("--runtime",W),q.yes)O.push("--yes");if(!L.existsSync(G))L.mkdirSync(G,{recursive:!0});let H=g("fnode",O,{stdio:"inherit",shell:!0,cwd:G});return new Promise((U,Y)=>{H.on("close",(X)=>{if(X===0)if(console.log(J.green(`
3
3
  Express project "${Q}" created successfully!`)),console.log(J.blue(`
4
- Project location: ${$}`)),!q.yes)sq($);else U();else console.error(J.red(`
5
- Failed to create express project "${Q}".`)),Y(Error(`Process exited with code ${X}`))})})}catch(z){console.error(J.red(`Error creating express project: ${z.message}`)),process.exit(1)}}async function mq(q){try{if(!L.existsSync(T)){console.log(J.yellow("No express projects found."));return}let z=L.readdirSync(T).filter((G)=>/^\d{8}$/.test(G)).sort((G,K)=>K.localeCompare(G));if(q.today){let G=new Date().toISOString().slice(0,10).replace(/-/g,""),K=z.indexOf(G);if(K===-1){console.log(J.yellow("No express projects found for today."));return}z.splice(0,K),z.splice(1)}let Z=[];if(!q.type&&!q.all)q.type="fnode";for(let G of z){let K=M.join(T,G),O=L.readdirSync(K);for(let H of O){let U=M.join(K,H),Y=L.statSync(U),X="unknown";if(H.startsWith("fnode-")||L.existsSync(M.join(U,"fnode.yaml")))X="fnode";else if(H.startsWith("fnet-")||L.existsSync(M.join(U,"fnet.yaml")))X="fnet";if(q.type&&X!==q.type)continue;if(q.name&&!H.includes(q.name))continue;let F=`${G.slice(0,4)}-${G.slice(4,6)}-${G.slice(6,8)}`;Z.push({name:H,type:X,date:F,path:U,created:Y.birthtime})}}if(Z.sort((G,K)=>K.created-G.created),Z.length===0){console.log(J.yellow("No express projects found matching the criteria."));return}console.log(J.blue(`
6
- Express Projects:`));let Q=(await import("./index.xw4a37ev.js")).default,$=["NAME","TYPE","DATE","PATH"],W=Q.createTable($,{chars:{mid:"","mid-mid":"","left-mid":"","right-mid":""}});for(let G of Z){let K=G.path;if(K.startsWith(u.homedir()))K="~"+K.substring(u.homedir().length);W.push([J.white(G.name),G.type==="fnet"?J.cyan(G.type):G.type==="fnode"?J.green(G.type):G.type,G.date,K])}console.log(W.toString()),console.log(J.green("Projects: ")+J.yellow(Z.filter((G)=>G.type==="fnode").length+" fnode, ")+J.cyan(Z.filter((G)=>G.type==="fnet").length+" fnet")),console.log(J.blue(`
7
- Total: ${Z.length} projects`))}catch(z){console.error(J.red(`Error listing express projects: ${z.message}`)),process.exit(1)}}async function nq(q){try{if(!L.existsSync(T)){console.log(J.yellow("No express projects found."));return}let z;if(q.latest){if(z=await h(),!z){console.log(J.yellow("No express projects found."));return}}else if(q.projectName){if(z=await p(q.projectName),!z){console.log(J.yellow(`Project "${q.projectName}" not found.`));return}}else{let Z=await l();if(!Z){console.log(J.yellow("No project selected."));return}z=M.join(T,Z)}await o(z)}catch(z){console.error(J.red(`Error opening express project: ${z.message}`)),process.exit(1)}}async function cq(q){try{let z=process.cwd(),Z=z.includes(T),Q;if(Z)Q=z,console.log(J.blue(`Using current express project: ${M.basename(Q)}`));else if(q.latest){if(Q=await h(),!Q){console.log(J.yellow("No express projects found."));return}}else if(q.projectName){if(Q=await p(q.projectName),!Q){console.log(J.yellow(`Project "${q.projectName}" not found.`));return}}else{let G=await l();if(!G){console.log(J.yellow("No project selected."));return}Q=M.join(T,G)}let $=q.destination;if(!$)$=(await N({type:"input",name:"destination",message:"Enter destination directory:",initial:M.join(process.cwd(),M.basename(Q))})).destination;if($.startsWith("~"))$=M.join(u.homedir(),$.slice(1));if($=M.resolve($),$.startsWith(Q+M.sep)||$===Q){console.log(J.red("Destination cannot be inside the source directory."));return}if(L.existsSync($)){if(!L.statSync($).isDirectory()){console.log(J.red(`Destination "${$}" is not a directory.`));return}if(L.readdirSync($).length>0){if(!(await N({type:"confirm",name:"overwrite",message:`Destination "${$}" is not empty. Continue anyway?`,initial:!1})).overwrite){console.log(J.yellow("Project move cancelled."));return}}}else L.mkdirSync($,{recursive:!0});if(console.log(J.blue(`Moving project from ${Q} to ${$}...`)),Xq(Q,$),console.log(J.green(`
8
- Project moved successfully to ${$}`)),(await N({type:"confirm",name:"deleteOriginal",message:"Delete the original express project?",initial:!1})).deleteOriginal)L.rmSync(Q,{recursive:!0,force:!0}),console.log(J.green("Original project deleted."));await o($)}catch(z){console.error(J.red(`Error moving express project: ${z.message}`)),process.exit(1)}}async function h(){let q=L.readdirSync(T).filter((G)=>/^\d{8}$/.test(G)).sort((G,K)=>K.localeCompare(G));if(q.length===0)return null;let z=q[0],Z=M.join(T,z),Q=L.readdirSync(Z);if(Q.length===0)return null;let $=null,W=0;for(let G of Q){let K=M.join(Z,G),O=L.statSync(K);if(O.birthtimeMs>W)W=O.birthtimeMs,$=K}return $}async function p(q){let z=L.readdirSync(T).filter((Z)=>/^\d{8}$/.test(Z)).sort((Z,Q)=>Q.localeCompare(Z));for(let Z of z){let Q=M.join(T,Z),$=L.readdirSync(Q);if($.includes(q))return M.join(Q,q);let W=$.filter((G)=>G.includes(q));if(W.length>0)if(W.length===1)return M.join(Q,W[0]);else{let G=W.map((O)=>({name:M.join(Q,O),value:M.join(Q,O),message:`${O} (${Z})`})),K=await i.promptForSelection({items:G,message:`Multiple projects match "${q}". Please select one:`,nameField:"message",valueField:"value",allowAbort:!0});if(K===null)return console.log(J.yellow("Operation cancelled.")),null;return K}}return null}async function l(){let q=[],z=L.readdirSync(T).filter((Q)=>/^\d{8}$/.test(Q)).sort((Q,$)=>$.localeCompare(Q));for(let Q of z){let $=M.join(T,Q),W=L.readdirSync($);for(let G of W){let K=M.join($,G),O=L.statSync(K),H=`${Q}/${G}`;q.push({name:H,value:H,message:`${G} (${Q})`,created:O.birthtime})}}if(q.sort((Q,$)=>$.created-Q.created),q.length===0)return null;let Z=await i.promptForSelection({items:q,message:"Select a project:",nameField:"message",valueField:"value",allowAbort:!0});if(Z===null)return console.log(J.yellow("Operation cancelled.")),null;return Z}async function sq(q){try{if((await N({type:"confirm",name:"openIDE",message:"Would you like to open the project in an IDE?",initial:!0})).openIDE)await o(q)}catch(z){console.error(J.red(`Error opening IDE: ${z.message}`))}}async function o(q){let z=await Vq("code --version"),Z=await Vq("code-insiders --version"),Q=null;if(z&&Z)Q=(await N({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(z)Q="code";else if(Z)Q="code-insiders";else{console.log(J.yellow("No supported IDE found. Please open the project manually.")),console.log(J.blue(`Project path: ${q}`));return}console.log(J.blue(`Opening project in ${Q}...`)),console.log(J.blue(`Project path: ${q}`));let $=g(Q,[q],{stdio:"inherit",shell:!0});return new Promise((W,G)=>{$.on("close",(K)=>{if(K===0)console.log(J.green(`Project opened in ${Q}.`)),W();else console.error(J.red(`Failed to open project in ${Q}.`)),G(Error(`Process exited with code ${K}`))})})}async function Vq(q){return new Promise((z)=>{g(q,{shell:!0,stdio:"ignore"}).on("close",(Q)=>{z(Q===0)})})}function Xq(q,z){if(!L.existsSync(z))L.mkdirSync(z,{recursive:!0});let Z=L.readdirSync(q,{withFileTypes:!0});for(let Q of Z){let $=M.join(q,Q.name),W=M.join(z,Q.name);if(Q.isDirectory()){if(Q.name===".git"||Q.name===".workspace")continue;Xq($,W)}else L.copyFileSync($,W)}}async function iq(q){try{if(!L.existsSync(T)){console.log(J.yellow("No express projects found."));return}let z;if(q.latest){if(z=await h(),!z){console.log(J.yellow("No express projects found."));return}}else if(q.projectName){if(z=await p(q.projectName),!z){console.log(J.yellow(`Project "${q.projectName}" not found.`));return}}else{let Q=await l();if(!Q){console.log(J.yellow("No project selected."));return}z=M.join(T,Q)}let Z=M.basename(z);if(!q.yes){if(!(await N({type:"confirm",name:"confirm",message:`Are you sure you want to remove project "${Z}"?`,initial:!1})).confirm){console.log(J.yellow("Project removal cancelled."));return}}console.log(J.blue(`Removing project "${Z}"...`)),L.rmSync(z,{recursive:!0,force:!0}),console.log(J.green(`Project "${Z}" removed successfully.`))}catch(z){console.error(J.red(`Error removing express project: ${z.message}`)),process.exit(1)}}async function oq(q){try{if(!L.existsSync(T)){console.log(J.yellow("No express projects found."));return}let z;if(q.latest){if(z=await h(),!z){console.log(J.yellow("No express projects found."));return}}else if(q.projectName){if(z=await p(q.projectName),!z){console.log(J.yellow(`Project "${q.projectName}" not found.`));return}}else{let $=await l();if(!$){console.log(J.yellow("No project selected."));return}z=M.join(T,$)}console.log(J.blue(`Entering project directory: ${z}`)),console.log(J.yellow(`
4
+ Project location: ${$}`)),!q.yes)iq($);else U();else console.error(J.red(`
5
+ Failed to create express project "${Q}".`)),Y(Error(`Process exited with code ${X}`))})})}catch(z){console.error(J.red(`Error creating express project: ${z.message}`)),process.exit(1)}}async function nq(q){try{if(!L.existsSync(T)){console.log(J.yellow("No express projects found."));return}let z=L.readdirSync(T).filter((G)=>/^\d{8}$/.test(G)).sort((G,K)=>K.localeCompare(G));if(q.today){let G=new Date().toISOString().slice(0,10).replace(/-/g,""),K=z.indexOf(G);if(K===-1){console.log(J.yellow("No express projects found for today."));return}z.splice(0,K),z.splice(1)}let Z=[];if(!q.type&&!q.all)q.type="fnode";for(let G of z){let K=M.join(T,G),O=L.readdirSync(K);for(let H of O){let U=M.join(K,H),Y=L.statSync(U),X="unknown";if(H.startsWith("fnode-")||L.existsSync(M.join(U,"fnode.yaml")))X="fnode";else if(H.startsWith("fnet-")||L.existsSync(M.join(U,"fnet.yaml")))X="fnet";if(q.type&&X!==q.type)continue;if(q.name&&!H.includes(q.name))continue;let F=`${G.slice(0,4)}-${G.slice(4,6)}-${G.slice(6,8)}`;Z.push({name:H,type:X,date:F,path:U,created:Y.birthtime})}}if(Z.sort((G,K)=>K.created-G.created),Z.length===0){console.log(J.yellow("No express projects found matching the criteria."));return}console.log(J.blue(`
6
+ Express Projects:`));let Q=(await import("./index.kvn877g8.js")).default,$=["NAME","TYPE","DATE","PATH"],W=Q.createTable($,{chars:{mid:"","mid-mid":"","left-mid":"","right-mid":""}});for(let G of Z){let K=G.path;if(K.startsWith(u.homedir()))K="~"+K.substring(u.homedir().length);W.push([J.white(G.name),G.type==="fnet"?J.cyan(G.type):G.type==="fnode"?J.green(G.type):G.type,G.date,K])}console.log(W.toString()),console.log(J.green("Projects: ")+J.yellow(Z.filter((G)=>G.type==="fnode").length+" fnode, ")+J.cyan(Z.filter((G)=>G.type==="fnet").length+" fnet")),console.log(J.blue(`
7
+ Total: ${Z.length} projects`))}catch(z){console.error(J.red(`Error listing express projects: ${z.message}`)),process.exit(1)}}async function cq(q){try{if(!L.existsSync(T)){console.log(J.yellow("No express projects found."));return}let z;if(q.latest){if(z=await h(),!z){console.log(J.yellow("No express projects found."));return}}else if(q.projectName){if(z=await p(q.projectName),!z){console.log(J.yellow(`Project "${q.projectName}" not found.`));return}}else{let Z=await l();if(!Z){console.log(J.yellow("No project selected."));return}z=M.join(T,Z)}await o(z)}catch(z){console.error(J.red(`Error opening express project: ${z.message}`)),process.exit(1)}}async function sq(q){try{let z=process.cwd(),Z=z.includes(T),Q;if(Z)Q=z,console.log(J.blue(`Using current express project: ${M.basename(Q)}`));else if(q.latest){if(Q=await h(),!Q){console.log(J.yellow("No express projects found."));return}}else if(q.projectName){if(Q=await p(q.projectName),!Q){console.log(J.yellow(`Project "${q.projectName}" not found.`));return}}else{let G=await l();if(!G){console.log(J.yellow("No project selected."));return}Q=M.join(T,G)}let $=q.destination;if(!$)$=(await N({type:"input",name:"destination",message:"Enter destination directory:",initial:M.join(process.cwd(),M.basename(Q))})).destination;if($.startsWith("~"))$=M.join(u.homedir(),$.slice(1));if($=M.resolve($),$.startsWith(Q+M.sep)||$===Q){console.log(J.red("Destination cannot be inside the source directory."));return}if(L.existsSync($)){if(!L.statSync($).isDirectory()){console.log(J.red(`Destination "${$}" is not a directory.`));return}if(L.readdirSync($).length>0){if(!(await N({type:"confirm",name:"overwrite",message:`Destination "${$}" is not empty. Continue anyway?`,initial:!1})).overwrite){console.log(J.yellow("Project move cancelled."));return}}}else L.mkdirSync($,{recursive:!0});if(console.log(J.blue(`Moving project from ${Q} to ${$}...`)),Tq(Q,$),console.log(J.green(`
8
+ Project moved successfully to ${$}`)),(await N({type:"confirm",name:"deleteOriginal",message:"Delete the original express project?",initial:!1})).deleteOriginal)L.rmSync(Q,{recursive:!0,force:!0}),console.log(J.green("Original project deleted."));await o($)}catch(z){console.error(J.red(`Error moving express project: ${z.message}`)),process.exit(1)}}async function h(){let q=L.readdirSync(T).filter((G)=>/^\d{8}$/.test(G)).sort((G,K)=>K.localeCompare(G));if(q.length===0)return null;let z=q[0],Z=M.join(T,z),Q=L.readdirSync(Z);if(Q.length===0)return null;let $=null,W=0;for(let G of Q){let K=M.join(Z,G),O=L.statSync(K);if(O.birthtimeMs>W)W=O.birthtimeMs,$=K}return $}async function p(q){let z=L.readdirSync(T).filter((Z)=>/^\d{8}$/.test(Z)).sort((Z,Q)=>Q.localeCompare(Z));for(let Z of z){let Q=M.join(T,Z),$=L.readdirSync(Q);if($.includes(q))return M.join(Q,q);let W=$.filter((G)=>G.includes(q));if(W.length>0)if(W.length===1)return M.join(Q,W[0]);else{let G=W.map((O)=>({name:M.join(Q,O),value:M.join(Q,O),message:`${O} (${Z})`})),K=await i.promptForSelection({items:G,message:`Multiple projects match "${q}". Please select one:`,nameField:"message",valueField:"value",allowAbort:!0});if(K===null)return console.log(J.yellow("Operation cancelled.")),null;return K}}return null}async function l(){let q=[],z=L.readdirSync(T).filter((Q)=>/^\d{8}$/.test(Q)).sort((Q,$)=>$.localeCompare(Q));for(let Q of z){let $=M.join(T,Q),W=L.readdirSync($);for(let G of W){let K=M.join($,G),O=L.statSync(K),H=`${Q}/${G}`;q.push({name:H,value:H,message:`${G} (${Q})`,created:O.birthtime})}}if(q.sort((Q,$)=>$.created-Q.created),q.length===0)return null;let Z=await i.promptForSelection({items:q,message:"Select a project:",nameField:"message",valueField:"value",allowAbort:!0});if(Z===null)return console.log(J.yellow("Operation cancelled.")),null;return Z}async function iq(q){try{if((await N({type:"confirm",name:"openIDE",message:"Would you like to open the project in an IDE?",initial:!0})).openIDE)await o(q)}catch(z){console.error(J.red(`Error opening IDE: ${z.message}`))}}async function o(q){let z=await Mq("code --version"),Z=await Mq("code-insiders --version"),Q=null;if(z&&Z)Q=(await N({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(z)Q="code";else if(Z)Q="code-insiders";else{console.log(J.yellow("No supported IDE found. Please open the project manually.")),console.log(J.blue(`Project path: ${q}`));return}console.log(J.blue(`Opening project in ${Q}...`)),console.log(J.blue(`Project path: ${q}`));let $=g(Q,[q],{stdio:"inherit",shell:!0});return new Promise((W,G)=>{$.on("close",(K)=>{if(K===0)console.log(J.green(`Project opened in ${Q}.`)),W();else console.error(J.red(`Failed to open project in ${Q}.`)),G(Error(`Process exited with code ${K}`))})})}async function Mq(q){return new Promise((z)=>{g(q,{shell:!0,stdio:"ignore"}).on("close",(Q)=>{z(Q===0)})})}function Tq(q,z){if(!L.existsSync(z))L.mkdirSync(z,{recursive:!0});let Z=L.readdirSync(q,{withFileTypes:!0});for(let Q of Z){let $=M.join(q,Q.name),W=M.join(z,Q.name);if(Q.isDirectory()){if(Q.name===".git"||Q.name===".workspace")continue;Tq($,W)}else L.copyFileSync($,W)}}async function oq(q){try{if(!L.existsSync(T)){console.log(J.yellow("No express projects found."));return}let z;if(q.latest){if(z=await h(),!z){console.log(J.yellow("No express projects found."));return}}else if(q.projectName){if(z=await p(q.projectName),!z){console.log(J.yellow(`Project "${q.projectName}" not found.`));return}}else{let Q=await l();if(!Q){console.log(J.yellow("No project selected."));return}z=M.join(T,Q)}let Z=M.basename(z);if(!q.yes){if(!(await N({type:"confirm",name:"confirm",message:`Are you sure you want to remove project "${Z}"?`,initial:!1})).confirm){console.log(J.yellow("Project removal cancelled."));return}}console.log(J.blue(`Removing project "${Z}"...`)),L.rmSync(z,{recursive:!0,force:!0}),console.log(J.green(`Project "${Z}" removed successfully.`))}catch(z){console.error(J.red(`Error removing express project: ${z.message}`)),process.exit(1)}}async function aq(q){try{if(!L.existsSync(T)){console.log(J.yellow("No express projects found."));return}let z;if(q.latest){if(z=await h(),!z){console.log(J.yellow("No express projects found."));return}}else if(q.projectName){if(z=await p(q.projectName),!z){console.log(J.yellow(`Project "${q.projectName}" not found.`));return}}else{let $=await l();if(!$){console.log(J.yellow("No project selected."));return}z=M.join(T,$)}console.log(J.blue(`Entering project directory: ${z}`)),console.log(J.yellow(`
9
9
  Opening a new shell in the project directory...`));let Z=process.env.SHELL||"/bin/bash",Q=g(Z,[],{stdio:"inherit",cwd:z,shell:!0});return new Promise(($)=>{Q.on("close",()=>{console.log(J.green(`
10
- Returned from project directory.`)),$()})})}catch(z){console.error(J.red(`Error entering express project directory: ${z.message}`)),process.exit(1)}}import wq from"node:path";import{fileURLToPath as qz}from"node:url";import aq from"node:fs";import d from"node:path";import{fileURLToPath as rq}from"node:url";var tq=d.dirname(rq(import.meta.url));function eq({baseDir:q}){q=q||tq;let z=q;while(z!==d.parse(z).root){let Z=d.join(z,"node_modules");if(aq.existsSync(Z))return Z;z=d.dirname(z)}return null}var Tq=eq;var zz=wq.dirname(qz(import.meta.url));function Iq(){let q=Tq({baseDir:zz}),z=process.platform==="win32"?";":":";if(q)process.env.PATH=`${wq.join(q,"/.bin")}${z}${process.env.PATH}`}var a=new Zz;Iq();async function $z(){try{let q=Qz(process.argv.slice(2)).scriptName("fnode").usage("Usage: fnode <command> [options]").command($q).command(Gq).command(Kq).command(Yq).command(Jq).command(Uq).command(Lq).command("express","Create and manage express projects",Mq);q=w(q,{bin:"npm",createContext:V}),q=w(q,{bin:"node",createContext:V}),q=w(q,{bin:"bun",createContext:V}),q=w(q,{name:"serve",bin:"bun",preArgs:["run","serve","--"],createContext:V}),q=w(q,{name:"watch",bin:"bun",preArgs:["run","watch","--"],createContext:V}),q=w(q,{name:"app",bin:"bun",preArgs:["run","app","--"],createContext:V}),q=w(q,{name:"cli",bin:"bun",preArgs:["run","cli","--"],createContext:V}),q=w(q,{name:"cli:dev",bin:"bun",preArgs:["run","cli:dev","--"],createContext:V}),q=w(q,{name:"cli:compile",bin:"bun",preArgs:["run","cli:compile","--"],createContext:V}),q=w(q,{name:"cli:compile:dev",bin:"bun",preArgs:["run","cli:compile:dev","--"],createContext:V}),q=w(q,{name:"cli:install",bin:"bun",preArgs:["run","cli:install","--"],createContext:V}),q=w(q,{name:"compile",bin:"bun",preArgs:["run","compile","--"],createContext:V}),q=zq(q,{name:"install",createContext:V}),q=w(q,{bin:"npx",createContext:V}),q=w(q,{bin:"cdk",createContext:V}),q=w(q,{bin:"aws",createContext:V}),q=e(q,{name:"with",createContext:V}),q=qq(q,{name:"run",projectType:"fnode",processManager:a}),q=y(q,{name:"python",createContext:V}),q=y(q,{name:"python3",createContext:V}),q=y(q,{name:"pip",createContext:V}),q=y(q,{name:"pip3",createContext:V}),q=t(q,{name:"bin",createContext:V}),q.demandCommand(1,"You need at least one command before moving on").help().version("1.5.0").parse()}catch(q){console.error(_q.red(`Fatal error: ${q.message}`)),await a.dispose(),process.exit(1)}}$z().catch(async(q)=>{console.error(_q.red(`Fatal error: ${q.message}`)),await a.dispose(),process.exit(1)});
10
+ Returned from project directory.`)),$()})})}catch(z){console.error(J.red(`Error entering express project directory: ${z.message}`)),process.exit(1)}}import Iq from"node:path";import{fileURLToPath as zz}from"node:url";import rq from"node:fs";import d from"node:path";import{fileURLToPath as tq}from"node:url";var eq=d.dirname(tq(import.meta.url));function qz({baseDir:q}){q=q||eq;let z=q;while(z!==d.parse(z).root){let Z=d.join(z,"node_modules");if(rq.existsSync(Z))return Z;z=d.dirname(z)}return null}var wq=qz;var Qz=Iq.dirname(zz(import.meta.url));function _q(){let q=wq({baseDir:Qz}),z=process.platform==="win32"?";":":";if(q)process.env.PATH=`${Iq.join(q,"/.bin")}${z}${process.env.PATH}`}var a=new $z;_q();async function Gz(){try{let q=Zz(process.argv.slice(2)).scriptName("fnode").usage("Usage: fnode <command> [options]").command(Gq).command(Wq).command(Yq).command(Jq).command(Uq).command(Hq).command(Oq).command("express","Create and manage express projects",Xq);q=w(q,{bin:"npm",createContext:V}),q=w(q,{bin:"node",createContext:V}),q=w(q,{bin:"bun",createContext:V}),q=w(q,{name:"serve",bin:"bun",preArgs:["run","serve","--"],createContext:V}),q=w(q,{name:"watch",bin:"bun",preArgs:["run","watch","--"],createContext:V}),q=w(q,{name:"app",bin:"bun",preArgs:["run","app","--"],createContext:V}),q=w(q,{name:"cli",bin:"bun",preArgs:["run","cli","--"],createContext:V}),q=w(q,{name:"cli:dev",bin:"bun",preArgs:["run","cli:dev","--"],createContext:V}),q=w(q,{name:"cli:compile",bin:"bun",preArgs:["run","cli:compile","--"],createContext:V}),q=w(q,{name:"cli:compile:dev",bin:"bun",preArgs:["run","cli:compile:dev","--"],createContext:V}),q=w(q,{name:"cli:install",bin:"bun",preArgs:["run","cli:install","--"],createContext:V}),q=w(q,{name:"compile",bin:"bun",preArgs:["run","compile","--"],createContext:V}),q=zq(q,{name:"install",createContext:V}),q=w(q,{bin:"npx",createContext:V}),q=w(q,{bin:"cdk",createContext:V}),q=w(q,{bin:"aws",createContext:V}),q=e(q,{name:"with",createContext:V}),q=qq(q,{name:"run",projectType:"fnode",processManager:a}),q=y(q,{name:"python",createContext:V}),q=y(q,{name:"python3",createContext:V}),q=y(q,{name:"pip",createContext:V}),q=y(q,{name:"pip3",createContext:V}),q=t(q,{name:"bin",createContext:V}),q.demandCommand(1,"You need at least one command before moving on").help().version("1.7.0").parse()}catch(q){console.error(Fq.red(`Fatal error: ${q.message}`)),await a.dispose(),process.exit(1)}}Gz().catch(async(q)=>{console.error(Fq.red(`Fatal error: ${q.message}`)),await a.dispose(),process.exit(1)});